Class: RiCal::Component::TZInfoTimezone::Period
- Defined in:
- lib/ri_cal/component/t_z_info_timezone.rb
Overview
:nodoc: all
Instance Method Summary collapse
- #add_period(this_period) ⇒ Object
- #daylight? ⇒ Boolean
- #export_to(export_stream) ⇒ Object
-
#format_rfc2445_offset(seconds) ⇒ Object
:nodoc:.
-
#initialize(which, this_period, prev_period) ⇒ Period
constructor
A new instance of Period.
- #period_local_end(period) ⇒ Object
-
#period_local_start(period) ⇒ Object
This assumes a 1 hour shift which is why we use the previous period local end when possible.
Constructor Details
#initialize(which, this_period, prev_period) ⇒ Period
Returns a new instance of Period.
11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/ri_cal/component/t_z_info_timezone.rb', line 11 def initialize(which, this_period, prev_period) @which = which if prev_period @onset = period_local_end(prev_period) @offset_from = format_rfc2445_offset(prev_period.utc_total_offset) else @onset = period_local_start(this_period) @offset_from = format_rfc2445_offset(this_period.utc_total_offset) end @offset_to = format_rfc2445_offset(this_period.utc_total_offset) @abbreviation = this_period.abbreviation @rdates = [] end |
Instance Method Details
#add_period(this_period) ⇒ Object
40 41 42 |
# File 'lib/ri_cal/component/t_z_info_timezone.rb', line 40 def add_period(this_period) @rdates << period_local_start(this_period) end |
#daylight? ⇒ Boolean
25 26 27 |
# File 'lib/ri_cal/component/t_z_info_timezone.rb', line 25 def daylight? @which == "DAYLIGHT" end |
#export_to(export_stream) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/ri_cal/component/t_z_info_timezone.rb', line 53 def export_to(export_stream) export_stream.puts "BEGIN:#{@which}" export_stream.puts "DTSTART:#{@onset}" @rdates.each do |rdate| export_stream.puts "RDATE:#{rdate}" end export_stream.puts "TZOFFSETFROM:#{@offset_from}" export_stream.puts "TZOFFSETTO:#{@offset_to}" export_stream.puts "TZNAME:#{@abbreviation}" export_stream.puts "END:#{@which}" end |
#format_rfc2445_offset(seconds) ⇒ Object
:nodoc:
45 46 47 48 49 50 51 |
# File 'lib/ri_cal/component/t_z_info_timezone.rb', line 45 def format_rfc2445_offset(seconds) #:nodoc: abs_seconds = seconds.abs h = (abs_seconds/3600).floor m = (abs_seconds - (h * 3600))/60 h *= -1 if seconds < 0 sprintf("%+03d%02d", h, m) end |
#period_local_end(period) ⇒ Object
29 30 31 |
# File 'lib/ri_cal/component/t_z_info_timezone.rb', line 29 def period_local_end(period) (period.local_end || DateTime.parse("99990101T000000")).strftime("%Y%m%dT%H%M%S") end |
#period_local_start(period) ⇒ Object
This assumes a 1 hour shift which is why we use the previous period local end when possible
35 36 37 38 |
# File 'lib/ri_cal/component/t_z_info_timezone.rb', line 35 def period_local_start(period) shift = daylight? ? Rational(-1, 24) : Rational(1, 24) ((period.local_start || DateTime.parse("16010101T000000")) + shift).strftime("%Y%m%dT%H%M%S") end |