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