module IronBank::Associations::ClassMethods

Define class methods

Public Instance Methods

with_many(name, options = {}) click to toggle source
# File lib/iron_bank/associations.rb, line 32
def with_many(name, options = {})
  resource_name = options.fetch(
    :resource_name,
    IronBank::Utils.camelize(name.to_s.chop)
  )

  foreign_key = options.fetch(
    :foreign_key,
    "#{IronBank::Utils.underscore(object_name)}_id"
  )

  define_method(name) do
    with_memoization(name) do
      # NOTE: we retrieve the constant here to prevent the need to order
      # our `require <file>` statements in `iron_bank.rb`
      klass      = IronBank::Resources.const_get(resource_name)
      conditions = options.fetch(:conditions, {}).
                   merge("#{foreign_key}": id)
      items      = klass.where(conditions)
      IronBank::Collection.new(klass, conditions, items)
    end
  end

  alias_name = options[:alias]
  alias_method alias_name, name if alias_name
end
with_one(name, options = {}) click to toggle source
# File lib/iron_bank/associations.rb, line 10
def with_one(name, options = {})
  resource_name = options.fetch(
    :resource_name,
    IronBank::Utils.camelize(name)
  )
  foreign_key = options.fetch(:foreign_key, "#{name}_id")

  define_method(name) do
    return unless (foreign_key_value = public_send(foreign_key))

    with_memoization(name) do
      # NOTE: we retrieve the constant here to prevent the need to order
      # our `require <file>` statements in `iron_bank.rb`
      klass = IronBank::Resources.const_get(resource_name)
      klass.find(foreign_key_value)
    end
  end

  alias_name = options[:alias]
  alias_method alias_name, name if alias_name
end