class EagerBeaver
Attributes
model[R]
preloads[R]
Public Class Methods
new(model, preloads)
click to toggle source
# File lib/eagerbeaver.rb, line 4 def initialize(model, preloads) @model = model @preloads = preloads end
Public Instance Methods
errors()
click to toggle source
# File lib/eagerbeaver.rb, line 9 def errors trace(model, preloads).flatten.compact end
Private Instance Methods
association_name(model_string, association_name_or_alias)
click to toggle source
# File lib/eagerbeaver.rb, line 28 def association_name(model_string, association_name_or_alias) association = match_association(model_string.to_s, association_name_or_alias) return association_name_or_alias unless association options = association.options if options[:through] && options[:source] source = options[:source_type] || options[:source] through = association_name(model_string, options[:through]) || association_name(options[:through], source) association_name(through, source) else options[:class_name] || association_name_or_alias end end
constantize(model_string)
click to toggle source
# File lib/eagerbeaver.rb, line 48 def constantize(model_string) if model_string.first == model_string.first.upcase model_string.singularize.constantize else model_string.split('_').map(&:capitalize).join.singularize.constantize end end
match_association(model_string, association)
click to toggle source
# File lib/eagerbeaver.rb, line 44 def match_association(model_string, association) constantize(model_string).reflect_on_all_associations.find { |a| a.name == association } end
trace(model, assoc)
click to toggle source
# File lib/eagerbeaver.rb, line 15 def trace(model, assoc) model_string = model.to_s.singularize.classify if assoc.is_a?(Array) assoc.map { |a| trace(model, a) } elsif assoc.is_a?(Hash) val = Array(trace(association_name(model_string, assoc.keys.first), assoc.values.first)) val << trace(model, assoc.keys.first) elsif assoc.is_a?(Symbol) && !model_string.constantize.reflect_on_all_associations.map(&:name).include?(assoc) "#{assoc} is not an association of #{model_string}" end end