module ZTK::DSL::Core::Relations::BelongsTo::ClassMethods

@author Zachary Patten <zpatten AT jovelabs DOT io>

Public Instance Methods

belongs_to(key, options={}) click to toggle source
# File lib/ztk/dsl/core/relations/belongs_to.rb, line 50
def belongs_to(key, options={})
  belongs_to_relations[key] = {
    :class_name => key.to_s.classify,
    :key => key
  }.merge(options)

  define_method(key) do |*args|
    if args.count == 0
      get_belongs_to_reference(key)
    else
      send("#{key}=", *args)
    end
  end

  define_method("#{key}=") do |value|
    set_belongs_to_reference(key, value)
  end

  define_method("#{key}_id") do |*args|
    if args.count == 0
      attributes["#{key}_id".to_sym]
    else
      send("#{key}_id=".to_sym, args.first)
    end
  end

  define_method("#{key}_id=") do |value|
    options = self.class.belongs_to_relations[key]
    if value != attributes["#{key}_id".to_sym]
      item = options[:class_name].constantize.find(value).first
      set_belongs_to_reference(key, item)
    else
      value
    end
  end

end