module BetterDatePicker::Model::ClassMethods

Public Instance Methods

better_date_format() click to toggle source
# File lib/better_date_picker/model.rb, line 59
def better_date_format
 "%m/%d/%Y"
end
better_date_picker(field, options = {}) click to toggle source
Calls superclass method
# File lib/better_date_picker/model.rb, line 16
def better_date_picker(field, options = {})
  self.better_date_fields ||= []
  self.better_date_defaults ||= {}

  if self.better_date_fields.empty?
    after_validation :propagate_better_date_errors
  end

  define_method "#{field}=" do |date_val|
    #we don't want to clobber the ivar if we're setting via the string
    val_to_set = date_val.nil? ? nil : date_val.strftime(self.class.better_date_format)
    instance_variable_set("@#{field}_date", val_to_set)

    #if the setter is not defined as a method, just set the ivar
    begin
      super(date_val)
    rescue NoMethodError => e
      instance_variable_set("@#{field}", date_val)
    end

  end

  define_method "#{field}_date" do
    string_val = instance_variable_get("@#{field}_date")
    if string_val.nil?
      if the_date = self.send(field)
        the_date.strftime(self.class.better_date_format)
      end
    else
      string_val
    end
  end

  define_method "#{field}_date=" do |stringified_date|
    instance_variable_set("@#{field}_date", stringified_date)
    self.send("#{field}=", Chronic.parse(stringified_date))
    stringified_date
  end

  self.better_date_fields << field
  self.better_date_defaults[field] = options[:default]
end