module ActiveRecord::WithEagerGroup
Public Instance Methods
eager_group(*args)
click to toggle source
# File lib/active_record/with_eager_group.rb, line 11 def eager_group(*args) # we does not use the `check_if_method_has_arguments!` here because it would flatten all the arguments, # which would cause `[:eager_group_definition, scope_arg1, scope_arg2]` not able to preload together with other `eager_group_definitions`. # e.g. `Post.eager_group(:approved_comments_count, [:comments_average_rating_by_author, students[0], true])` check_argument_not_blank!(args) check_argument_valid!(args) spawn.eager_group!(*args) end
eager_group!(*args)
click to toggle source
# File lib/active_record/with_eager_group.rb, line 21 def eager_group!(*args) self.eager_group_values |= args self end
eager_group_values()
click to toggle source
# File lib/active_record/with_eager_group.rb, line 26 def eager_group_values @values[:eager_group] || [] end
eager_group_values=(values)
click to toggle source
# File lib/active_record/with_eager_group.rb, line 30 def eager_group_values=(values) raise ImmutableRelation if @loaded @values[:eager_group] = values end
exec_queries()
click to toggle source
Calls superclass method
# File lib/active_record/with_eager_group.rb, line 5 def exec_queries records = super EagerGroup::Preloader.new(klass, records, eager_group_values).run if eager_group_values.present? records end
Private Instance Methods
check_argument_not_blank!(args)
click to toggle source
# File lib/active_record/with_eager_group.rb, line 38 def check_argument_not_blank!(args) raise ArgumentError, "The method .eager_group() must contain arguments." if args.blank? args.compact_blank! end
check_argument_valid!(args)
click to toggle source
# File lib/active_record/with_eager_group.rb, line 43 def check_argument_valid!(args) args.each do |eager_group_value| check_eager_group_definitions_exists!(klass, eager_group_value) end end
check_eager_group_definitions_exists!(klass, eager_group_value)
click to toggle source
# File lib/active_record/with_eager_group.rb, line 49 def check_eager_group_definitions_exists!(klass, eager_group_value) case eager_group_value when Symbol, String raise ArgumentError, "Unknown eager group definition :#{eager_group_value}" unless klass.eager_group_definitions.has_key?(eager_group_value) when Array definition_name = eager_group_value.first raise ArgumentError, "Unknown eager group definition :#{definition_name}" unless klass.eager_group_definitions.has_key?(definition_name) when Hash eager_group_value.each do |association_name, association_eager_group_values| association_klass = klass.reflect_on_association(association_name).klass Array.wrap(association_eager_group_values).each do |association_eager_group_value| check_eager_group_definitions_exists!(association_klass, association_eager_group_value) end end else raise ArgumentError, "Unknown eager_group argument :#{eager_group_value.inspect}" end end