Class: ZTimeLabel
- Inherits:
-
Object
- Object
- ZTimeLabel
- Defined in:
- lib/z_time_label.rb
Overview
For ScheduledResource protocol. This is a base UseBlock class for ZTimeHeader use-block subclasses. These are timezone-aware time headers (rows) and labels (use-blocks). The timezone is specified by the last component of the resource id (rid). Eg, for ‘-8’ the timezone is ActiveSupport::TimeZone.new(-8)
Direct Known Subclasses
Constant Summary collapse
- TZ_INT_MAP =
{ -8 => ActiveSupport::TimeZone.new('Pacific Time (US & Canada)' ), # P -7 => ActiveSupport::TimeZone.new('Mountain Time (US & Canada)'), # M -6 => ActiveSupport::TimeZone.new('Central Time (US & Canada)' ), # C -5 => ActiveSupport::TimeZone.new('Eastern Time (US & Canada)' ), # E }
Instance Attribute Summary collapse
-
#css_classes ⇒ Object
Returns the value of attribute css_classes.
-
#endtime ⇒ Object
Returns the value of attribute endtime.
-
#starttime ⇒ Object
Returns the value of attribute starttime.
-
#title ⇒ Object
Returns the value of attribute title.
Class Method Summary collapse
-
.end_for_start(t) ⇒ Object
Overridden.
-
.floor(t) ⇒ Object
Overridden.
-
.get_all_blocks(ids, t1, t2, inc) ⇒ Object
(ScheduledResource protocol) Returns a hash where each key is an
rid
and the value is an array of ZTimeLabels (use blocks) in the intervalt1...t2
, ordered bystarttime
. - .get_timeblocks(id, t1, t2, inc) ⇒ Object
- .offset_from_rid(rid) ⇒ Object
- .time_blocks_starting_through(starttime, limit) ⇒ Object
- .tz_from_rid(rid) ⇒ Object
Instance Method Summary collapse
-
#initialize(starttime, endtime) ⇒ ZTimeLabel
constructor
Parameters are TimeWithZone or similar.
Constructor Details
#initialize(starttime, endtime) ⇒ ZTimeLabel
Parameters are TimeWithZone or similar
12 13 14 |
# File 'lib/z_time_label.rb', line 12 def initialize( starttime, endtime ) @starttime, @endtime = starttime, endtime end |
Instance Attribute Details
#css_classes ⇒ Object
Returns the value of attribute css_classes.
7 8 9 |
# File 'lib/z_time_label.rb', line 7 def css_classes @css_classes end |
#endtime ⇒ Object
Returns the value of attribute endtime.
7 8 9 |
# File 'lib/z_time_label.rb', line 7 def endtime @endtime end |
#starttime ⇒ Object
Returns the value of attribute starttime.
7 8 9 |
# File 'lib/z_time_label.rb', line 7 def starttime @starttime end |
#title ⇒ Object
Returns the value of attribute title.
7 8 9 |
# File 'lib/z_time_label.rb', line 7 def title @title end |
Class Method Details
.end_for_start(t) ⇒ Object
Overridden.
85 |
# File 'lib/z_time_label.rb', line 85 def self.end_for_start(t) t + 1 end |
.floor(t) ⇒ Object
Overridden.
86 |
# File 'lib/z_time_label.rb', line 86 def self.floor(t) t end |
.get_all_blocks(ids, t1, t2, inc) ⇒ Object
(ScheduledResource protocol) Returns a hash where each key is an rid
and the value is an array of ZTimeLabels (use blocks) in the interval t1...t2
, ordered by starttime
.
What in means depends on inc. If inc(remental) is nil/false, client is building the interval from scratch. If “hi”, it is an addition to an existing interval on the high side. Similarly for “lo”. This is to avoid re-transmitting blocks that span the current time boundaries on the client.
Here the resource is a ZTimeHeader and the use-blocks are ZTimeLabels.
Parameters
-
rids
- A list of schedules resource ids (strings). -
t1
- Start time. -
t2
- End time. -
inc
- One of nil, “lo”, “hi” (See above).
Returns
-
Hash
- Each key is arid
such as Hour0
and the value is an array of Timelabels in the interval, ordered by starttime
.
40 41 42 43 44 |
# File 'lib/z_time_label.rb', line 40 def self.get_all_blocks(ids, t1, t2, inc) h = {} ids.each{|id| h[id] = get_timeblocks(id, t1, t2, inc)} h end |
.get_timeblocks(id, t1, t2, inc) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/z_time_label.rb', line 47 def self.get_timeblocks(id, t1, t2, inc) tz = tz_from_rid( id ) t1 = floor( tz.at(t1) ) t1 = end_for_start(t1) if inc == 'hi' t2 = tz.at(t2) t2 = floor( t2 ) - 1 if inc == 'lo' enum_for( :time_blocks_starting_through, t1, t2 ).to_a end |
.offset_from_rid(rid) ⇒ Object
81 82 83 |
# File 'lib/z_time_label.rb', line 81 def self.offset_from_rid( rid ) (rid.split('_').last || '').to_i end |
.time_blocks_starting_through(starttime, limit) ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/z_time_label.rb', line 60 def self.time_blocks_starting_through( starttime, limit ) while starttime <= limit do # Hmm... I would have guessed '<' over '<='... endtime = end_for_start starttime yield new( starttime, endtime ) starttime = endtime end end |
.tz_from_rid(rid) ⇒ Object
76 77 78 79 |
# File 'lib/z_time_label.rb', line 76 def self.tz_from_rid( rid ) # ActiveSupport::TimeZone.new offset_from_rid(rid) TZ_INT_MAP[ offset_from_rid(rid) ] || TZ_INT_MAP[-8] end |