在Rails中区分两个文本并打印人类可读的HTML输出

时间:2017-03-29 07:52:53

标签: javascript ruby-on-rails ruby diff

我使用paper_trail gem自动创建Page模型的版本历史记录。

pages#show中,我会显示如下版本:

screenshot

最重要的元素是差异,它显示了前一个和当前显示的字段版本之间的差异,例如content。它看起来像是GitHub上的差异,并且使用<ins>进行插入并使用<del>进行删除时标记得很好。

令人遗憾的是,目前我使用https://code.google.com/p/google-diff-match-patch/生成这个差异,https://github.com/samg/diffy是一个在用户浏览器中运行的JavaScript库。我已经这样做了,因为我没有设法找到一个Ruby宝石或类似的东西,以类似的方式做同样的事情。

好吧,我找到了https://github.com/pvande/differhttps://neil.fraser.name/software/diff_match_patch/svn/trunk/demos/demo_diff.html,但两个宝石的差异并不优雅:不同需要手动知道是否按行,词或字符进行区分(虽然使用的JavaScript会自动决定并使用这些选项的组合,这对我来说非常直观),而diffy并没有为此提供选项。我并不确切知道JavaScript是如何工作的,但是它表明&#34; Myer的差异算法&#34;在内部使用:

  

该库实现了Myer的diff算法,该算法通常被认为是最好的通用差异算法。 diff算法围绕一层预差分加速和后差分清理,提高了性能和输出质量。

您可以在此处试用:screenshot

也许使用以下两个字符串来查看页面的两个版本的典型示例:

This is the about page.

Put markdowwn formated content here.

This is the about page.

Put markdown formatted here content.

A [link to page 11](11). And another one: [](11).

结果如下:

Scala docs

这种方法的问题在于它在浏览器中运行,因此我不能再在我的Rails应用程序中改变生成的代码。所以我想知道是否有一种简单的方法来获得类似的差异结果,例如使用例如像diff这样的命令行工具?甚至可以使用git

0 个答案:

没有答案