has_versions 0.5.0 → 0.6.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 (34) hide show
  1. data/has_versions.gemspec +1 -1
  2. data/lib/has_versions/record/attributes.rb +28 -0
  3. data/lib/has_versions/record/configuration.rb +20 -0
  4. data/lib/has_versions/record/orm/cassandra_object.rb +21 -0
  5. data/lib/has_versions/record/reset.rb +23 -0
  6. data/lib/has_versions/record.rb +43 -0
  7. data/lib/has_versions/{version_methods → version}/diff.rb +1 -1
  8. data/lib/has_versions/{version_methods → version}/log.rb +1 -1
  9. data/lib/has_versions/version.rb +10 -0
  10. data/lib/has_versions.rb +13 -8
  11. data/test/has_versions/record/attributes_test.rb +41 -0
  12. data/test/has_versions/record/configuration_test.rb +24 -0
  13. data/test/has_versions/record/reset_test.rb +31 -0
  14. data/test/has_versions/record_test.rb +31 -0
  15. data/test/has_versions/version/diff_test.rb +70 -0
  16. data/test/has_versions/version/log_test.rb +34 -0
  17. data/test/has_versions/version_test.rb +10 -0
  18. data/test/support/test_model.rb +3 -2
  19. data/test/support/test_version.rb +3 -0
  20. metadata +24 -27
  21. data/features/has_versions.feature +0 -9
  22. data/features/step_definitions/has_versions_steps.rb +0 -0
  23. data/features/support/env.rb +0 -13
  24. data/lib/has_versions/attributes.rb +0 -18
  25. data/lib/has_versions/configuration.rb +0 -14
  26. data/lib/has_versions/orm/cassandra_object.rb +0 -19
  27. data/lib/has_versions/reset.rb +0 -21
  28. data/lib/has_versions/versioned.rb +0 -36
  29. data/test/has_versions/attributes_test.rb +0 -25
  30. data/test/has_versions/configuration_test.rb +0 -12
  31. data/test/has_versions/reset_test.rb +0 -29
  32. data/test/has_versions/version_methods/diff_test.rb +0 -68
  33. data/test/has_versions/version_methods/log_test.rb +0 -33
  34. data/test/has_versions/versioned_test.rb +0 -27
data/has_versions.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = "has_versions"
4
- s.version = '0.5.0'
4
+ s.version = '0.6.0'
5
5
 
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ["Grant Rodgers"]
@@ -0,0 +1,28 @@
1
+ module HasVersions
2
+ module Record
3
+ module Attributes
4
+ extend ActiveSupport::Concern
5
+
6
+ module ClassMethods
7
+ def versioned_attributes
8
+ versioning_configuration.attributes
9
+ end
10
+ end
11
+
12
+ def versioned_attributes
13
+ self.class.versioned_attributes.inject({}) do |memo, attribute|
14
+ memo[attribute] = versioning_encode_value(attribute, send(attribute))
15
+ memo
16
+ end
17
+ end
18
+
19
+ def associated_versions
20
+ if versioning_configuration.associated_versions_callback
21
+ instance_eval(&versioning_configuration.associated_versions_callback)
22
+ else
23
+ nil
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,20 @@
1
+ module HasVersions
2
+ module Record
3
+ class Configuration
4
+ attr_accessor :attributes
5
+ attr_accessor :associated_versions_callback
6
+
7
+ def initialize
8
+ self.attributes = []
9
+ end
10
+
11
+ def attribute(name)
12
+ attributes << name.to_s
13
+ end
14
+
15
+ def associated_versions(&block)
16
+ self.associated_versions_callback = block
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ module HasVersions
2
+ module Record
3
+ module Orm
4
+ module CassandraObject
5
+ def versioning_encode_value(name, value)
6
+ return if value.nil?
7
+ attribute_definitions[name.to_sym].coder.encode(value)
8
+ end
9
+
10
+ def versioning_decode_value(name, value)
11
+ return if value.nil?
12
+ attribute_definitions[name.to_sym].coder.decode(value)
13
+ end
14
+
15
+ def versioning_codable?(name)
16
+ attribute_definitions.has_key?(name.to_sym)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ module HasVersions
2
+ module Record
3
+ module Reset
4
+ extend ActiveSupport::Concern
5
+
6
+ module ClassMethods
7
+ def from_version(version)
8
+ new.tap do |object|
9
+ object.reset!(version)
10
+ end
11
+ end
12
+ end
13
+
14
+ def reset!(version)
15
+ self.class.versioned_attributes.each do |attribute|
16
+ value = versioning_decode_value(attribute, version.snapshot[attribute])
17
+ send("#{attribute}=", value)
18
+ end
19
+ self
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,43 @@
1
+ module HasVersions
2
+ module Record
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ class_attribute :version_class_name
7
+ self.version_class_name = '::Version'
8
+
9
+ include HasVersions::Record::Attributes
10
+ include HasVersions::Record::Reset
11
+ end
12
+
13
+ module ClassMethods
14
+ def version_model
15
+ @version_model ||= begin
16
+ version_class.class_eval do
17
+ end
18
+ version_class
19
+ end
20
+ end
21
+
22
+ def versioning_configuration
23
+ @versioning_configuration ||= HasVersions::Record::Configuration.new
24
+ end
25
+
26
+ def version_class
27
+ @version_class ||= version_class_name.constantize
28
+ end
29
+ end
30
+
31
+ def versioning_configuration
32
+ self.class.versioning_configuration
33
+ end
34
+
35
+ def to_version
36
+ self.class.version_model.new(
37
+ snapshot: versioned_attributes,
38
+ associated_versions: associated_versions,
39
+ target: self
40
+ )
41
+ end
42
+ end
43
+ end
@@ -1,5 +1,5 @@
1
1
  module HasVersions
2
- module VersionMethods
2
+ module Version
3
3
  module Diff
4
4
  def diff(original = parent)
5
5
  original_snapshot = original.nil? ? {} : original.decoded_snapshot
@@ -1,5 +1,5 @@
1
1
  module HasVersions
2
- module VersionMethods
2
+ module Version
3
3
  class LogCollection
4
4
  include Enumerable
5
5
 
@@ -0,0 +1,10 @@
1
+ module HasVersions
2
+ module Version
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ include HasVersions::Version::Diff
7
+ include HasVersions::Version::Log
8
+ end
9
+ end
10
+ end
data/lib/has_versions.rb CHANGED
@@ -3,18 +3,23 @@ require 'active_support/all'
3
3
  module HasVersions
4
4
  extend ActiveSupport::Autoload
5
5
 
6
- autoload :Attributes
7
- autoload :Configuration
8
- autoload :Reset
9
- autoload :Versioned
6
+ autoload :Record
7
+ autoload :Version
10
8
 
11
- module Orm
9
+ module Record
12
10
  extend ActiveSupport::Autoload
13
11
 
14
- autoload :CassandraObject
12
+ autoload :Attributes
13
+ autoload :Configuration
14
+ autoload :Reset
15
+
16
+ module Orm
17
+ extend ActiveSupport::Autoload
18
+ autoload :CassandraObject
19
+ end
15
20
  end
16
21
 
17
- module VersionMethods
22
+ module Version
18
23
  extend ActiveSupport::Autoload
19
24
 
20
25
  autoload :Diff
@@ -23,5 +28,5 @@ module HasVersions
23
28
  end
24
29
 
25
30
  ActiveSupport.on_load :cassandra_object do
26
- include HasVersions::Orm::CassandraObject
31
+ include HasVersions::Record::Orm::CassandraObject
27
32
  end
@@ -0,0 +1,41 @@
1
+ require 'helper'
2
+
3
+ module HasVersions
4
+ module Record
5
+ class AttributesTest < MiniTest::Unit::TestCase
6
+ class VersionedRecord < TestRecord
7
+ attr_accessor :name
8
+ attr_accessor :weight
9
+ attr_accessor :color
10
+
11
+ versioning_configuration.attribute :name
12
+ versioning_configuration.attribute :weight
13
+ end
14
+
15
+ def test_class_versioned_attributes
16
+ assert_equal ['name', 'weight'], VersionedRecord.versioned_attributes
17
+ end
18
+
19
+ def test_instance_versioned_attributes
20
+ record = VersionedRecord.new(name: 'joe', weight: 142.0, color: 'green')
21
+ expected = {'name' => 'joe', 'weight' => '142.0'}
22
+
23
+ assert_equal expected, record.versioned_attributes
24
+ end
25
+
26
+ def test_associated_versions_when_defined
27
+ model = Class.new(VersionedRecord) do
28
+ versioning_configuration.associated_versions do
29
+ "#{name} Hendrix"
30
+ end
31
+ end
32
+
33
+ assert_equal "Jimi Hendrix", model.new(name: "Jimi").associated_versions
34
+ end
35
+
36
+ def test_associated_versions_when_not_defined
37
+ assert_nil VersionedRecord.new.associated_versions
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,24 @@
1
+ require 'helper'
2
+
3
+ module HasVersions
4
+ module Record
5
+ class ConfigurationTest < MiniTest::Unit::TestCase
6
+ def test_attributes
7
+ configuration = HasVersions::Record::Configuration.new
8
+ configuration.attribute :foo
9
+ configuration.attribute :bar
10
+
11
+ assert_equal %w(foo bar), configuration.attributes
12
+ end
13
+
14
+ def test_associated_versions
15
+ configuration = HasVersions::Record::Configuration.new
16
+ configuration.associated_versions do
17
+ "poop"
18
+ end
19
+
20
+ assert_equal "poop", configuration.associated_versions_callback.call
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ require 'helper'
2
+
3
+ module HasVersions
4
+ module Record
5
+ class ResetTest < MiniTest::Unit::TestCase
6
+ class ResetRecord < TestRecord
7
+ attr_accessor :name
8
+ attr_accessor :color
9
+
10
+ versioning_configuration.attribute :name
11
+
12
+ def versioning_decode_value(name, value)
13
+ "hello, #{value}"
14
+ end
15
+ end
16
+
17
+ def test_from_version
18
+ end
19
+
20
+ def test_reset
21
+ reset_model = ResetRecord.new(name: "bob", color: "green")
22
+ version = ResetRecord.version_model.new(snapshot: {name: "joe", color: "blue"})
23
+
24
+ reset_model.reset!(version)
25
+
26
+ assert_equal "hello, joe", reset_model.name
27
+ assert_equal "green", reset_model.color
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ require 'helper'
2
+
3
+ module HasVersions
4
+ class RecordTest < MiniTest::Unit::TestCase
5
+ def test_version_class
6
+ assert_equal TestVersion, TestRecord.version_class
7
+ end
8
+
9
+ def test_versioning_configuration
10
+ assert_kind_of HasVersions::Record::Configuration, TestRecord.versioning_configuration
11
+ assert_equal TestRecord.versioning_configuration, TestRecord.new.versioning_configuration
12
+ end
13
+
14
+ def test_to_version
15
+ record = Class.new(TestRecord) do
16
+ attr_accessor :name
17
+ versioning_configuration.attribute :name
18
+ versioning_configuration.associated_versions do
19
+ "hola"
20
+ end
21
+ end.new(name: 'wee')
22
+
23
+ version = record.to_version
24
+
25
+ assert_kind_of TestVersion, version
26
+ assert_equal record, version.target
27
+ assert_equal "hola", version.associated_versions
28
+ assert_equal record.versioned_attributes, version.snapshot
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,70 @@
1
+ require 'helper'
2
+
3
+ module HasVersions
4
+ module Version
5
+ class DiffTest < MiniTest::Unit::TestCase
6
+ class DiffRecord < TestRecord
7
+ attr_accessor :name
8
+ attr_accessor :color
9
+ attr_accessor :weight
10
+
11
+ versioning_configuration.attribute :name
12
+ versioning_configuration.attribute :weight
13
+
14
+ def versioning_decode_value(name, value)
15
+ "decoded: #{value}"
16
+ end
17
+ end
18
+
19
+ def test_diff_with_parent
20
+ target = DiffRecord.new
21
+ parent = DiffRecord.version_model.new(target: target, snapshot: {name: 'foo', color: 'green', weight: '4.3'})
22
+ child = DiffRecord.version_model.new(target: target, parent: parent, snapshot: {name: 'bar', color: 'orange', weight: '4.3'})
23
+
24
+ diff = child.diff
25
+
26
+ assert_equal({'name' => ['decoded: foo', 'decoded: bar']}, diff)
27
+ end
28
+
29
+ def test_diff_with_parameter
30
+ target = DiffRecord.new
31
+ this_version = DiffRecord.version_model.new(target: target, snapshot: {name: 'foo', color: 'green', weight: '4.3'})
32
+ other_version = DiffRecord.version_model.new(target: target, snapshot: {name: 'bar', color: 'orange', weight: '4.3'})
33
+
34
+ diff = this_version.diff(other_version)
35
+
36
+ assert_equal({'name' => ['decoded: bar', 'decoded: foo']}, diff)
37
+ end
38
+
39
+ def test_diff_with_nil
40
+ target = DiffRecord.new
41
+ version = DiffRecord.version_model.new(target: target, snapshot: {name: 'bar', color: 'orange', weight: '4.3'})
42
+
43
+ diff = version.diff
44
+
45
+ assert_equal({'name' => [nil, 'decoded: bar'], 'weight' => [nil, 'decoded: 4.3']}, diff)
46
+ end
47
+
48
+ def test_modified_attributes
49
+ target = DiffRecord.new
50
+ version = DiffRecord.version_model.new(target: target, snapshot: {'name' => 'joe', 'weight' => '129'})
51
+
52
+ assert_equal version.snapshot.keys, version.modified_attributes
53
+ end
54
+
55
+ def test_different_attributes
56
+ target = DiffRecord.new(name: 'decoded: sam', color: 'decoded: green', weight: 'decoded: 129')
57
+ version = DiffRecord.version_model.new(target: target, snapshot: {'name' => 'joe', 'weight' => '129'})
58
+
59
+ assert_equal ['name'], version.different_attributes
60
+ end
61
+
62
+ def test_decoded_snapshot
63
+ target = DiffRecord.new
64
+ version = DiffRecord.version_model.new(target: target, snapshot: {name: 'foo', color: 'green', weight: '4.3'})
65
+
66
+ assert_equal({"name" => "decoded: foo", "weight" => "decoded: 4.3"}, version.decoded_snapshot)
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,34 @@
1
+ require 'helper'
2
+
3
+ module HasVersions
4
+ module Version
5
+ class LogTest < MiniTest::Unit::TestCase
6
+
7
+ def test_walk
8
+ grandparent = TestVersion.new
9
+ parent = TestVersion.new parent: grandparent
10
+ child = TestVersion.new parent: parent
11
+
12
+ ancestors = []
13
+ child.log.walk do |v|
14
+ ancestors << v
15
+ end
16
+
17
+ assert_equal [child, parent, grandparent], ancestors
18
+ end
19
+
20
+ def test_all
21
+ grandparent = TestVersion.new
22
+ parent = TestVersion.new parent: grandparent
23
+ child = TestVersion.new parent: parent
24
+
25
+ assert_equal [child, parent, grandparent], child.log.all
26
+ assert_equal [child, parent, grandparent], child.log.to_a
27
+ end
28
+
29
+ def test_is_enumerable
30
+ assert TestVersion.new.log.respond_to?(:collect)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,10 @@
1
+ require 'helper'
2
+
3
+ module HasVersions
4
+ class VersionTest < MiniTest::Unit::TestCase
5
+ def test_includes
6
+ assert TestVersion.include?(HasVersions::Version::Diff)
7
+ assert TestVersion.include?(HasVersions::Version::Log)
8
+ end
9
+ end
10
+ end
@@ -1,5 +1,6 @@
1
- class TestModel
2
- include HasVersions::Versioned
1
+ class TestRecord
2
+ include HasVersions::Record
3
+ self.version_class_name = 'TestVersion'
3
4
 
4
5
  def initialize(attributes = {})
5
6
  attributes.each do |key, value|
@@ -1,7 +1,10 @@
1
1
  class TestVersion
2
+ include HasVersions::Version
3
+
2
4
  attr_reader :snapshot
3
5
  attr_accessor :parent
4
6
  attr_accessor :target
7
+ attr_accessor :associated_versions
5
8
 
6
9
  def initialize(attributes = {})
7
10
  attributes.each do |key, value|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_versions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-22 00:00:00.000000000 Z
12
+ date: 2012-06-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -60,24 +60,23 @@ files:
60
60
  - LICENSE.txt
61
61
  - README.rdoc
62
62
  - Rakefile
63
- - features/has_versions.feature
64
- - features/step_definitions/has_versions_steps.rb
65
- - features/support/env.rb
66
63
  - has_versions.gemspec
67
64
  - lib/has_versions.rb
68
- - lib/has_versions/attributes.rb
69
- - lib/has_versions/configuration.rb
70
- - lib/has_versions/orm/cassandra_object.rb
71
- - lib/has_versions/reset.rb
72
- - lib/has_versions/version_methods/diff.rb
73
- - lib/has_versions/version_methods/log.rb
74
- - lib/has_versions/versioned.rb
75
- - test/has_versions/attributes_test.rb
76
- - test/has_versions/configuration_test.rb
77
- - test/has_versions/reset_test.rb
78
- - test/has_versions/version_methods/diff_test.rb
79
- - test/has_versions/version_methods/log_test.rb
80
- - test/has_versions/versioned_test.rb
65
+ - lib/has_versions/record.rb
66
+ - lib/has_versions/record/attributes.rb
67
+ - lib/has_versions/record/configuration.rb
68
+ - lib/has_versions/record/orm/cassandra_object.rb
69
+ - lib/has_versions/record/reset.rb
70
+ - lib/has_versions/version.rb
71
+ - lib/has_versions/version/diff.rb
72
+ - lib/has_versions/version/log.rb
73
+ - test/has_versions/record/attributes_test.rb
74
+ - test/has_versions/record/configuration_test.rb
75
+ - test/has_versions/record/reset_test.rb
76
+ - test/has_versions/record_test.rb
77
+ - test/has_versions/version/diff_test.rb
78
+ - test/has_versions/version/log_test.rb
79
+ - test/has_versions/version_test.rb
81
80
  - test/helper.rb
82
81
  - test/support/test_model.rb
83
82
  - test/support/test_version.rb
@@ -107,15 +106,13 @@ signing_key:
107
106
  specification_version: 3
108
107
  summary: ActiveModel versioning
109
108
  test_files:
110
- - features/has_versions.feature
111
- - features/step_definitions/has_versions_steps.rb
112
- - features/support/env.rb
113
- - test/has_versions/attributes_test.rb
114
- - test/has_versions/configuration_test.rb
115
- - test/has_versions/reset_test.rb
116
- - test/has_versions/version_methods/diff_test.rb
117
- - test/has_versions/version_methods/log_test.rb
118
- - test/has_versions/versioned_test.rb
109
+ - test/has_versions/record/attributes_test.rb
110
+ - test/has_versions/record/configuration_test.rb
111
+ - test/has_versions/record/reset_test.rb
112
+ - test/has_versions/record_test.rb
113
+ - test/has_versions/version/diff_test.rb
114
+ - test/has_versions/version/log_test.rb
115
+ - test/has_versions/version_test.rb
119
116
  - test/helper.rb
120
117
  - test/support/test_model.rb
121
118
  - test/support/test_version.rb
@@ -1,9 +0,0 @@
1
- Feature: something something
2
- In order to something something
3
- A user something something
4
- something something something
5
-
6
- Scenario: something something
7
- Given inspiration
8
- When I create a sweet new gem
9
- Then everyone should see how awesome I am
File without changes
@@ -1,13 +0,0 @@
1
- require 'bundler'
2
- begin
3
- Bundler.setup(:default, :development)
4
- rescue Bundler::BundlerError => e
5
- $stderr.puts e.message
6
- $stderr.puts "Run `bundle install` to install missing gems"
7
- exit e.status_code
8
- end
9
-
10
- $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
11
- require 'has_versions'
12
-
13
- require 'rspec/expectations'
@@ -1,18 +0,0 @@
1
- module HasVersions
2
- module Attributes
3
- extend ActiveSupport::Concern
4
-
5
- module ClassMethods
6
- def versioned_attributes
7
- versioning_configuration.attributes
8
- end
9
- end
10
-
11
- def versioned_attributes
12
- self.class.versioned_attributes.inject({}) do |memo, attribute|
13
- memo[attribute] = versioning_encode_value(attribute, send(attribute))
14
- memo
15
- end
16
- end
17
- end
18
- end
@@ -1,14 +0,0 @@
1
- module HasVersions
2
- class Configuration
3
- attr_accessor :attributes
4
-
5
- def initialize(&block)
6
- self.attributes = []
7
- instance_eval(&block) if block_given?
8
- end
9
-
10
- def attribute(name)
11
- attributes << name.to_s
12
- end
13
- end
14
- end
@@ -1,19 +0,0 @@
1
- module HasVersions
2
- module Orm
3
- module CassandraObject
4
- def versioning_encode_value(name, value)
5
- return if value.nil?
6
- attribute_definitions[name.to_sym].coder.encode(value)
7
- end
8
-
9
- def versioning_decode_value(name, value)
10
- return if value.nil?
11
- attribute_definitions[name.to_sym].coder.decode(value)
12
- end
13
-
14
- def versioning_codable?(name)
15
- attribute_definitions.has_key?(name.to_sym)
16
- end
17
- end
18
- end
19
- end
@@ -1,21 +0,0 @@
1
- module HasVersions
2
- module Reset
3
- extend ActiveSupport::Concern
4
-
5
- module ClassMethods
6
- def from_version(version)
7
- new.tap do |object|
8
- object.reset!(version)
9
- end
10
- end
11
- end
12
-
13
- def reset!(version)
14
- self.class.versioned_attributes.each do |attribute|
15
- value = versioning_decode_value(attribute, version.snapshot[attribute])
16
- send("#{attribute}=", value)
17
- end
18
- self
19
- end
20
- end
21
- end
@@ -1,36 +0,0 @@
1
- module HasVersions
2
- module Versioned
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- class_attribute :versioning_configuration
7
- class_attribute :version_class
8
-
9
- include HasVersions::Attributes
10
- include HasVersions::Reset
11
- end
12
-
13
- module ClassMethods
14
- def has_versions(version_class, &block)
15
- self.versioning_configuration = HasVersions::Configuration.new(&block)
16
- self.version_class = version_class
17
- version_class.class_eval do
18
- include HasVersions::VersionMethods::Diff
19
- include HasVersions::VersionMethods::Log
20
- end
21
- end
22
-
23
- def versioned_attribute(name)
24
- self.versioning_configuration ||= HasVersions::Configuration.new
25
- versioning_configuration.attribute(name)
26
- end
27
- end
28
-
29
- def to_version
30
- version = version_class.new
31
- version.snapshot = versioned_attributes
32
- version.target = self
33
- version
34
- end
35
- end
36
- end
@@ -1,25 +0,0 @@
1
- require 'helper'
2
-
3
- class HasVersions::AttributesTest < MiniTest::Unit::TestCase
4
- class VersionedModel < TestModel
5
- attr_accessor :name
6
- attr_accessor :weight
7
- attr_accessor :color
8
-
9
- has_versions(Class.new) do
10
- attribute :name
11
- attribute :weight
12
- end
13
- end
14
-
15
- def test_class_versioned_attributes
16
- assert_equal ['name', 'weight'], VersionedModel.versioned_attributes
17
- end
18
-
19
- def test_instance_versioned_attributes
20
- record = VersionedModel.new(name: 'joe', weight: 142.0, color: 'green')
21
- expected = {'name' => 'joe', 'weight' => '142.0'}
22
-
23
- assert_equal expected, record.versioned_attributes
24
- end
25
- end
@@ -1,12 +0,0 @@
1
- require 'helper'
2
-
3
- class HasVersions::ConfigurationTest < MiniTest::Unit::TestCase
4
- def test_configuration
5
- configuration = HasVersions::Configuration.new do
6
- attribute :foo
7
- attribute :bar
8
- end
9
-
10
- assert_equal %w(foo bar), configuration.attributes
11
- end
12
- end
@@ -1,29 +0,0 @@
1
- require 'helper'
2
-
3
- class HasVersions::ResetTest < MiniTest::Unit::TestCase
4
- class ResetModel < TestModel
5
- attr_accessor :name
6
- attr_accessor :color
7
-
8
- has_versions(TestVersion) do
9
- attribute :name
10
- end
11
-
12
- def versioning_decode_value(name, value)
13
- "hello, #{value}"
14
- end
15
- end
16
-
17
- def test_from_version
18
- end
19
-
20
- def test_reset
21
- reset_model = ResetModel.new(name: "bob", color: "green")
22
- version = TestVersion.new(snapshot: {name: "joe", color: "blue"})
23
-
24
- reset_model.reset!(version)
25
-
26
- assert_equal "hello, joe", reset_model.name
27
- assert_equal "green", reset_model.color
28
- end
29
- end
@@ -1,68 +0,0 @@
1
- require 'helper'
2
-
3
- class HasVersions::VersionMethods::DiffTest < MiniTest::Unit::TestCase
4
- class DiffModel < TestModel
5
- attr_accessor :name
6
- attr_accessor :color
7
- attr_accessor :weight
8
-
9
- has_versions(TestVersion) do
10
- attribute :name
11
- attribute :weight
12
- end
13
-
14
- def versioning_decode_value(name, value)
15
- "decoded: #{value}"
16
- end
17
- end
18
-
19
- def test_diff_with_parent
20
- target = DiffModel.new
21
- parent = TestVersion.new(target: target, snapshot: {name: 'foo', color: 'green', weight: '4.3'})
22
- child = TestVersion.new(target: target, parent: parent, snapshot: {name: 'bar', color: 'orange', weight: '4.3'})
23
-
24
- diff = child.diff
25
-
26
- assert_equal({'name' => ['decoded: foo', 'decoded: bar']}, diff)
27
- end
28
-
29
- def test_diff_with_parameter
30
- target = DiffModel.new
31
- this_version = TestVersion.new(target: target, snapshot: {name: 'foo', color: 'green', weight: '4.3'})
32
- other_version = TestVersion.new(target: target, snapshot: {name: 'bar', color: 'orange', weight: '4.3'})
33
-
34
- diff = this_version.diff(other_version)
35
-
36
- assert_equal({'name' => ['decoded: bar', 'decoded: foo']}, diff)
37
- end
38
-
39
- def test_diff_with_nil
40
- target = DiffModel.new
41
- version = TestVersion.new(target: target, snapshot: {name: 'bar', color: 'orange', weight: '4.3'})
42
-
43
- diff = version.diff
44
-
45
- assert_equal({'name' => [nil, 'decoded: bar'], 'weight' => [nil, 'decoded: 4.3']}, diff)
46
- end
47
-
48
- def test_modified_attributes
49
- target = DiffModel.new
50
- version = TestVersion.new(target: target, snapshot: {'name' => 'joe', 'weight' => '129'})
51
-
52
- assert_equal version.snapshot.keys, version.modified_attributes
53
- end
54
-
55
- def test_different_attributes
56
- target = DiffModel.new(name: 'decoded: sam', color: 'decoded: green', weight: 'decoded: 129')
57
- version = TestVersion.new(target: target, snapshot: {'name' => 'joe', 'weight' => '129'})
58
-
59
- assert_equal ['name'], version.different_attributes
60
- end
61
-
62
- def test_decoded_snapshot
63
- target = DiffModel.new
64
- version = TestVersion.new(target: target, snapshot: {name: 'foo', color: 'green', weight: '4.3'})
65
-
66
- assert_equal({"name" => "decoded: foo", "weight" => "decoded: 4.3"}, version.decoded_snapshot)
67
- end
68
- end
@@ -1,33 +0,0 @@
1
- require 'helper'
2
-
3
- class HasVersions::VersionMethods::LogTest < MiniTest::Unit::TestCase
4
- class LogVersion < TestVersion
5
- include HasVersions::VersionMethods::Log
6
- end
7
-
8
- def test_walk
9
- grandparent = LogVersion.new
10
- parent = LogVersion.new parent: grandparent
11
- child = LogVersion.new parent: parent
12
-
13
- ancestors = []
14
- child.log.walk do |v|
15
- ancestors << v
16
- end
17
-
18
- assert_equal [child, parent, grandparent], ancestors
19
- end
20
-
21
- def test_all
22
- grandparent = LogVersion.new
23
- parent = LogVersion.new parent: grandparent
24
- child = LogVersion.new parent: parent
25
-
26
- assert_equal [child, parent, grandparent], child.log.all
27
- assert_equal [child, parent, grandparent], child.log.to_a
28
- end
29
-
30
- def test_is_enumerable
31
- assert LogVersion.new.log.respond_to?(:collect)
32
- end
33
- end
@@ -1,27 +0,0 @@
1
- require 'helper'
2
-
3
- class HasVersions::VersionedTest < MiniTest::Unit::TestCase
4
- def test_versioned_attribute
5
- versioned_model = Class.new(TestModel) do
6
- versioned_attribute 'hello'
7
- end
8
-
9
- assert_equal ['hello'], versioned_model.versioned_attributes
10
- end
11
-
12
- def test_to_version
13
- record = Class.new(TestModel) do
14
- attr_accessor :name
15
-
16
- has_versions(TestVersion) do
17
- attribute :name
18
- end
19
- end.new(name: 'wee')
20
-
21
- version = record.to_version
22
-
23
- assert_kind_of TestVersion, version
24
- assert_equal record, version.target
25
- assert_equal record.versioned_attributes, version.snapshot
26
- end
27
- end