laserlemon-vestal_versions 0.4.3 → 0.4.4
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 +22 -23
- data/test/between_test.rb +58 -0
- data/test/creation_test.rb +0 -8
- data/vestal_versions.gemspec +5 -3
- metadata +5 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.4
|
data/lib/vestal_versions.rb
CHANGED
@@ -9,6 +9,16 @@ module LaserLemon
|
|
9
9
|
module ClassMethods
|
10
10
|
def versioned
|
11
11
|
has_many :versions, :as => :versioned, :order => 'versions.number ASC', :dependent => :destroy do
|
12
|
+
def between(from_value, to_value)
|
13
|
+
from, to = number_at(from_value), number_at(to_value)
|
14
|
+
return [] if from.nil? || to.nil?
|
15
|
+
condition = (from == to) ? to : Range.new(*[from, to].sort)
|
16
|
+
all(
|
17
|
+
:conditions => {:number => condition},
|
18
|
+
:order => "versions.number #{(from > to) ? 'DESC' : 'ASC'}"
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
12
22
|
def at(value)
|
13
23
|
case value
|
14
24
|
when Version then value
|
@@ -18,24 +28,13 @@ module LaserLemon
|
|
18
28
|
end
|
19
29
|
end
|
20
30
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
:order => "versions.number #{(from > to) ? 'DESC' : 'ASC'}"
|
27
|
-
)
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def number_at(value)
|
33
|
-
case value
|
34
|
-
when Version then value.number
|
35
|
-
when Numeric then value.floor
|
36
|
-
when Symbol, Date, Time then at(value).try(:number)
|
37
|
-
end
|
31
|
+
def number_at(value)
|
32
|
+
case value
|
33
|
+
when Version then value.number
|
34
|
+
when Numeric then value.floor
|
35
|
+
when Symbol, Date, Time then at(value).try(:number)
|
38
36
|
end
|
37
|
+
end
|
39
38
|
end
|
40
39
|
|
41
40
|
after_save :create_version, :if => :needs_version?
|
@@ -47,7 +46,6 @@ module LaserLemon
|
|
47
46
|
|
48
47
|
module InstanceMethods
|
49
48
|
private
|
50
|
-
|
51
49
|
def needs_version?
|
52
50
|
!changed.empty?
|
53
51
|
end
|
@@ -69,7 +67,6 @@ module LaserLemon
|
|
69
67
|
end
|
70
68
|
|
71
69
|
public
|
72
|
-
|
73
70
|
def version
|
74
71
|
@version ||= last_version
|
75
72
|
end
|
@@ -81,15 +78,17 @@ module LaserLemon
|
|
81
78
|
def reverted?
|
82
79
|
version != last_version
|
83
80
|
end
|
84
|
-
|
81
|
+
|
85
82
|
def reload_with_versions(*args)
|
86
83
|
reset_version
|
87
84
|
reload_without_versions(*args)
|
88
85
|
end
|
89
86
|
|
90
87
|
def revert_to(value)
|
91
|
-
|
92
|
-
return version
|
88
|
+
to_value = versions.number_at(value)
|
89
|
+
return version if to_value == version
|
90
|
+
chain = versions.between(version, to_value)
|
91
|
+
return version if chain.empty?
|
93
92
|
|
94
93
|
new_version = chain.last.number
|
95
94
|
backward = chain.first > chain.last
|
@@ -114,7 +113,7 @@ module LaserLemon
|
|
114
113
|
end
|
115
114
|
|
116
115
|
def last_changes
|
117
|
-
return {} if version == 1
|
116
|
+
return {} if version.nil? || version == 1
|
118
117
|
versions.at(version).changes
|
119
118
|
end
|
120
119
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class BetweenTest < Test::Unit::TestCase
|
4
|
+
context 'The number of versions between' do
|
5
|
+
setup do
|
6
|
+
@user = User.create(:name => 'Steve Richert')
|
7
|
+
@version = @user.version
|
8
|
+
@valid = [@version, 0, 1_000_000, :first, :last, 1.day.since(@user.created_at), @user.versions.first]
|
9
|
+
@invalid = [nil, :bogus, 'bogus', Date.parse('0001-12-25')]
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'the current version and the current version' do
|
13
|
+
should 'equal one' do
|
14
|
+
assert_equal 1, @user.versions.between(@version, @version).size
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'the current version and a valid value' do
|
19
|
+
should 'not equal zero' do
|
20
|
+
@valid.each do |valid|
|
21
|
+
assert_not_equal 0, @user.versions.between(@version, valid).size
|
22
|
+
assert_not_equal 0, @user.versions.between(valid, @version).size
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'the current version and an invalid value' do
|
28
|
+
should 'equal zero' do
|
29
|
+
@invalid.each do |invalid|
|
30
|
+
assert_equal 0, @user.versions.between(@version, invalid).size
|
31
|
+
assert_equal 0, @user.versions.between(invalid, @version).size
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'two invalid values' do
|
37
|
+
should 'equal zero' do
|
38
|
+
@invalid.each do |first|
|
39
|
+
@invalid.each do |second|
|
40
|
+
assert_equal 0, @user.versions.between(first, second).size
|
41
|
+
assert_equal 0, @user.versions.between(second, first).size
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'a valid value and an invalid value' do
|
48
|
+
should 'equal zero' do
|
49
|
+
@valid.each do |valid|
|
50
|
+
@invalid.each do |invalid|
|
51
|
+
assert_equal 0, @user.versions.between(valid, invalid).size
|
52
|
+
assert_equal 0, @user.versions.between(invalid, valid).size
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/test/creation_test.rb
CHANGED
@@ -27,14 +27,6 @@ class CreationTest < Test::Unit::TestCase
|
|
27
27
|
assert_equal @count, @user.versions.count
|
28
28
|
end
|
29
29
|
|
30
|
-
should 'not increase when reverting to an identical version' do
|
31
|
-
@user.update_attribute(:name, 'Steve Jobs')
|
32
|
-
@user.update_attribute(:name, @name)
|
33
|
-
count = @user.versions.count
|
34
|
-
@user.revert_to!(:first)
|
35
|
-
assert_equal count, @user.versions.count
|
36
|
-
end
|
37
|
-
|
38
30
|
context 'after an update' do
|
39
31
|
setup do
|
40
32
|
@initial_count = @count
|
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.4.
|
8
|
+
s.version = "0.4.4"
|
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-
|
12
|
+
s.date = %q{2009-09-01}
|
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 = [
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"init.rb",
|
28
28
|
"lib/version.rb",
|
29
29
|
"lib/vestal_versions.rb",
|
30
|
+
"test/between_test.rb",
|
30
31
|
"test/changes_test.rb",
|
31
32
|
"test/comparable_test.rb",
|
32
33
|
"test/creation_test.rb",
|
@@ -42,7 +43,8 @@ Gem::Specification.new do |s|
|
|
42
43
|
s.rubygems_version = %q{1.3.5}
|
43
44
|
s.summary = %q{Keep a DRY history of your ActiveRecord models' changes}
|
44
45
|
s.test_files = [
|
45
|
-
"test/
|
46
|
+
"test/between_test.rb",
|
47
|
+
"test/changes_test.rb",
|
46
48
|
"test/comparable_test.rb",
|
47
49
|
"test/creation_test.rb",
|
48
50
|
"test/last_changes_test.rb",
|
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.
|
4
|
+
version: 0.4.4
|
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-
|
12
|
+
date: 2009-09-01 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- init.rb
|
43
43
|
- lib/version.rb
|
44
44
|
- lib/vestal_versions.rb
|
45
|
+
- test/between_test.rb
|
45
46
|
- test/changes_test.rb
|
46
47
|
- test/comparable_test.rb
|
47
48
|
- test/creation_test.rb
|
@@ -52,7 +53,6 @@ files:
|
|
52
53
|
- vestal_versions.gemspec
|
53
54
|
has_rdoc: false
|
54
55
|
homepage: http://github.com/laserlemon/vestal_versions
|
55
|
-
licenses:
|
56
56
|
post_install_message:
|
57
57
|
rdoc_options:
|
58
58
|
- --charset=UTF-8
|
@@ -73,11 +73,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
73
|
requirements: []
|
74
74
|
|
75
75
|
rubyforge_project:
|
76
|
-
rubygems_version: 1.
|
76
|
+
rubygems_version: 1.2.0
|
77
77
|
signing_key:
|
78
78
|
specification_version: 3
|
79
79
|
summary: Keep a DRY history of your ActiveRecord models' changes
|
80
80
|
test_files:
|
81
|
+
- test/between_test.rb
|
81
82
|
- test/changes_test.rb
|
82
83
|
- test/comparable_test.rb
|
83
84
|
- test/creation_test.rb
|