Предположим, у меня есть следующие предложения:Как использовать дельта на 3 предложения в Ruby?
s1 = "The red dog jumped over the hill, followed by the crazy clown."
s2 = "The green fox jumped over the hill, followed by the crazy clown."
s3 = "The red dog jumped over the hill, followed by the dumb dolphin."
Я хочу, чтобы иметь возможность хранить дельтах s2-s1 и s3-s1 в некотором сжатом виде, как: s2_d_s1 = - «красная собака» + "зеленый fox "
Затем я могу взять эти дельта и применить их в произвольном порядке, сначала s2_d_s1 или s3_d_s1. Таким образом, следующие значения:
apply_delta(apply_delta(s1, s2_d_s1), s3_d_s1) ==
apply_delta(apply_delta(s1, s3_d_s1), s2_d_s1)
apply_delta(s1, s2_d_s1) == "The green fox jumped over the hill, followed by the crazy clown."
Как бы это сделать в Ruby? Есть ли библиотека, которая бы это сделала?
(Фактическое содержание будет более сложным, чем предложения. Это документы.)
Я попытался окаменелость, но не могу понять, как обрабатывать изменение размера предложения (применение первого дельту изменяет предложение размер, который щурит нанесение второго дельты):
s1 = "The red dog jumped over the hill, followed by the crazy clown."
s2 = "The green fox jumped over the hill, followed by the crazy clown."
s3 = "The red dog jumped over the hill, followed by the dumb dolphin."
s2_d_s1 = Fossilize.create(s1, s2)
s3_d_s1 = Fossilize.create(s1, s3)
Fossilize.apply(Fossilize.apply(s1, s2_d_s1), s3_d_s1)
DeltaApplicationError: Output was -1, but I expected 63!
from /Users/me/.rvm/gems/ruby-2.2.1/gems/fossilize-1.1.1/lib/fossilize.rb:107:in `apply'
from (irb):14
from /Users/me/.rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>'
Может ли [ruby-git] (https://github.com/schacon/ruby-git) помочь вам? –
Git отслеживает все состояние файлов, а не только дельт, так что не совсем то, что я ищу? Это распространенное неверное представление о том, что git сохраняет разницу. –