bitfluent-vestal_versions 1.1.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 (42) hide show
  1. data/.gitignore +23 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +175 -0
  4. data/Rakefile +45 -0
  5. data/VERSION +1 -0
  6. data/generators/vestal_versions/templates/initializer.rb +9 -0
  7. data/generators/vestal_versions/templates/migration.rb +27 -0
  8. data/generators/vestal_versions/vestal_versions_generator.rb +24 -0
  9. data/init.rb +1 -0
  10. data/lib/vestal_versions.rb +103 -0
  11. data/lib/vestal_versions/changes.rb +125 -0
  12. data/lib/vestal_versions/conditions.rb +69 -0
  13. data/lib/vestal_versions/configuration.rb +40 -0
  14. data/lib/vestal_versions/control.rb +175 -0
  15. data/lib/vestal_versions/creation.rb +100 -0
  16. data/lib/vestal_versions/options.rb +45 -0
  17. data/lib/vestal_versions/reload.rb +23 -0
  18. data/lib/vestal_versions/reset.rb +28 -0
  19. data/lib/vestal_versions/reversion.rb +69 -0
  20. data/lib/vestal_versions/tagging.rb +50 -0
  21. data/lib/vestal_versions/users.rb +57 -0
  22. data/lib/vestal_versions/version.rb +32 -0
  23. data/lib/vestal_versions/versioned.rb +30 -0
  24. data/lib/vestal_versions/versions.rb +74 -0
  25. data/test/changes_test.rb +169 -0
  26. data/test/conditions_test.rb +137 -0
  27. data/test/configuration_test.rb +39 -0
  28. data/test/control_test.rb +152 -0
  29. data/test/creation_test.rb +148 -0
  30. data/test/options_test.rb +52 -0
  31. data/test/reload_test.rb +19 -0
  32. data/test/reset_test.rb +112 -0
  33. data/test/reversion_test.rb +68 -0
  34. data/test/schema.rb +43 -0
  35. data/test/tagging_test.rb +39 -0
  36. data/test/test_helper.rb +12 -0
  37. data/test/users_test.rb +25 -0
  38. data/test/version_test.rb +43 -0
  39. data/test/versioned_test.rb +18 -0
  40. data/test/versions_test.rb +172 -0
  41. data/vestal_versions.gemspec +105 -0
  42. metadata +167 -0
@@ -0,0 +1,172 @@
1
+ require File.expand_path(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
@@ -0,0 +1,105 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{vestal_versions}
8
+ s.version = "1.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["laserlemon"]
12
+ s.date = %q{2010-06-21}
13
+ s.description = %q{Keep a DRY history of your ActiveRecord models' changes}
14
+ s.email = %q{steve@laserlemon.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "LICENSE",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "generators/vestal_versions/templates/initializer.rb",
26
+ "generators/vestal_versions/templates/migration.rb",
27
+ "generators/vestal_versions/vestal_versions_generator.rb",
28
+ "init.rb",
29
+ "lib/vestal_versions.rb",
30
+ "lib/vestal_versions/changes.rb",
31
+ "lib/vestal_versions/conditions.rb",
32
+ "lib/vestal_versions/configuration.rb",
33
+ "lib/vestal_versions/control.rb",
34
+ "lib/vestal_versions/creation.rb",
35
+ "lib/vestal_versions/options.rb",
36
+ "lib/vestal_versions/reload.rb",
37
+ "lib/vestal_versions/reset.rb",
38
+ "lib/vestal_versions/reversion.rb",
39
+ "lib/vestal_versions/tagging.rb",
40
+ "lib/vestal_versions/users.rb",
41
+ "lib/vestal_versions/version.rb",
42
+ "lib/vestal_versions/versioned.rb",
43
+ "lib/vestal_versions/versions.rb",
44
+ "test/changes_test.rb",
45
+ "test/conditions_test.rb",
46
+ "test/configuration_test.rb",
47
+ "test/control_test.rb",
48
+ "test/creation_test.rb",
49
+ "test/options_test.rb",
50
+ "test/reload_test.rb",
51
+ "test/reset_test.rb",
52
+ "test/reversion_test.rb",
53
+ "test/schema.rb",
54
+ "test/tagging_test.rb",
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",
60
+ "vestal_versions.gemspec"
61
+ ]
62
+ s.homepage = %q{http://github.com/laserlemon/vestal_versions}
63
+ s.rdoc_options = ["--charset=UTF-8"]
64
+ s.require_paths = ["lib"]
65
+ s.rubygems_version = %q{1.3.7}
66
+ s.summary = %q{Keep a DRY history of your ActiveRecord models' changes}
67
+ s.test_files = [
68
+ "test/changes_test.rb",
69
+ "test/conditions_test.rb",
70
+ "test/configuration_test.rb",
71
+ "test/control_test.rb",
72
+ "test/creation_test.rb",
73
+ "test/options_test.rb",
74
+ "test/reload_test.rb",
75
+ "test/reset_test.rb",
76
+ "test/reversion_test.rb",
77
+ "test/schema.rb",
78
+ "test/tagging_test.rb",
79
+ "test/test_helper.rb",
80
+ "test/users_test.rb",
81
+ "test/version_test.rb",
82
+ "test/versioned_test.rb",
83
+ "test/versions_test.rb"
84
+ ]
85
+
86
+ if s.respond_to? :specification_version then
87
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
88
+ s.specification_version = 3
89
+
90
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
91
+ s.add_runtime_dependency(%q<activerecord>, [">= 3.0.0.beta4"])
92
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
93
+ s.add_development_dependency(%q<mocha>, [">= 0"])
94
+ else
95
+ s.add_dependency(%q<activerecord>, [">= 3.0.0.beta4"])
96
+ s.add_dependency(%q<shoulda>, [">= 0"])
97
+ s.add_dependency(%q<mocha>, [">= 0"])
98
+ end
99
+ else
100
+ s.add_dependency(%q<activerecord>, [">= 3.0.0.beta4"])
101
+ s.add_dependency(%q<shoulda>, [">= 0"])
102
+ s.add_dependency(%q<mocha>, [">= 0"])
103
+ end
104
+ end
105
+
metadata ADDED
@@ -0,0 +1,167 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bitfluent-vestal_versions
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 1
9
+ - 0
10
+ version: 1.1.0
11
+ platform: ruby
12
+ authors:
13
+ - laserlemon
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-06-21 00:00:00 +08:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: activerecord
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: -1848230024
30
+ segments:
31
+ - 3
32
+ - 0
33
+ - 0
34
+ - beta4
35
+ version: 3.0.0.beta4
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: shoulda
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ hash: 3
47
+ segments:
48
+ - 0
49
+ version: "0"
50
+ type: :development
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: mocha
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 3
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ type: :development
65
+ version_requirements: *id003
66
+ description: Keep a DRY history of your ActiveRecord models' changes
67
+ email: steve@laserlemon.com
68
+ executables: []
69
+
70
+ extensions: []
71
+
72
+ extra_rdoc_files:
73
+ - LICENSE
74
+ - README.rdoc
75
+ files:
76
+ - .gitignore
77
+ - LICENSE
78
+ - README.rdoc
79
+ - Rakefile
80
+ - VERSION
81
+ - generators/vestal_versions/templates/initializer.rb
82
+ - generators/vestal_versions/templates/migration.rb
83
+ - generators/vestal_versions/vestal_versions_generator.rb
84
+ - init.rb
85
+ - lib/vestal_versions.rb
86
+ - lib/vestal_versions/changes.rb
87
+ - lib/vestal_versions/conditions.rb
88
+ - lib/vestal_versions/configuration.rb
89
+ - lib/vestal_versions/control.rb
90
+ - lib/vestal_versions/creation.rb
91
+ - lib/vestal_versions/options.rb
92
+ - lib/vestal_versions/reload.rb
93
+ - lib/vestal_versions/reset.rb
94
+ - lib/vestal_versions/reversion.rb
95
+ - lib/vestal_versions/tagging.rb
96
+ - lib/vestal_versions/users.rb
97
+ - lib/vestal_versions/version.rb
98
+ - lib/vestal_versions/versioned.rb
99
+ - lib/vestal_versions/versions.rb
100
+ - test/changes_test.rb
101
+ - test/conditions_test.rb
102
+ - test/configuration_test.rb
103
+ - test/control_test.rb
104
+ - test/creation_test.rb
105
+ - test/options_test.rb
106
+ - test/reload_test.rb
107
+ - test/reset_test.rb
108
+ - test/reversion_test.rb
109
+ - test/schema.rb
110
+ - test/tagging_test.rb
111
+ - test/test_helper.rb
112
+ - test/users_test.rb
113
+ - test/version_test.rb
114
+ - test/versioned_test.rb
115
+ - test/versions_test.rb
116
+ - vestal_versions.gemspec
117
+ has_rdoc: true
118
+ homepage: http://github.com/laserlemon/vestal_versions
119
+ licenses: []
120
+
121
+ post_install_message:
122
+ rdoc_options:
123
+ - --charset=UTF-8
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ hash: 3
132
+ segments:
133
+ - 0
134
+ version: "0"
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ hash: 3
141
+ segments:
142
+ - 0
143
+ version: "0"
144
+ requirements: []
145
+
146
+ rubyforge_project:
147
+ rubygems_version: 1.3.7
148
+ signing_key:
149
+ specification_version: 3
150
+ summary: Keep a DRY history of your ActiveRecord models' changes
151
+ test_files:
152
+ - test/changes_test.rb
153
+ - test/conditions_test.rb
154
+ - test/configuration_test.rb
155
+ - test/control_test.rb
156
+ - test/creation_test.rb
157
+ - test/options_test.rb
158
+ - test/reload_test.rb
159
+ - test/reset_test.rb
160
+ - test/reversion_test.rb
161
+ - test/schema.rb
162
+ - test/tagging_test.rb
163
+ - test/test_helper.rb
164
+ - test/users_test.rb
165
+ - test/version_test.rb
166
+ - test/versioned_test.rb
167
+ - test/versions_test.rb