table_differ 0.6.4 → 0.6.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3d9fc140b0f6ab8094995a54634a67f7ce9a2ff
4
- data.tar.gz: 65d2e02bbd1a8a4208c42ac75f50e87eb1f20f60
3
+ metadata.gz: 144d5fbf2df2d63302aba0a2492629817f6d2c56
4
+ data.tar.gz: c2f2672f06a326665b9b1ad69cb816d765d6c105
5
5
  SHA512:
6
- metadata.gz: 4bac95e5354c1d0670121ba1f39b2c77bee513b6a71ef9108c38325bbe17b6110d4d5213a524f984820716e3a452b6a9a1767a5b4cd71cb329914c5d9adb07b9
7
- data.tar.gz: 0d61ed3de40746e6083a52551594c541fbbb97f8c87d6aa044df670a8e55820111e0e7b45db2929843c040284111d70176d51d75ff5e02e02b21770775e7439d
6
+ metadata.gz: dac4225f3b0c3b3994342f1ed435c4b6ae4503b3963e60d21434f974c13b12622ce421d96f981156d63b59a94d5ce2be7f6dc7e0b225d14e00581c8423d86963
7
+ data.tar.gz: d9371103866e97e4292b9fb7d1cb850737a8d75e34ffe2869dd11072f58feb60280fa32d40b86f8499a7da218b3f2f5ada03770191976ea79873458f377d1d93
data/CHANGELOG.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  **0.6.0**   2 July 2014
4
4
 
5
+ * Removed models with unique_by are returned with their old ID intact.
5
6
  * Added the `unique_by` option to discover changes even when ignoring the primary key.
6
7
  * original_attributes now contains all original attributes, not just the changed ones.
7
8
  * Added the ability to delete all snapshots: `delete_snapshots(:all)`
@@ -1,3 +1,3 @@
1
1
  module TableDiffer
2
- VERSION = "0.6.4"
2
+ VERSION = "0.6.6"
3
3
  end
data/lib/table_differ.rb CHANGED
@@ -50,13 +50,19 @@ module TableDiffer
50
50
  snaps.each { |name| delete_snapshot(name) }
51
51
  end
52
52
 
53
- def table_differ_remap_objects params, records
53
+ def table_differ_remap_objects params, records, table
54
+ model = self
55
+ if table != table_name
56
+ model = self.dup
57
+ model.table_name = table
58
+ end
59
+
54
60
  params = Array(params)
55
61
  records.map do |record|
56
62
  result = record
57
63
  if record.id.nil? # don't look up real ActiveRecord object if we already have one
58
64
  args = params.inject({}) { |hash,key| hash[key] = record[key]; hash }
59
- real_record = where(args).first
65
+ real_record = model.where(args).first
60
66
  if real_record
61
67
  real_record.original_attributes = record.attributes
62
68
  result = real_record
@@ -90,19 +96,19 @@ module TableDiffer
90
96
  # [*added, *removed].select { |o| !o.id }.each { |o| o.instance_variable_set("@new_record", true) }
91
97
 
92
98
  if options[:unique_by]
93
- added = table_differ_remap_objects(options[:unique_by], added)
94
- removed = table_differ_remap_objects(options[:unique_by], removed)
99
+ added = table_differ_remap_objects(options[:unique_by], added, newtable)
100
+ removed = table_differ_remap_objects(options[:unique_by], removed, oldtable)
95
101
  end
96
102
 
97
- changed = added & removed
103
+ changed = added.select { |a| removed.find { |r| a.id == r.id }}
98
104
  changed.each do |obj|
99
- orig = removed.find { |r| r == obj }
105
+ orig = removed.find { |r| r.id == obj.id }
100
106
  raise "this is impossible" if orig.nil?
101
107
  obj.original_attributes = (orig.original_attributes || orig.attributes).except(*ignore)
102
108
  end
103
109
 
104
110
  added -= changed
105
- removed -= changed
111
+ removed.reject! { |r| changed.find { |c| r.id == c.id }}
106
112
  [*added, *removed].each { |o| o.original_attributes = nil }
107
113
 
108
114
  [added, removed, changed]
data/spec/remap_spec.rb CHANGED
@@ -4,6 +4,7 @@ describe "diffing a model" do
4
4
  it "detects a changed field using a single surrogate" do
5
5
  first = SurrogateModel.create!(name: 'one', original_name: 'one')
6
6
  second = SurrogateModel.create!(name: 'two', original_name: 'two')
7
+ secid = second.id
7
8
 
8
9
  SurrogateModel.create_snapshot('original')
9
10
 
@@ -16,7 +17,7 @@ describe "diffing a model" do
16
17
  # we can find added and changed records by surrogate IDs but, of course, can't find removed ones
17
18
  expect(added).to eq [third]
18
19
  expect(added.first.original_attributes).to eq nil
19
- expect(removed.map(&:attributes)).to eq [{"id" => nil, "name" => "two", "original_name" => "two", "alternate_value" => nil}]
20
+ expect(removed.map(&:attributes)).to eq [{"id" => secid, "name" => "two", "original_name" => "two", "alternate_value" => nil}]
20
21
  expect(removed.first.original_attributes).to eq nil
21
22
  expect(changed).to eq [first]
22
23
  expect(changed.first.name).to eq 'uno'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table_differ
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Bronson