class Hario::PluckParser
Attributes
join_clause[RW]
pluck_clause[RW]
Public Class Methods
new(pluck, klass)
click to toggle source
# File lib/hario/behaviours/pluck.rb, line 9 def initialize(pluck, klass) @pluck = pluck @klass = klass parse_pluck end
Private Instance Methods
parse_namespace(namespace)
click to toggle source
# File lib/hario/behaviours/pluck.rb, line 42 def parse_namespace(namespace) parts = namespace.split('.') attribute = parts.pop association_chain = parts [association_chain, attribute] end
parse_pluck()
click to toggle source
# File lib/hario/behaviours/pluck.rb, line 17 def parse_pluck @join_clause = {} @pluck_clause = [[@klass.table_name, 'id'].join('.')] ns, no_ns = @pluck.partition{ |p| p.include?('.') } no_ns.each do |p| raise_if_unlisted_attribute!(:pluck, @klass, p) @pluck_clause << [@klass.table_name, p].join('.') end ns.each do |p| association_chain, attribute = parse_namespace(p) end_model = end_model_from_association_chain(association_chain) raise_if_unlisted_attribute!(:pluck, end_model, attribute) nested_associations = (association_chain.dup << {}).reverse.inject { |v, key| { key => v } } @join_clause.deep_merge!(nested_associations) attribute_table = table_name_from_association_chain(association_chain) @pluck_clause << [attribute_table, attribute].join('.') end end