Module: Wheneverd::Systemd::CronParser::FieldParser

Defined in:
lib/wheneverd/systemd/cron_parser/field_parser.rb

Overview

Parses individual cron field expressions (minute, hour, day-of-month, month).

Handles:

  • Wildcards: *
  • Lists: 1,2,3
  • Ranges: 1-5
  • Steps: */2, 1-10/2
  • Named values (for month): jan, feb, etc.

Class Method Summary collapse

Class Method Details

.parse_mapped(str, range, field:, input:, names:) ⇒ String

Parses a cron field expression with optional name mappings.

Parameters:

  • str (String)

    the field value

  • range (Range)

    valid range for values

  • field (String)

    field name for error messages

  • input (String)

    full cron expression for error messages

  • names (Hash<String, Integer>)

    name-to-value mappings (e.g., => 1)

Returns:

  • (String)

    systemd-compatible expression

Raises:



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/wheneverd/systemd/cron_parser/field_parser.rb', line 40

def self.parse_mapped(str, range, field:, input:, names:)
  raw = str.to_s.strip
  raise_empty_field_error(field, input) if raw.empty?

  parts = raw.split(",").map(&:strip)
  return "*" if parts.any? { |part| part == "*" }

  parts.map do |part|
    part_to_systemd(part, range, field: field, input: input, names: names)
  end.join(",")
end

.parse_numeric(str, range, field:, input:, pad:) ⇒ String

Parses a numeric cron field expression.

Parameters:

  • str (String)

    the field value

  • range (Range)

    valid range for values

  • field (String)

    field name for error messages

  • input (String)

    full cron expression for error messages

  • pad (Integer)

    zero-padding width (0 = no padding)

Returns:

  • (String)

    systemd-compatible expression

Raises:



24
25
26
27
28
29
# File 'lib/wheneverd/systemd/cron_parser/field_parser.rb', line 24

def self.parse_numeric(str, range, field:, input:, pad:)
  expr = parse_mapped(str, range, field: field, input: input, names: {})
  return expr if pad <= 0 || expr == "*"

  pad_expression_numbers(expr, pad: pad)
end