activeshepherd 0.8.2 → 0.8.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 153175687781797f0c540d8d0f3dfb197fdf5614
|
4
|
+
data.tar.gz: b9313dacab98cc1705485bedc41681edd150b337
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2fd7733faa80b4a9bddf7e6eecac5a2739774e9c157fbbe06621f3960e54143803aab9ec88826e717c83741cb281231d1151104a1fc4f6db7f2e44e318fb47f
|
7
|
+
data.tar.gz: b4a4fc0c6d5104a9c2d5746532ac3bf88e241040d7d27e68e4a5814b6faa3c0bec639a469a8b341b972b97d0677a8e626a0950585529fd61635a2bcf09e45f2b
|
@@ -33,6 +33,19 @@ class ActiveShepherd::Aggregate
|
|
33
33
|
run_through_serializer(attribute_name, value, :load)
|
34
34
|
end
|
35
35
|
|
36
|
+
def in_namespace?(name)
|
37
|
+
my_namespace = model.class.to_s
|
38
|
+
if name == my_namespace
|
39
|
+
false
|
40
|
+
elsif name.deconstantize == my_namespace
|
41
|
+
true
|
42
|
+
elsif name.deconstantize == my_namespace.deconstantize && !name.deconstantize.blank?
|
43
|
+
true
|
44
|
+
else
|
45
|
+
false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
36
49
|
private
|
37
50
|
|
38
51
|
def associations
|
@@ -62,6 +75,7 @@ private
|
|
62
75
|
def traverse_association?(association)
|
63
76
|
return false if association.options[:readonly]
|
64
77
|
return false if association.macro == :belongs_to
|
78
|
+
return false unless in_namespace?(association.klass.to_s)
|
65
79
|
|
66
80
|
true
|
67
81
|
end
|
@@ -296,6 +296,17 @@ class IntegrationTest < MiniTest::Unit::TestCase
|
|
296
296
|
assert_equal :mango, @project.fruit
|
297
297
|
end
|
298
298
|
|
299
|
+
def test_changes_to_one_aggregate_do_not_include_associated_aggregate
|
300
|
+
build_persisted_state
|
301
|
+
|
302
|
+
@owner = User.create! name: 'Joe Schmoe'
|
303
|
+
@project.owner = @owner
|
304
|
+
@project.save!
|
305
|
+
@owner.reload
|
306
|
+
|
307
|
+
refute @owner.aggregate_state.has_key?(:projects)
|
308
|
+
end
|
309
|
+
|
299
310
|
private
|
300
311
|
|
301
312
|
# Test 'changes' behavior with this common background
|
data/test/setup_test_models.rb
CHANGED
@@ -39,7 +39,12 @@ ActiveRecord::Migration.create_table :project_todo_assignments, force: true do |
|
|
39
39
|
end
|
40
40
|
|
41
41
|
|
42
|
-
User
|
42
|
+
class User < ActiveRecord::Base
|
43
|
+
act_as_aggregate_root!
|
44
|
+
|
45
|
+
has_many :projects, inverse_of: :owner, dependent: :destroy, autosave: true,
|
46
|
+
validate: true, foreign_key: :owner_id
|
47
|
+
end
|
43
48
|
|
44
49
|
class Comment < ActiveRecord::Base
|
45
50
|
belongs_to :commentable, polymorphic: true, counter_cache: true
|
@@ -49,7 +54,7 @@ end
|
|
49
54
|
class Project < ActiveRecord::Base
|
50
55
|
act_as_aggregate_root!
|
51
56
|
|
52
|
-
belongs_to :owner, class_name: "User"
|
57
|
+
belongs_to :owner, class_name: "User", inverse_of: :projects, touch: true
|
53
58
|
|
54
59
|
has_one :detail, inverse_of: :project, dependent: :destroy, autosave: true
|
55
60
|
|
data/test/unit/aggregate_test.rb
CHANGED
@@ -1,4 +1,27 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
+
class MyKlass
|
4
|
+
SubKlass = Class.new
|
5
|
+
end
|
6
|
+
|
3
7
|
class AggregateTest < MiniTest::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
@aggregate = ActiveShepherd::Aggregate.new MyKlass.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_in_namespace_returns_true_only_if_associated_klass_in_namespace
|
13
|
+
refute @aggregate.in_namespace?('MyKlass')
|
14
|
+
assert @aggregate.in_namespace?('MyKlass::SubKlass')
|
15
|
+
refute @aggregate.in_namespace?('MyKlass::SubKlass::SubSubKlass')
|
16
|
+
assert @aggregate.in_namespace?('MyKlass::Foo')
|
17
|
+
refute @aggregate.in_namespace?('Foo')
|
18
|
+
|
19
|
+
@aggregate = ActiveShepherd::Aggregate.new MyKlass::SubKlass.new
|
20
|
+
refute @aggregate.in_namespace?('MyKlass')
|
21
|
+
refute @aggregate.in_namespace?('MyKlass::SubKlass')
|
22
|
+
assert @aggregate.in_namespace?('MyKlass::SubKlass::SubSubKlass')
|
23
|
+
assert @aggregate.in_namespace?('MyKlass::Foo')
|
24
|
+
assert @aggregate.in_namespace?('MyKlass::SubSubKlass')
|
25
|
+
refute @aggregate.in_namespace?('Foo')
|
26
|
+
end
|
4
27
|
end
|