module StringifyDate::ActiveRecord::Stringify::ClassMethods

Public Instance Methods

stringify(field, *args) click to toggle source
# File lib/stringify_date/active_record/stringify.rb, line 22
def stringify(field, *args)
  column_name = field.to_s
  options     = args.extract_options!
  format      = options[:format] || '%Y-%m-%d'
  name        = [column_name, 'string'].join('_')

  define_method name do
    date = send(column_name)
    date.strftime(format) if date.present?
  end

  define_method "#{name}=" do |value|
    parsed_value = parse_value(name, value, format)
    send("#{column_name}=", parsed_value)
  end

  define_method "validate_#{name}" do
    errors.add(name.to_sym, I18n.t('errors.invalid')) if instance_variable_get("@#{name}_invalid")
  end

  send(:validate, :"validate_#{name}")
end