delta_changes 1.0.0 → 2.2.2

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: da863383cd4382362669bc42a36e7e0a361ac634d1bbad7448fb44b64468dcdc
4
+ data.tar.gz: d9d49ffcc2118d0bfe02fa47a2346486f28e938addc3d88f891e976be99f6e1f
5
+ SHA512:
6
+ metadata.gz: 7d1df5f621ad803e4d58da4f7ee2c7066d613ea71187706fe7b72861f490622f3b3234feb7c9c93c2d8cd919093dbc487deb16d5c7fb2a5c0ab86b555853e034
7
+ data.tar.gz: 928d3e1e59233443aa028903ed653f8143b690251108587a739a55d566d21f940c7b93ce009d852ac967b9584d52511494ae63074fa6ffb2eb54aaab2b0c332b
data/lib/delta_changes.rb CHANGED
@@ -6,7 +6,11 @@ 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
+ if ::ActiveRecord.version < Gem::Version.new('5.2')
10
+ base.send(:prepend, InstanceMethodsLegacy)
11
+ else
12
+ base.send(:prepend, InstanceMethods)
13
+ end
10
14
  end
11
15
 
12
16
  module ClassMethods
@@ -20,23 +24,67 @@ module DeltaChanges
20
24
  #
21
25
  def define_virtual_attribute_delta_methods
22
26
  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}')
27
+ class_eval do
28
+ define_method("#{tracked_attribute}_delta_changed?") do
29
+ attribute_delta_changed?(tracked_attribute)
26
30
  end
27
31
 
28
- def #{tracked_attribute}_delta_change
29
- attribute_delta_change('#{tracked_attribute}')
32
+ define_method("#{tracked_attribute}_delta_change") do
33
+ attribute_delta_change(tracked_attribute)
30
34
  end
31
35
 
32
- def #{tracked_attribute}_delta_was
33
- attribute_delta_was('#{tracked_attribute}')
36
+ define_method("#{tracked_attribute}_delta_was") do
37
+ attribute_delta_was(tracked_attribute)
34
38
  end
35
39
 
36
- def #{tracked_attribute}_delta_will_change!
37
- attribute_delta_will_change!('#{tracked_attribute}')
40
+ define_method("#{tracked_attribute}_delta_will_change!") do
41
+ attribute_delta_will_change!(tracked_attribute)
38
42
  end
39
- RUBY
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ # Rails < 5.2
49
+ module InstanceMethodsLegacy
50
+ # Wrap write_attribute to remember original attribute value.
51
+ def write_attribute(attr, value)
52
+ attr = attr.to_s
53
+
54
+ unless self.class.delta_changes_options[:columns].include?(attr)
55
+ return super(attr, value)
56
+ end
57
+
58
+ # The attribute already has an unsaved change.
59
+ if delta_changed_attributes.include?(attr)
60
+ old = delta_changed_attributes[attr]
61
+ super(attr, value)
62
+ delta_changed_attributes.delete(attr) unless delta_changes_field_changed?(attr, old, value)
63
+ else
64
+ old = respond_to?(:clone_attribute_value) ? clone_attribute_value(:read_attribute, attr) : read_attribute(attr).dup
65
+ super(attr, value)
66
+ delta_changed_attributes[attr] = old if delta_changes_field_changed?(attr, old, value)
67
+ end
68
+ end
69
+ end
70
+
71
+ module InstanceMethods
72
+ def _write_attribute(attr, value)
73
+ attr = attr.to_s
74
+
75
+ unless self.class.delta_changes_options[:columns].include?(attr)
76
+ return super(attr, value)
77
+ end
78
+
79
+ # The attribute already has an unsaved change.
80
+ if delta_changed_attributes.include?(attr)
81
+ old = delta_changed_attributes[attr]
82
+ super(attr, value)
83
+ delta_changed_attributes.delete(attr) unless delta_changes_field_changed?(attr, old, value)
84
+ else
85
+ old = read_attribute(attr).dup
86
+ super(attr, value)
87
+ delta_changed_attributes[attr] = old if delta_changes_field_changed?(attr, old, value)
40
88
  end
41
89
  end
42
90
  end
@@ -83,32 +131,21 @@ module DeltaChanges
83
131
  value = send(attr)
84
132
  value.duplicable? ? value.clone : value
85
133
  else
86
- options[:from] || clone_attribute_value(:read_attribute, attr)
134
+ options[:from] || respond_to?(:clone_attribute_value) ? clone_attribute_value(:read_attribute, attr) : read_attribute(attr).dup
87
135
  end
88
136
  delta_changed_attributes[attr] = attribute_value
89
137
  end
90
138
 
91
- # Wrap write_attribute to remember original attribute value.
92
- def write_attribute_with_delta_changes(attr, value)
93
- attr = attr.to_s
139
+ def delta_changes_field_changed?(attr, old, value)
140
+ return true if !old.present? && value.present?
94
141
 
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 delta_changes_field_changed?(attr, old, value)
100
- else
101
- old = clone_attribute_value(:read_attribute, attr)
102
- delta_changed_attributes[attr] = old if delta_changes_field_changed?(attr, old, value)
103
- end
142
+ if ActiveRecord::VERSION::STRING < '4.2.0'
143
+ _field_changed?(attr, old, value)
144
+ elsif ActiveRecord::VERSION::MAJOR < 5
145
+ _field_changed?(attr, old)
146
+ else
147
+ self[attr] != old
104
148
  end
105
-
106
- write_attribute_without_delta_changes(attr, value)
107
- end
108
-
109
- def delta_changes_field_changed?(attr, old, value)
110
- @delta_changes_field_changed ||= defined?(field_changed?)
111
- @delta_changes_field_changed ? field_changed?(attr, old, value) : _field_changed?(attr, old, value) # rails 3.0-3.1 vs 3.2
112
149
  end
113
150
  end
114
151
  end
@@ -1,3 +1,3 @@
1
1
  module DeltaChanges
2
- VERSION = "1.0.0"
2
+ VERSION = "2.2.2"
3
3
  end
metadata CHANGED
@@ -1,86 +1,148 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delta_changes
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 2.2.2
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: 2013-06-07 00:00:00.000000000 Z
11
+ date: 2021-02-23 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: '6.3'
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: '6.3'
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: byebug
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: matching_bundle
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/rails23.gemfile
44
- - gemfiles/rails23.gemfile.lock
45
- - gemfiles/rails30.gemfile
46
- - gemfiles/rails30.gemfile.lock
47
- - gemfiles/rails31.gemfile
48
- - gemfiles/rails31.gemfile.lock
49
- - gemfiles/rails32.gemfile
50
- - gemfiles/rails32.gemfile.lock
51
123
  - lib/delta_changes.rb
52
124
  - lib/delta_changes/version.rb
53
- - spec/delta_changes_spec.rb
54
- - spec/spec_helper.rb
55
- homepage: http://github.com/grosser/delta_changes
125
+ homepage: http://github.com/zendesk/delta_changes
56
126
  licenses:
57
127
  - MIT
58
- post_install_message:
128
+ metadata: {}
129
+ post_install_message:
59
130
  rdoc_options: []
60
131
  require_paths:
61
132
  - lib
62
133
  required_ruby_version: !ruby/object:Gem::Requirement
63
- none: false
64
134
  requirements:
65
- - - ! '>='
135
+ - - ">="
66
136
  - !ruby/object:Gem::Version
67
137
  version: '0'
68
- segments:
69
- - 0
70
- hash: -171365277466758643
71
138
  required_rubygems_version: !ruby/object:Gem::Requirement
72
- none: false
73
139
  requirements:
74
- - - ! '>='
140
+ - - ">="
75
141
  - !ruby/object:Gem::Version
76
142
  version: '0'
77
- segments:
78
- - 0
79
- hash: -171365277466758643
80
143
  requirements: []
81
- rubyforge_project:
82
- rubygems_version: 1.8.25
83
- signing_key:
84
- specification_version: 3
144
+ rubygems_version: 3.0.3
145
+ signing_key:
146
+ specification_version: 4
85
147
  summary: Additional real/virtual attribute change tracking independent of ActiveRecords
86
148
  test_files: []
data/.travis.yml DELETED
@@ -1,4 +0,0 @@
1
- rvm:
2
- - ree
3
- - 1.9.3
4
- - 2.0.0
data/Appraisals DELETED
@@ -1,5 +0,0 @@
1
- ["2.3.18", "3.0.20", "3.1.12", "3.2.13"].each do |version|
2
- appraise "rails#{version[0..2].sub(".","")}" do
3
- gem 'activerecord', version
4
- end
5
- end
data/Gemfile DELETED
@@ -1,8 +0,0 @@
1
- source "https://rubygems.org"
2
- gemspec
3
-
4
- gem "appraisal"
5
- gem "rake"
6
- gem "rspec", "~>2"
7
- gem "sqlite3"
8
- gem "bump"
data/Gemfile.lock DELETED
@@ -1,51 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- delta_changes (1.0.0)
5
- activerecord
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- activemodel (3.2.13)
11
- activesupport (= 3.2.13)
12
- builder (~> 3.0.0)
13
- activerecord (3.2.13)
14
- activemodel (= 3.2.13)
15
- activesupport (= 3.2.13)
16
- arel (~> 3.0.2)
17
- tzinfo (~> 0.3.29)
18
- activesupport (3.2.13)
19
- i18n (= 0.6.1)
20
- multi_json (~> 1.0)
21
- appraisal (0.5.2)
22
- bundler
23
- rake
24
- arel (3.0.2)
25
- builder (3.0.4)
26
- bump (0.4.2)
27
- diff-lcs (1.1.3)
28
- i18n (0.6.1)
29
- multi_json (1.7.6)
30
- rake (10.0.4)
31
- rspec (2.6.0)
32
- rspec-core (~> 2.6.0)
33
- rspec-expectations (~> 2.6.0)
34
- rspec-mocks (~> 2.6.0)
35
- rspec-core (2.6.4)
36
- rspec-expectations (2.6.0)
37
- diff-lcs (~> 1.1.2)
38
- rspec-mocks (2.6.0)
39
- sqlite3 (1.3.6)
40
- tzinfo (0.3.37)
41
-
42
- PLATFORMS
43
- ruby
44
-
45
- DEPENDENCIES
46
- appraisal
47
- bump
48
- delta_changes!
49
- rake
50
- rspec (~> 2)
51
- sqlite3
data/Rakefile DELETED
@@ -1,12 +0,0 @@
1
- require "bundler/setup"
2
- require "bundler/gem_tasks"
3
- require "appraisal"
4
- require "bump/tasks"
5
-
6
- task :spec do
7
- sh "rspec spec/"
8
- end
9
-
10
- task :default do
11
- sh "rake appraisal:install && rake appraisal spec"
12
- 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,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "rake"
7
- gem "rspec", "~>2"
8
- gem "sqlite3"
9
- gem "bump"
10
- gem "activerecord", "2.3.18"
11
-
12
- gemspec :path=>"../"
@@ -1,39 +0,0 @@
1
- PATH
2
- remote: /Users/mgrosser/code/tools/delta_changes
3
- specs:
4
- delta_changes (0.0.1)
5
- activerecord
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- activerecord (2.3.18)
11
- activesupport (= 2.3.18)
12
- activesupport (2.3.18)
13
- appraisal (0.5.2)
14
- bundler
15
- rake
16
- bump (0.4.2)
17
- diff-lcs (1.2.4)
18
- rake (10.0.4)
19
- rspec (2.13.0)
20
- rspec-core (~> 2.13.0)
21
- rspec-expectations (~> 2.13.0)
22
- rspec-mocks (~> 2.13.0)
23
- rspec-core (2.13.1)
24
- rspec-expectations (2.13.0)
25
- diff-lcs (>= 1.1.3, < 2.0)
26
- rspec-mocks (2.13.1)
27
- sqlite3 (1.3.7)
28
-
29
- PLATFORMS
30
- ruby
31
-
32
- DEPENDENCIES
33
- activerecord (= 2.3.18)
34
- appraisal
35
- bump
36
- delta_changes!
37
- rake
38
- rspec (~> 2)
39
- sqlite3
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "rake"
7
- gem "rspec", "~>2"
8
- gem "sqlite3"
9
- gem "bump"
10
- gem "activerecord", "3.0.20"
11
-
12
- gemspec :path=>"../"
@@ -1,50 +0,0 @@
1
- PATH
2
- remote: /Users/mgrosser/code/tools/delta_changes
3
- specs:
4
- delta_changes (0.0.1)
5
- activerecord
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- activemodel (3.0.20)
11
- activesupport (= 3.0.20)
12
- builder (~> 2.1.2)
13
- i18n (~> 0.5.0)
14
- activerecord (3.0.20)
15
- activemodel (= 3.0.20)
16
- activesupport (= 3.0.20)
17
- arel (~> 2.0.10)
18
- tzinfo (~> 0.3.23)
19
- activesupport (3.0.20)
20
- appraisal (0.5.2)
21
- bundler
22
- rake
23
- arel (2.0.10)
24
- builder (2.1.2)
25
- bump (0.4.2)
26
- diff-lcs (1.2.4)
27
- i18n (0.5.0)
28
- rake (10.0.4)
29
- rspec (2.13.0)
30
- rspec-core (~> 2.13.0)
31
- rspec-expectations (~> 2.13.0)
32
- rspec-mocks (~> 2.13.0)
33
- rspec-core (2.13.1)
34
- rspec-expectations (2.13.0)
35
- diff-lcs (>= 1.1.3, < 2.0)
36
- rspec-mocks (2.13.1)
37
- sqlite3 (1.3.7)
38
- tzinfo (0.3.37)
39
-
40
- PLATFORMS
41
- ruby
42
-
43
- DEPENDENCIES
44
- activerecord (= 3.0.20)
45
- appraisal
46
- bump
47
- delta_changes!
48
- rake
49
- rspec (~> 2)
50
- sqlite3
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "rake"
7
- gem "rspec", "~>2"
8
- gem "sqlite3"
9
- gem "bump"
10
- gem "activerecord", "3.1.12"
11
-
12
- gemspec :path=>"../"
@@ -1,52 +0,0 @@
1
- PATH
2
- remote: /Users/mgrosser/code/tools/delta_changes
3
- specs:
4
- delta_changes (0.0.1)
5
- activerecord
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- activemodel (3.1.12)
11
- activesupport (= 3.1.12)
12
- builder (~> 3.0.0)
13
- i18n (~> 0.6)
14
- activerecord (3.1.12)
15
- activemodel (= 3.1.12)
16
- activesupport (= 3.1.12)
17
- arel (~> 2.2.3)
18
- tzinfo (~> 0.3.29)
19
- activesupport (3.1.12)
20
- multi_json (~> 1.0)
21
- appraisal (0.5.2)
22
- bundler
23
- rake
24
- arel (2.2.3)
25
- builder (3.0.4)
26
- bump (0.4.2)
27
- diff-lcs (1.2.4)
28
- i18n (0.6.4)
29
- multi_json (1.7.6)
30
- rake (10.0.4)
31
- rspec (2.13.0)
32
- rspec-core (~> 2.13.0)
33
- rspec-expectations (~> 2.13.0)
34
- rspec-mocks (~> 2.13.0)
35
- rspec-core (2.13.1)
36
- rspec-expectations (2.13.0)
37
- diff-lcs (>= 1.1.3, < 2.0)
38
- rspec-mocks (2.13.1)
39
- sqlite3 (1.3.7)
40
- tzinfo (0.3.37)
41
-
42
- PLATFORMS
43
- ruby
44
-
45
- DEPENDENCIES
46
- activerecord (= 3.1.12)
47
- appraisal
48
- bump
49
- delta_changes!
50
- rake
51
- rspec (~> 2)
52
- sqlite3
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "rake"
7
- gem "rspec", "~>2"
8
- gem "sqlite3"
9
- gem "bump"
10
- gem "activerecord", "3.2.13"
11
-
12
- gemspec :path=>"../"
@@ -1,52 +0,0 @@
1
- PATH
2
- remote: /Users/mgrosser/code/tools/delta_changes
3
- specs:
4
- delta_changes (0.0.1)
5
- activerecord
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- activemodel (3.2.13)
11
- activesupport (= 3.2.13)
12
- builder (~> 3.0.0)
13
- activerecord (3.2.13)
14
- activemodel (= 3.2.13)
15
- activesupport (= 3.2.13)
16
- arel (~> 3.0.2)
17
- tzinfo (~> 0.3.29)
18
- activesupport (3.2.13)
19
- i18n (= 0.6.1)
20
- multi_json (~> 1.0)
21
- appraisal (0.5.2)
22
- bundler
23
- rake
24
- arel (3.0.2)
25
- builder (3.0.4)
26
- bump (0.4.2)
27
- diff-lcs (1.2.4)
28
- i18n (0.6.1)
29
- multi_json (1.7.6)
30
- rake (10.0.4)
31
- rspec (2.13.0)
32
- rspec-core (~> 2.13.0)
33
- rspec-expectations (~> 2.13.0)
34
- rspec-mocks (~> 2.13.0)
35
- rspec-core (2.13.1)
36
- rspec-expectations (2.13.0)
37
- diff-lcs (>= 1.1.3, < 2.0)
38
- rspec-mocks (2.13.1)
39
- sqlite3 (1.3.7)
40
- tzinfo (0.3.37)
41
-
42
- PLATFORMS
43
- ruby
44
-
45
- DEPENDENCIES
46
- activerecord (= 3.2.13)
47
- appraisal
48
- bump
49
- delta_changes!
50
- rake
51
- rspec (~> 2)
52
- 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