class ActiveAny::Associations::Builder::Association

Constants

VALID_OPTIONS

Public Class Methods

build(klass, name, scope, options) click to toggle source
# File lib/active_any/associations/builder/association.rb, line 7
def self.build(klass, name, scope, options)
  reflection = create_reflection(klass, name, scope, options)
  define_accessors klass, reflection
  reflection
end
build_scope(scope) click to toggle source
# File lib/active_any/associations/builder/association.rb, line 35
def self.build_scope(scope)
  new_scope = scope

  new_scope = proc { instance_exec(&scope) } if scope && scope.arity.zero?

  new_scope
end
create_reflection(klass, name, scope, options) click to toggle source
# File lib/active_any/associations/builder/association.rb, line 23
def self.create_reflection(klass, name, scope, options)
  if scope.is_a?(::Hash)
    options = scope
    scope   = nil
  end

  validate_options(options)
  scope = build_scope scope

  ActiveAny::Reflection.create(macro, name, scope, options, klass)
end
define_accessors(klass, reflection) click to toggle source
# File lib/active_any/associations/builder/association.rb, line 43
def self.define_accessors(klass, reflection)
  mixin = klass.generated_association_methods
  name = reflection.name
  define_readers(mixin, name)
  define_writers(mixin, name)
end
define_readers(mixin, name) click to toggle source
# File lib/active_any/associations/builder/association.rb, line 50
        def self.define_readers(mixin, name)
          mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
            def #{name}(*args)
              association(:#{name}).reader(*args)
            end
          CODE
        end
define_writers(mixin, name) click to toggle source
# File lib/active_any/associations/builder/association.rb, line 58
        def self.define_writers(mixin, name)
          mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
            def #{name}=(value)
              association(:#{name}).writer(value)
            end
          CODE
        end
valid_options(_options) click to toggle source
# File lib/active_any/associations/builder/association.rb, line 15
def self.valid_options(_options)
  VALID_OPTIONS
end
validate_options(options) click to toggle source
# File lib/active_any/associations/builder/association.rb, line 19
def self.validate_options(options)
  options.assert_valid_keys(valid_options(options))
end