module RailsDynamicAssociations::ActiveRecord::Relations::ClassAndInstanceMethods
Public Instance Methods
relative?(args = {})
click to toggle source
# File lib/rails_dynamic_associations/active_record/relations.rb, line 30 def relative? args = {} find_relations(args). present? end
relatives(args = {})
click to toggle source
# File lib/rails_dynamic_associations/active_record/relations.rb, line 35 def relatives args = {} find_relations(args). map { |r| # TODO: optimize queries (association_directions.map { |d| r.send d } - [ self ]).first }.uniq end
Protected Instance Methods
find_relations(args = {})
click to toggle source
TODO: use keyword arguments
# File lib/rails_dynamic_associations/active_record/relations.rb, line 46 def find_relations args = {} # Rearrange arguments for direction, method in association_directions.shortcuts do args[direction] = args.delete method if method.in? args end roles = :as.in?(args) ? [ args[:as] ].flatten : [] if direction = association_directions.find { |a| a.in? args } then # direction specified find_relations_with_direction(direction, roles).send( association_directions.shortcuts[direction], args[direction] # apply a filtering scope ) else # both directions association_directions.map do |direction| find_relations_with_direction direction, roles end.sum end end
Private Instance Methods
find_relations_with_direction(direction, roles = [])
click to toggle source
# File lib/rails_dynamic_associations/active_record/relations.rb, line 70 def find_relations_with_direction direction, roles = [] if respond_to? association = "#{direction}_relations" then send(association).named roles else Relation.none end end