tree_diff 1.1.2 → 1.1.3
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 +4 -4
- data/lib/tree_diff.rb +5 -1
- data/test/helper.rb +11 -1
- data/test/tree_diff_test.rb +16 -0
- data/tree_diff.gemspec +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17646f7343db4fba5bb20b308c77b7cfa910b903b5c9a089f604b466db3bbf3b
|
4
|
+
data.tar.gz: e15623b04dba3b55518dc850d4d5eb4a15a1b3ecb8aa7e845ca1b807f1b0c682
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b15fb4b1eee4a1da4eca5324ae3dae423ac18517f25e392ed52cff29fb9f8b55a703c43df6cc077692eacfcefecec6cb74e43c68b8c5b21fd1476653547e5e1
|
7
|
+
data.tar.gz: 30d487b43dba72b0b9b27576bdc3930b0cb76be6ceb57bbfeebdf71e9453ab4b204ee65d0f116e1e6cac2cbeb9f2d68a020f038d10da09f208eeff371c6f492a
|
data/lib/tree_diff.rb
CHANGED
@@ -203,10 +203,12 @@ class TreeDiff
|
|
203
203
|
end
|
204
204
|
|
205
205
|
def call_and_copy_value(receiver, method_name)
|
206
|
+
return -> { nil } unless receiver
|
207
|
+
|
206
208
|
source_value = receiver.public_send(method_name)
|
207
209
|
source_value = Marshal.load(Marshal.dump(source_value)) # Properly clones hashes
|
208
210
|
|
209
|
-
-> { source_value }
|
211
|
+
-> { source_value } # The return value of this becomes the body of the method defined on the Mold object
|
210
212
|
end
|
211
213
|
|
212
214
|
def iterate_observations(mold, current_object)
|
@@ -238,6 +240,8 @@ class TreeDiff
|
|
238
240
|
|
239
241
|
def method_caller_with_condition(path)
|
240
242
|
->(object_and_method) do
|
243
|
+
return nil unless object_and_method.fetch(:receiver)
|
244
|
+
|
241
245
|
condition = condition_for(path)
|
242
246
|
|
243
247
|
if !condition || condition.call(object_and_method.fetch(:receiver))
|
data/test/helper.rb
CHANGED
@@ -10,6 +10,12 @@ ActiveRecord::Schema.define do
|
|
10
10
|
t.string :number
|
11
11
|
end
|
12
12
|
|
13
|
+
create_table :extra_order_details, force: true do |t|
|
14
|
+
t.references :order
|
15
|
+
t.string :integration_id
|
16
|
+
t.string :external_id
|
17
|
+
end
|
18
|
+
|
13
19
|
create_table :line_items, force: true do |t|
|
14
20
|
t.string :description
|
15
21
|
t.integer :price_usd_cents
|
@@ -45,16 +51,20 @@ ActiveRecord::Schema.define do
|
|
45
51
|
end
|
46
52
|
end
|
47
53
|
|
48
|
-
# Define the models
|
49
54
|
class Order < ActiveRecord::Base
|
50
55
|
has_many :line_items, inverse_of: :order
|
51
56
|
has_many :orders_vehicles
|
57
|
+
has_one :detail, class_name: "ExtraOrderDetail"
|
52
58
|
|
53
59
|
has_many :trucks, through: :orders_vehicles, source: :vehicle, source_type: "Vehicle", class_name: "Truck"
|
54
60
|
|
55
61
|
accepts_nested_attributes_for :line_items, allow_destroy: true
|
56
62
|
end
|
57
63
|
|
64
|
+
class ExtraOrderDetail < ActiveRecord::Base
|
65
|
+
belongs_to :order
|
66
|
+
end
|
67
|
+
|
58
68
|
class LineItem < ActiveRecord::Base
|
59
69
|
belongs_to :order, inverse_of: :line_items
|
60
70
|
has_many :item_categories
|
data/test/tree_diff_test.rb
CHANGED
@@ -27,6 +27,10 @@ class TreeDiffTest < Minitest::Test
|
|
27
27
|
observe :number, orders_vehicles: {vehicle: :id}
|
28
28
|
end
|
29
29
|
|
30
|
+
class InvolvingOrderDetailDiff < TreeDiff
|
31
|
+
observe :number, detail: [:integration_id, :external_id]
|
32
|
+
end
|
33
|
+
|
30
34
|
class TableDiff < TreeDiff
|
31
35
|
observe wood_finish: [:color, :cost, :applied_at, :cost_mapping,
|
32
36
|
blemishes: [:severity]]
|
@@ -61,6 +65,18 @@ class TreeDiffTest < Minitest::Test
|
|
61
65
|
assert_nil diff.changes_at(:quantity)
|
62
66
|
end
|
63
67
|
|
68
|
+
def test_nil_associations
|
69
|
+
order = Order.create!(number: 'XYZ123')
|
70
|
+
|
71
|
+
diff = InvolvingOrderDetailDiff.new(order)
|
72
|
+
assert_empty diff.changes
|
73
|
+
|
74
|
+
order.update!(detail: ExtraOrderDetail.new(integration_id: '123', external_id: '321'))
|
75
|
+
|
76
|
+
assert_equal [{:path=>[:detail, :integration_id], :old=>nil, :new=>"123"},
|
77
|
+
{:path=>[:detail, :external_id], :old=>nil, :new=>"321"}], diff.changes
|
78
|
+
end
|
79
|
+
|
64
80
|
def test_big_tree
|
65
81
|
foo_category = ItemCategory.new(description: 'foo')
|
66
82
|
bar_category = ItemCategory.new(description: 'bar')
|
data/tree_diff.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'tree_diff'
|
3
|
-
s.version = '1.1.
|
3
|
+
s.version = '1.1.3'
|
4
4
|
s.date = '2019-08-23'
|
5
5
|
s.summary = "Observe attribute changes in big complex object trees, like a generic & standalone ActiveModel::Dirty"
|
6
6
|
s.description = "Given a tree of relationships in a similar format to strong params, analyzes attribute changes by " \
|