Module: YamlEnumeration::Association

Included in:
Enumeration
Defined in:
lib/yaml_enumeration/association.rb

Instance Method Summary collapse

Instance Method Details

#belongs_to_enumeration(enumeration, options = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 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