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
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/date_time_attribute.rb', line 50
def date_time_attribute(*attributes)
opts = attributes.
time_zone = opts[:time_zone]
attributes.each do |attribute|
attribute = attribute.to_sym
if !(method_defined?(attribute) || (respond_to?(:attribute_method?) && attribute_method?(attribute)))
attr_accessor attribute
end
define_method("#{attribute}_date") do
in_time_zone(time_zone) do |time_zone|
date_time_container(attribute).in_time_zone(time_zone).date
end
end
define_method("#{attribute}_time") do
in_time_zone(time_zone) do |time_zone|
date_time_container(attribute).in_time_zone(time_zone).time
end
end
define_method("#{attribute}_time_zone") do
in_time_zone(time_zone) do |time_zone|
date_time_container(attribute).in_time_zone(time_zone).time_zone
end
end
define_method("#{attribute}_date=") do |val|
in_time_zone(time_zone) do |time_zone|
container = date_time_container(attribute).in_time_zone(time_zone)
(container.date = val).tap do
self.send("#{attribute}=", container.date_time)
end
end
end
define_method("#{attribute}_time=") do |val|
in_time_zone(time_zone) do |time_zone|
container = date_time_container(attribute).in_time_zone(time_zone)
(container.time = val).tap do
self.send("#{attribute}=", container.date_time)
end
end
end
define_method("#{attribute}_time_zone=") do |val|
in_time_zone(val) do |time_zone|
container = date_time_container(attribute).in_time_zone(time_zone)
self.send("#{attribute}=", container.date_time)
container.time_zone
end if val
end
end
end
|