vestal_versions 1.0.2 → 2.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.
- data/.gitignore +19 -20
- data/.travis.yml +22 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +10 -0
- data/README.rdoc +63 -36
- data/Rakefile +4 -43
- data/gemfiles/activerecord_3_0.gemfile +10 -0
- data/gemfiles/activerecord_3_1.gemfile +10 -0
- data/gemfiles/activerecord_3_2.gemfile +10 -0
- data/gemfiles/activerecord_4_0.gemfile +10 -0
- data/lib/generators/vestal_versions.rb +11 -0
- data/lib/generators/vestal_versions/migration/migration_generator.rb +17 -0
- data/{generators/vestal_versions → lib/generators/vestal_versions/migration}/templates/initializer.rb +0 -0
- data/{generators/vestal_versions → lib/generators/vestal_versions/migration}/templates/migration.rb +4 -3
- data/lib/vestal_versions.rb +39 -12
- data/lib/vestal_versions/changes.rb +43 -47
- data/lib/vestal_versions/conditions.rb +31 -43
- data/lib/vestal_versions/control.rb +162 -138
- data/lib/vestal_versions/creation.rb +67 -59
- data/lib/vestal_versions/deletion.rb +37 -0
- data/lib/vestal_versions/options.rb +6 -10
- data/lib/vestal_versions/reload.rb +7 -14
- data/lib/vestal_versions/reset.rb +15 -19
- data/lib/vestal_versions/reversion.rb +64 -52
- data/lib/vestal_versions/users.rb +36 -39
- data/lib/vestal_versions/version.rb +57 -2
- data/lib/vestal_versions/version_tagging.rb +51 -0
- data/lib/vestal_versions/versioned.rb +14 -17
- data/lib/vestal_versions/versions.rb +22 -7
- data/spec/spec_helper.rb +28 -0
- data/spec/support/models.rb +19 -0
- data/spec/support/schema.rb +25 -0
- data/spec/vestal_versions/changes_spec.rb +134 -0
- data/spec/vestal_versions/conditions_spec.rb +103 -0
- data/spec/vestal_versions/control_spec.rb +120 -0
- data/spec/vestal_versions/creation_spec.rb +90 -0
- data/spec/vestal_versions/deletion_spec.rb +86 -0
- data/spec/vestal_versions/options_spec.rb +45 -0
- data/spec/vestal_versions/reload_spec.rb +18 -0
- data/spec/vestal_versions/reset_spec.rb +111 -0
- data/spec/vestal_versions/reversion_spec.rb +103 -0
- data/spec/vestal_versions/users_spec.rb +21 -0
- data/spec/vestal_versions/version_spec.rb +61 -0
- data/spec/vestal_versions/version_tagging_spec.rb +39 -0
- data/spec/vestal_versions/versioned_spec.rb +16 -0
- data/spec/vestal_versions/versions_spec.rb +176 -0
- data/vestal_versions.gemspec +18 -100
- metadata +153 -102
- data/VERSION +0 -1
- data/generators/vestal_versions/vestal_versions_generator.rb +0 -10
- data/init.rb +0 -1
- data/lib/vestal_versions/configuration.rb +0 -40
- data/lib/vestal_versions/tagging.rb +0 -50
- data/test/changes_test.rb +0 -169
- data/test/conditions_test.rb +0 -137
- data/test/configuration_test.rb +0 -39
- data/test/control_test.rb +0 -152
- data/test/creation_test.rb +0 -110
- data/test/options_test.rb +0 -52
- data/test/reload_test.rb +0 -19
- data/test/reset_test.rb +0 -112
- data/test/reversion_test.rb +0 -68
- data/test/schema.rb +0 -43
- data/test/tagging_test.rb +0 -39
- data/test/test_helper.rb +0 -11
- data/test/users_test.rb +0 -25
- data/test/version_test.rb +0 -43
- data/test/versioned_test.rb +0 -18
- data/test/versions_test.rb +0 -172
data/test/reload_test.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
-
|
3
|
-
class ReloadTest < Test::Unit::TestCase
|
4
|
-
context 'Reloading a reverted model' do
|
5
|
-
setup do
|
6
|
-
@user = User.create(:name => 'Steve Richert')
|
7
|
-
first_version = @user.version
|
8
|
-
@user.update_attribute(:last_name, 'Jobs')
|
9
|
-
@last_version = @user.version
|
10
|
-
@user.revert_to(first_version)
|
11
|
-
end
|
12
|
-
|
13
|
-
should 'reset the version number to the most recent version' do
|
14
|
-
assert_not_equal @last_version, @user.version
|
15
|
-
@user.reload
|
16
|
-
assert_equal @last_version, @user.version
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/test/reset_test.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
-
|
3
|
-
class ResetTest < Test::Unit::TestCase
|
4
|
-
context 'Resetting a model' do
|
5
|
-
setup do
|
6
|
-
@original_dependent = User.reflect_on_association(:versions).options[:dependent]
|
7
|
-
@user, @versions = User.new, []
|
8
|
-
@names = ['Steve Richert', 'Stephen Richert', 'Stephen Jobs', 'Steve Jobs']
|
9
|
-
@names.each do |name|
|
10
|
-
@user.update_attribute(:name, name)
|
11
|
-
@versions << @user.version
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
should "properly revert the model's attributes" do
|
16
|
-
@versions.reverse.each_with_index do |version, i|
|
17
|
-
@user.reset_to!(version)
|
18
|
-
assert_equal @names.reverse[i], @user.name
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
should 'dissociate all versions after the target' do
|
23
|
-
@versions.reverse.each do |version|
|
24
|
-
@user.reset_to!(version)
|
25
|
-
assert_equal 0, @user.versions(true).after(version).count
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'with the :dependent option as :delete_all' do
|
30
|
-
setup do
|
31
|
-
User.reflect_on_association(:versions).options[:dependent] = :delete_all
|
32
|
-
end
|
33
|
-
|
34
|
-
should 'delete all versions after the target version' do
|
35
|
-
@versions.reverse.each do |version|
|
36
|
-
later_versions = @user.versions.after(version)
|
37
|
-
@user.reset_to!(version)
|
38
|
-
later_versions.each do |later_version|
|
39
|
-
assert_raise ActiveRecord::RecordNotFound do
|
40
|
-
later_version.reload
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
should 'not destroy all versions after the target version' do
|
47
|
-
VestalVersions::Version.any_instance.stubs(:destroy).raises(RuntimeError)
|
48
|
-
@versions.reverse.each do |version|
|
49
|
-
assert_nothing_raised do
|
50
|
-
@user.reset_to!(version)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'with the :dependent option as :destroy' do
|
57
|
-
setup do
|
58
|
-
User.reflect_on_association(:versions).options[:dependent] = :destroy
|
59
|
-
end
|
60
|
-
|
61
|
-
should 'delete all versions after the target version' do
|
62
|
-
@versions.reverse.each do |version|
|
63
|
-
later_versions = @user.versions.after(version)
|
64
|
-
@user.reset_to!(version)
|
65
|
-
later_versions.each do |later_version|
|
66
|
-
assert_raise ActiveRecord::RecordNotFound do
|
67
|
-
later_version.reload
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
should 'destroy all versions after the target version' do
|
74
|
-
VestalVersions::Version.any_instance.stubs(:destroy).raises(RuntimeError)
|
75
|
-
@versions.reverse.each do |version|
|
76
|
-
later_versions = @user.versions.after(version)
|
77
|
-
if later_versions.empty?
|
78
|
-
assert_nothing_raised do
|
79
|
-
@user.reset_to!(version)
|
80
|
-
end
|
81
|
-
else
|
82
|
-
assert_raise RuntimeError do
|
83
|
-
@user.reset_to!(version)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
context 'with the :dependent option as :nullify' do
|
91
|
-
setup do
|
92
|
-
User.reflect_on_association(:versions).options[:dependent] = :nullify
|
93
|
-
end
|
94
|
-
|
95
|
-
should 'leave all versions after the target version' do
|
96
|
-
@versions.reverse.each do |version|
|
97
|
-
later_versions = @user.versions.after(version)
|
98
|
-
@user.reset_to!(version)
|
99
|
-
later_versions.each do |later_version|
|
100
|
-
assert_nothing_raised do
|
101
|
-
later_version.reload
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
teardown do
|
109
|
-
User.reflect_on_association(:versions).options[:dependent] = @original_dependent
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
data/test/reversion_test.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
-
|
3
|
-
class ReversionTest < Test::Unit::TestCase
|
4
|
-
context 'A model reversion' do
|
5
|
-
setup do
|
6
|
-
@user, @attributes, @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
|
-
@attributes[@user.version] = @user.attributes
|
12
|
-
time += 1.hour
|
13
|
-
if last_version = @user.versions.last
|
14
|
-
last_version.update_attribute(:created_at, time)
|
15
|
-
end
|
16
|
-
@times[@user.version] = time
|
17
|
-
end
|
18
|
-
@user.reload.versions.reload
|
19
|
-
@first_version, @last_version = @attributes.keys.min, @attributes.keys.max
|
20
|
-
end
|
21
|
-
|
22
|
-
should 'return the new version number' do
|
23
|
-
new_version = @user.revert_to(@first_version)
|
24
|
-
assert_equal @first_version, new_version
|
25
|
-
end
|
26
|
-
|
27
|
-
should 'change the version number when saved' do
|
28
|
-
current_version = @user.version
|
29
|
-
@user.revert_to!(@first_version)
|
30
|
-
assert_not_equal current_version, @user.version
|
31
|
-
end
|
32
|
-
|
33
|
-
should 'do nothing for a invalid argument' do
|
34
|
-
current_version = @user.version
|
35
|
-
[nil, :bogus, 'bogus', (1..2)].each do |invalid|
|
36
|
-
@user.revert_to(invalid)
|
37
|
-
assert_equal current_version, @user.version
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
should 'be able to target a version number' do
|
42
|
-
@user.revert_to(1)
|
43
|
-
assert 1, @user.version
|
44
|
-
end
|
45
|
-
|
46
|
-
should 'be able to target a date and time' do
|
47
|
-
@times.each do |version, time|
|
48
|
-
@user.revert_to(time + 1.second)
|
49
|
-
assert_equal version, @user.version
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
should 'be able to target a version object' do
|
54
|
-
@user.versions.each do |version|
|
55
|
-
@user.revert_to(version)
|
56
|
-
assert_equal version.number, @user.version
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
should "correctly roll back the model's attributes" do
|
61
|
-
timestamps = %w(created_at created_on updated_at updated_on)
|
62
|
-
@attributes.each do |version, attributes|
|
63
|
-
@user.revert_to!(version)
|
64
|
-
assert_equal attributes.except(*timestamps), @user.attributes.except(*timestamps)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
data/test/schema.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
ActiveRecord::Base.establish_connection(
|
2
|
-
:adapter => defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby' ? 'jdbcsqlite3' : 'sqlite3',
|
3
|
-
:database => File.join(File.dirname(__FILE__), 'test.db')
|
4
|
-
)
|
5
|
-
|
6
|
-
class CreateSchema < ActiveRecord::Migration
|
7
|
-
def self.up
|
8
|
-
create_table :users, :force => true do |t|
|
9
|
-
t.string :first_name
|
10
|
-
t.string :last_name
|
11
|
-
t.timestamps
|
12
|
-
end
|
13
|
-
|
14
|
-
create_table :versions, :force => true do |t|
|
15
|
-
t.belongs_to :versioned, :polymorphic => true
|
16
|
-
t.belongs_to :user, :polymorphic => true
|
17
|
-
t.string :user_name
|
18
|
-
t.text :changes
|
19
|
-
t.integer :number
|
20
|
-
t.string :tag
|
21
|
-
t.timestamps
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
CreateSchema.suppress_messages do
|
27
|
-
CreateSchema.migrate(:up)
|
28
|
-
end
|
29
|
-
|
30
|
-
class User < ActiveRecord::Base
|
31
|
-
versioned
|
32
|
-
|
33
|
-
def name
|
34
|
-
[first_name, last_name].compact.join(' ')
|
35
|
-
end
|
36
|
-
|
37
|
-
def name=(names)
|
38
|
-
self[:first_name], self[:last_name] = names.split(' ', 2)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
class MyCustomVersion < VestalVersions::Version
|
43
|
-
end
|
data/test/tagging_test.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
-
|
3
|
-
class TaggingTest < Test::Unit::TestCase
|
4
|
-
context 'Tagging a version' do
|
5
|
-
setup do
|
6
|
-
@user = User.create(:name => 'Steve Richert')
|
7
|
-
@user.update_attribute(:last_name, 'Jobs')
|
8
|
-
end
|
9
|
-
|
10
|
-
should "update the version record's tag column" do
|
11
|
-
tag_name = 'TAG'
|
12
|
-
last_version = @user.versions.last
|
13
|
-
assert_not_equal tag_name, last_version.tag
|
14
|
-
@user.tag_version(tag_name)
|
15
|
-
assert_equal tag_name, last_version.reload.tag
|
16
|
-
end
|
17
|
-
|
18
|
-
should 'create a version record for an initial version' do
|
19
|
-
@user.revert_to(1)
|
20
|
-
assert_nil @user.versions.at(1)
|
21
|
-
@user.tag_version('TAG')
|
22
|
-
assert_not_nil @user.versions.at(1)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context 'A tagged version' do
|
27
|
-
setup do
|
28
|
-
user = User.create(:name => 'Steve Richert')
|
29
|
-
user.update_attribute(:last_name, 'Jobs')
|
30
|
-
user.tag_version('TAG')
|
31
|
-
@version = user.versions.last
|
32
|
-
end
|
33
|
-
|
34
|
-
should 'return true for the "tagged?" method' do
|
35
|
-
assert @version.respond_to?(:tagged?)
|
36
|
-
assert_equal true, @version.tagged?
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
$: << File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
-
$: << File.dirname(__FILE__)
|
3
|
-
|
4
|
-
require 'rubygems'
|
5
|
-
require 'test/unit'
|
6
|
-
require 'active_record'
|
7
|
-
require 'shoulda'
|
8
|
-
require 'mocha'
|
9
|
-
require 'vestal_versions'
|
10
|
-
require 'schema'
|
11
|
-
begin; require 'redgreen'; rescue LoadError; end
|
data/test/users_test.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class UsersTest < Test::Unit::TestCase
|
4
|
-
context 'The user responsible for an update' do
|
5
|
-
setup do
|
6
|
-
@updated_by = User.create(:name => 'Steve Jobs')
|
7
|
-
@user = User.create(:name => 'Steve Richert')
|
8
|
-
end
|
9
|
-
|
10
|
-
should 'default to nil' do
|
11
|
-
@user.update_attributes(:first_name => 'Stephen')
|
12
|
-
assert_nil @user.versions.last.user
|
13
|
-
end
|
14
|
-
|
15
|
-
should 'accept and return an ActiveRecord user' do
|
16
|
-
@user.update_attributes(:first_name => 'Stephen', :updated_by => @updated_by)
|
17
|
-
assert_equal @updated_by, @user.versions.last.user
|
18
|
-
end
|
19
|
-
|
20
|
-
should 'accept and return a string user name' do
|
21
|
-
@user.update_attributes(:first_name => 'Stephen', :updated_by => @updated_by.name)
|
22
|
-
assert_equal @updated_by.name, @user.versions.last.user
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/test/version_test.rb
DELETED
@@ -1,43 +0,0 @@
|
|
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 through association' do
|
33
|
-
order = @user.versions.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
|
data/test/versioned_test.rb
DELETED
@@ -1,18 +0,0 @@
|
|
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
|
data/test/versions_test.rb
DELETED
@@ -1,172 +0,0 @@
|
|
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
|