Module: LaserLemon::VestalVersions::InstanceMethods

Defined in:
lib/vestal_versions.rb

Instance Method Summary collapse

Instance Method Details

#changes_between(from, to) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/vestal_versions.rb', line 91

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)
  return {} if chain.empty?

  backward = chain.first > chain.last
  backward ? chain.pop : chain.shift

  timestamps = %w(created_at created_on updated_at updated_on)

  chain.inject({}) do |changes, version|
    version.changes.except(*timestamps).each do |attribute, change|
      change.reverse! if backward
      new_change = [changes.fetch(attribute, change).first, change.last]
      changes.update(attribute => new_change)
    end
    changes
  end
end

#last_versionObject



78
79
80
# File 'lib/vestal_versions.rb', line 78

def last_version
  @last_version ||= versions.maximum(:number)
end

#latest_changesObject



130
131
132
133
# File 'lib/vestal_versions.rb', line 130

def latest_changes
  return {} if version.nil? || version == 1
  versions.at(version).changes
end

#reload_with_versions(*args) ⇒ Object



86
87
88
89
# File 'lib/vestal_versions.rb', line 86

def reload_with_versions(*args)
  reset_version
  reload_without_versions(*args)
end

#revert_to(value) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
# File 'lib/vestal_versions.rb', line 112

def revert_to(value)
  to_number = versions.number_at(value)
  changes = changes_between(version, to_number)
  return version if changes.empty?

  changes.each do |attribute, change|
    write_attribute(attribute, change.last)
  end

  reset_version(to_number)
end

#revert_to!(value) ⇒ Object



124
125
126
127
128
# File 'lib/vestal_versions.rb', line 124

def revert_to!(value)
  revert_to(value)
  reset_version if saved = save
  saved
end

#reverted?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/vestal_versions.rb', line 82

def reverted?
  version != last_version
end

#versionObject



74
75
76
# File 'lib/vestal_versions.rb', line 74

def version
  @version ||= last_version
end