referrable_joins 0.1.1 → 0.2.0

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.
@@ -1,8 +1,39 @@
1
1
  module ActiveRecord
2
2
 
3
+ class ReflectionTable
4
+
5
+ attr_reader :association
6
+ attr_accessor :relation
7
+
8
+ def [](name)
9
+ relation.columns.find { |col| col.name == name }
10
+ end
11
+
12
+ def initialize(table, association)
13
+ @association = association
14
+ @relation = Arel::Table.new(table, ActiveRecord::Base)
15
+ end
16
+
17
+ def mirror_relation(other)
18
+ ["engine", "columns", "table_alias"].each do |ivar|
19
+ @relation.instance_variable_set("@#{ivar}", other.instance_variable_get("@#{ivar}"))
20
+ end
21
+ end
22
+
23
+ def to_s
24
+ @association.to_s
25
+ end
26
+
27
+ end
28
+
3
29
  class Base
4
30
  class << self
5
31
  delegate :outer_joins, :inner_joins, :to => :scoped
32
+
33
+ def reflection_table(reflection)
34
+ ActiveRecord::ReflectionTable.new(self.reflections[reflection].table_name.to_sym)
35
+ end
36
+
6
37
  end
7
38
  end
8
39
 
@@ -70,11 +101,11 @@ module ActiveRecord
70
101
  outer_joins = @outer_joins_values.map {|j| j.respond_to?(:strip) ? j.strip : j}.uniq
71
102
 
72
103
  inner_joins.each do |join|
73
- inner_association_joins << join if [Hash, Array, Symbol, ReferrableJoin].include?(join.class) && !array_of_strings?(join)
104
+ inner_association_joins << join if [Hash, Array, Symbol, ActiveRecord::ReflectionTable].include?(join.class) && !array_of_strings?(join)
74
105
  end
75
106
 
76
107
  outer_joins.each do |join|
77
- outer_association_joins << join if [Hash, Array, Symbol, ReferrableJoin].include?(join.class) && !array_of_strings?(join)
108
+ outer_association_joins << join if [Hash, Array, Symbol, ActiveRecord::ReflectionTable].include?(join.class) && !array_of_strings?(join)
78
109
  end
79
110
 
80
111
  stashed_association_joins = (inner_joins + outer_joins).grep(ActiveRecord::Associations::ClassMethods::JoinDependency::JoinAssociation)
@@ -128,15 +159,15 @@ module ActiveRecord
128
159
  def build(associations, parent = nil, join_type = Arel::InnerJoin)
129
160
  parent ||= @joins.last
130
161
  case associations
131
- # MONKEYPATCH Added ReferrableJoin here
132
- when Symbol, String, ReferrableJoin
162
+ # MONKEYPATCH Added ActiveRecord::ReflectionTable here
163
+ when Symbol, String, ActiveRecord::ReflectionTable
133
164
  reflection = parent.reflections[associations.to_s.intern] or
134
165
  raise ConfigurationError, "Association named '#{ associations }' was not found; perhaps you misspelled it\?"
135
166
  unless join_association = find_join_association(reflection, parent)
136
167
  @reflections << reflection
137
168
  join_association = build_join_association(reflection, parent)
138
169
  # <MONKEYPATCH added this conditional
139
- if associations.kind_of?(ReferrableJoin)
170
+ if associations.kind_of?(ActiveRecord::ReflectionTable)
140
171
  associations.mirror_relation(join_association.relation)
141
172
  end
142
173
  # >MONKEYPATCH
@@ -1,3 +1,3 @@
1
1
  module ReferrableJoins
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,29 +1,3 @@
1
- class ReferrableJoin
2
-
3
- attr_reader :association
4
- attr_accessor :relation
5
-
6
- def [](name)
7
- relation.columns.find { |col| col.name == name }
8
- end
9
-
10
- def initialize(table, association)
11
- @association = association
12
- @relation = Arel::Table.new(table, ActiveRecord::Base)
13
- end
14
-
15
- def mirror_relation(other)
16
- ["engine", "columns", "table_alias"].each do |ivar|
17
- @relation.instance_variable_set("@#{ivar}", other.instance_variable_get("@#{ivar}"))
18
- end
19
- end
20
-
21
- def to_s
22
- @association.to_s
23
- end
24
-
25
- end
26
-
27
1
  path = File.join(File.dirname(__FILE__), 'referrable_joins')
28
2
  $:.unshift(path) unless $:.include?(path)
29
3
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: referrable_joins
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Burke Libbey