# class ActiveRecord::Reflection::MacroReflection

Base class for AggregateReflection and AssociationReflection. Objects of AggregateReflection and AssociationReflection are returned by the Reflection::ClassMethods.

### Attributes

active_record[R]
name[R]

Returns the name of the macro.

`composed_of :balance, class_name: 'Money'` returns `:balance` `has_many :clients` returns `:clients`

options[R]

Returns the hash of options used for the macro.

`composed_of :balance, class_name: 'Money'` returns `{ class_name: "Money" }` `has_many :clients` returns `{}`

scope[R]

### Public Class Methods

new(name, scope, options, active_record) click to toggle source

    # File lib/active_record/reflection.rb, line 314
    def initialize(name, scope, options, active_record)
      @name          = name
      @scope         = scope
      @options       = options
      @active_record = active_record
      @klass         = options[:anonymous_class]
      @plural_name   = active_record.pluralize_table_names ?
                          name.to_s.pluralize : name.to_s
    end

### Public Instance Methods

==(other_aggregation) click to toggle source

Returns `true` if `self` and `other_aggregation` have the same `name` attribute, `active_record` attribute, and `other_aggregation` has an options hash assigned to it.

Calls superclass method

    # File lib/active_record/reflection.rb, line 346
    def ==(other_aggregation)
      super ||
        other_aggregation.kind_of?(self.class) &&
        name == other_aggregation.name &&
        !other_aggregation.options.nil? &&
        active_record == other_aggregation.active_record
    end

autosave=(autosave) click to toggle source

    # File lib/active_record/reflection.rb, line 324
    def autosave=(autosave)
      @options[:autosave] = autosave
      parent_reflection = self.parent_reflection
      if parent_reflection
        parent_reflection.autosave = autosave
      end
    end

compute_class(name) click to toggle source

    # File lib/active_record/reflection.rb, line 340
    def compute_class(name)
      name.constantize
    end

klass() click to toggle source

Returns the class for the macro.

`composed_of :balance, class_name: 'Money'` returns the Money class `has_many :clients` returns the Client class

    # File lib/active_record/reflection.rb, line 336
    def klass
      @klass ||= compute_class(class_name)
    end

scope_for(klass) click to toggle source

    # File lib/active_record/reflection.rb, line 354
    def scope_for(klass)
      scope ? klass.unscoped.instance_exec(nil, &scope) : klass.unscoped
    end

### Private Instance Methods

derive_class_name() click to toggle source

    # File lib/active_record/reflection.rb, line 359
    def derive_class_name
      name.to_s.camelize
    end