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
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/sequel/plugins/tstzrange_fields.rb', line 70
def self.create_accessors(model, column)
get_column_method = column.to_sym
set_column_method = "#{column}=".to_sym
get_begin_method = "#{column}_begin".to_sym
set_begin_method = "#{column}_begin=".to_sym
get_end_method = "#{column}_end".to_sym
set_end_method = "#{column}_end=".to_sym
model.define_method(get_column_method) do
self[column]
end
model.define_method(set_column_method) do |value|
case value
when Sequel::Postgres::PGRange
self[column] = value
when Float::INFINITY
range = Sequel::Postgres::PGRange.new(nil, nil, empty: false, db_type: :tstzrange)
self[column] = range
when 'empty'
self[column] = Sequel::Postgres::PGRange.empty(:tstzrange)
else
beg = value.respond_to?(:begin) ? value.begin : (value[:begin] || value['begin'])
en = value.respond_to?(:end) ? value.end : (value[:end] || value['end'])
self[column] = self.class.new_tstzrange(beg, en)
end
end
model.define_method(get_begin_method) do
send(get_column_method).begin
end
model.define_method(set_begin_method) do |new_time|
new_range = self.class.new_tstzrange(new_time, send(get_end_method))
send(set_column_method, new_range)
end
model.define_method(get_end_method) do
r = send(get_column_method)
return r.nil? ? nil : r.end end
model.define_method(set_end_method) do |new_time|
new_range = self.class.new_tstzrange(send(get_begin_method), new_time)
send(set_column_method, new_range)
end
end
|