class Foscam::Schedule::Week

Attributes

days[RW]

attr_accessor :sunday, :monday, :tuesday, :wednesday, :thursday, :friday, :saturday

Public Class Methods

new(params = {}) click to toggle source

@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

busy_at?(time) click to toggle source

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
to_hash() click to toggle source

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
to_param() click to toggle source

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