class ActiveLdap::Schema::Syntaxes::GeneralizedTime

Constants

FORMAT

Public Instance Methods

normalize_value(value) click to toggle source
# File lib/active_ldap/schema/syntaxes.rb, line 210
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
type_cast(value) click to toggle source
# 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]
    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