schedulicon 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/schedulicon.rb +17 -0
 - data/lib/schedulicon/attributes.rb +41 -0
 - data/lib/schedulicon/day_in_month.rb +56 -0
 - data/lib/schedulicon/day_of_week.rb +26 -0
 - data/lib/schedulicon/schedule.rb +78 -0
 - data/lib/schedulicon/version.rb +3 -0
 - data/spec/schedulicon/attributes_spec.rb +52 -0
 - data/spec/schedulicon/day_in_month_spec.rb +74 -0
 - data/spec/schedulicon/day_of_week_spec.rb +35 -0
 - data/spec/schedulicon/schedule_spec.rb +165 -0
 - data/spec/spec_helper.rb +24 -0
 - metadata +60 -0
 
    
        data/lib/schedulicon.rb
    ADDED
    
    | 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Schedulicon
         
     | 
| 
      
 2 
     | 
    
         
            +
              require 'schedulicon/version'
         
     | 
| 
      
 3 
     | 
    
         
            +
              require 'schedulicon/day_of_week'
         
     | 
| 
      
 4 
     | 
    
         
            +
              require 'schedulicon/day_in_month'
         
     | 
| 
      
 5 
     | 
    
         
            +
              require 'schedulicon/schedule'
         
     | 
| 
      
 6 
     | 
    
         
            +
              require 'schedulicon/attributes'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              # Days of the week
         
     | 
| 
      
 9 
     | 
    
         
            +
              MONDAY = 1
         
     | 
| 
      
 10 
     | 
    
         
            +
              TUESDAY = 2
         
     | 
| 
      
 11 
     | 
    
         
            +
              WEDNESDAY = 3
         
     | 
| 
      
 12 
     | 
    
         
            +
              THURSDAY = 4
         
     | 
| 
      
 13 
     | 
    
         
            +
              FRIDAY = 5
         
     | 
| 
      
 14 
     | 
    
         
            +
              SATURDAY = 6
         
     | 
| 
      
 15 
     | 
    
         
            +
              SUNDAY = 7
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Public: mixin for generating methods required by html forms
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            module Schedulicon
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Attributes
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                def self.included(klass)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  klass.class_eval do
         
     | 
| 
      
 8 
     | 
    
         
            +
                    extend ClassMethods
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                module ClassMethods
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def schedule_attribute(*names)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    names.each do |name|
         
     | 
| 
      
 16 
     | 
    
         
            +
                      define_method(name) { instance_variable_get("@#{name}") || instance_variable_set("@#{name}", Schedule.new) }
         
     | 
| 
      
 17 
     | 
    
         
            +
                      define_method("#{name}=") do |value| instance_variable_set("@#{name}", value) end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                      define_method("#{name}_frequency") { send(name).frequency }
         
     | 
| 
      
 20 
     | 
    
         
            +
                      define_method("#{name}_frequency=") do |value| send(name).frequency = value.to_sym unless value.blank? end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                      define_method("#{name}_day_of_week") { send(name).day_of_week.to_i }
         
     | 
| 
      
 23 
     | 
    
         
            +
                      define_method("#{name}_day_of_week=") do |value| send(name).day_of_week = value end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                      define_method("#{name}_continues") { send(name).end_on ? :until : :forever }
         
     | 
| 
      
 26 
     | 
    
         
            +
                      define_method("#{name}_continues=") do |value| send(name).send("end_on=", nil) if value.to_sym != :until end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                      define_method("#{name}_until") { send(name).end_on }
         
     | 
| 
      
 29 
     | 
    
         
            +
                      define_method("#{name}_until=") do |value|
         
     | 
| 
      
 30 
     | 
    
         
            +
                        return unless value
         
     | 
| 
      
 31 
     | 
    
         
            +
                        if value.is_a? String
         
     | 
| 
      
 32 
     | 
    
         
            +
                          return if value.empty?
         
     | 
| 
      
 33 
     | 
    
         
            +
                          value = Time.parse(value)
         
     | 
| 
      
 34 
     | 
    
         
            +
                        end
         
     | 
| 
      
 35 
     | 
    
         
            +
                        send(name).end_on = value
         
     | 
| 
      
 36 
     | 
    
         
            +
                      end
         
     | 
| 
      
 37 
     | 
    
         
            +
                     end
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,56 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Public: Represents a day in month expression
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # examples
         
     | 
| 
      
 4 
     | 
    
         
            +
            #
         
     | 
| 
      
 5 
     | 
    
         
            +
            # DayInMonth.new(Schedulicon::THURSDAY, 2)  # second Thursday
         
     | 
| 
      
 6 
     | 
    
         
            +
            # DayInMonth.new(Schedulicon::SATURDAY, -1)  # last Saturday
         
     | 
| 
      
 7 
     | 
    
         
            +
            #
         
     | 
| 
      
 8 
     | 
    
         
            +
            module Schedulicon
         
     | 
| 
      
 9 
     | 
    
         
            +
              class DayInMonth
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                attr_reader :day, :frequency
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def initialize(day, frequency)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @day, @frequency = day, frequency
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def ordinal
         
     | 
| 
      
 18 
     | 
    
         
            +
                  {
         
     | 
| 
      
 19 
     | 
    
         
            +
                    :every => 0,
         
     | 
| 
      
 20 
     | 
    
         
            +
                    :first => 1,
         
     | 
| 
      
 21 
     | 
    
         
            +
                    :second => 2,
         
     | 
| 
      
 22 
     | 
    
         
            +
                    :third => 3,
         
     | 
| 
      
 23 
     | 
    
         
            +
                    :fourth => 4,
         
     | 
| 
      
 24 
     | 
    
         
            +
                    :last => -1
         
     | 
| 
      
 25 
     | 
    
         
            +
                  }[frequency]
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
                # Public: generate array of dates for the range
         
     | 
| 
      
 28 
     | 
    
         
            +
                #
         
     | 
| 
      
 29 
     | 
    
         
            +
                # starts_at     - DateTime range starts at
         
     | 
| 
      
 30 
     | 
    
         
            +
                # end_on        - DateTime rande ends on
         
     | 
| 
      
 31 
     | 
    
         
            +
                #
         
     | 
| 
      
 32 
     | 
    
         
            +
                # Returns Array of DateTime
         
     | 
| 
      
 33 
     | 
    
         
            +
                def dates(start_at, end_on)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  start_at.to_datetime.step(end_on).select { |d| week_matches(d) && d.cwday == day }
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                # Private: calculates whether date is in the ordinal week for the expression
         
     | 
| 
      
 38 
     | 
    
         
            +
                #
         
     | 
| 
      
 39 
     | 
    
         
            +
                def week_matches(date)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  ordinal > 0 ?  week_in_month(date) == ordinal : week_from_end(date) == ordinal.abs
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                # Private: calculates the month week number for a date
         
     | 
| 
      
 44 
     | 
    
         
            +
                #
         
     | 
| 
      
 45 
     | 
    
         
            +
                def week_in_month(date)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  ((date.day - 1) / 7) + 1
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                # Private: calculates the month week number from end of month for a date
         
     | 
| 
      
 50 
     | 
    
         
            +
                #
         
     | 
| 
      
 51 
     | 
    
         
            +
                def week_from_end(date)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  last_day = DateTime.new(date.next_month.year, date.next_month.month, 1) - 1
         
     | 
| 
      
 53 
     | 
    
         
            +
                  ((last_day.day - date.day) / 7) + 1
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Public: Represents a day of week expression
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # examples
         
     | 
| 
      
 4 
     | 
    
         
            +
            #
         
     | 
| 
      
 5 
     | 
    
         
            +
            # DayOfWeek.new(Schedulicon::THURSDAY)  # every Thursday
         
     | 
| 
      
 6 
     | 
    
         
            +
            #
         
     | 
| 
      
 7 
     | 
    
         
            +
            module Schedulicon
         
     | 
| 
      
 8 
     | 
    
         
            +
              class DayOfWeek
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                attr_reader :day
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def initialize(day)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @day = day
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                # Public: generate array of dates for the range
         
     | 
| 
      
 17 
     | 
    
         
            +
                #
         
     | 
| 
      
 18 
     | 
    
         
            +
                # starts_at     - DateTime range starts at
         
     | 
| 
      
 19 
     | 
    
         
            +
                # end_on        - DateTime rande ends on
         
     | 
| 
      
 20 
     | 
    
         
            +
                #
         
     | 
| 
      
 21 
     | 
    
         
            +
                # Returns Array of DateTime
         
     | 
| 
      
 22 
     | 
    
         
            +
                def dates(start_at, end_on)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  start_at.to_datetime.step(end_on).select { |d| d.cwday == @day }
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,78 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Public: Describes a schedule in a portable fashion
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'time'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'date'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module Schedulicon
         
     | 
| 
      
 7 
     | 
    
         
            +
              class Schedule
         
     | 
| 
      
 8 
     | 
    
         
            +
                FREQUENCIES = [:every, :first, :second, :third, :fourth, :last]
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                attr_accessor :frequency, :day_of_week, :start_at, :end_on
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def initialize(attrs={})
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @frequency = attrs[:frequency] || :every
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @day_of_week = attrs[:day_of_week] || Schedulicon::MONDAY
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @start_at = attrs[:start_at]
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @end_on = attrs[:end_on]
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                # Public: Hash of attributes that can be used to deserialise item from
         
     | 
| 
      
 20 
     | 
    
         
            +
                #
         
     | 
| 
      
 21 
     | 
    
         
            +
                def to_hash
         
     | 
| 
      
 22 
     | 
    
         
            +
                  hash = {
         
     | 
| 
      
 23 
     | 
    
         
            +
                    'frequency' => frequency,
         
     | 
| 
      
 24 
     | 
    
         
            +
                    'start_at' => start_at.xmlschema,
         
     | 
| 
      
 25 
     | 
    
         
            +
                    'day_of_week' => day_of_week
         
     | 
| 
      
 26 
     | 
    
         
            +
                  }
         
     | 
| 
      
 27 
     | 
    
         
            +
                  hash['end_on'] = end_on.xmlschema if end_on
         
     | 
| 
      
 28 
     | 
    
         
            +
                  hash
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                # Public: load schedule from the hash
         
     | 
| 
      
 32 
     | 
    
         
            +
                #
         
     | 
| 
      
 33 
     | 
    
         
            +
                def self.load(attrs)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  schedule = Schedule.new
         
     | 
| 
      
 35 
     | 
    
         
            +
                  schedule.start_at = Time.xmlschema(attrs['start_at']).localtime
         
     | 
| 
      
 36 
     | 
    
         
            +
                  schedule.end_on = Time.xmlschema(attrs['end_on']).localtime if attrs['end_on']
         
     | 
| 
      
 37 
     | 
    
         
            +
                  schedule.day_of_week = attrs['day_of_week'].to_i
         
     | 
| 
      
 38 
     | 
    
         
            +
                  schedule.frequency = attrs['frequency'].to_sym
         
     | 
| 
      
 39 
     | 
    
         
            +
                  schedule
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                # Public: generates the expression required to generate the schedule dates
         
     | 
| 
      
 43 
     | 
    
         
            +
                #
         
     | 
| 
      
 44 
     | 
    
         
            +
                def expression
         
     | 
| 
      
 45 
     | 
    
         
            +
                  case frequency
         
     | 
| 
      
 46 
     | 
    
         
            +
                  when :every
         
     | 
| 
      
 47 
     | 
    
         
            +
                    DayOfWeek.new(day_of_week)
         
     | 
| 
      
 48 
     | 
    
         
            +
                  else
         
     | 
| 
      
 49 
     | 
    
         
            +
                    DayInMonth.new(day_of_week, frequency)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                # Public: generate a list of dates for the schedule
         
     | 
| 
      
 54 
     | 
    
         
            +
                #
         
     | 
| 
      
 55 
     | 
    
         
            +
                def dates(from=nil, to=nil)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  from ||= start_at
         
     | 
| 
      
 57 
     | 
    
         
            +
                  to ||= ((end_on && end_on.to_date) || from.to_date >> 12)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  expression.dates(from, to).collect {|date| date.to_time }
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                # Public: override equality operator to compare values
         
     | 
| 
      
 62 
     | 
    
         
            +
                #
         
     | 
| 
      
 63 
     | 
    
         
            +
                def ==(other)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  return false unless other
         
     | 
| 
      
 65 
     | 
    
         
            +
                  return false unless other.respond_to?(:frequency) && other.frequency == frequency
         
     | 
| 
      
 66 
     | 
    
         
            +
                  return false unless other.respond_to?(:day_of_week) && other.day_of_week == day_of_week
         
     | 
| 
      
 67 
     | 
    
         
            +
                  return false unless time_attribute_equal(other, :start_at)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  return false unless time_attribute_equal(other, :end_on)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  true
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                def time_attribute_equal(other, name)
         
     | 
| 
      
 73 
     | 
    
         
            +
                  return false unless other.respond_to? name
         
     | 
| 
      
 74 
     | 
    
         
            +
                  return other.send(name).utc == self.send(name).utc if other.send(name) && self.send(name)
         
     | 
| 
      
 75 
     | 
    
         
            +
                  true
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
              end
         
     | 
| 
      
 78 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,52 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class DummyModel
         
     | 
| 
      
 4 
     | 
    
         
            +
              include Attributes
         
     | 
| 
      
 5 
     | 
    
         
            +
              schedule_attribute :event_schedule
         
     | 
| 
      
 6 
     | 
    
         
            +
            end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            describe Attributes do
         
     | 
| 
      
 9 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 10 
     | 
    
         
            +
                @model = DummyModel.new
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              describe ".schedule_attribute" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                context "when root attribute not set" do
         
     | 
| 
      
 15 
     | 
    
         
            +
                  it "returns a Schedule" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @model.event_schedule.should be_an_instance_of(Schedule)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                  it "frequency should be every" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @model.event_schedule_frequency.should eq(:every)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  it "day_of_week should be monday" do
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @model.event_schedule_day_of_week.should eq(Schedulicon::MONDAY)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  it "continues should be forever" do
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @model.event_schedule_continues.should eq(:forever)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  it "until should be nil" do
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @model.event_schedule_until.should be_nil
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
                context "#until" do
         
     | 
| 
      
 32 
     | 
    
         
            +
                  context "when set with valid date string" do
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    subject { @model.event_schedule_until = "12/07/2012" }
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                    it "sets the until to a valid time" do
         
     | 
| 
      
 37 
     | 
    
         
            +
                      subject
         
     | 
| 
      
 38 
     | 
    
         
            +
                      @model.event_schedule_until.should eq(Time.new(2012, 7, 12))
         
     | 
| 
      
 39 
     | 
    
         
            +
                    end
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                  context "when set with empty date string" do
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                    subject { @model.event_schedule_until = "" }
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                    it "sets the until to a valid time" do
         
     | 
| 
      
 46 
     | 
    
         
            +
                      subject
         
     | 
| 
      
 47 
     | 
    
         
            +
                      @model.event_schedule_until.should be_nil
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,74 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe DayInMonth do
         
     | 
| 
      
 4 
     | 
    
         
            +
              describe "#dates" do
         
     | 
| 
      
 5 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @start_at = DateTime.new(2012, 6, 1, 19, 0)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @end_on = DateTime.new(2012, 9, 1, 19, 0)
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                subject { DayInMonth.new(@day, @frequency).dates(@start_at, @end_on) }
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                context "when 3rd Thursday" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @day = Schedulicon::THURSDAY
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @frequency = :third
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  it "first should be 21 June" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                    subject[0].should eq(DateTime.new(2012, 6, 21, 19, 0))
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  it "second should be 19 July" do
         
     | 
| 
      
 22 
     | 
    
         
            +
                    subject[1].should eq(DateTime.new(2012, 7, 19, 19, 0))
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  it "third should be 16 August" do
         
     | 
| 
      
 25 
     | 
    
         
            +
                    subject[2].should eq(DateTime.new(2012, 8, 16, 19, 0))
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  it "should return 3 items" do
         
     | 
| 
      
 28 
     | 
    
         
            +
                    subject.count.should eq(3)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                context "when last Tuesday" do
         
     | 
| 
      
 33 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 34 
     | 
    
         
            +
                    @day = Schedulicon::TUESDAY
         
     | 
| 
      
 35 
     | 
    
         
            +
                    @frequency = :last
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
                  it "first should be 26 June" do
         
     | 
| 
      
 38 
     | 
    
         
            +
                    subject[0].should eq(DateTime.new(2012, 6, 26, 19, 0))
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
                  it "second should be 31 July" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                    subject[1].should eq(DateTime.new(2012, 7, 31, 19, 0))
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
                  it "third should be 28 August" do
         
     | 
| 
      
 44 
     | 
    
         
            +
                    subject[2].should eq(DateTime.new(2012, 8, 28, 19, 0))
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
                  it "should return 3 items" do
         
     | 
| 
      
 47 
     | 
    
         
            +
                    subject.count.should eq(3)
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              describe "#week_from_end" do
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                subject { DayInMonth.new(Schedulicon::THURSDAY, :last).week_from_end(@date) }
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                context "when in last week" do
         
     | 
| 
      
 57 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 58 
     | 
    
         
            +
                    @date = DateTime.new(2012, 6, 28)
         
     | 
| 
      
 59 
     | 
    
         
            +
                  end
         
     | 
| 
      
 60 
     | 
    
         
            +
                  it "is 1" do
         
     | 
| 
      
 61 
     | 
    
         
            +
                    subject.should eq(1)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
                context "when in penultimate week" do
         
     | 
| 
      
 65 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 66 
     | 
    
         
            +
                    @date = DateTime.new(2012, 6, 22)
         
     | 
| 
      
 67 
     | 
    
         
            +
                  end
         
     | 
| 
      
 68 
     | 
    
         
            +
                  it "is 2" do
         
     | 
| 
      
 69 
     | 
    
         
            +
                    subject.should eq(2)
         
     | 
| 
      
 70 
     | 
    
         
            +
                  end
         
     | 
| 
      
 71 
     | 
    
         
            +
                end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
      
 74 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe DayOfWeek do
         
     | 
| 
      
 4 
     | 
    
         
            +
              describe "#dates" do
         
     | 
| 
      
 5 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @start_at = DateTime.new(2012, 6, 1, 19, 0)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @end_on = DateTime.new(2012, 7, 1, 19, 0)
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
                
         
     | 
| 
      
 10 
     | 
    
         
            +
                context "when Monday" do
         
     | 
| 
      
 11 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @day = Schedulicon::MONDAY
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
                  
         
     | 
| 
      
 15 
     | 
    
         
            +
                  subject { DayOfWeek.new(@day).dates(@start_at, @end_on) }
         
     | 
| 
      
 16 
     | 
    
         
            +
                  
         
     | 
| 
      
 17 
     | 
    
         
            +
                  it "first should be 4 June" do
         
     | 
| 
      
 18 
     | 
    
         
            +
                    subject[0].should eq(DateTime.new(2012, 6, 4, 19, 0))
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                  it "second should be 11 June" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                    subject[1].should eq(DateTime.new(2012, 6, 11, 19, 0))
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  it "third should be 18 June" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    subject[2].should eq(DateTime.new(2012, 6, 18, 19, 0))
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  it "fourth should be 25 June" do
         
     | 
| 
      
 27 
     | 
    
         
            +
                    subject[3].should eq(DateTime.new(2012, 6, 25, 19, 0))
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                  it "should return 4 items" do
         
     | 
| 
      
 30 
     | 
    
         
            +
                    subject.count.should eq(4)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
                
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,165 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Schedule do
         
     | 
| 
      
 4 
     | 
    
         
            +
              describe ".load" do
         
     | 
| 
      
 5 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @frequency = :first
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @day_of_week = Schedulicon::WEDNESDAY
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @start_at = random_time
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                subject { Schedule.load({'frequency' => @frequency.to_s, 'day_of_week' => @day_of_week.to_s, 'start_at' => @start_at.xmlschema }) }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                it "sets the start time" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                  subject.start_at.to_s.should eq(@start_at.to_s)
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
                it "sets the day_of_week" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                  subject.day_of_week.should eq(@day_of_week)
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
                it "sets the day on the expression" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                  subject.frequency.should eq(@frequency)
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              describe "#to_hash" do
         
     | 
| 
      
 25 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 26 
     | 
    
         
            +
                  @schedule = Schedule.new
         
     | 
| 
      
 27 
     | 
    
         
            +
                  @schedule.frequency = :first
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @schedule.day_of_week = Schedulicon::WEDNESDAY
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @schedule.start_at = random_time
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @schedule.end_on = random_time
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                subject { @schedule.to_hash }
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                it "sets the start time" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                  subject['start_at'].should eq(@schedule.start_at.xmlschema)
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
                it "sets the start time" do
         
     | 
| 
      
 39 
     | 
    
         
            +
                  subject['end_on'].should eq(@schedule.end_on.xmlschema)
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
                it "sets the day_of_week" do
         
     | 
| 
      
 42 
     | 
    
         
            +
                  subject['day_of_week'].should eq(@schedule.day_of_week)
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
                it "sets the day on the expression" do
         
     | 
| 
      
 45 
     | 
    
         
            +
                  subject['frequency'].should eq(@schedule.frequency)
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
              describe "#expression" do
         
     | 
| 
      
 50 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @schedule = Schedule.new
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                subject { @schedule.expression }
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                context "when every Friday" do
         
     | 
| 
      
 57 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 58 
     | 
    
         
            +
                    @schedule.day_of_week = Schedulicon::FRIDAY
         
     | 
| 
      
 59 
     | 
    
         
            +
                    @schedule.frequency = :every
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
      
 61 
     | 
    
         
            +
                  it "should be a DayOfWeek" do
         
     | 
| 
      
 62 
     | 
    
         
            +
                    subject.should be_an_instance_of(DayOfWeek)
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
                  it "should have Friday as the day" do
         
     | 
| 
      
 65 
     | 
    
         
            +
                    subject.day.should eq(Schedulicon::FRIDAY)
         
     | 
| 
      
 66 
     | 
    
         
            +
                  end
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                context "when 3rd Tuesday of the month" do
         
     | 
| 
      
 70 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 71 
     | 
    
         
            +
                    @schedule.day_of_week = Schedulicon::TUESDAY
         
     | 
| 
      
 72 
     | 
    
         
            +
                    @schedule.frequency = :third
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                  it "should be a DayInMonth" do
         
     | 
| 
      
 75 
     | 
    
         
            +
                    subject.should be_an_instance_of(DayInMonth)
         
     | 
| 
      
 76 
     | 
    
         
            +
                  end
         
     | 
| 
      
 77 
     | 
    
         
            +
                  it "should have Tuesday as the day" do
         
     | 
| 
      
 78 
     | 
    
         
            +
                    subject.day.should eq(Schedulicon::TUESDAY)
         
     | 
| 
      
 79 
     | 
    
         
            +
                  end
         
     | 
| 
      
 80 
     | 
    
         
            +
                  it "should have 3 as the ordinal" do
         
     | 
| 
      
 81 
     | 
    
         
            +
                    subject.ordinal.should eq(3)
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
                end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                context "when last Sunday of the month" do
         
     | 
| 
      
 86 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 87 
     | 
    
         
            +
                    @schedule.day_of_week = Schedulicon::SUNDAY
         
     | 
| 
      
 88 
     | 
    
         
            +
                    @schedule.frequency = :last
         
     | 
| 
      
 89 
     | 
    
         
            +
                  end
         
     | 
| 
      
 90 
     | 
    
         
            +
                  it "should be a DayInMonth" do
         
     | 
| 
      
 91 
     | 
    
         
            +
                    subject.should be_an_instance_of(DayInMonth)
         
     | 
| 
      
 92 
     | 
    
         
            +
                  end
         
     | 
| 
      
 93 
     | 
    
         
            +
                  it "should have Tuesday as the day" do
         
     | 
| 
      
 94 
     | 
    
         
            +
                    subject.day.should eq(Schedulicon::SUNDAY)
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
                  it "should have 3 as the ordinal" do
         
     | 
| 
      
 97 
     | 
    
         
            +
                    subject.ordinal.should eq(-1)
         
     | 
| 
      
 98 
     | 
    
         
            +
                  end
         
     | 
| 
      
 99 
     | 
    
         
            +
                end
         
     | 
| 
      
 100 
     | 
    
         
            +
              end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
              describe "#dates" do
         
     | 
| 
      
 103 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 104 
     | 
    
         
            +
                  @schedule = Schedule.new
         
     | 
| 
      
 105 
     | 
    
         
            +
                  @schedule.start_at = @start_at = random_time
         
     | 
| 
      
 106 
     | 
    
         
            +
                  @schedule.end_on = @end_on = random_time
         
     | 
| 
      
 107 
     | 
    
         
            +
                  @expression = mock('Expression', :dates => [])
         
     | 
| 
      
 108 
     | 
    
         
            +
                  @schedule.stub(:expression) { @expression }
         
     | 
| 
      
 109 
     | 
    
         
            +
                  @from = random_time
         
     | 
| 
      
 110 
     | 
    
         
            +
                  @to = random_time
         
     | 
| 
      
 111 
     | 
    
         
            +
                end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                subject { @schedule.dates(@from, @to) }
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                it "calls the expression#dates with args" do
         
     | 
| 
      
 116 
     | 
    
         
            +
                  @expression.should_receive(:dates).with(@from, @to)
         
     | 
| 
      
 117 
     | 
    
         
            +
                  subject
         
     | 
| 
      
 118 
     | 
    
         
            +
                end
         
     | 
| 
      
 119 
     | 
    
         
            +
                context "when no argumens passed" do
         
     | 
| 
      
 120 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 121 
     | 
    
         
            +
                    @from = nil
         
     | 
| 
      
 122 
     | 
    
         
            +
                    @to = nil
         
     | 
| 
      
 123 
     | 
    
         
            +
                  end
         
     | 
| 
      
 124 
     | 
    
         
            +
                  it "calls the expression#dates with args" do
         
     | 
| 
      
 125 
     | 
    
         
            +
                    @expression.should_receive(:dates).with(@start_at, @end_on.to_date)
         
     | 
| 
      
 126 
     | 
    
         
            +
                    subject
         
     | 
| 
      
 127 
     | 
    
         
            +
                  end
         
     | 
| 
      
 128 
     | 
    
         
            +
                  context "when end_on is nil" do
         
     | 
| 
      
 129 
     | 
    
         
            +
                    before(:each) do
         
     | 
| 
      
 130 
     | 
    
         
            +
                      @schedule.end_on = nil
         
     | 
| 
      
 131 
     | 
    
         
            +
                    end
         
     | 
| 
      
 132 
     | 
    
         
            +
                    it "calls end as 12 months from start" do
         
     | 
| 
      
 133 
     | 
    
         
            +
                      @expression.should_receive(:dates).with(@start_at, @start_at.to_date >> 12)
         
     | 
| 
      
 134 
     | 
    
         
            +
                      subject
         
     | 
| 
      
 135 
     | 
    
         
            +
                    end
         
     | 
| 
      
 136 
     | 
    
         
            +
                  end
         
     | 
| 
      
 137 
     | 
    
         
            +
                end
         
     | 
| 
      
 138 
     | 
    
         
            +
              end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
              describe "#==" do
         
     | 
| 
      
 141 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 142 
     | 
    
         
            +
                  @start_at = random_time
         
     | 
| 
      
 143 
     | 
    
         
            +
                  @schedule = Schedule.new(:frequency => :second, :day_of_week => Schedulicon::SATURDAY, :start_at => @start_at)
         
     | 
| 
      
 144 
     | 
    
         
            +
                end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                subject { @schedule == @other }
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                context "when other is nil" do
         
     | 
| 
      
 149 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 150 
     | 
    
         
            +
                    @other = nil
         
     | 
| 
      
 151 
     | 
    
         
            +
                  end
         
     | 
| 
      
 152 
     | 
    
         
            +
                  it "is false" do
         
     | 
| 
      
 153 
     | 
    
         
            +
                    subject.should eq(false)
         
     | 
| 
      
 154 
     | 
    
         
            +
                  end
         
     | 
| 
      
 155 
     | 
    
         
            +
                end
         
     | 
| 
      
 156 
     | 
    
         
            +
                context "when other is equal" do
         
     | 
| 
      
 157 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 158 
     | 
    
         
            +
                    @other = Schedule.new(:frequency => :second, :day_of_week => Schedulicon::SATURDAY, :start_at => @start_at)
         
     | 
| 
      
 159 
     | 
    
         
            +
                  end
         
     | 
| 
      
 160 
     | 
    
         
            +
                  it "is true" do
         
     | 
| 
      
 161 
     | 
    
         
            +
                    subject.should eq(true)
         
     | 
| 
      
 162 
     | 
    
         
            +
                  end
         
     | 
| 
      
 163 
     | 
    
         
            +
                end
         
     | 
| 
      
 164 
     | 
    
         
            +
              end
         
     | 
| 
      
 165 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/spec_helper.rb
    ADDED
    
    | 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'time'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'date'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rake'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'rspec'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "#{Rake.application.original_dir}/lib/schedulicon"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            include Schedulicon
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            RSpec.configure do |config|
         
     | 
| 
      
 10 
     | 
    
         
            +
              # Use color in STDOUT
         
     | 
| 
      
 11 
     | 
    
         
            +
              config.color_enabled = true
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            def random_string
         
     | 
| 
      
 15 
     | 
    
         
            +
              (0...24).map{ ('a'..'z').to_a[rand(26)] }.join
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            def random_integer
         
     | 
| 
      
 19 
     | 
    
         
            +
              rand(9999)
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            def random_time
         
     | 
| 
      
 23 
     | 
    
         
            +
              Time.now - random_integer
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,60 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: schedulicon
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: 
         
     | 
| 
      
 6 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 7 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 8 
     | 
    
         
            +
            - Adam Bird
         
     | 
| 
      
 9 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 10 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 11 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-07-11 00:00:00.000000000 Z
         
     | 
| 
      
 13 
     | 
    
         
            +
            dependencies: []
         
     | 
| 
      
 14 
     | 
    
         
            +
            description: Gem for recurring events
         
     | 
| 
      
 15 
     | 
    
         
            +
            email: adam.bird@gmail.com
         
     | 
| 
      
 16 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 17 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 18 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 19 
     | 
    
         
            +
            files:
         
     | 
| 
      
 20 
     | 
    
         
            +
            - lib/schedulicon/attributes.rb
         
     | 
| 
      
 21 
     | 
    
         
            +
            - lib/schedulicon/day_in_month.rb
         
     | 
| 
      
 22 
     | 
    
         
            +
            - lib/schedulicon/day_of_week.rb
         
     | 
| 
      
 23 
     | 
    
         
            +
            - lib/schedulicon/schedule.rb
         
     | 
| 
      
 24 
     | 
    
         
            +
            - lib/schedulicon/version.rb
         
     | 
| 
      
 25 
     | 
    
         
            +
            - lib/schedulicon.rb
         
     | 
| 
      
 26 
     | 
    
         
            +
            - spec/schedulicon/attributes_spec.rb
         
     | 
| 
      
 27 
     | 
    
         
            +
            - spec/schedulicon/day_in_month_spec.rb
         
     | 
| 
      
 28 
     | 
    
         
            +
            - spec/schedulicon/day_of_week_spec.rb
         
     | 
| 
      
 29 
     | 
    
         
            +
            - spec/schedulicon/schedule_spec.rb
         
     | 
| 
      
 30 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     | 
| 
      
 31 
     | 
    
         
            +
            homepage: http://github.com/adambird/schedulicon
         
     | 
| 
      
 32 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 33 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 34 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 35 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 36 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 37 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 38 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 39 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 40 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
      
 41 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 42 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 43 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 44 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 45 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 46 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
      
 47 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 48 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 49 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 50 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 51 
     | 
    
         
            +
            rubygems_version: 1.8.24
         
     | 
| 
      
 52 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 53 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
      
 54 
     | 
    
         
            +
            summary: Gem for recurring events
         
     | 
| 
      
 55 
     | 
    
         
            +
            test_files:
         
     | 
| 
      
 56 
     | 
    
         
            +
            - spec/schedulicon/attributes_spec.rb
         
     | 
| 
      
 57 
     | 
    
         
            +
            - spec/schedulicon/day_in_month_spec.rb
         
     | 
| 
      
 58 
     | 
    
         
            +
            - spec/schedulicon/day_of_week_spec.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
            - spec/schedulicon/schedule_spec.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     |