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.
- data/.gitignore +23 -0
- data/LICENSE +20 -0
- data/README.rdoc +175 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/generators/vestal_versions/templates/initializer.rb +9 -0
- data/generators/vestal_versions/templates/migration.rb +27 -0
- data/generators/vestal_versions/vestal_versions_generator.rb +24 -0
- data/init.rb +1 -0
- data/lib/vestal_versions.rb +103 -0
- data/lib/vestal_versions/changes.rb +125 -0
- data/lib/vestal_versions/conditions.rb +69 -0
- data/lib/vestal_versions/configuration.rb +40 -0
- data/lib/vestal_versions/control.rb +175 -0
- data/lib/vestal_versions/creation.rb +100 -0
- data/lib/vestal_versions/options.rb +45 -0
- data/lib/vestal_versions/reload.rb +23 -0
- data/lib/vestal_versions/reset.rb +28 -0
- data/lib/vestal_versions/reversion.rb +69 -0
- data/lib/vestal_versions/tagging.rb +50 -0
- data/lib/vestal_versions/users.rb +57 -0
- data/lib/vestal_versions/version.rb +32 -0
- data/lib/vestal_versions/versioned.rb +30 -0
- data/lib/vestal_versions/versions.rb +74 -0
- data/test/changes_test.rb +169 -0
- data/test/conditions_test.rb +137 -0
- data/test/configuration_test.rb +39 -0
- data/test/control_test.rb +152 -0
- data/test/creation_test.rb +148 -0
- data/test/options_test.rb +52 -0
- data/test/reload_test.rb +19 -0
- data/test/reset_test.rb +112 -0
- data/test/reversion_test.rb +68 -0
- data/test/schema.rb +43 -0
- data/test/tagging_test.rb +39 -0
- data/test/test_helper.rb +12 -0
- data/test/users_test.rb +25 -0
- data/test/version_test.rb +43 -0
- data/test/versioned_test.rb +18 -0
- data/test/versions_test.rb +172 -0
- data/vestal_versions.gemspec +105 -0
- 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
|