class Foscam::Schedule::Week
Attributes
attr_accessor :sunday, :monday, :tuesday, :wednesday, :thursday, :friday, :saturday
Public Class Methods
@param [Hash] params Each input is a 32-bit bitmask representing a an 8 hour period divided into 15 minute block. Three inputs are needed for each day to to represent a full 24 hour of 96-bits. @option params [Fixnum] :fri_0 @option params [Fixnum] :fri_1 @option params [Fixnum] :fri_2 @option params [Fixnum] :mon_0 @option params [Fixnum] :mon_1 @option params [Fixnum] :mon_2 @option params [Fixnum] :sat_0 @option params [Fixnum] :sat_1 @option params [Fixnum] :sat_2 @option params [Fixnum] :sun_0 @option params [Fixnum] :sun_1 @option params [Fixnum] :sun_2 @option params [Fixnum] :thu_0 @option params [Fixnum] :thu_1 @option params [Fixnum] :thu_2 @option params [Fixnum] :tue_0 @option params [Fixnum] :tue_1 @option params [Fixnum] :tue_2 @option params [Fixnum] :wed_0 @option params [Fixnum] :wed_1 @option params [Fixnum] :wed_2
# File lib/foscam/schedule/week.rb, line 30 def initialize(params = {}) self.days = {} [:sunday, :monday, :tuesday, :wednesday, :thursday, :friday, :saturday].each do |day| abbrev = day.to_s[0..2] bit0 = params.has_key?("#{abbrev}_0".to_sym) ? params["#{abbrev}_0".to_sym] : 0 bit1 = params.has_key?("#{abbrev}_1".to_sym) ? params["#{abbrev}_1".to_sym] : 0 bit2 = params.has_key?("#{abbrev}_2".to_sym) ? params["#{abbrev}_2".to_sym] : 0 self.days.merge!( day => Day.new(bit0,bit1,bit2)) end end
Public Instance Methods
Determine if the the schedule is true at the given date time @param time [Time, DateTime] @return [FalseClass, TrueClass] Whether the schedule is true at that time
# File lib/foscam/schedule/week.rb, line 45 def busy_at?(time) time = time.to_time if time.is_a?(DateTime) if time.sunday? days[:sunday].busy_at?(time) elsif time.monday? days[:monday].busy_at?(time) elsif time.tuesday? days[:tuesday].busy_at?(time) elsif time.wednesday? days[:wednesday].busy_at?(time) elsif time.thursday? days[:thursday].busy_at?(time) elsif time.friday? days[:friday].busy_at?(time) elsif time.saturday? days[:saturday].busy_at?(time) end end
Convert the Week
to a nested hash with the day of the week as the key and and time as the second key @return [Hash]
# File lib/foscam/schedule/week.rb, line 67 def to_hash h = {} self.days.each do |name, day| h.merge!(name => day.to_hash) end h end
Convert the Week
to the form of the input hash @return [Hash]
# File lib/foscam/schedule/week.rb, line 77 def to_param params = {} self.days.each do |name, day| abbrev = name.to_s[0..2] day.bits.each_index do |i| params.merge!("#{abbrev}_#{i}".to_sym => day.bits[i].bit) end end params end