diff options
Diffstat (limited to 'lib/mauve/mauve_time.rb')
-rw-r--r-- | lib/mauve/mauve_time.rb | 45 |
1 files changed, 33 insertions, 12 deletions
diff --git a/lib/mauve/mauve_time.rb b/lib/mauve/mauve_time.rb index ab0734a..d3fc039 100644 --- a/lib/mauve/mauve_time.rb +++ b/lib/mauve/mauve_time.rb @@ -103,40 +103,46 @@ class Time # # def bank_holidays - @bank_holidays = if defined? Server and Server.instance - Server.instance.bank_holidays + if defined? Mauve::Server and Mauve::Server.instance + @bank_holidays = Mauve::Server.instance.bank_holidays else - @bank_holidays || [] + @bank_holidays ||= [] end + + @bank_holidays end # Returns an array of ranges of working hours # # def working_hours - if defined? Configuration and Configuration.current - Configuration.current.working_hours + if defined? Mauve::Configuration and Mauve::Configuration.current + Mauve::Configuration.current.working_hours else [9.0...17.0] end end def dead_zone - if defined? Configuration and Configuration.current - Configuration.current.working_hours + if defined? Mauve::Configuration and Mauve::Configuration.current + Mauve::Configuration.current.dead_zone else [3.0...7.0] end end def daytime_hours - if defined? Configuration and Configuration.current - Configuration.current.working_hours + if defined? Mauve::Configuration and Mauve::Configuration.current + Mauve::Configuration.current.daytime_hours else [8.0...20.0] end end + def fractional_hour + self.hour + self.min.to_f/60 + self.sec.to_f/3600 + end + # This relies on bank_holidays being set. # def bank_holiday? @@ -150,7 +156,7 @@ class Time # @return [Boolean] def working_hours? (1..5).include?(self.wday) and - self.working_hours.any?{|r| r.include?(self.hour.to_f + self.min.to_f/60.0)} and + x_in_list_of_y(fractional_hour, self.working_hours) and !self.bank_holiday? end @@ -158,7 +164,7 @@ class Time # # @return [Boolean] def daytime_hours? - self.daytime_hours.any?{|r| r.include?(self.hour.to_f + self.min.to_f/60.0)} + x_in_list_of_y(fractional_hour, self.daytime_hours) end # We're always in wallclock hours @@ -172,7 +178,7 @@ class Time # # @return [Boolean] def dead_zone? - self.dead_zone.any?{|r| r.include?(self.hour.to_f + self.min.to_f/60.0)} + x_in_list_of_y(fractional_hour, self.dead_zone) end # Format the time as a string, relative to +now+ @@ -248,6 +254,21 @@ class Time end + # Checks to see if x is contained in y + # + # @param [Array] y Array to search for +x+ + # @param [Object] x + # @return [Boolean] + def x_in_list_of_y(x,y) + y.any? do |range| + if range.respond_to?("include?") + range.include?(x) + else + range == x + end + end + end + end #module Mauve |