37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/punctual_date_select/model.rb', line 37
def punctual_date_column(*args)
args.each do |column_name|
cast_method = :"cast_#{column_name}_if_possible"
before_validation cast_method
define_method cast_method do
casted_date = send(column_name).try(:to_date)
send("#{column_name}=", casted_date) if casted_date
end
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|
self[column_name] = (value.kind_of?(Hash) && !value.values.any?{|t| !t.blank?}) ? nil : value
if value.kind_of?(Hash) && !value.kind_of?(PunctualDateSelect::DateHash)
class << value
include PunctualDateSelect::DateHash
end
end
self[column_name]
end
private cast_method, validation_method
end
end
|