Class: CronSpec::CronSpecification

Inherits:
Object
  • Object
show all
Defined in:
lib/cron-spec/cron_specification.rb

Constant Summary collapse

TimeMethods =
[ :min, :hour, :day, :month, :wday ]
MINUTE =
0
HOUR =
1
DAY =
2
MONTH =
3
DOW =
4
YEARLY =

Shortcut patterns

'yearly'
ANNUALLY =
'annually'
MONTHLY =
'monthly'
WEEKLY =
'weekly'
DAILY =
'daily'
MIDNIGHT =
'midnight'
HOURLY =
'hourly'
SHORTCUT_CRONS =
{
YEARLY => '0 0 1 1 *',
ANNUALLY => '0 0 1 1 *',
MONTHLY => '0 0 1 * *',
WEEKLY => '0 0 * * 0',
DAILY => '0 0 * * *',
MIDNIGHT => '0 0 * * *',
HOURLY => '0 * * * *'}
SHORTCUT_PATTERN =
/\A@(#{SHORTCUT_CRONS.keys.join('|')})\z/

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw_specification) ⇒ CronSpecification



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/cron-spec/cron_specification.rb', line 34

def initialize(raw_specification)
  raise "Must specify a cron specification" if raw_specification.nil?

  @raw_specification = (raw_specification =~ SHORTCUT_PATTERN) ? SHORTCUT_CRONS[$1] : raw_specification

  specification = @raw_specification.split(' ')
  raise "Invalid cron specification" if specification.size != 5

  @cron_values = []
  @cron_values << parse_specification(specification[MINUTE], MinuteFactory.new)
  @cron_values << parse_specification(specification[HOUR], HourFactory.new)
  @cron_values << parse_specification(specification[DAY], DayFactory.new)
  @cron_values << parse_specification(specification[MONTH], MonthFactory.new)
  @cron_values << parse_specification(specification[DOW], DowFactory.new)
end

Instance Attribute Details

#raw_specificationObject (readonly)

Returns the value of attribute raw_specification.



32
33
34
# File 'lib/cron-spec/cron_specification.rb', line 32

def raw_specification
  @raw_specification
end

Instance Method Details

#is_specification_in_effect?(time = Time.now.in_time_zone(DISPLAY_TIME_ZONE)) ⇒ Boolean



50
51
52
53
54
55
56
57
58
# File 'lib/cron-spec/cron_specification.rb', line 50

def is_specification_in_effect?(time=Time.now.in_time_zone(DISPLAY_TIME_ZONE))
  idx = 0
  test_results = @cron_values.collect do | cvalues |
    time_value = time.send(TimeMethods[idx])
    idx += 1
    !cvalues.detect { | cv | cv.is_effective?(time_value) }.nil?
  end.all?

end