Class: Timing::TimeInZone
- Inherits:
-
Object
- Object
- Timing::TimeInZone
show all
- Extended by:
- Forwardable
- Defined in:
- lib/timing/time_in_zone.rb
Constant Summary
collapse
- REGEXP =
/[+-]\d\d:?\d\d$/
Instance Attribute Summary collapse
-
#zone_offset ⇒ Object
(also: #utc_offset, #gmt_offset, #gmtoff)
Returns the value of attribute zone_offset.
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(time, zone_offset = nil) ⇒ TimeInZone
Returns a new instance of TimeInZone.
13
14
15
16
|
# File 'lib/timing/time_in_zone.rb', line 13
def initialize(time, zone_offset=nil)
@time = time
@zone_offset = build_zone_offset(zone_offset || time.utc_offset)
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
143
144
145
|
# File 'lib/timing/time_in_zone.rb', line 143
def method_missing(method, *args, &block)
time.public_send method, *args, &block
end
|
Instance Attribute Details
#zone_offset ⇒ Object
Also known as:
utc_offset, gmt_offset, gmtoff
Returns the value of attribute zone_offset.
11
12
13
|
# File 'lib/timing/time_in_zone.rb', line 11
def zone_offset
@zone_offset
end
|
Class Method Details
.at(seconds, zone_offset = nil) ⇒ Object
117
118
119
|
# File 'lib/timing/time_in_zone.rb', line 117
def self.at(seconds, zone_offset=nil)
new Time.at(seconds), zone_offset
end
|
.now(zone_offset = nil) ⇒ Object
113
114
115
|
# File 'lib/timing/time_in_zone.rb', line 113
def self.now(zone_offset=nil)
new Time.now, zone_offset
end
|
.parse(text) ⇒ Object
121
122
123
124
125
|
# File 'lib/timing/time_in_zone.rb', line 121
def self.parse(text)
match = text.length > 10 ? REGEXP.match(text) : nil
zone_offset = match ? match.to_s : nil
new Time.parse(text), zone_offset
end
|
Instance Method Details
#+(seconds) ⇒ Object
26
27
28
29
|
# File 'lib/timing/time_in_zone.rb', line 26
def +(seconds)
raise ArgumentError, "#{seconds} must be a valid seconds count" unless seconds.is_a? Numeric
self.class.new (time + seconds), zone_offset
end
|
#-(seconds) ⇒ Object
31
32
33
34
35
|
# File 'lib/timing/time_in_zone.rb', line 31
def -(seconds)
raise ArgumentError, "#{seconds} must be a time or a valid seconds count" unless seconds.respond_to? :to_f
result = self.class.at (time.to_f - seconds.to_f), zone_offset
seconds.is_a?(Numeric) ? result : result.to_f
end
|
#as_json(*args) ⇒ Object
77
78
79
|
# File 'lib/timing/time_in_zone.rb', line 77
def as_json(*args)
iso8601
end
|
#iso8601(fraction_digits = 0) ⇒ Object
72
73
74
75
|
# File 'lib/timing/time_in_zone.rb', line 72
def iso8601(fraction_digits=0)
decimals = fraction_digits > 0 ? ".%#{fraction_digits}N" : ''
strftime "%FT%T#{decimals}#{zone_offset.iso8601}"
end
|
#months_after(count) ⇒ Object
101
102
103
|
# File 'lib/timing/time_in_zone.rb', line 101
def months_after(count)
Timing.months_after self, count
end
|
#months_ago(count) ⇒ Object
97
98
99
|
# File 'lib/timing/time_in_zone.rb', line 97
def months_ago(count)
Timing.months_ago self, count
end
|
#strftime(format) ⇒ Object
63
64
65
66
67
68
69
70
|
# File 'lib/timing/time_in_zone.rb', line 63
def strftime(format)
sanitized_format = format.gsub('%Z', '')
.gsub('%z', zone_offset.to_s)
.gsub('%:z', zone_offset.to_s(':'))
.gsub('%::z', "#{zone_offset.to_s(':')}:00")
time_with_offset.strftime sanitized_format
end
|
#to_json(*args) ⇒ Object
81
82
83
|
# File 'lib/timing/time_in_zone.rb', line 81
def to_json(*args)
"\"#{as_json(*args)}\""
end
|
#to_s ⇒ Object
Also known as:
inspect
58
59
60
|
# File 'lib/timing/time_in_zone.rb', line 58
def to_s
strftime '%F %T %z'
end
|
#to_time ⇒ Object
54
55
56
|
# File 'lib/timing/time_in_zone.rb', line 54
def to_time
time
end
|
#to_utc ⇒ Object
Also known as:
getutc, utc
44
45
46
|
# File 'lib/timing/time_in_zone.rb', line 44
def to_utc
self.class.new time, 0
end
|
#to_zone(zone_offset) ⇒ Object
50
51
52
|
# File 'lib/timing/time_in_zone.rb', line 50
def to_zone(zone_offset)
self.class.new time, zone_offset
end
|
#utc? ⇒ Boolean
Also known as:
gmt?
39
40
41
|
# File 'lib/timing/time_in_zone.rb', line 39
def utc?
zone_offset == 0
end
|
#years_after(count) ⇒ Object
109
110
111
|
# File 'lib/timing/time_in_zone.rb', line 109
def years_after(count)
Timing.years_after self, count
end
|
#years_ago(count) ⇒ Object
105
106
107
|
# File 'lib/timing/time_in_zone.rb', line 105
def years_ago(count)
Timing.years_ago self, count
end
|