class IceCube::HashParser

Attributes

hash[R]

Public Class Methods

new(original_hash) click to toggle source
# File lib/ice_cube/parsers/hash_parser.rb, line 6
def initialize(original_hash)
  @hash = original_hash
end

Public Instance Methods

to_schedule() { |schedule| ... } click to toggle source
# File lib/ice_cube/parsers/hash_parser.rb, line 10
def to_schedule
  data = normalize_keys(hash)
  schedule = IceCube::Schedule.new parse_time(data[:start_time])
  apply_duration schedule, data
  apply_end_time schedule, data
  apply_rrules schedule, data
  apply_exrules schedule, data
  apply_rtimes schedule, data
  apply_extimes schedule, data
  yield schedule if block_given?
  schedule
end

Private Instance Methods

apply_duration(schedule, data) click to toggle source
# File lib/ice_cube/parsers/hash_parser.rb, line 43
def apply_duration(schedule, data)
  return unless data[:duration]
  schedule.duration = data[:duration].to_i
end
apply_end_time(schedule, data) click to toggle source
# File lib/ice_cube/parsers/hash_parser.rb, line 48
def apply_end_time(schedule, data)
  return unless data[:end_time]
  schedule.end_time = parse_time(data[:end_time])
end
apply_exrules(schedule, data) click to toggle source
# File lib/ice_cube/parsers/hash_parser.rb, line 62
def apply_exrules(schedule, data)
  return unless data[:exrules]
  warn "IceCube: :exrules is deprecated, and will be removed in a future release. at: #{ caller[0] }"
  data[:exrules].each do |h|
    rrule = h.is_a?(IceCube::Rule) ? h : IceCube::Rule.from_hash(h)

    schedule.exrule(rrule)
  end
end
apply_extimes(schedule, data) click to toggle source
# File lib/ice_cube/parsers/hash_parser.rb, line 79
def apply_extimes(schedule, data)
  return unless data[:extimes]
  data[:extimes].each do |t|
    schedule.add_exception_time TimeUtil.deserialize_time(t)
  end
end
apply_rrules(schedule, data) click to toggle source
# File lib/ice_cube/parsers/hash_parser.rb, line 53
def apply_rrules(schedule, data)
  return unless data[:rrules]
  data[:rrules].each do |h|
    rrule = h.is_a?(IceCube::Rule) ? h : IceCube::Rule.from_hash(h)

    schedule.rrule(rrule)
  end
end
apply_rtimes(schedule, data) click to toggle source
# File lib/ice_cube/parsers/hash_parser.rb, line 72
def apply_rtimes(schedule, data)
  return unless data[:rtimes]
  data[:rtimes].each do |t|
    schedule.add_recurrence_time TimeUtil.deserialize_time(t)
  end
end
normalize_keys(hash) click to toggle source
# File lib/ice_cube/parsers/hash_parser.rb, line 25
def normalize_keys(hash)
  data = IceCube::FlexibleHash.new(hash.dup)

  if (start_date = data.delete(:start_date))
    warn "IceCube: :start_date is deprecated, please use :start_time at: #{ caller[0] }"
    data[:start_time] = start_date
  end

  {:rdates => :rtimes, :exdates => :extimes}.each do |old_key, new_key|
    if (times = data.delete(old_key))
      warn "IceCube: :#{old_key} is deprecated, please use :#{new_key} at: #{ caller[0] }"
      (data[new_key] ||= []).concat times
    end
  end

  data
end
parse_time(time) click to toggle source
# File lib/ice_cube/parsers/hash_parser.rb, line 86
def parse_time(time)
  TimeUtil.deserialize_time(time)
end