virtus-dirty 0.0.1

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'virtus', '~> 0.0.1'
4
+
5
+ group :development do
6
+ gem "jeweler"
7
+ gem "rspec"
8
+ gem "simplecov", :platforms => [ :mri_19 ]
9
+ end
10
+
11
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Jingwen Owen Ou
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,42 @@
1
+ = Virtus - Dirty Tracking
2
+
3
+ Support for dirty tracking of virtus attributes.
4
+
5
+ == Usage
6
+
7
+ class Post
8
+ include Virtus
9
+ include Virtus::DirtyTracking
10
+
11
+ attribute :title, String
12
+ attribute, :content, String
13
+ attribute, :meta, Hash
14
+ end
15
+
16
+ post = Post.new(:title => 'Foo', :meta => { :tags => ['red', 'green'] })
17
+
18
+ post.title = 'Bar'
19
+
20
+ post.dirty? # => true
21
+
22
+ post.attribute_dirty?(:title) # => true
23
+
24
+ post.meta[:tags] << 'blue'
25
+
26
+ post.attribute_dirty?(:meta) # => true
27
+
28
+ post.dirty_attributes # => {:title => 'Bar', :meta=>{:tags=>["red", "green", "blue"]}}
29
+
30
+ == Note on Patches/Pull Requests
31
+
32
+ * Fork the project.
33
+ * Make your feature addition or bug fix.
34
+ * Add tests for it. This is important so I don't break it in a
35
+ future version unintentionally.
36
+ * Commit, do not mess with rakefile, version, or history.
37
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
38
+ * Send me a pull request. Bonus points for topic branches.
39
+
40
+ == Copyright
41
+
42
+ Copyright (c) 2011 Jingwen Owen Ou. See LICENSE for details.
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'jeweler'
4
+ require 'rspec/core/rake_task'
5
+
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "virtus-dirty"
8
+ gem.platform = Gem::Platform::RUBY
9
+ gem.authors = ["Jingwen Owen Ou"]
10
+ gem.email = ["jingweno@gmail.com"]
11
+ gem.homepage = "https://github.com/jingweno/virtus-dirty"
12
+ gem.summary = %q{Add dirty tracking of attributes to your ruby objects}
13
+ gem.description = gem.summary
14
+
15
+ gem.files = `git ls-files`.split("\n")
16
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_runtime_dependency 'virtus'
21
+ end
22
+
23
+ Jeweler::GemcutterTasks.new
24
+
25
+ desc "Run specs"
26
+ RSpec::Core::RakeTask.new
27
+
28
+ desc 'Default: run specs.'
29
+ task :default => :spec
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,124 @@
1
+ require 'virtus'
2
+ require 'virtus/dirty_tracking/session'
3
+
4
+ module Virtus
5
+ # == Dirty Tracking
6
+ #
7
+ # Dirty Tracking is an optional module that you include only if you need it.
8
+ module DirtyTracking
9
+ # Extends a class with DirtyTracking::Attribute module
10
+ #
11
+ # @param [Class] base
12
+ #
13
+ # @api private
14
+ def self.included(base)
15
+ base.extend(DirtyTracking::Attribute)
16
+ end
17
+
18
+ # Returns if an object is dirty
19
+ #
20
+ # @return [TrueClass, FalseClass]
21
+ #
22
+ # @api public
23
+ def dirty?
24
+ dirty_session.dirty?
25
+ end
26
+
27
+ # Returns if an attribute with the given name is dirty.
28
+ #
29
+ # @param [Symbol] name
30
+ #
31
+ # @return [TrueClass, FalseClass]
32
+ #
33
+ # @api public
34
+ def attribute_dirty?(name)
35
+ dirty_session.dirty?(name)
36
+ end
37
+
38
+ # Explicitly sets an attribute as dirty.
39
+ #
40
+ # @param [Symbol] name
41
+ # the name of an attribute
42
+ #
43
+ # @param [Object] value
44
+ # a value of an attribute
45
+ #
46
+ # @api public
47
+ def attribute_dirty!(name, value)
48
+ dirty_session.dirty!(name, value)
49
+ end
50
+
51
+ # Returns all dirty attributes
52
+ #
53
+ # @return [Hash]
54
+ # a hash indexed with attribute names
55
+ #
56
+ # @api public
57
+ def dirty_attributes
58
+ dirty_session.dirty_attributes
59
+ end
60
+
61
+ # Returns original attributes
62
+ #
63
+ # @return [Hash]
64
+ # a hash indexed with attribute names
65
+ #
66
+ # @api public
67
+ def original_attributes
68
+ dirty_session.original_attributes
69
+ end
70
+
71
+ # Returns the current dirty tracking session
72
+ #
73
+ # @return [Virtus::DirtyTracking::Session]
74
+ #
75
+ # @api private
76
+ def dirty_session
77
+ @_dirty_session ||= Session.new(self)
78
+ end
79
+
80
+ module Attribute
81
+ # Creates an attribute writer with dirty tracking
82
+ #
83
+ # @see Virtus::Attribute.attribute
84
+ #
85
+ # @return [Virtus::Attribute::Object]
86
+ #
87
+ # @api public
88
+ def attribute(name, type, options = {})
89
+ _create_writer_with_dirty_tracking(name, attribute = super)
90
+ attribute
91
+ end
92
+
93
+ private
94
+
95
+ # Creates an attribute writer method with dirty tracking
96
+ #
97
+ # @param [Symbol] name
98
+ # the name of an attribute
99
+ #
100
+ # @param [Virtus::Attribute::Object] attribute
101
+ # an attribute instance
102
+ #
103
+ # @api private
104
+ def _create_writer_with_dirty_tracking(name, attribute)
105
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
106
+ def #{name}=(value)
107
+ prev_value = #{name}
108
+ new_value = super
109
+
110
+ if prev_value != new_value
111
+ unless original_attributes.key?(:#{name})
112
+ original_attributes[:#{name}] = prev_value
113
+ end
114
+
115
+ attribute_dirty!(:#{name}, new_value)
116
+ end
117
+
118
+ new_value
119
+ end
120
+ RUBY
121
+ end
122
+ end # Attribute
123
+ end # DirtyTracking
124
+ end # Virtus
@@ -0,0 +1,58 @@
1
+ module Virtus
2
+ module DirtyTracking
3
+ class Session
4
+ attr_reader :subject
5
+
6
+ # @api semipublic
7
+ def initialize(subject)
8
+ @subject = subject
9
+ end
10
+
11
+ # Returns original attributes of the subject
12
+ #
13
+ # @return [Hash]
14
+ # a hash of attributes indexed by attribute names
15
+ #
16
+ # @api semipublic
17
+ def original_attributes
18
+ @_original_attributes ||= subject.attributes.dup
19
+ end
20
+
21
+ # Returns dirty attributes of the subject
22
+ #
23
+ # @return [Hash]
24
+ # a hash of attributes indexed by attribute names
25
+ #
26
+ # @api semipublic
27
+ def dirty_attributes
28
+ @_dirty_attributes ||= {}
29
+ end
30
+
31
+ # Sets an attribute as dirty
32
+ #
33
+ # @param [Symbol] name
34
+ # the name of an attribute
35
+ #
36
+ # @param [Object] value
37
+ # the value of an attribute
38
+ #
39
+ # @api semipublic
40
+ def dirty!(name, value)
41
+ dirty_attributes[name] = value
42
+ end
43
+
44
+ # Returns if an object is dirty or if an attribute with the given name is
45
+ # dirty.
46
+ #
47
+ # @param [Symbol] name
48
+ # the name of an attribute
49
+ #
50
+ # @return [TrueClass, FalseClass]
51
+ #
52
+ # @api semipublic
53
+ def dirty?(name = nil)
54
+ name ? dirty_attributes.key?(name) : dirty_attributes.any?
55
+ end
56
+ end # Session
57
+ end # DirtyTracking
58
+ end # Virtus
@@ -0,0 +1,5 @@
1
+ module Virtus
2
+ module DirtyTracking
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Array do
4
+ it_should_behave_like 'Dirty Trackable Attribute' do
5
+ let(:attribute_name) { :colors }
6
+ let(:attribute_value) { [ 'red', 'green', 'blue' ] }
7
+ let(:attribute_value_other) { [ 'orange', 'yellow', 'gray' ] }
8
+ end
9
+
10
+ describe 'dirty tracking' do
11
+ let(:model) do
12
+ Class.new do
13
+ include Virtus
14
+ include Virtus::DirtyTracking
15
+
16
+ attribute :colors, Array
17
+ end
18
+ end
19
+
20
+ let(:object) do
21
+ model.new(:colors => [])
22
+ end
23
+
24
+ context "when value is set implicitly" do
25
+ before do
26
+ object.colors << 'gray'
27
+ end
28
+
29
+ it "marks the attribute as dirty" do
30
+ object.attribute_dirty?(:colors).should be(true)
31
+ end
32
+
33
+ it "sets dirty attributes hash" do
34
+ object.dirty_attributes.should == { :colors => ['gray'] }
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Boolean do
4
+ it_should_behave_like "Dirty Trackable Attribute" do
5
+ let(:attribute_name) { :is_admin }
6
+ let(:attribute_value) { true }
7
+ let(:attribute_value_other) { '1' }
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Date do
4
+ it_should_behave_like 'Dirty Trackable Attribute' do
5
+ let(:attribute_name) { :created_on }
6
+ let(:attribute_value) { Date.today }
7
+ let(:attribute_value_other) { (Date.today+1).to_s }
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::DateTime do
4
+ it_should_behave_like 'Dirty Trackable Attribute' do
5
+ let(:attribute_name) { :created_at }
6
+ let(:attribute_value) { DateTime.now }
7
+ let(:attribute_value_other) { DateTime.now.to_s }
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Decimal do
4
+ it_should_behave_like 'Dirty Trackable Attribute' do
5
+ let(:attribute_name) { :price }
6
+ let(:attribute_value) { BigDecimal("12.3456789") }
7
+ let(:attribute_value_other) { "12.3456789" }
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Float do
4
+ it_should_behave_like 'Dirty Trackable Attribute' do
5
+ let(:attribute_name) { :score }
6
+ let(:attribute_value) { 12.34 }
7
+ let(:attribute_value_other) { "12.34" }
8
+ end
9
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Hash do
4
+ it_should_behave_like 'Dirty Trackable Attribute' do
5
+ let(:attribute_name) { :settings }
6
+ let(:attribute_value) { Hash[:one => 1] }
7
+ let(:attribute_value_other) { Hash[:two => 2] }
8
+ end
9
+
10
+ describe 'dirty tracking' do
11
+ let(:model) do
12
+ Class.new do
13
+ include Virtus
14
+ include Virtus::DirtyTracking
15
+
16
+ attribute :settings, Hash
17
+ end
18
+ end
19
+
20
+ let(:object) do
21
+ model.new(:settings => {})
22
+ end
23
+
24
+ context "when value is set implicitly" do
25
+ before do
26
+ object.settings[:one] = '1'
27
+ end
28
+
29
+ it "marks the attribute as dirty" do
30
+ object.attribute_dirty?(:settings).should be(true)
31
+ end
32
+
33
+ it "sets dirty attributes hash" do
34
+ object.dirty_attributes.should == { :settings => { :one => '1' } }
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Integer do
4
+ it_should_behave_like 'Dirty Trackable Attribute' do
5
+ let(:attribute_name) { :age }
6
+ let(:attribute_value) { 28 }
7
+ let(:attribute_value_other) { "28" }
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::String do
4
+ it_should_behave_like 'Dirty Trackable Attribute' do
5
+ let(:attribute_name) { :email }
6
+ let(:attribute_value) { 'red john' }
7
+ let(:attribute_value_other) { :'red john' }
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Time do
4
+ it_should_behave_like 'Dirty Trackable Attribute' do
5
+ let(:attribute_name) { :birthday }
6
+ let(:attribute_value) { Time.now }
7
+ let(:attribute_value_other) { Time.now.to_s }
8
+ end
9
+ end
@@ -0,0 +1,72 @@
1
+ shared_examples_for "Dirty Trackable Attribute" do
2
+ let(:model) do
3
+ model = Class.new do
4
+ include Virtus
5
+ include Virtus::DirtyTracking
6
+ end
7
+ model.attribute attribute_name, described_class
8
+ model
9
+ end
10
+
11
+ context "when object is clean" do
12
+ let(:object) do
13
+ model.new
14
+ end
15
+
16
+ it "doesn't mark it as dirty" do
17
+ object.dirty?.should be(false)
18
+ end
19
+ end
20
+
21
+ context "when value is set on a new object" do
22
+ let(:object) do
23
+ model.new
24
+ end
25
+
26
+ before do
27
+ object[attribute_name] = attribute_value
28
+ end
29
+
30
+ it "marks the object as dirty" do
31
+ object.dirty?.should be(true)
32
+ end
33
+
34
+ it "marks the attribute as dirty" do
35
+ object.attribute_dirty?(attribute_name).should be(true)
36
+ end
37
+
38
+ it "sets new value in dirty_attributes hash" do
39
+ object.dirty_attributes[attribute_name].should == attribute_value
40
+ end
41
+ end
42
+
43
+ context "when other value is set on a new object with attribute already set" do
44
+ let(:object) do
45
+ model.new(attribute_name => attribute_value)
46
+ end
47
+
48
+ let(:new_value) do
49
+ model.attributes[attribute_name].coerce(attribute_value_other)
50
+ end
51
+
52
+ before do
53
+ object[attribute_name] = new_value
54
+ end
55
+
56
+ it "marks the object as dirty" do
57
+ object.dirty?.should be(true)
58
+ end
59
+
60
+ it "marks the attribute as dirty" do
61
+ object.attribute_dirty?(attribute_name).should be(true)
62
+ end
63
+
64
+ it "sets new value in dirty_attributes hash" do
65
+ object.dirty_attributes[attribute_name].should == new_value
66
+ end
67
+
68
+ it "sets original value" do
69
+ object.original_attributes[attribute_name].should == attribute_value
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,6 @@
1
+ unless defined? Virtus::DirtyTracking
2
+ $:.unshift File.expand_path('../../lib', __FILE__)
3
+ require 'virtus/dirty_tracking'
4
+ end
5
+
6
+ Dir[File.expand_path("**/shared/**/*.rb", File.dirname(__FILE__))].each {|f| require f}
@@ -0,0 +1,125 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "virtus-dirty"
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Jingwen Owen Ou"]
12
+ s.date = "2012-01-10"
13
+ s.description = "Add dirty tracking of attributes to your ruby objects"
14
+ s.email = ["jingweno@gmail.com"]
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "LICENSE",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "lib/virtus/dirty_tracking.rb",
28
+ "lib/virtus/dirty_tracking/session.rb",
29
+ "lib/virtus/dirty_tracking/version.rb",
30
+ "spec/integration/attributes/array_spec.rb",
31
+ "spec/integration/attributes/boolean_spec.rb",
32
+ "spec/integration/attributes/date_spec.rb",
33
+ "spec/integration/attributes/date_time_spec.rb",
34
+ "spec/integration/attributes/decimal_spec.rb",
35
+ "spec/integration/attributes/float_spec.rb",
36
+ "spec/integration/attributes/hash_spec.rb",
37
+ "spec/integration/attributes/integer_spec.rb",
38
+ "spec/integration/attributes/string_spec.rb",
39
+ "spec/integration/attributes/time_spec.rb",
40
+ "spec/integration/shared/dirty_trackable_attribute.rb",
41
+ "spec/spec_helper.rb",
42
+ "virtus-dirty.gemspec"
43
+ ]
44
+ s.homepage = "https://github.com/jingweno/virtus-dirty"
45
+ s.require_paths = ["lib"]
46
+ s.rubygems_version = "1.8.10"
47
+ s.summary = "Add dirty tracking of attributes to your ruby objects"
48
+ s.test_files = ["spec/integration/attributes/array_spec.rb", "spec/integration/attributes/boolean_spec.rb", "spec/integration/attributes/date_spec.rb", "spec/integration/attributes/date_time_spec.rb", "spec/integration/attributes/decimal_spec.rb", "spec/integration/attributes/float_spec.rb", "spec/integration/attributes/hash_spec.rb", "spec/integration/attributes/integer_spec.rb", "spec/integration/attributes/string_spec.rb", "spec/integration/attributes/time_spec.rb", "spec/integration/shared/dirty_trackable_attribute.rb", "spec/spec_helper.rb"]
49
+
50
+ if s.respond_to? :specification_version then
51
+ s.specification_version = 3
52
+
53
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
54
+ s.add_runtime_dependency(%q<virtus>, ["~> 0.0.1"])
55
+ s.add_runtime_dependency(%q<virtus-dirty>, [">= 0"])
56
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
57
+ s.add_development_dependency(%q<rspec>, [">= 0"])
58
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
59
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
60
+ s.add_development_dependency(%q<rspec>, [">= 0"])
61
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
62
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
63
+ s.add_development_dependency(%q<rspec>, [">= 0"])
64
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
65
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
66
+ s.add_development_dependency(%q<rspec>, [">= 0"])
67
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
68
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
69
+ s.add_development_dependency(%q<rspec>, [">= 0"])
70
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
71
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
72
+ s.add_development_dependency(%q<rspec>, [">= 0"])
73
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
74
+ s.add_development_dependency(%q<rspec>, [">= 0"])
75
+ s.add_runtime_dependency(%q<virtus>, [">= 0"])
76
+ else
77
+ s.add_dependency(%q<virtus>, ["~> 0.0.1"])
78
+ s.add_dependency(%q<virtus-dirty>, [">= 0"])
79
+ s.add_dependency(%q<jeweler>, [">= 0"])
80
+ s.add_dependency(%q<rspec>, [">= 0"])
81
+ s.add_dependency(%q<simplecov>, [">= 0"])
82
+ s.add_dependency(%q<jeweler>, [">= 0"])
83
+ s.add_dependency(%q<rspec>, [">= 0"])
84
+ s.add_dependency(%q<simplecov>, [">= 0"])
85
+ s.add_dependency(%q<jeweler>, [">= 0"])
86
+ s.add_dependency(%q<rspec>, [">= 0"])
87
+ s.add_dependency(%q<simplecov>, [">= 0"])
88
+ s.add_dependency(%q<jeweler>, [">= 0"])
89
+ s.add_dependency(%q<rspec>, [">= 0"])
90
+ s.add_dependency(%q<simplecov>, [">= 0"])
91
+ s.add_dependency(%q<jeweler>, [">= 0"])
92
+ s.add_dependency(%q<rspec>, [">= 0"])
93
+ s.add_dependency(%q<simplecov>, [">= 0"])
94
+ s.add_dependency(%q<jeweler>, [">= 0"])
95
+ s.add_dependency(%q<rspec>, [">= 0"])
96
+ s.add_dependency(%q<simplecov>, [">= 0"])
97
+ s.add_dependency(%q<rspec>, [">= 0"])
98
+ s.add_dependency(%q<virtus>, [">= 0"])
99
+ end
100
+ else
101
+ s.add_dependency(%q<virtus>, ["~> 0.0.1"])
102
+ s.add_dependency(%q<virtus-dirty>, [">= 0"])
103
+ s.add_dependency(%q<jeweler>, [">= 0"])
104
+ s.add_dependency(%q<rspec>, [">= 0"])
105
+ s.add_dependency(%q<simplecov>, [">= 0"])
106
+ s.add_dependency(%q<jeweler>, [">= 0"])
107
+ s.add_dependency(%q<rspec>, [">= 0"])
108
+ s.add_dependency(%q<simplecov>, [">= 0"])
109
+ s.add_dependency(%q<jeweler>, [">= 0"])
110
+ s.add_dependency(%q<rspec>, [">= 0"])
111
+ s.add_dependency(%q<simplecov>, [">= 0"])
112
+ s.add_dependency(%q<jeweler>, [">= 0"])
113
+ s.add_dependency(%q<rspec>, [">= 0"])
114
+ s.add_dependency(%q<simplecov>, [">= 0"])
115
+ s.add_dependency(%q<jeweler>, [">= 0"])
116
+ s.add_dependency(%q<rspec>, [">= 0"])
117
+ s.add_dependency(%q<simplecov>, [">= 0"])
118
+ s.add_dependency(%q<jeweler>, [">= 0"])
119
+ s.add_dependency(%q<rspec>, [">= 0"])
120
+ s.add_dependency(%q<simplecov>, [">= 0"])
121
+ s.add_dependency(%q<rspec>, [">= 0"])
122
+ s.add_dependency(%q<virtus>, [">= 0"])
123
+ end
124
+ end
125
+
metadata ADDED
@@ -0,0 +1,327 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: virtus-dirty
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jingwen Owen Ou
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: virtus
16
+ requirement: &70235571853940 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.0.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70235571853940
25
+ - !ruby/object:Gem::Dependency
26
+ name: virtus-dirty
27
+ requirement: &70235571853440 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70235571853440
36
+ - !ruby/object:Gem::Dependency
37
+ name: jeweler
38
+ requirement: &70235571852780 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70235571852780
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: &70235571666640 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70235571666640
58
+ - !ruby/object:Gem::Dependency
59
+ name: simplecov
60
+ requirement: &70235571666160 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70235571666160
69
+ - !ruby/object:Gem::Dependency
70
+ name: jeweler
71
+ requirement: &70235571665660 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70235571665660
80
+ - !ruby/object:Gem::Dependency
81
+ name: rspec
82
+ requirement: &70235571664940 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70235571664940
91
+ - !ruby/object:Gem::Dependency
92
+ name: simplecov
93
+ requirement: &70235571664180 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70235571664180
102
+ - !ruby/object:Gem::Dependency
103
+ name: jeweler
104
+ requirement: &70235571663520 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *70235571663520
113
+ - !ruby/object:Gem::Dependency
114
+ name: rspec
115
+ requirement: &70235571662680 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *70235571662680
124
+ - !ruby/object:Gem::Dependency
125
+ name: simplecov
126
+ requirement: &70235571662160 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *70235571662160
135
+ - !ruby/object:Gem::Dependency
136
+ name: jeweler
137
+ requirement: &70235571661420 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: *70235571661420
146
+ - !ruby/object:Gem::Dependency
147
+ name: rspec
148
+ requirement: &70235571660600 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: *70235571660600
157
+ - !ruby/object:Gem::Dependency
158
+ name: simplecov
159
+ requirement: &70235571660080 !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ type: :development
166
+ prerelease: false
167
+ version_requirements: *70235571660080
168
+ - !ruby/object:Gem::Dependency
169
+ name: jeweler
170
+ requirement: &70235571659580 !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: *70235571659580
179
+ - !ruby/object:Gem::Dependency
180
+ name: rspec
181
+ requirement: &70235571658940 !ruby/object:Gem::Requirement
182
+ none: false
183
+ requirements:
184
+ - - ! '>='
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: *70235571658940
190
+ - !ruby/object:Gem::Dependency
191
+ name: simplecov
192
+ requirement: &70235571693260 !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: *70235571693260
201
+ - !ruby/object:Gem::Dependency
202
+ name: jeweler
203
+ requirement: &70235571692420 !ruby/object:Gem::Requirement
204
+ none: false
205
+ requirements:
206
+ - - ! '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ type: :development
210
+ prerelease: false
211
+ version_requirements: *70235571692420
212
+ - !ruby/object:Gem::Dependency
213
+ name: rspec
214
+ requirement: &70235571691680 !ruby/object:Gem::Requirement
215
+ none: false
216
+ requirements:
217
+ - - ! '>='
218
+ - !ruby/object:Gem::Version
219
+ version: '0'
220
+ type: :development
221
+ prerelease: false
222
+ version_requirements: *70235571691680
223
+ - !ruby/object:Gem::Dependency
224
+ name: simplecov
225
+ requirement: &70235571690420 !ruby/object:Gem::Requirement
226
+ none: false
227
+ requirements:
228
+ - - ! '>='
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
231
+ type: :development
232
+ prerelease: false
233
+ version_requirements: *70235571690420
234
+ - !ruby/object:Gem::Dependency
235
+ name: rspec
236
+ requirement: &70235571689660 !ruby/object:Gem::Requirement
237
+ none: false
238
+ requirements:
239
+ - - ! '>='
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ type: :development
243
+ prerelease: false
244
+ version_requirements: *70235571689660
245
+ - !ruby/object:Gem::Dependency
246
+ name: virtus
247
+ requirement: &70235571688900 !ruby/object:Gem::Requirement
248
+ none: false
249
+ requirements:
250
+ - - ! '>='
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ type: :runtime
254
+ prerelease: false
255
+ version_requirements: *70235571688900
256
+ description: Add dirty tracking of attributes to your ruby objects
257
+ email:
258
+ - jingweno@gmail.com
259
+ executables: []
260
+ extensions: []
261
+ extra_rdoc_files:
262
+ - LICENSE
263
+ - README.rdoc
264
+ files:
265
+ - .gitignore
266
+ - .rspec
267
+ - Gemfile
268
+ - LICENSE
269
+ - README.rdoc
270
+ - Rakefile
271
+ - VERSION
272
+ - lib/virtus/dirty_tracking.rb
273
+ - lib/virtus/dirty_tracking/session.rb
274
+ - lib/virtus/dirty_tracking/version.rb
275
+ - spec/integration/attributes/array_spec.rb
276
+ - spec/integration/attributes/boolean_spec.rb
277
+ - spec/integration/attributes/date_spec.rb
278
+ - spec/integration/attributes/date_time_spec.rb
279
+ - spec/integration/attributes/decimal_spec.rb
280
+ - spec/integration/attributes/float_spec.rb
281
+ - spec/integration/attributes/hash_spec.rb
282
+ - spec/integration/attributes/integer_spec.rb
283
+ - spec/integration/attributes/string_spec.rb
284
+ - spec/integration/attributes/time_spec.rb
285
+ - spec/integration/shared/dirty_trackable_attribute.rb
286
+ - spec/spec_helper.rb
287
+ - virtus-dirty.gemspec
288
+ homepage: https://github.com/jingweno/virtus-dirty
289
+ licenses: []
290
+ post_install_message:
291
+ rdoc_options: []
292
+ require_paths:
293
+ - lib
294
+ required_ruby_version: !ruby/object:Gem::Requirement
295
+ none: false
296
+ requirements:
297
+ - - ! '>='
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ segments:
301
+ - 0
302
+ hash: 1569428612875056916
303
+ required_rubygems_version: !ruby/object:Gem::Requirement
304
+ none: false
305
+ requirements:
306
+ - - ! '>='
307
+ - !ruby/object:Gem::Version
308
+ version: '0'
309
+ requirements: []
310
+ rubyforge_project:
311
+ rubygems_version: 1.8.10
312
+ signing_key:
313
+ specification_version: 3
314
+ summary: Add dirty tracking of attributes to your ruby objects
315
+ test_files:
316
+ - spec/integration/attributes/array_spec.rb
317
+ - spec/integration/attributes/boolean_spec.rb
318
+ - spec/integration/attributes/date_spec.rb
319
+ - spec/integration/attributes/date_time_spec.rb
320
+ - spec/integration/attributes/decimal_spec.rb
321
+ - spec/integration/attributes/float_spec.rb
322
+ - spec/integration/attributes/hash_spec.rb
323
+ - spec/integration/attributes/integer_spec.rb
324
+ - spec/integration/attributes/string_spec.rb
325
+ - spec/integration/attributes/time_spec.rb
326
+ - spec/integration/shared/dirty_trackable_attribute.rb
327
+ - spec/spec_helper.rb