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
|
# File 'lib/active_ldap/schema/syntaxes.rb', line 183
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]
begin
Time.send(:make_time,
year, month, day, hour, minute, second, fraction,
time_zone, Time.now)
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
|