module SuperListActiveRecord::ClassMethods

Public Instance Methods

super_list(column, data, options={}) click to toggle source
# File lib/super_list.rb, line 82
def super_list(column, data, options={})
  data = SuperList[data]
  options = data.options.merge(options)

  before_validation do
    value = attributes[column.to_s]
    keys  = data.keys

    if !keys.include?(value)
      index = data.values.find_index(value)
      if index
        self.send("#{column}=", keys[index])
      elsif options[:allow_blank] && value.blank?
        # do nothing
      elsif !options[:no_validation]
        self.errors.add(column, I18n.t('errors.messages.inclusion'))
        return false
      end
    end
    return true
  end

  define_method "#{column}" do |*opts|
    key = attributes[column.to_s]
    if opts.blank? && SuperList.options[:format].blank?
      key
    else
      format = opts[0].is_a?(Symbol) ? opts[0] : nil
      opts   = opts[1].is_a?(Hash) ? opts[1] : (opts[0].is_a?(Hash) ? opts[0] : {})
      data.get_value(key, format, options.merge(opts))
    end
  end
end