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 +7 -0
- data/lib/delta_changes.rb +37 -22
- data/lib/delta_changes/version.rb +1 -1
- metadata +105 -41
- data/.travis.yml +0 -4
- data/Appraisals +0 -15
- data/Gemfile +0 -7
- data/Gemfile.lock +0 -49
- data/Rakefile +0 -27
- data/Readme.md +0 -34
- data/delta_changes.gemspec +0 -13
- data/gemfiles/rails2.gemfile +0 -11
- data/gemfiles/rails2.gemfile.lock +0 -37
- data/gemfiles/rails30.gemfile +0 -11
- data/gemfiles/rails30.gemfile.lock +0 -50
- data/gemfiles/rails32.gemfile +0 -11
- data/gemfiles/rails32.gemfile.lock +0 -50
- data/spec/delta_changes_spec.rb +0 -99
- data/spec/spec_helper.rb +0 -31
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.
|
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
|
24
|
-
|
25
|
-
attribute_delta_changed?(
|
24
|
+
class_eval do
|
25
|
+
define_method("#{tracked_attribute}_delta_changed?") do
|
26
|
+
attribute_delta_changed?(tracked_attribute)
|
26
27
|
end
|
27
28
|
|
28
|
-
|
29
|
-
attribute_delta_change(
|
29
|
+
define_method("#{tracked_attribute}_delta_change") do
|
30
|
+
attribute_delta_change(tracked_attribute)
|
30
31
|
end
|
31
32
|
|
32
|
-
|
33
|
-
attribute_delta_was(
|
33
|
+
define_method("#{tracked_attribute}_delta_was") do
|
34
|
+
attribute_delta_was(tracked_attribute)
|
34
35
|
end
|
35
36
|
|
36
|
-
|
37
|
-
attribute_delta_will_change!(
|
37
|
+
define_method("#{tracked_attribute}_delta_will_change!") do
|
38
|
+
attribute_delta_will_change!(tracked_attribute)
|
38
39
|
end
|
39
|
-
|
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
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
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
|
-
|
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
|
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:
|
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:
|
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:
|
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
|
-
|
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
|
-
|
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
|
-
|
80
|
-
|
81
|
-
|
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
data/Appraisals
DELETED
data/Gemfile
DELETED
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
|
-
[](http://travis-ci.org/grosser/delta_changes)
|
data/delta_changes.gemspec
DELETED
@@ -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
|
data/gemfiles/rails2.gemfile
DELETED
@@ -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
|
data/gemfiles/rails30.gemfile
DELETED
@@ -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
|
data/gemfiles/rails32.gemfile
DELETED
@@ -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
|
data/spec/delta_changes_spec.rb
DELETED
@@ -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
|