14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/has_safe_dates/core_ext.rb', line 14
def has_safe_dates(*args)
options = args.
has_safe_fields_config[self] = options
if options[:error_message].present?
has_safe_fields_config[self][:error_message] = options[:error_message]
else
has_safe_fields_config[self][:error_message] = I18n.translate("activerecord.errors.messages")[:invalid] || "is invalid"
end
if args.blank?
raise ArgumentError, 'Must define the fields you want to be converted to safe dates with "has_safe_dates :my_field_name_date, :my_other_field_name_date"'
end
has_safe_fields_config[self][:fields] = args.map(&:to_s)
has_safe_fields_config[self][:fields].each do |field|
define_method "#{field}=" do |value|
if value.present?
value = Chronic.parse(value.to_s)
if value.blank? && self.class.has_safe_fields_config[self.class.base_class][:error_message].present?
@safe_date_validation_errors ||= {}
@safe_date_validation_errors[field] = self.class.has_safe_fields_config[self.class.base_class][:error_message]
end
end
super value
end
end
define_method "_set_safe_date_validation_errors" do
if @safe_date_validation_errors.present?
@safe_date_validation_errors.each_pair do |field, error|
errors.add(field, error)
end
end
@safe_date_validation_errors = nil
end
class_eval do
validate :_set_safe_date_validation_errors
end
end
|