Vestal Versions changes_between не работает для меня - PullRequest
2 голосов
/ 12 ноября 2010

Я ожидал, что это будет объединение всех изменений между двумя версиями. (используется версия Vestal 1.0.2)

ruby-1.8.7-p174 > contact.version 
 => 12 
ruby-1.8.7-p174 > contact.latest_approved_version
 => 8 
ruby-1.8.7-p174 > contact.changes
 => {} 
ruby-1.8.7-p174 > contact.versions.last.changes
 => {"first_name"=>["I changed this one baby", "AdminF"]} 
ruby-1.8.7-p174 > contact.changes_between(8,12)
 => {} 
ruby-1.8.7-p174 > contact.changes_between(9,12)
 => {"deleted"=>[true, false]} 
ruby-1.8.7-p174 > contact.changes_between(10,12)
 => {} 
ruby-1.8.7-p174 > contact.changes_between(11,12)
 => {"first_name"=>["I changed this one baby", "AdminF"]} 

Как вы видите, между 8 и 12 изменений нет, но между некоторыми из них есть изменения.

Странно, я клянусь, это работало вчера!

Вот метод, используемый vestal, я не уверен, в чем проблема:

 def changes_between(from, to)
    from_number, to_number = versions.number_at(from), versions.number_at(to)
    return {} if from_number == to_number
    chain = versions.between(from_number, to_number).reject(&:initial?)
    return {} if chain.empty?

    backward = from_number > to_number
    backward ? chain.pop : chain.shift unless from_number == 1 || to_number == 1

    chain.inject({}) do |changes, version|
      changes.append_changes!(backward ? version.changes.reverse_changes : version.changes)
    end
  end

1 Ответ

0 голосов
/ 18 ноября 2010

Возможно, в приведенном вами примере нет ничего плохого.Если, например, нет различий между версиями 8 и 12. Даже если в версии 9, 10 и 11 произошли изменения, метод changes_between не будет показывать никаких изменений, если атрибуты модели были возвращены к тем же значениям.

Я думаю, что самый простой способ проверить это проверить:

>> contact.revert_to(8)
=> "8"
>> contact.inspect
=> "#<Contact ... >"
>> contact.revert_to(12)
=> "12"
>> contact.inspect
=> "#<Contact ... >"

А затем сравнить вывод.Я не могу вспомнить какую-либо другую причину описанного вами результата.

Кстати, вызов, который вы сделали для "last_approved_version", заключается в том, что вы что-то добавили вручную в свою модель, или это нечто встроенноев vestal_versions?Потому что я также использую 1.0.2 vestal_version, и я не могу найти ссылку на это.Так что, если это действительно что-то встроенное, то, вероятно, у нас разные вилки vestal_version, и это может быть причиной ...

...