Class: BabySqueel::Association
- Defined in:
- lib/baby_squeel/association.rb
Defined Under Namespace
Classes: AliasingError
Instance Attribute Summary collapse
-
#_reflection ⇒ Object
readonly
Returns the value of attribute _reflection.
Attributes inherited from Table
Instance Method Summary collapse
-
#_arel(associations = []) ⇒ Object
Intelligently constructs Arel nodes.
-
#initialize(parent, reflection) ⇒ Association
constructor
A new instance of Association.
Methods inherited from Table
#[], #alias, #alias!, #association, #inner, #inner!, #on, #on!, #outer, #outer!
Constructor Details
#initialize(parent, reflection) ⇒ Association
Returns a new instance of Association.
18 19 20 21 22 |
# File 'lib/baby_squeel/association.rb', line 18 def initialize(parent, reflection) @parent = parent @_reflection = reflection super(@_reflection.klass) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class BabySqueel::Table
Instance Attribute Details
#_reflection ⇒ Object (readonly)
Returns the value of attribute _reflection.
16 17 18 |
# File 'lib/baby_squeel/association.rb', line 16 def _reflection @_reflection end |
Instance Method Details
#_arel(associations = []) ⇒ Object
Intelligently constructs Arel nodes. There are three outcomes:
-
The user explicitly constructed their join using #on. See BabySqueel::Table#_arel.
-
The user aliased an implicitly joined association. ActiveRecord’s join dependency gives us no way of handling this, so we have to throw an error.
-
The user implicitly joined this association, so we pass this association up the tree until it hits the top-level BabySqueel::Table. Once it gets there, Arel join nodes will be constructed.
36 37 38 39 40 41 42 43 44 |
# File 'lib/baby_squeel/association.rb', line 36 def _arel(associations = []) if _on super elsif _table.is_a? Arel::Nodes::TableAlias raise AliasingError.new(_reflection.name, _table.right) else @parent._arel([self, *associations]) end end |