Module: PunctualDateSelect::Model::ClassMethods

Defined in:
lib/punctual_date_select/model.rb

Instance Method Summary collapse

Instance Method Details

#punctual_date_column(*args) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/punctual_date_select/model.rb', line 37

def punctual_date_column(*args)
  args.each do |column_name|
    validation_method = :"validate_#{column_name}_is_casted"
    validate validation_method

    define_method validation_method do
      errors.add(column_name, :invalid) if send(column_name) && !send(column_name).kind_of?(Date) && !send(column_name).kind_of?(Time)
    end

    define_method "#{column_name}=" do |value|
      if value.kind_of?(Hash) && !value.kind_of?(PunctualDateSelect::DateHash) && (value.keys.map(&:to_sym) & i[year month day]).any?
        class << value
          include PunctualDateSelect::DateHash
        end
      end
      self[column_name] = (value.kind_of?(Hash) && value.values.any?{|t| t.blank?}) ? nil : value
    end

    private validation_method
  end
end