Class: Repeatable::Schedule

Inherits:
Object
  • Object
show all
Defined in:
lib/repeatable/schedule.rb

Instance Method Summary collapse

Constructor Details

#initialize(arg) ⇒ Schedule

Returns a new instance of Schedule.



3
4
5
6
7
8
9
10
11
12
# File 'lib/repeatable/schedule.rb', line 3

def initialize(arg)
  case arg
  when Repeatable::Expression::Base
    @expression = arg
  when Hash
    @expression = Parser.call(arg)
  else
    fail(ParseError, "Can't build a Repeatable::Schedule from #{arg.class}")
  end
end

Instance Method Details

#==(other) ⇒ Object



45
46
47
# File 'lib/repeatable/schedule.rb', line 45

def ==(other)
  other.is_a?(self.class) && expression == other.expression
end

#include?(date = Date.today) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
39
# File 'lib/repeatable/schedule.rb', line 36

def include?(date = Date.today)
  date = Date(date)
  expression.include?(date)
end

#next_occurrence(start_date = Date.today, include_start: false, limit: 36525) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/repeatable/schedule.rb', line 23

def next_occurrence(start_date = Date.today, include_start: false, limit: 36525)
  date = Date(start_date)

  return date if include_start && include?(date)

  1.step do |i|
    date = date.next_day

    break date if include?(date)
    break if i == limit.to_i
  end
end

#occurrences(start_date, end_date) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/repeatable/schedule.rb', line 14

def occurrences(start_date, end_date)
  start_date = Date(start_date)
  end_date = Date(end_date)

  fail(ArgumentError, 'end_date must be equal to or after start_date') if end_date < start_date

  (start_date..end_date).select { |date| include?(date) }
end

#to_hObject



41
42
43
# File 'lib/repeatable/schedule.rb', line 41

def to_h
  expression.to_h
end