module Ardm::Ar::Associations

Public Class Methods

convert_options(klass, options, *keep) click to toggle source

Convert options from DM style to AR style.

Keep any unknown keys to use as conditions.

# File lib/ardm/ar/associations.rb, line 11
def self.convert_options(klass, options, *keep)
  keep += [:class_name, :foreign_key]

  ar = options.dup
  ar[:class_name]  = ar.delete(:model)      if ar[:model]
  ar[:foreign_key] = ar.delete(:child_key)  if ar[:child_key]
  ar[:source]      = ar.delete(:via)        if ar[:via]
  ar[:foreign_key] = ar[:foreign_key].first if ar[:foreign_key].respond_to?(:to_ary)

  if ar[:foreign_key] && property = klass.properties[ar[:foreign_key]]
    ar[:foreign_key] = property.field
  end

  if Ardm.rails3?
    if (conditions = ar.slice!(*keep)).any?
      ar[:conditions] = conditions
    end
    [ar]
  else
    order = ar.delete(:order)
    conditions = ar.slice!(*keep)
    # sigh
    block = if conditions.any? && order
              lambda { where(conditions).order(order) }
            elsif conditions.any?
              lambda { where(conditions) }
            elsif order
              lambda { order(order) }
            end
    [block, ar].compact
  end
end