vestal_versions 0.8.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. data/.gitignore +20 -2
  2. data/README.rdoc +110 -8
  3. data/Rakefile +14 -3
  4. data/VERSION +1 -1
  5. data/lib/vestal_versions.rb +93 -143
  6. data/lib/vestal_versions/changes.rb +125 -0
  7. data/lib/vestal_versions/conditions.rb +69 -0
  8. data/lib/vestal_versions/configuration.rb +40 -0
  9. data/lib/vestal_versions/control.rb +175 -0
  10. data/lib/vestal_versions/creation.rb +85 -0
  11. data/lib/vestal_versions/options.rb +42 -0
  12. data/lib/vestal_versions/reload.rb +23 -0
  13. data/lib/vestal_versions/reset.rb +56 -0
  14. data/lib/vestal_versions/reversion.rb +69 -0
  15. data/lib/vestal_versions/tagging.rb +50 -0
  16. data/lib/vestal_versions/users.rb +57 -0
  17. data/lib/vestal_versions/version.rb +32 -0
  18. data/lib/vestal_versions/versioned.rb +30 -0
  19. data/lib/vestal_versions/versions.rb +74 -0
  20. data/rails/init.rb +1 -0
  21. data/rails_generators/vestal_versions/templates/initializer.rb +9 -0
  22. data/{generators/vestal_versions_migration → rails_generators/vestal_versions}/templates/migration.rb +9 -2
  23. data/rails_generators/vestal_versions/vestal_versions_generator.rb +10 -0
  24. data/test/changes_test.rb +154 -13
  25. data/test/conditions_test.rb +137 -0
  26. data/test/configuration_test.rb +39 -0
  27. data/test/control_test.rb +152 -0
  28. data/test/creation_test.rb +70 -30
  29. data/test/options_test.rb +52 -0
  30. data/test/reload_test.rb +19 -0
  31. data/test/reset_test.rb +107 -0
  32. data/test/{revert_test.rb → reversion_test.rb} +8 -22
  33. data/test/schema.rb +4 -1
  34. data/test/tagging_test.rb +38 -0
  35. data/test/test_helper.rb +2 -1
  36. data/test/users_test.rb +25 -0
  37. data/test/version_test.rb +43 -0
  38. data/test/versioned_test.rb +18 -0
  39. data/test/versions_test.rb +172 -0
  40. data/vestal_versions.gemspec +61 -21
  41. metadata +75 -15
  42. data/generators/vestal_versions_migration/vestal_versions_migration_generator.rb +0 -11
  43. data/init.rb +0 -1
  44. data/lib/version.rb +0 -14
  45. data/test/between_test.rb +0 -58
  46. data/test/comparable_test.rb +0 -35
  47. data/test/latest_changes_test.rb +0 -42
@@ -1,11 +0,0 @@
1
- class VestalVersionsMigrationGenerator < Rails::Generator::Base
2
- def manifest
3
- record do |m|
4
- m.migration_template 'migration.rb', 'db/migrate'
5
- end
6
- end
7
-
8
- def file_name
9
- 'create_vestal_versions'
10
- end
11
- end
data/init.rb DELETED
@@ -1 +0,0 @@
1
- require 'vestal_versions'
@@ -1,14 +0,0 @@
1
- class Version < ActiveRecord::Base
2
- include Comparable
3
-
4
- belongs_to :versioned, :polymorphic => true
5
-
6
- undef_method :changes
7
- serialize :changes, Hash
8
-
9
- alias_attribute :version, :number
10
-
11
- def <=>(other)
12
- number <=> other.number
13
- end
14
- end
@@ -1,58 +0,0 @@
1
- require 'test_helper'
2
-
3
- class BetweenTest < Test::Unit::TestCase
4
- context 'The number of versions between' do
5
- setup do
6
- @user = User.create(:name => 'Steve Richert')
7
- @version = @user.version
8
- @valid = [@version, 0, 1_000_000, :first, :last, 1.day.since(@user.created_at), @user.versions.first]
9
- @invalid = [nil, :bogus, 'bogus', Date.parse('0001-12-25')]
10
- end
11
-
12
- context 'the current version and the current version' do
13
- should 'equal one' do
14
- assert_equal 1, @user.versions.between(@version, @version).size
15
- end
16
- end
17
-
18
- context 'the current version and a valid value' do
19
- should 'not equal zero' do
20
- @valid.each do |valid|
21
- assert_not_equal 0, @user.versions.between(@version, valid).size
22
- assert_not_equal 0, @user.versions.between(valid, @version).size
23
- end
24
- end
25
- end
26
-
27
- context 'the current version and an invalid value' do
28
- should 'equal zero' do
29
- @invalid.each do |invalid|
30
- assert_equal 0, @user.versions.between(@version, invalid).size
31
- assert_equal 0, @user.versions.between(invalid, @version).size
32
- end
33
- end
34
- end
35
-
36
- context 'two invalid values' do
37
- should 'equal zero' do
38
- @invalid.each do |first|
39
- @invalid.each do |second|
40
- assert_equal 0, @user.versions.between(first, second).size
41
- assert_equal 0, @user.versions.between(second, first).size
42
- end
43
- end
44
- end
45
- end
46
-
47
- context 'a valid value and an invalid value' do
48
- should 'equal zero' do
49
- @valid.each do |valid|
50
- @invalid.each do |invalid|
51
- assert_equal 0, @user.versions.between(valid, invalid).size
52
- assert_equal 0, @user.versions.between(invalid, valid).size
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,35 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ComparableTest < Test::Unit::TestCase
4
- context 'A comparable version' do
5
- setup do
6
- @version_1 = Version.new(:number => 1)
7
- @version_2 = Version.new(:number => 2)
8
- end
9
-
10
- should 'equal itself' do
11
- assert @version_1 == @version_1
12
- assert @version_2 == @version_2
13
- end
14
-
15
- context 'with version number 1' do
16
- should 'not equal a version with version number 2' do
17
- assert @version_1 != @version_2
18
- end
19
-
20
- should 'be less than a version with version number 2' do
21
- assert @version_1 < @version_2
22
- end
23
- end
24
-
25
- context 'with version number 2' do
26
- should 'not equal a version with version number 1' do
27
- assert @version_2 != @version_1
28
- end
29
-
30
- should 'be greater than a version with version number 1' do
31
- assert @version_2 > @version_1
32
- end
33
- end
34
- end
35
- end
@@ -1,42 +0,0 @@
1
- require 'test_helper'
2
-
3
- class LatestChangesTest < Test::Unit::TestCase
4
- context "A created model's last changes" do
5
- setup do
6
- @user = User.create(:name => 'Steve Richert')
7
- end
8
-
9
- should 'be blank' do
10
- assert @user.latest_changes.blank?
11
- end
12
- end
13
-
14
- context "An updated model's last changes" do
15
- setup do
16
- @user = User.create(:name => 'Steve Richert')
17
- @previous_attributes = @user.attributes
18
- @user.update_attribute(:name, 'Steve Jobs')
19
- @current_attributes = @user.attributes
20
- end
21
-
22
- should 'values of two-element arrays with unique values' do
23
- @user.latest_changes.values.each do |value|
24
- assert_kind_of Array, value
25
- assert_equal 2, value.size
26
- assert_equal value, value.uniq
27
- end
28
- end
29
-
30
- should 'begin with the previous attribute values' do
31
- changes = @user.latest_changes.inject({}){|h,(k,v)| h.update(k => v.first) }
32
- previous = @previous_attributes.slice(*@user.latest_changes.keys)
33
- assert_equal previous, changes
34
- end
35
-
36
- should 'end with the current attribute values' do
37
- changes = @user.latest_changes.inject({}){|h,(k,v)| h.update(k => v.last) }
38
- current = @current_attributes.slice(*@user.latest_changes.keys)
39
- assert_equal current, changes
40
- end
41
- end
42
- end