Module: CouchRest::Model::CoreExtensions::TimeParsing

Defined in:
lib/couchrest/model/core_extensions/time_parsing.rb

Instance Method Summary collapse

Instance Method Details

#new(*args) ⇒ Object

Overrwrite Ruby’s standard new method to provide compatible support of 1.9.2’s Time.new method.

Only supports syntax like:

Time.new(2011, 4, 1, 18, 50, 32, "+02:00")
# or
Time.new(2011, 4, 1, 18, 50, 32)


16
17
18
19
20
21
22
23
24
25
26
# File 'lib/couchrest/model/core_extensions/time_parsing.rb', line 16

def new(*args)
  return super() if (args.empty?)
  zone = args.delete_at(6)
  time = mktime(*args)
  if zone =~ /([\+|\-]?)(\d{2}):?(\d{2})/
    tz_difference = ("#{$1 == '-' ? '+' : '-'}#{$2}".to_i * 3600) + ($3.to_i * 60)
    time + tz_difference + zone_offset(time.zone)
  else
    time
  end
end

#parse_iso8601(string) ⇒ Object

Attemtps to parse a time string in ISO8601 format. If no match is found, the standard time parse will be used.

Times, unless provided with a time zone, are assumed to be in UTC.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/couchrest/model/core_extensions/time_parsing.rb', line 35

def parse_iso8601(string)
  if (string =~ /(\d{4})[\-|\/](\d{2})[\-|\/](\d{2})[T|\s](\d{2}):(\d{2}):(\d{2})(Z| ?([\+|\s|\-])?(\d{2}):?(\d{2}))?/)
    # $1 = year
    # $2 = month
    # $3 = day
    # $4 = hours
    # $5 = minutes
    # $6 = seconds
    # $7 = UTC or Timezone
    # $8 = time zone direction
    # $9 = tz difference hours
    # $10 = tz difference minutes

    if (!$7.to_s.empty? && $7 != 'Z')
      new($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i, "#{$8 == '-' ? '-' : '+'}#{$9}:#{$10}")
    else
      utc($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i)
    end
  else
    parse(string)
  end
end