vestal_versions 0.8.3 → 1.0.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.
Files changed (47) hide show
  1. data/.gitignore +20 -2
  2. data/README.rdoc +110 -8
  3. data/Rakefile +14 -3
  4. data/VERSION +1 -1
  5. data/lib/vestal_versions.rb +93 -143
  6. data/lib/vestal_versions/changes.rb +125 -0
  7. data/lib/vestal_versions/conditions.rb +69 -0
  8. data/lib/vestal_versions/configuration.rb +40 -0
  9. data/lib/vestal_versions/control.rb +175 -0
  10. data/lib/vestal_versions/creation.rb +85 -0
  11. data/lib/vestal_versions/options.rb +42 -0
  12. data/lib/vestal_versions/reload.rb +23 -0
  13. data/lib/vestal_versions/reset.rb +56 -0
  14. data/lib/vestal_versions/reversion.rb +69 -0
  15. data/lib/vestal_versions/tagging.rb +50 -0
  16. data/lib/vestal_versions/users.rb +57 -0
  17. data/lib/vestal_versions/version.rb +32 -0
  18. data/lib/vestal_versions/versioned.rb +30 -0
  19. data/lib/vestal_versions/versions.rb +74 -0
  20. data/rails/init.rb +1 -0
  21. data/rails_generators/vestal_versions/templates/initializer.rb +9 -0
  22. data/{generators/vestal_versions_migration → rails_generators/vestal_versions}/templates/migration.rb +9 -2
  23. data/rails_generators/vestal_versions/vestal_versions_generator.rb +10 -0
  24. data/test/changes_test.rb +154 -13
  25. data/test/conditions_test.rb +137 -0
  26. data/test/configuration_test.rb +39 -0
  27. data/test/control_test.rb +152 -0
  28. data/test/creation_test.rb +70 -30
  29. data/test/options_test.rb +52 -0
  30. data/test/reload_test.rb +19 -0
  31. data/test/reset_test.rb +107 -0
  32. data/test/{revert_test.rb → reversion_test.rb} +8 -22
  33. data/test/schema.rb +4 -1
  34. data/test/tagging_test.rb +38 -0
  35. data/test/test_helper.rb +2 -1
  36. data/test/users_test.rb +25 -0
  37. data/test/version_test.rb +43 -0
  38. data/test/versioned_test.rb +18 -0
  39. data/test/versions_test.rb +172 -0
  40. data/vestal_versions.gemspec +61 -21
  41. metadata +75 -15
  42. data/generators/vestal_versions_migration/vestal_versions_migration_generator.rb +0 -11
  43. data/init.rb +0 -1
  44. data/lib/version.rb +0 -14
  45. data/test/between_test.rb +0 -58
  46. data/test/comparable_test.rb +0 -35
  47. data/test/latest_changes_test.rb +0 -42
@@ -0,0 +1,43 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class VersionTest < Test::Unit::TestCase
4
+ context 'Versions' do
5
+ setup do
6
+ @user = User.create(:name => 'Stephen Richert')
7
+ @user.update_attribute(:name, 'Steve Jobs')
8
+ @user.update_attribute(:last_name, 'Richert')
9
+ @first_version, @last_version = @user.versions.first, @user.versions.last
10
+ end
11
+
12
+ should 'be comparable to another version based on version number' do
13
+ assert @first_version == @first_version
14
+ assert @last_version == @last_version
15
+ assert @first_version != @last_version
16
+ assert @last_version != @first_version
17
+ assert @first_version < @last_version
18
+ assert @last_version > @first_version
19
+ assert @first_version <= @last_version
20
+ assert @last_version >= @first_version
21
+ end
22
+
23
+ should "not equal a separate model's version with the same number" do
24
+ user = User.create(:name => 'Stephen Richert')
25
+ user.update_attribute(:name, 'Steve Jobs')
26
+ user.update_attribute(:last_name, 'Richert')
27
+ first_version, last_version = user.versions.first, user.versions.last
28
+ assert_not_equal @first_version, first_version
29
+ assert_not_equal @last_version, last_version
30
+ end
31
+
32
+ should 'default to ordering by number when finding' do
33
+ order = VestalVersions::Version.send(:scope, :find)[:order]
34
+ assert_equal 'versions.number ASC', order
35
+ end
36
+
37
+ should 'return true for the "initial?" method when the version number is 1' do
38
+ version = @user.versions.build(:number => 1)
39
+ assert_equal 1, version.number
40
+ assert_equal true, version.initial?
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,18 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class VersionedTest < Test::Unit::TestCase
4
+ context 'ActiveRecord models' do
5
+ should 'respond to the "versioned?" method' do
6
+ assert ActiveRecord::Base.respond_to?(:versioned?)
7
+ assert User.respond_to?(:versioned?)
8
+ end
9
+
10
+ should 'return true for the "versioned?" method if the model is versioned' do
11
+ assert_equal true, User.versioned?
12
+ end
13
+
14
+ should 'return false for the "versioned?" method if the model is not versioned' do
15
+ assert_equal false, ActiveRecord::Base.versioned?
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,172 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class VersionsTest < Test::Unit::TestCase
4
+ context 'A collection of associated versions' do
5
+ setup do
6
+ @user, @times = User.new, {}
7
+ names = ['Steve Richert', 'Stephen Richert', 'Stephen Jobs', 'Steve Jobs']
8
+ time = names.size.hours.ago
9
+ names.each do |name|
10
+ @user.update_attribute(:name, name)
11
+ @user.tag_version(@user.version.to_s)
12
+ time += 1.hour
13
+ @user.versions.last.update_attribute(:created_at, time)
14
+ @times[@user.version] = time
15
+ end
16
+ end
17
+
18
+ should 'be searchable between two valid version values' do
19
+ @times.keys.each do |number|
20
+ @times.values.each do |time|
21
+ assert_kind_of Array, @user.versions.between(number, number)
22
+ assert_kind_of Array, @user.versions.between(number, time)
23
+ assert_kind_of Array, @user.versions.between(time, number)
24
+ assert_kind_of Array, @user.versions.between(time, time)
25
+ assert !@user.versions.between(number, number).empty?
26
+ assert !@user.versions.between(number, time).empty?
27
+ assert !@user.versions.between(time, number).empty?
28
+ assert !@user.versions.between(time, time).empty?
29
+ end
30
+ end
31
+ end
32
+
33
+ should 'return an empty array when searching between a valid and an invalid version value' do
34
+ @times.each do |number, time|
35
+ assert_equal [], @user.versions.between(number, nil)
36
+ assert_equal [], @user.versions.between(time, nil)
37
+ assert_equal [], @user.versions.between(nil, number)
38
+ assert_equal [], @user.versions.between(nil, time)
39
+ end
40
+ end
41
+
42
+ should 'return an empty array when searching between two invalid version values' do
43
+ assert_equal [], @user.versions.between(nil, nil)
44
+ end
45
+
46
+ should 'be searchable before a valid version value' do
47
+ @times.sort.each_with_index do |(number, time), i|
48
+ assert_equal i, @user.versions.before(number).size
49
+ assert_equal i, @user.versions.before(time).size
50
+ end
51
+ end
52
+
53
+ should 'return an empty array when searching before an invalid version value' do
54
+ assert_equal [], @user.versions.before(nil)
55
+ end
56
+
57
+ should 'be searchable after a valid version value' do
58
+ @times.sort.reverse.each_with_index do |(number, time), i|
59
+ assert_equal i, @user.versions.after(number).size
60
+ assert_equal i, @user.versions.after(time).size
61
+ end
62
+ end
63
+
64
+ should 'return an empty array when searching after an invalid version value' do
65
+ assert_equal [], @user.versions.after(nil)
66
+ end
67
+
68
+ should 'be fetchable by version number' do
69
+ @times.keys.each do |number|
70
+ assert_kind_of VestalVersions::Version, @user.versions.at(number)
71
+ assert_equal number, @user.versions.at(number).number
72
+ end
73
+ end
74
+
75
+ should 'be fetchable by tag' do
76
+ @times.keys.map{|n| [n, n.to_s] }.each do |number, tag|
77
+ assert_kind_of VestalVersions::Version, @user.versions.at(tag)
78
+ assert_equal number, @user.versions.at(tag).number
79
+ end
80
+ end
81
+
82
+ should "be fetchable by the exact time of a version's creation" do
83
+ @times.each do |number, time|
84
+ assert_kind_of VestalVersions::Version, @user.versions.at(time)
85
+ assert_equal number, @user.versions.at(time).number
86
+ end
87
+ end
88
+
89
+ should "be fetchable by any time after the model's creation" do
90
+ @times.each do |number, time|
91
+ assert_kind_of VestalVersions::Version, @user.versions.at(time + 30.minutes)
92
+ assert_equal number, @user.versions.at(time + 30.minutes).number
93
+ end
94
+ end
95
+
96
+ should "return nil when fetching a time before the model's creation" do
97
+ creation = @times.values.min
98
+ assert_nil @user.versions.at(creation - 1.second)
99
+ end
100
+
101
+ should 'be fetchable by an association extension method' do
102
+ assert_kind_of VestalVersions::Version, @user.versions.at(:first)
103
+ assert_kind_of VestalVersions::Version, @user.versions.at(:last)
104
+ assert_equal @times.keys.min, @user.versions.at(:first).number
105
+ assert_equal @times.keys.max, @user.versions.at(:last).number
106
+ end
107
+
108
+ should 'be fetchable by a version object' do
109
+ @times.keys.each do |number|
110
+ version = @user.versions.at(number)
111
+ assert_kind_of VestalVersions::Version, version
112
+ assert_kind_of VestalVersions::Version, @user.versions.at(version)
113
+ assert_equal number, @user.versions.at(version).number
114
+ end
115
+ end
116
+
117
+ should 'return nil when fetching an invalid version value' do
118
+ assert_nil @user.versions.at(nil)
119
+ end
120
+
121
+ should 'provide a version number for any given numeric version value' do
122
+ @times.keys.each do |number|
123
+ assert_kind_of Fixnum, @user.versions.number_at(number)
124
+ assert_kind_of Fixnum, @user.versions.number_at(number + 0.5)
125
+ assert_equal @user.versions.number_at(number), @user.versions.number_at(number + 0.5)
126
+ end
127
+ end
128
+
129
+ should 'provide a version number for a valid tag' do
130
+ @times.keys.map{|n| [n, n.to_s] }.each do |number, tag|
131
+ assert_kind_of Fixnum, @user.versions.number_at(tag)
132
+ assert_equal number, @user.versions.number_at(tag)
133
+ end
134
+ end
135
+
136
+ should 'return nil when providing a version number for an invalid tag' do
137
+ assert_nil @user.versions.number_at('INVALID')
138
+ end
139
+
140
+ should 'provide a version number of a version corresponding to an association extension method' do
141
+ assert_kind_of VestalVersions::Version, @user.versions.at(:first)
142
+ assert_kind_of VestalVersions::Version, @user.versions.at(:last)
143
+ assert_equal @times.keys.min, @user.versions.number_at(:first)
144
+ assert_equal @times.keys.max, @user.versions.number_at(:last)
145
+ end
146
+
147
+ should 'return nil when providing a version number for an invalid association extension method' do
148
+ assert_nil @user.versions.number_at(:INVALID)
149
+ end
150
+
151
+ should "provide a version number for any time after the model's creation" do
152
+ @times.each do |number, time|
153
+ assert_kind_of Fixnum, @user.versions.number_at(time + 30.minutes)
154
+ assert_equal number, @user.versions.number_at(time + 30.minutes)
155
+ end
156
+ end
157
+
158
+ should "provide a version number of 1 for a time before the model's creation" do
159
+ creation = @times.values.min
160
+ assert_equal 1, @user.versions.number_at(creation - 1.second)
161
+ end
162
+
163
+ should 'provide a version number for a given version object' do
164
+ @times.keys.each do |number|
165
+ version = @user.versions.at(number)
166
+ assert_kind_of VestalVersions::Version, version
167
+ assert_kind_of Fixnum, @user.versions.number_at(version)
168
+ assert_equal number, @user.versions.number_at(version)
169
+ end
170
+ end
171
+ end
172
+ end
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
- # DO NOT EDIT THIS FILE
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{vestal_versions}
8
- s.version = "0.8.3"
8
+ s.version = "1.0.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-10-01}
12
+ s.date = %q{2010-01-02}
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 = [
@@ -22,19 +22,41 @@ Gem::Specification.new do |s|
22
22
  "README.rdoc",
23
23
  "Rakefile",
24
24
  "VERSION",
25
- "generators/vestal_versions_migration/templates/migration.rb",
26
- "generators/vestal_versions_migration/vestal_versions_migration_generator.rb",
27
- "init.rb",
28
- "lib/version.rb",
29
25
  "lib/vestal_versions.rb",
30
- "test/between_test.rb",
26
+ "lib/vestal_versions/changes.rb",
27
+ "lib/vestal_versions/conditions.rb",
28
+ "lib/vestal_versions/configuration.rb",
29
+ "lib/vestal_versions/control.rb",
30
+ "lib/vestal_versions/creation.rb",
31
+ "lib/vestal_versions/options.rb",
32
+ "lib/vestal_versions/reload.rb",
33
+ "lib/vestal_versions/reset.rb",
34
+ "lib/vestal_versions/reversion.rb",
35
+ "lib/vestal_versions/tagging.rb",
36
+ "lib/vestal_versions/users.rb",
37
+ "lib/vestal_versions/version.rb",
38
+ "lib/vestal_versions/versioned.rb",
39
+ "lib/vestal_versions/versions.rb",
40
+ "rails/init.rb",
41
+ "rails_generators/vestal_versions/templates/initializer.rb",
42
+ "rails_generators/vestal_versions/templates/migration.rb",
43
+ "rails_generators/vestal_versions/vestal_versions_generator.rb",
31
44
  "test/changes_test.rb",
32
- "test/comparable_test.rb",
45
+ "test/conditions_test.rb",
46
+ "test/configuration_test.rb",
47
+ "test/control_test.rb",
33
48
  "test/creation_test.rb",
34
- "test/latest_changes_test.rb",
35
- "test/revert_test.rb",
49
+ "test/options_test.rb",
50
+ "test/reload_test.rb",
51
+ "test/reset_test.rb",
52
+ "test/reversion_test.rb",
36
53
  "test/schema.rb",
54
+ "test/tagging_test.rb",
37
55
  "test/test_helper.rb",
56
+ "test/users_test.rb",
57
+ "test/version_test.rb",
58
+ "test/versioned_test.rb",
59
+ "test/versions_test.rb",
38
60
  "vestal_versions.gemspec"
39
61
  ]
40
62
  s.homepage = %q{http://github.com/laserlemon/vestal_versions}
@@ -44,14 +66,22 @@ Gem::Specification.new do |s|
44
66
  s.rubygems_version = %q{1.3.5}
45
67
  s.summary = %q{Keep a DRY history of your ActiveRecord models' changes}
46
68
  s.test_files = [
47
- "test/between_test.rb",
48
- "test/changes_test.rb",
49
- "test/comparable_test.rb",
69
+ "test/changes_test.rb",
70
+ "test/conditions_test.rb",
71
+ "test/configuration_test.rb",
72
+ "test/control_test.rb",
50
73
  "test/creation_test.rb",
51
- "test/latest_changes_test.rb",
52
- "test/revert_test.rb",
74
+ "test/options_test.rb",
75
+ "test/reload_test.rb",
76
+ "test/reset_test.rb",
77
+ "test/reversion_test.rb",
53
78
  "test/schema.rb",
54
- "test/test_helper.rb"
79
+ "test/tagging_test.rb",
80
+ "test/test_helper.rb",
81
+ "test/users_test.rb",
82
+ "test/version_test.rb",
83
+ "test/versioned_test.rb",
84
+ "test/versions_test.rb"
55
85
  ]
56
86
 
57
87
  if s.respond_to? :specification_version then
@@ -59,11 +89,21 @@ Gem::Specification.new do |s|
59
89
  s.specification_version = 3
60
90
 
61
91
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
62
- s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
92
+ s.add_development_dependency(%q<activerecord>, [">= 0"])
93
+ s.add_development_dependency(%q<activesupport>, [">= 0"])
94
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
95
+ s.add_development_dependency(%q<mocha>, [">= 0"])
63
96
  else
64
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
97
+ s.add_dependency(%q<activerecord>, [">= 0"])
98
+ s.add_dependency(%q<activesupport>, [">= 0"])
99
+ s.add_dependency(%q<shoulda>, [">= 0"])
100
+ s.add_dependency(%q<mocha>, [">= 0"])
65
101
  end
66
102
  else
67
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
103
+ s.add_dependency(%q<activerecord>, [">= 0"])
104
+ s.add_dependency(%q<activesupport>, [">= 0"])
105
+ s.add_dependency(%q<shoulda>, [">= 0"])
106
+ s.add_dependency(%q<mocha>, [">= 0"])
68
107
  end
69
108
  end
109
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vestal_versions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - laserlemon
@@ -9,11 +9,41 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-01 00:00:00 -04:00
12
+ date: 2010-01-02 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: thoughtbot-shoulda
16
+ name: activerecord
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: activesupport
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: shoulda
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: mocha
17
47
  type: :development
18
48
  version_requirement:
19
49
  version_requirements: !ruby/object:Gem::Requirement
@@ -37,19 +67,41 @@ files:
37
67
  - README.rdoc
38
68
  - Rakefile
39
69
  - VERSION
40
- - generators/vestal_versions_migration/templates/migration.rb
41
- - generators/vestal_versions_migration/vestal_versions_migration_generator.rb
42
- - init.rb
43
- - lib/version.rb
44
70
  - lib/vestal_versions.rb
45
- - test/between_test.rb
71
+ - lib/vestal_versions/changes.rb
72
+ - lib/vestal_versions/conditions.rb
73
+ - lib/vestal_versions/configuration.rb
74
+ - lib/vestal_versions/control.rb
75
+ - lib/vestal_versions/creation.rb
76
+ - lib/vestal_versions/options.rb
77
+ - lib/vestal_versions/reload.rb
78
+ - lib/vestal_versions/reset.rb
79
+ - lib/vestal_versions/reversion.rb
80
+ - lib/vestal_versions/tagging.rb
81
+ - lib/vestal_versions/users.rb
82
+ - lib/vestal_versions/version.rb
83
+ - lib/vestal_versions/versioned.rb
84
+ - lib/vestal_versions/versions.rb
85
+ - rails/init.rb
86
+ - rails_generators/vestal_versions/templates/initializer.rb
87
+ - rails_generators/vestal_versions/templates/migration.rb
88
+ - rails_generators/vestal_versions/vestal_versions_generator.rb
46
89
  - test/changes_test.rb
47
- - test/comparable_test.rb
90
+ - test/conditions_test.rb
91
+ - test/configuration_test.rb
92
+ - test/control_test.rb
48
93
  - test/creation_test.rb
49
- - test/latest_changes_test.rb
50
- - test/revert_test.rb
94
+ - test/options_test.rb
95
+ - test/reload_test.rb
96
+ - test/reset_test.rb
97
+ - test/reversion_test.rb
51
98
  - test/schema.rb
99
+ - test/tagging_test.rb
52
100
  - test/test_helper.rb
101
+ - test/users_test.rb
102
+ - test/version_test.rb
103
+ - test/versioned_test.rb
104
+ - test/versions_test.rb
53
105
  - vestal_versions.gemspec
54
106
  has_rdoc: true
55
107
  homepage: http://github.com/laserlemon/vestal_versions
@@ -80,11 +132,19 @@ signing_key:
80
132
  specification_version: 3
81
133
  summary: Keep a DRY history of your ActiveRecord models' changes
82
134
  test_files:
83
- - test/between_test.rb
84
135
  - test/changes_test.rb
85
- - test/comparable_test.rb
136
+ - test/conditions_test.rb
137
+ - test/configuration_test.rb
138
+ - test/control_test.rb
86
139
  - test/creation_test.rb
87
- - test/latest_changes_test.rb
88
- - test/revert_test.rb
140
+ - test/options_test.rb
141
+ - test/reload_test.rb
142
+ - test/reset_test.rb
143
+ - test/reversion_test.rb
89
144
  - test/schema.rb
145
+ - test/tagging_test.rb
90
146
  - test/test_helper.rb
147
+ - test/users_test.rb
148
+ - test/version_test.rb
149
+ - test/versioned_test.rb
150
+ - test/versions_test.rb