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 CHANGED
@@ -1 +1 @@
1
- 0.4.3
1
+ 0.4.4
@@ -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 between(from_value, to_value)
22
- from, to = number_at(from_value), number_at(to_value)
23
- return [] if from.nil? || to.nil? || (from == to)
24
- all(
25
- :conditions => {:number => Range.new(*[from, to].sort)},
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
- chain = versions.between(version, value)
92
- return version unless chain.size > 1
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
@@ -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
@@ -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.3"
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-08-31}
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/changes_test.rb",
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.3
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-08-31 00:00:00 -07:00
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.3.5
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