schema_associations 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/lib/schema_associations/active_record/associations.rb +19 -3
- data/lib/schema_associations/version.rb +1 -1
- data/spec/association_spec.rb +11 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 395a9d8c36949f31bba7558d51be3dda54be2bfb
|
4
|
+
data.tar.gz: c6807a2b495005257d0d749de2216625e5332899
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4535711d17dc740000c135b41a42816d3dc5be8c0ad616c292870c43e2948b96132e914fd43a964ac3f6646aeb61e58f78c879b8d06353eafaf8638b12eb568
|
7
|
+
data.tar.gz: 112912f68d8a1f3b20151ac5799fd7f997d63b32ad2386c9464158105a2292fd9cf7b7bf3df924a838378b32739a135ebb7405daa047a193b75ec8034e7bc685
|
data/README.md
CHANGED
@@ -353,6 +353,10 @@ Code coverage results will be in coverage/index.html -- it should be at 100% cov
|
|
353
353
|
|
354
354
|
## Release notes:
|
355
355
|
|
356
|
+
### 1.2.2
|
357
|
+
|
358
|
+
* Bug fix (Rails workaround) for STI: propagate associations to subclasses, since Rails might not, depending on the load order.
|
359
|
+
|
356
360
|
### 1.2.1
|
357
361
|
|
358
362
|
* Works with Rails 4.1
|
@@ -114,6 +114,9 @@ module SchemaAssociations
|
|
114
114
|
|
115
115
|
names = _determine_association_names(column_name.sub(/_id$/, ''), referencing_name, references_name)
|
116
116
|
|
117
|
+
argstr = ""
|
118
|
+
|
119
|
+
|
117
120
|
case macro
|
118
121
|
when :has_and_belongs_to_many
|
119
122
|
name = names[:has_many]
|
@@ -145,20 +148,33 @@ module SchemaAssociations
|
|
145
148
|
opts[:order] = :position
|
146
149
|
else
|
147
150
|
scope_block = lambda { order :position }
|
151
|
+
argstr += "-> { order :position }, "
|
148
152
|
end
|
149
153
|
end
|
150
154
|
end
|
151
155
|
end
|
156
|
+
argstr += opts.inspect[1...-1]
|
152
157
|
if (_filter_association(macro, name) && !_method_exists?(name))
|
153
|
-
logger.info "[schema_associations] #{self.name || self.table_name.classify}.#{macro} #{name.inspect}, #{opts.inspect[1...-1]}"
|
154
158
|
if ::ActiveRecord::VERSION::MAJOR.to_i < 4
|
155
|
-
|
159
|
+
_create_association(macro, name, argstr, opts.dup)
|
156
160
|
else
|
157
|
-
|
161
|
+
_create_association(macro, name, argstr, scope_block, opts.dup)
|
158
162
|
end
|
159
163
|
end
|
160
164
|
end
|
161
165
|
|
166
|
+
def _create_association(macro, name, argstr, *args)
|
167
|
+
logger.info "[schema_associations] #{self.name || self.table_name.classify}.#{macro} #{name.inspect}, #{argstr}"
|
168
|
+
send macro, name, *args
|
169
|
+
case
|
170
|
+
when respond_to?(:subclasses) then subclasses
|
171
|
+
when respond_to?(:descendants) then descendants
|
172
|
+
end.each do |subclass|
|
173
|
+
subclass.send :_create_association, macro, name, argstr, *args
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
|
162
178
|
def _determine_association_names(reference_name, referencing_name, references_name)
|
163
179
|
|
164
180
|
references_concise = _concise_name(references_name, referencing_name)
|
data/spec/association_spec.rb
CHANGED
@@ -614,16 +614,26 @@ describe ActiveRecord::Base do
|
|
614
614
|
before(:each) do
|
615
615
|
create_tables(
|
616
616
|
"posts", {}, {},
|
617
|
-
"comments", {}, { :post_id => {}, :type => {coltype: :string} }
|
617
|
+
"comments", {}, { :post_id => {}, :type => {coltype: :string} },
|
618
|
+
"citers", {}, {},
|
619
|
+
"citations", {}, { :comment_id => {}, :citer_id => {}}
|
618
620
|
)
|
619
621
|
class Post < ActiveRecord::Base ; end
|
620
622
|
class Comment < ActiveRecord::Base ; end
|
623
|
+
class Citation < ActiveRecord::Base ; end
|
621
624
|
class SubComment < Comment ; end
|
625
|
+
class OwnComment < Comment
|
626
|
+
has_one :citer, :through => :citations
|
627
|
+
end
|
622
628
|
end
|
623
629
|
|
624
630
|
it "defines association for subclass" do
|
625
631
|
expect(SubComment.reflect_on_association(:post)).not_to be_nil
|
626
632
|
end
|
633
|
+
|
634
|
+
it "defines association for subclass that has its own associations" do
|
635
|
+
expect(OwnComment.reflect_on_association(:post)).not_to be_nil
|
636
|
+
end
|
627
637
|
end
|
628
638
|
|
629
639
|
|