Class: ActiveLdap::Schema::Syntaxes::GeneralizedTime — activeldap - ActiveLdap

Class: ActiveLdap::Schema::Syntaxes::GeneralizedTime

Inherits:
Base
  • Object
show all
Defined in:
lib/active_ldap/schema/syntaxes.rb

Constant Summary

FORMAT =
/\A
 (\d{4,4})?
 (\d{2,2})?
 (\d{2,2})?
 (\d{2,2})?
 (\d{2,2})?
 (\d{2,2})?
 ([,.]\d+)?
 ([+-]\d{4,4}|Z)?
\z/x

Constants inherited from Base

Base::PRINTABLE_CHARACTER, Base::SYNTAXES, Base::UNPRINTABLE_CHARACTER

Instance Method Summary (collapse)

Methods inherited from Base

#binary?, #valid?, #validate

Instance Method Details

- (Object) normalize_value(value)



214
215
216
217
218
219
220
221
222
223
224
225
# File 'lib/active_ldap/schema/syntaxes.rb', line 214

def normalize_value(value)
  if value.is_a?(Time)
    normalized_value = value.strftime("%Y%m%d%H%M%S")
    if value.gmt?
      normalized_value + "Z"
    else
      normalized_value + ("%+03d%02d" % value.gmtoff.divmod(3600))
    end
  else
    value
  end
end

- (Object) type_cast(value)



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