delta_changes 0.0.1 → 2.2.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.
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