179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
|
# File 'lib/active_ldap/schema/syntaxes.rb', line 179
def type_cast(value)
return value if value.nil? or value.is_a?(Time)
match_data = FORMAT.match(value)
if match_data
required_components = match_data.to_a[1, 5]
return value if required_components.any?(&:nil?)
year, month, day, hour, minute = required_components.collect(&:to_i)
second = match_data[-3].to_i
fraction = match_data[-2]
fraction = fraction.to_f if fraction
time_zone = match_data[-1]
arguments = [
year, month, day, hour, minute, second, fraction, time_zone,
Time.now
]
if Time.method(:make_time).arity == 10
arguments.unshift(value)
end
begin
Time.send(:make_time, *arguments)
rescue ArgumentError
raise if year >= 1700
out_of_range_messages = ["argument out of range",
"time out of range"]
raise unless out_of_range_messages.include?($!.message)
Time.at(0)
rescue RangeError
raise if year >= 1700
raise if $!.message != "bignum too big to convert into `long'"
Time.at(0)
end
else
value
end
end
|