module YamlEnumeration::Association

Public Instance Methods

belongs_to_enumeration(enumeration, options={}) click to toggle source
# File lib/yaml_enumeration/association.rb, line 4
def belongs_to_enumeration(enumeration, options={})
  class_name = options[:class_name] ? options[:class_name] : enumeration

  define_method(enumeration) do
    local_instance = self.instance_variable_get("@#{enumeration}")
    local_id = send("#{enumeration}_id")
    if local_instance && local_instance.id == local_id
      local_instance
    else
      self.instance_variable_set("@#{enumeration}", local_id && class_name.to_s.classify.constantize.find_by_id(local_id))
    end
  end

  define_method("#{enumeration}=") do |instance|
    send("#{enumeration}_id=", instance.try(:id))
  end
end