Class: Aias::CronDescriber
- Inherits:
-
Object
- Object
- Aias::CronDescriber
- Defined in:
- lib/aias/cron_describer.rb
Overview
Converts a cron expression or @ keyword into a plain-English description. Returns the original expression unchanged for anything it cannot parse, so it is always safe to call.
Usage:
CronDescriber.describe("0 8 * * *") # => "every day at 8am"
CronDescriber.describe("0 8 * * 1-5") # => "every weekday at 8am"
CronDescriber.display("0 8 * * *") # => "every day at 8am (0 8 * * *)"
Constant Summary collapse
- DAYS =
%w[Sunday Monday Tuesday Wednesday Thursday Friday Saturday].freeze
- MONTHS =
[ nil, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ].freeze
- KEYWORDS =
{ "@yearly" => "every year", "@annually" => "every year", "@monthly" => "every month", "@weekly" => "every Sunday at midnight", "@daily" => "every day at midnight", "@midnight" => "every day at midnight", "@hourly" => "every hour" }.freeze
Class Method Summary collapse
-
.describe(expr) ⇒ Object
Returns only the plain-English description (or the original expr on failure).
-
.display(expr) ⇒ Object
Returns "plain english (expr)".
Instance Method Summary collapse
- #describe ⇒ Object
-
#initialize(expr) ⇒ CronDescriber
constructor
A new instance of CronDescriber.
Constructor Details
#initialize(expr) ⇒ CronDescriber
41 42 43 |
# File 'lib/aias/cron_describer.rb', line 41 def initialize(expr) @expr = expr end |
Class Method Details
.describe(expr) ⇒ Object
Returns only the plain-English description (or the original expr on failure).
37 38 39 |
# File 'lib/aias/cron_describer.rb', line 37 def self.describe(expr) new(expr.to_s.strip).describe end |
.display(expr) ⇒ Object
Returns "plain english (expr)".
31 32 33 34 |
# File 'lib/aias/cron_describer.rb', line 31 def self.display(expr) desc = describe(expr) desc == expr ? expr : "#{desc} (#{expr})" end |
Instance Method Details
#describe ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/aias/cron_describer.rb', line 45 def describe return KEYWORDS[@expr] if KEYWORDS.key?(@expr) parts = @expr.split return @expr unless parts.size == 5 min, hour, dom, mon, dow = parts # Fall back for step expressions (*/n) — we don't describe these. return @expr if [min, hour, dom, mon, dow].any? { |f| f.include?("/") } "#{describe_date(dom, mon, dow)}#{describe_time(min, hour)}" rescue StandardError @expr end |