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
         
     |