delta_changes 0.0.1 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5098ae34ad5c3463ae089a94bf3736e15b47ae4f8c9d185a4208841ebec00f69
4
+ data.tar.gz: 540276c58ac91875d021e4fa86a59d983f542059d5ad1828b2c76e55fdd017f0
5
+ SHA512:
6
+ metadata.gz: d46bf7b19b2678cd0c44318d234e42a6dd11a0bb16427f645ad60e28127badebcbeb0db3738d80f903c65b03fd0b0bf0dcb5d592337fdd5353ebe6792e1455bb
7
+ data.tar.gz: 78c00a7637ef11280224edad95d55e3823c4ef5ae591f925dfb0e7ea9e417b479c10dc3b118e1c258f3505e9ec759a612b854b38f945f7e51dd5e22fd9c10864
data/lib/delta_changes.rb CHANGED
@@ -6,7 +6,8 @@ module DeltaChanges
6
6
  base.extend(ClassMethods)
7
7
  base.cattr_accessor :delta_changes_options
8
8
  base.attribute_method_suffix '_delta_changed?', '_delta_change', '_delta_was', '_delta_will_change!'
9
- base.alias_method_chain :write_attribute, :delta_changes
9
+ base.send(:alias_method, :write_attribute_without_delta_changes, :write_attribute)
10
+ base.send(:alias_method, :write_attribute, :write_attribute_with_delta_changes)
10
11
  end
11
12
 
12
13
  module ClassMethods
@@ -20,23 +21,23 @@ module DeltaChanges
20
21
  #
21
22
  def define_virtual_attribute_delta_methods
22
23
  delta_changes_options[:attributes].each do |tracked_attribute|
23
- class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
24
- def #{tracked_attribute}_delta_changed?
25
- attribute_delta_changed?('#{tracked_attribute}')
24
+ class_eval do
25
+ define_method("#{tracked_attribute}_delta_changed?") do
26
+ attribute_delta_changed?(tracked_attribute)
26
27
  end
27
28
 
28
- def #{tracked_attribute}_delta_change
29
- attribute_delta_change('#{tracked_attribute}')
29
+ define_method("#{tracked_attribute}_delta_change") do
30
+ attribute_delta_change(tracked_attribute)
30
31
  end
31
32
 
32
- def #{tracked_attribute}_delta_was
33
- attribute_delta_was('#{tracked_attribute}')
33
+ define_method("#{tracked_attribute}_delta_was") do
34
+ attribute_delta_was(tracked_attribute)
34
35
  end
35
36
 
36
- def #{tracked_attribute}_delta_will_change!
37
- attribute_delta_will_change!('#{tracked_attribute}')
37
+ define_method("#{tracked_attribute}_delta_will_change!") do
38
+ attribute_delta_will_change!(tracked_attribute)
38
39
  end
39
- RUBY
40
+ end
40
41
  end
41
42
  end
42
43
  end
@@ -83,7 +84,7 @@ module DeltaChanges
83
84
  value = send(attr)
84
85
  value.duplicable? ? value.clone : value
85
86
  else
86
- options[:from] || clone_attribute_value(:read_attribute, attr)
87
+ options[:from] || respond_to?(:clone_attribute_value) ? clone_attribute_value(:read_attribute, attr) : read_attribute(attr).dup
87
88
  end
88
89
  delta_changed_attributes[attr] = attribute_value
89
90
  end
@@ -92,18 +93,32 @@ module DeltaChanges
92
93
  def write_attribute_with_delta_changes(attr, value)
93
94
  attr = attr.to_s
94
95
 
95
- if self.class.delta_changes_options[:columns].include?(attr)
96
- # The attribute already has an unsaved change.
97
- if delta_changed_attributes.include?(attr)
98
- old = delta_changed_attributes[attr]
99
- delta_changed_attributes.delete(attr) unless field_changed?(attr, old, value)
100
- else
101
- old = clone_attribute_value(:read_attribute, attr)
102
- delta_changed_attributes[attr] = old if field_changed?(attr, old, value)
103
- end
96
+ unless self.class.delta_changes_options[:columns].include?(attr)
97
+ return write_attribute_without_delta_changes(attr, value)
98
+ end
99
+
100
+ # The attribute already has an unsaved change.
101
+ if delta_changed_attributes.include?(attr)
102
+ old = delta_changed_attributes[attr]
103
+ write_attribute_without_delta_changes(attr, value)
104
+ delta_changed_attributes.delete(attr) unless delta_changes_field_changed?(attr, old, value)
105
+ else
106
+ old = respond_to?(:clone_attribute_value) ? clone_attribute_value(:read_attribute, attr) : read_attribute(attr).dup
107
+ write_attribute_without_delta_changes(attr, value)
108
+ delta_changed_attributes[attr] = old if delta_changes_field_changed?(attr, old, value)
104
109
  end
110
+ end
111
+
112
+ def delta_changes_field_changed?(attr, old, value)
113
+ return true if !old.present? && value.present?
105
114
 
106
- write_attribute_without_delta_changes(attr, value)
115
+ if ActiveRecord::VERSION::STRING < '4.2.0'
116
+ _field_changed?(attr, old, value)
117
+ elsif ActiveRecord::VERSION::MAJOR < 5
118
+ _field_changed?(attr, old)
119
+ else
120
+ self[attr] != old
121
+ end
107
122
  end
108
123
  end
109
124
  end
@@ -1,3 +1,3 @@
1
1
  module DeltaChanges
2
- VERSION = "0.0.1"
2
+ VERSION = "2.2.1"
3
3
  end
metadata CHANGED
@@ -1,84 +1,148 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delta_changes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 2.2.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Michael Grosser
9
- autorequire:
8
+ autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-09-20 00:00:00.000000000 Z
11
+ date: 2021-02-11 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activerecord
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
19
+ version: 3.2.22
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.2'
22
23
  type: :runtime
23
24
  prerelease: false
24
25
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
26
  requirements:
27
- - - ! '>='
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.22
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.2'
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: sqlite3
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 1.3.6
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 1.3.6
75
+ - !ruby/object:Gem::Dependency
76
+ name: bump
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: wwtd
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: byebug
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
28
115
  - !ruby/object:Gem::Version
29
116
  version: '0'
30
- description:
117
+ description:
31
118
  email: michael@grosser.it
32
119
  executables: []
33
120
  extensions: []
34
121
  extra_rdoc_files: []
35
122
  files:
36
- - .travis.yml
37
- - Appraisals
38
- - Gemfile
39
- - Gemfile.lock
40
- - Rakefile
41
- - Readme.md
42
- - delta_changes.gemspec
43
- - gemfiles/rails2.gemfile
44
- - gemfiles/rails2.gemfile.lock
45
- - gemfiles/rails30.gemfile
46
- - gemfiles/rails30.gemfile.lock
47
- - gemfiles/rails32.gemfile
48
- - gemfiles/rails32.gemfile.lock
49
123
  - lib/delta_changes.rb
50
124
  - lib/delta_changes/version.rb
51
- - spec/delta_changes_spec.rb
52
- - spec/spec_helper.rb
53
- homepage: http://github.com/grosser/delta_changes
125
+ homepage: http://github.com/zendesk/delta_changes
54
126
  licenses:
55
127
  - MIT
56
- post_install_message:
128
+ metadata: {}
129
+ post_install_message:
57
130
  rdoc_options: []
58
131
  require_paths:
59
132
  - lib
60
133
  required_ruby_version: !ruby/object:Gem::Requirement
61
- none: false
62
134
  requirements:
63
- - - ! '>='
135
+ - - ">="
64
136
  - !ruby/object:Gem::Version
65
137
  version: '0'
66
- segments:
67
- - 0
68
- hash: 3940600882562868341
69
138
  required_rubygems_version: !ruby/object:Gem::Requirement
70
- none: false
71
139
  requirements:
72
- - - ! '>='
140
+ - - ">="
73
141
  - !ruby/object:Gem::Version
74
142
  version: '0'
75
- segments:
76
- - 0
77
- hash: 3940600882562868341
78
143
  requirements: []
79
- rubyforge_project:
80
- rubygems_version: 1.8.24
81
- signing_key:
82
- specification_version: 3
144
+ rubygems_version: 3.0.3
145
+ signing_key:
146
+ specification_version: 4
83
147
  summary: Additional real/virtual attribute change tracking independent of ActiveRecords
84
148
  test_files: []
data/.travis.yml DELETED
@@ -1,4 +0,0 @@
1
- rvm:
2
- - ree
3
- - 1.9.2
4
- - 1.9.3
data/Appraisals DELETED
@@ -1,15 +0,0 @@
1
- appraise "rails2" do
2
- version = "2.3.14"
3
- gem 'activerecord', version
4
- end
5
-
6
- appraise "rails30" do
7
- version = "3.2.3"
8
- gem 'activerecord', version
9
- end
10
-
11
-
12
- appraise "rails32" do
13
- version = "3.2.3"
14
- gem 'activerecord', version
15
- end
data/Gemfile DELETED
@@ -1,7 +0,0 @@
1
- source :rubygems
2
- gemspec
3
-
4
- gem "appraisal"
5
- gem "rake"
6
- gem "rspec", "~>2"
7
- gem "sqlite3"
data/Gemfile.lock DELETED
@@ -1,49 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- delta_changes (0.0.1)
5
- activerecord
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- activemodel (3.2.8)
11
- activesupport (= 3.2.8)
12
- builder (~> 3.0.0)
13
- activerecord (3.2.8)
14
- activemodel (= 3.2.8)
15
- activesupport (= 3.2.8)
16
- arel (~> 3.0.2)
17
- tzinfo (~> 0.3.29)
18
- activesupport (3.2.8)
19
- i18n (~> 0.6)
20
- multi_json (~> 1.0)
21
- appraisal (0.4.1)
22
- bundler
23
- rake
24
- arel (3.0.2)
25
- builder (3.0.3)
26
- diff-lcs (1.1.3)
27
- i18n (0.6.1)
28
- multi_json (1.3.6)
29
- rake (0.9.2)
30
- rspec (2.6.0)
31
- rspec-core (~> 2.6.0)
32
- rspec-expectations (~> 2.6.0)
33
- rspec-mocks (~> 2.6.0)
34
- rspec-core (2.6.4)
35
- rspec-expectations (2.6.0)
36
- diff-lcs (~> 1.1.2)
37
- rspec-mocks (2.6.0)
38
- sqlite3 (1.3.6)
39
- tzinfo (0.3.33)
40
-
41
- PLATFORMS
42
- ruby
43
-
44
- DEPENDENCIES
45
- appraisal
46
- delta_changes!
47
- rake
48
- rspec (~> 2)
49
- sqlite3
data/Rakefile DELETED
@@ -1,27 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "appraisal"
3
-
4
- task :spec do
5
- sh "rspec spec/"
6
- end
7
-
8
- task :default do
9
- sh "bundle exec rake appraisal:install && bundle exec rake appraisal spec"
10
- end
11
-
12
- # extracted from https://github.com/grosser/project_template
13
- rule /^version:bump:.*/ do |t|
14
- file = "lib/delta_changes/version.rb"
15
-
16
- sh "git status | grep 'nothing to commit'" # ensure we are not dirty
17
- index = ["major", "minor", "patch"].index(t.name.split(':').last)
18
- version_file = File.read(file)
19
- old_version, *version_parts = version_file.match(/(\d+)\.(\d+)\.(\d+)/).to_a
20
- version_parts[index] = version_parts[index].to_i + 1
21
- version_parts[2] = 0 if index < 2 # remove patch for minor
22
- version_parts[1] = 0 if index < 1 # remove minor for major
23
- new_version = version_parts * '.'
24
-
25
- File.open(file,"w"){|f| f.write(version_file.sub(old_version, new_version)) }
26
- sh "bundle && git add #{file} Gemfile.lock && git commit -m 'bump version to #{new_version}'"
27
- end
data/Readme.md DELETED
@@ -1,34 +0,0 @@
1
- Additional real/virtual attribute change tracking independent of ActiveRecords
2
-
3
-
4
- Install
5
- =======
6
-
7
- gem install delta_changes
8
-
9
- Usage
10
- =====
11
-
12
- class User < ActiveRecord::Base
13
- include DeltaChanges::Extension
14
- delta_changes :columns => [:name], :attributes => [:full_name]
15
- end
16
-
17
- user.name = "bar"
18
- user.delta_changes # => {"name" => [nil, "bar"]}
19
-
20
- user.full_name_will_change!
21
- user.delta_changes # => {"name" => [nil, "bar"], "full_name" => [nil, "Mr. Bar"]}
22
-
23
- user.save!
24
- user.delta_changes # => {"name" => [nil, "bar"], "full_name" => [nil, "Mr. Bar"]}
25
-
26
- user.reset_delta_changes!
27
- user.delta_changes # => {}
28
-
29
- Author
30
- ======
31
- [Michael Grosser](http://grosser.it)<br/>
32
- michael@grosser.it<br/>
33
- License: MIT<br/>
34
- [![Build Status](https://secure.travis-ci.org/grosser/delta_changes.png)](http://travis-ci.org/grosser/delta_changes)
@@ -1,13 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
- name = "delta_changes"
3
- require "#{name}/version"
4
-
5
- Gem::Specification.new name, DeltaChanges::VERSION do |s|
6
- s.summary = "Additional real/virtual attribute change tracking independent of ActiveRecords"
7
- s.authors = ["Michael Grosser"]
8
- s.email = "michael@grosser.it"
9
- s.homepage = "http://github.com/grosser/#{name}"
10
- s.files = `git ls-files`.split("\n")
11
- s.add_runtime_dependency "activerecord"
12
- s.license = "MIT"
13
- end
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source :rubygems
4
-
5
- gem "appraisal"
6
- gem "rake"
7
- gem "rspec", "~>2"
8
- gem "sqlite3"
9
- gem "activerecord", "2.3.14"
10
-
11
- gemspec :path=>"../"
@@ -1,37 +0,0 @@
1
- PATH
2
- remote: /Users/mgrosser/code/tools/delta_changes
3
- specs:
4
- delta_changes (0.0.0)
5
- activerecord
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- activerecord (2.3.14)
11
- activesupport (= 2.3.14)
12
- activesupport (2.3.14)
13
- appraisal (0.4.1)
14
- bundler
15
- rake
16
- diff-lcs (1.1.3)
17
- rake (0.9.2.2)
18
- rspec (2.11.0)
19
- rspec-core (~> 2.11.0)
20
- rspec-expectations (~> 2.11.0)
21
- rspec-mocks (~> 2.11.0)
22
- rspec-core (2.11.1)
23
- rspec-expectations (2.11.3)
24
- diff-lcs (~> 1.1.3)
25
- rspec-mocks (2.11.2)
26
- sqlite3 (1.3.6)
27
-
28
- PLATFORMS
29
- ruby
30
-
31
- DEPENDENCIES
32
- activerecord (= 2.3.14)
33
- appraisal
34
- delta_changes!
35
- rake
36
- rspec (~> 2)
37
- sqlite3
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source :rubygems
4
-
5
- gem "appraisal"
6
- gem "rake"
7
- gem "rspec", "~>2"
8
- gem "sqlite3"
9
- gem "activerecord", "3.2.3"
10
-
11
- gemspec :path=>"../"
@@ -1,50 +0,0 @@
1
- PATH
2
- remote: /Users/mgrosser/code/tools/delta_changes
3
- specs:
4
- delta_changes (0.0.0)
5
- activerecord
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- activemodel (3.2.3)
11
- activesupport (= 3.2.3)
12
- builder (~> 3.0.0)
13
- activerecord (3.2.3)
14
- activemodel (= 3.2.3)
15
- activesupport (= 3.2.3)
16
- arel (~> 3.0.2)
17
- tzinfo (~> 0.3.29)
18
- activesupport (3.2.3)
19
- i18n (~> 0.6)
20
- multi_json (~> 1.0)
21
- appraisal (0.4.1)
22
- bundler
23
- rake
24
- arel (3.0.2)
25
- builder (3.0.3)
26
- diff-lcs (1.1.3)
27
- i18n (0.6.1)
28
- multi_json (1.3.6)
29
- rake (0.9.2.2)
30
- rspec (2.11.0)
31
- rspec-core (~> 2.11.0)
32
- rspec-expectations (~> 2.11.0)
33
- rspec-mocks (~> 2.11.0)
34
- rspec-core (2.11.1)
35
- rspec-expectations (2.11.3)
36
- diff-lcs (~> 1.1.3)
37
- rspec-mocks (2.11.2)
38
- sqlite3 (1.3.6)
39
- tzinfo (0.3.33)
40
-
41
- PLATFORMS
42
- ruby
43
-
44
- DEPENDENCIES
45
- activerecord (= 3.2.3)
46
- appraisal
47
- delta_changes!
48
- rake
49
- rspec (~> 2)
50
- sqlite3
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source :rubygems
4
-
5
- gem "appraisal"
6
- gem "rake"
7
- gem "rspec", "~>2"
8
- gem "sqlite3"
9
- gem "activerecord", "3.2.3"
10
-
11
- gemspec :path=>"../"
@@ -1,50 +0,0 @@
1
- PATH
2
- remote: /Users/mgrosser/code/tools/delta_changes
3
- specs:
4
- delta_changes (0.0.0)
5
- activerecord
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- activemodel (3.2.3)
11
- activesupport (= 3.2.3)
12
- builder (~> 3.0.0)
13
- activerecord (3.2.3)
14
- activemodel (= 3.2.3)
15
- activesupport (= 3.2.3)
16
- arel (~> 3.0.2)
17
- tzinfo (~> 0.3.29)
18
- activesupport (3.2.3)
19
- i18n (~> 0.6)
20
- multi_json (~> 1.0)
21
- appraisal (0.4.1)
22
- bundler
23
- rake
24
- arel (3.0.2)
25
- builder (3.0.3)
26
- diff-lcs (1.1.3)
27
- i18n (0.6.1)
28
- multi_json (1.3.6)
29
- rake (0.9.2.2)
30
- rspec (2.11.0)
31
- rspec-core (~> 2.11.0)
32
- rspec-expectations (~> 2.11.0)
33
- rspec-mocks (~> 2.11.0)
34
- rspec-core (2.11.1)
35
- rspec-expectations (2.11.3)
36
- diff-lcs (~> 1.1.3)
37
- rspec-mocks (2.11.2)
38
- sqlite3 (1.3.6)
39
- tzinfo (0.3.33)
40
-
41
- PLATFORMS
42
- ruby
43
-
44
- DEPENDENCIES
45
- activerecord (= 3.2.3)
46
- appraisal
47
- delta_changes!
48
- rake
49
- rspec (~> 2)
50
- sqlite3
@@ -1,99 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe DeltaChanges do
4
- it "has a VERSION" do
5
- DeltaChanges::VERSION.should =~ /^[\.\da-z]+$/
6
- end
7
-
8
- it "should not create methods on unspecified attributes" do
9
- # TODO broken, but that might be rails 2 ...
10
- #expect{
11
- # User.new.email_delta_will_change!
12
- #}.to raise_error
13
-
14
- expect{
15
- User.new.bar_delta_will_change!
16
- }.to raise_error
17
-
18
- expect{
19
- User.new.does_not_exist_delta_will_change!
20
- }.to raise_error
21
- end
22
-
23
- describe "#delta_changes" do
24
- it "should be empty on unchanged" do
25
- User.new.delta_changes.should == {}
26
- end
27
-
28
- it "should be filled by tracked column changes" do
29
- User.new(:name => "Peter").delta_changes.should == {"name"=>[nil, "Peter"]}
30
- end
31
-
32
- it "should be filled by tracked number column change" do
33
- User.new(:score => 5).delta_changes.should == {"score"=>[nil, 5]}
34
- end
35
-
36
- it "should be filled by tracked number column change that have the wrong type" do
37
- User.new(:score => "5").delta_changes.should == {"score"=>[nil, 5]}
38
- end
39
-
40
- it "should not be filled by untracked column changes" do
41
- User.new(:email => "Peter").delta_changes.should == {}
42
- end
43
-
44
- it "should not be filled implicit tracked attribute changes" do
45
- user = User.new(:foo => 1)
46
- user.delta_changes.should == {}
47
- end
48
-
49
- it "should be filled by explicit tracked attribute changes" do
50
- user = User.new(:foo => 1)
51
- user.foo_delta_will_change!
52
- user.foo = 2
53
- user.delta_changes.should == {"foo"=>[1, 2]}
54
- end
55
-
56
- it "should not mess with normal changes" do
57
- User.new(:email => "EMAIL", :name => "NAME", :foo => "FOO").changes.should ==
58
- {"email"=>[nil, "EMAIL"], "name"=>[nil, "NAME"]}
59
- end
60
-
61
- it "should not reset columns on save" do
62
- user = User.create!(:name => "NAME", :foo => "FOO", :bar => "BAR")
63
- user.delta_changes.should == {"name"=>[nil, "NAME"]}
64
- end
65
-
66
- it "should not reset columns on update" do
67
- user = User.create!(:name => "NAME", :foo => "FOO", :bar => "BAR")
68
- user.update_attributes(:name => "NAME-2")
69
- user.delta_changes.should == {"name"=>[nil, "NAME-2"]}
70
- end
71
-
72
- # that might change, I'd consider this a bug ... but just documenting for now
73
- it "should not reset columns on reload" do
74
- user = User.create!(:name => "NAME", :foo => "FOO", :bar => "BAR")
75
- user.reload
76
- user.delta_changes.should == {"name"=>[nil, "NAME"]}
77
- end
78
-
79
- it "should have previouse value from db" do
80
- user = User.create!(:name => "NAME", :foo => "FOO", :bar => "BAR")
81
- user = User.find(user)
82
- user.name = "NAME-2"
83
- user.delta_changes.should == {"name"=>["NAME", "NAME-2"]}
84
- end
85
-
86
- it "should not track non-changes on tracked columns" do
87
- user = User.create!(:score => 5).reload
88
- user.reset_delta_changes!
89
-
90
- user.delta_changes.should == {}
91
-
92
- user.score = 5
93
- user.delta_changes.should == {}
94
-
95
- user.score = "5"
96
- user.delta_changes.should == {}
97
- end
98
- end
99
- end
data/spec/spec_helper.rb DELETED
@@ -1,31 +0,0 @@
1
- require "bundler/setup"
2
- require "delta_changes"
3
- require "active_record"
4
-
5
- # connect
6
- ActiveRecord::Base.establish_connection(
7
- :adapter => "sqlite3",
8
- :database => ":memory:"
9
- )
10
-
11
- # create tables
12
- ActiveRecord::Schema.define(:version => 1) do
13
- create_table :users do |t|
14
- t.string :name
15
- t.string :email
16
- t.integer :score
17
- t.timestamps
18
- end
19
- end
20
-
21
- # create models
22
- class User < ActiveRecord::Base
23
- include DeltaChanges::Extension
24
- attr_accessor :foo, :bar
25
-
26
- delta_changes :columns => ["name", "score"], :attributes => ["foo"]
27
-
28
- def full_name
29
- "Mr. #{name}"
30
- end
31
- end