polyamorous 0.6.0 → 0.6.2
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.
@@ -6,6 +6,9 @@ module Polyamorous
|
|
6
6
|
alias_method_chain :initialize, :polymorphism
|
7
7
|
alias_method :equality_without_polymorphism, :==
|
8
8
|
alias_method :==, :equality_with_polymorphism
|
9
|
+
if base.method_defined?(:active_record)
|
10
|
+
alias_method :base_klass, :active_record
|
11
|
+
end
|
9
12
|
|
10
13
|
if ActiveRecord::VERSION::STRING =~ /^3\.0\./
|
11
14
|
alias_method_chain :association_join, :polymorphism
|
@@ -35,7 +38,7 @@ module Polyamorous
|
|
35
38
|
end
|
36
39
|
|
37
40
|
def equality_with_polymorphism(other)
|
38
|
-
equality_without_polymorphism(other) &&
|
41
|
+
equality_without_polymorphism(other) && base_klass == other.base_klass
|
39
42
|
end
|
40
43
|
|
41
44
|
def build_constraint_with_polymorphism(reflection, table, key, foreign_table, foreign_key)
|
@@ -60,7 +63,7 @@ module Polyamorous
|
|
60
63
|
|
61
64
|
parent_table = Arel::Table.new(parent.table_name, :as => parent.aliased_table_name,
|
62
65
|
:engine => arel_engine,
|
63
|
-
:columns => parent.
|
66
|
+
:columns => parent.base_klass.columns)
|
64
67
|
|
65
68
|
@join << parent_table[reflection.options[:foreign_type]].eq(reflection.klass.name)
|
66
69
|
end
|
@@ -69,4 +72,4 @@ module Polyamorous
|
|
69
72
|
end
|
70
73
|
|
71
74
|
end
|
72
|
-
end
|
75
|
+
end
|
@@ -5,6 +5,9 @@ module Polyamorous
|
|
5
5
|
base.class_eval do
|
6
6
|
alias_method_chain :build, :polymorphism
|
7
7
|
alias_method_chain :graft, :polymorphism
|
8
|
+
if base.method_defined?(:active_record)
|
9
|
+
alias_method :base_klass, :active_record
|
10
|
+
end
|
8
11
|
end
|
9
12
|
end
|
10
13
|
|
@@ -58,7 +61,7 @@ module Polyamorous
|
|
58
61
|
unless reflection.options[:polymorphic]
|
59
62
|
association
|
60
63
|
else
|
61
|
-
association if association.
|
64
|
+
association if association.base_klass == klass
|
62
65
|
end
|
63
66
|
end
|
64
67
|
end
|
@@ -72,4 +75,4 @@ module Polyamorous
|
|
72
75
|
end
|
73
76
|
|
74
77
|
end
|
75
|
-
end
|
78
|
+
end
|
data/lib/polyamorous/version.rb
CHANGED
@@ -2,5 +2,26 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Polyamorous
|
4
4
|
describe JoinAssociation do
|
5
|
+
let(:join_dependency) { new_join_dependency Note, {} }
|
6
|
+
let(:parent) { join_dependency.join_base }
|
7
|
+
let(:reflection) { Note.reflect_on_association(:notable) }
|
8
|
+
subject {
|
9
|
+
join_dependency.build_join_association_respecting_polymorphism(
|
10
|
+
reflection, parent, Person
|
11
|
+
)
|
12
|
+
}
|
13
|
+
|
14
|
+
it 'respects polymorphism on equality test' do
|
15
|
+
subject.should eq(
|
16
|
+
join_dependency.build_join_association_respecting_polymorphism(
|
17
|
+
reflection, parent, Person
|
18
|
+
)
|
19
|
+
)
|
20
|
+
subject.should_not eq(
|
21
|
+
join_dependency.build_join_association_respecting_polymorphism(
|
22
|
+
reflection, parent, Article
|
23
|
+
)
|
24
|
+
)
|
25
|
+
end
|
5
26
|
end
|
6
|
-
end
|
27
|
+
end
|
@@ -37,6 +37,14 @@ module Polyamorous
|
|
37
37
|
specify { subject.join_associations.should have(1).association }
|
38
38
|
specify { subject.join_associations.should be_all { |a| a.join_type == Arel::InnerJoin } }
|
39
39
|
specify { subject.join_associations.first.table_name.should eq 'people' }
|
40
|
+
|
41
|
+
it 'finds a join association respecting polymorphism' do
|
42
|
+
parent = subject.join_base
|
43
|
+
reflection = Note.reflect_on_association(:notable)
|
44
|
+
subject.find_join_association_respecting_polymorphism(
|
45
|
+
reflection, parent, Person
|
46
|
+
).should eq subject.join_associations.first
|
47
|
+
end
|
40
48
|
end
|
41
49
|
|
42
50
|
context 'with polymorphic belongs_to join and nested symbol join' do
|
@@ -49,4 +57,4 @@ module Polyamorous
|
|
49
57
|
end
|
50
58
|
|
51
59
|
end
|
52
|
-
end
|
60
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polyamorous
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -136,7 +136,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
136
136
|
version: '0'
|
137
137
|
segments:
|
138
138
|
- 0
|
139
|
-
hash:
|
139
|
+
hash: 2316863332699379483
|
140
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
141
|
none: false
|
142
142
|
requirements:
|
@@ -145,10 +145,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
145
|
version: '0'
|
146
146
|
segments:
|
147
147
|
- 0
|
148
|
-
hash:
|
148
|
+
hash: 2316863332699379483
|
149
149
|
requirements: []
|
150
150
|
rubyforge_project: polyamorous
|
151
|
-
rubygems_version: 1.8.
|
151
|
+
rubygems_version: 1.8.25
|
152
152
|
signing_key:
|
153
153
|
specification_version: 3
|
154
154
|
summary: Loves/is loved by polymorphic belongs_to associations, Ransack, Squeel, MetaSearch...
|