12
13
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/gov_uk_date_fields/acts_as_gov_uk_date.rb', line 12
def acts_as_gov_uk_date(*date_fields)
options = (date_fields)
validate :validate_gov_uk_dates, if: options[:validate_if]
after_initialize :populate_gov_uk_dates
cattr_accessor :_gov_uk_dates
self._gov_uk_dates = date_fields
define_method(:validate_gov_uk_dates) do
date_fields.each do |date_field|
next if self.instance_variable_get("@_#{date_field}".to_sym).valid?
case options[:error_clash_behaviour]
when :append_gov_uk_date_field_error
errors.add(date_field, "Invalid date")
when :omit_gov_uk_date_field_error
next
when :override_with_gov_uk_date_field_error
errors.delete(date_field)
errors.add(date_field, "Invalid date")
end
end
end
date_fields.each do |field|
define_method("#{field}=") do |new_date|
raise ArgumentError.new("#{new_date} is not a Date object") unless new_date.respond_to?(:to_date) || new_date.nil?
new_date = new_date.to_date unless new_date.nil?
GovUkDateFields::FormDate.set_from_date(self, field, new_date)
super(new_date)
end
define_method("#{field}_dd") do
return self.instance_variable_get("@_#{field}".to_sym).dd
end
define_method("#{field}_mm") do
return self.instance_variable_get("@_#{field}".to_sym).mm
end
define_method("#{field}_yyyy") do
return self.instance_variable_get("@_#{field}".to_sym).yyyy
end
define_method("#{field}_dd=") do |day|
GovUkDateFields::FormDate.set_date_part(:dd, self, field, day)
end
define_method("#{field}_mm=") do |month|
GovUkDateFields::FormDate.set_date_part(:mm, self, field, month)
end
define_method("#{field}_yyyy=") do |year|
GovUkDateFields::FormDate.set_date_part(:yyyy, self, field, year)
end
end
include GovUkDateFields::ActsAsGovUkDate::LocalInstanceMethods
end
|