laserlemon-vestal_versions 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/vestal_versions.rb +26 -15
- data/vestal_versions.gemspec +2 -2
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.7.0
|
data/lib/vestal_versions.rb
CHANGED
@@ -9,13 +9,13 @@ module LaserLemon
|
|
9
9
|
module ClassMethods
|
10
10
|
def versioned
|
11
11
|
has_many :versions, :as => :versioned, :order => 'versions.number ASC', :dependent => :delete_all do
|
12
|
-
def between(
|
13
|
-
|
14
|
-
return [] if
|
15
|
-
condition = (
|
12
|
+
def between(from, to)
|
13
|
+
from_number, to_number = number_at(from), number_at(to)
|
14
|
+
return [] if from_number.nil? || to_number.nil?
|
15
|
+
condition = (from_number == to_number) ? to_number : Range.new(*[from_number, to_number].sort)
|
16
16
|
all(
|
17
17
|
:conditions => {:number => condition},
|
18
|
-
:order => "versions.number #{(
|
18
|
+
:order => "versions.number #{(from_number > to_number) ? 'DESC' : 'ASC'}"
|
19
19
|
)
|
20
20
|
end
|
21
21
|
|
@@ -88,26 +88,37 @@ module LaserLemon
|
|
88
88
|
reload_without_versions(*args)
|
89
89
|
end
|
90
90
|
|
91
|
-
def
|
92
|
-
|
93
|
-
return
|
94
|
-
chain = versions.between(
|
95
|
-
return
|
91
|
+
def changes_between(from, to)
|
92
|
+
from_number, to_number = versions.number_at(from), versions.number_at(to)
|
93
|
+
return {} if from_number == to_number
|
94
|
+
chain = versions.between(from_number, to_number)
|
95
|
+
return {} if chain.empty?
|
96
96
|
|
97
|
-
new_version = chain.last.number
|
98
97
|
backward = chain.first > chain.last
|
99
98
|
backward ? chain.pop : chain.shift
|
100
99
|
|
101
100
|
timestamps = %w(created_at created_on updated_at updated_on)
|
102
101
|
|
103
|
-
chain.
|
102
|
+
chain.inject({}) do |changes, version|
|
104
103
|
version.changes.except(*timestamps).each do |attribute, change|
|
105
|
-
|
106
|
-
|
104
|
+
change.reverse! if backward
|
105
|
+
new_change = [changes.fetch(attribute, change).first, change.last]
|
106
|
+
changes.update(attribute => new_change)
|
107
107
|
end
|
108
|
+
changes
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def revert_to(value)
|
113
|
+
to_number = versions.number_at(value)
|
114
|
+
changes = changes_between(version, to_number)
|
115
|
+
return version if changes.empty?
|
116
|
+
|
117
|
+
changes.each do |attribute, change|
|
118
|
+
write_attribute(attribute, change.last)
|
108
119
|
end
|
109
120
|
|
110
|
-
reset_version(
|
121
|
+
reset_version(to_number)
|
111
122
|
end
|
112
123
|
|
113
124
|
def revert_to!(value)
|
data/vestal_versions.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{vestal_versions}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.7.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["laserlemon"]
|
12
|
-
s.date = %q{2009-09-
|
12
|
+
s.date = %q{2009-09-21}
|
13
13
|
s.description = %q{Keep a DRY history of your ActiveRecord models' changes}
|
14
14
|
s.email = %q{steve@laserlemon.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: laserlemon-vestal_versions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- laserlemon
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09-
|
12
|
+
date: 2009-09-21 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- vestal_versions.gemspec
|
54
54
|
has_rdoc: false
|
55
55
|
homepage: http://github.com/laserlemon/vestal_versions
|
56
|
+
licenses:
|
56
57
|
post_install_message:
|
57
58
|
rdoc_options:
|
58
59
|
- --charset=UTF-8
|
@@ -73,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
74
|
requirements: []
|
74
75
|
|
75
76
|
rubyforge_project: laser-lemon
|
76
|
-
rubygems_version: 1.
|
77
|
+
rubygems_version: 1.3.5
|
77
78
|
signing_key:
|
78
79
|
specification_version: 3
|
79
80
|
summary: Keep a DRY history of your ActiveRecord models' changes
|