Packages
oban
2.2.0
2.23.0
2.22.1
2.22.0
2.21.1
2.21.0
2.20.3
2.20.2
2.20.1
2.20.0
2.19.4
2.19.3
2.19.2
2.19.1
2.19.0
2.18.3
2.18.2
2.18.1
2.18.0
2.17.12
2.17.11
2.17.10
2.17.9
2.17.8
2.17.7
2.17.6
2.17.5
2.17.4
2.17.3
2.17.2
2.17.1
2.17.0
2.16.3
2.16.2
2.16.1
2.16.0
2.15.4
2.15.3
2.15.2
2.15.1
2.15.0
2.14.2
2.14.1
2.14.0
2.13.6
2.13.5
2.13.4
2.13.3
2.13.2
2.13.1
2.13.0
2.12.1
2.12.0
2.11.3
2.11.2
2.11.1
2.11.0
2.10.1
2.10.0
retired
2.9.2
2.9.1
2.9.0
2.8.0
2.7.2
2.7.1
2.7.0
2.6.1
2.6.0
2.5.0
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.0
2.1.0
2.0.0
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
1.2.0
1.1.0
1.0.0
1.0.0-rc.2
1.0.0-rc.1
0.12.1
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Robust job processing, backed by modern PostgreSQL, SQLite3, and MySQL.
Current section
Files
Jump to
Current section
Files
lib/oban/crontab/parser.ex.exs
defmodule Oban.Crontab.Parser do
@moduledoc false
# parsec:Oban.Crontab.Parser
import NimbleParsec
month_alias =
[
replace(string("JAN"), 1),
replace(string("FEB"), 2),
replace(string("MAR"), 3),
replace(string("APR"), 4),
replace(string("MAY"), 5),
replace(string("JUN"), 6),
replace(string("JUL"), 7),
replace(string("AUG"), 8),
replace(string("SEP"), 9),
replace(string("OCT"), 10),
replace(string("NOV"), 11),
replace(string("DEC"), 12)
]
|> choice()
|> unwrap_and_tag(:literal)
weekday_choice =
choice([
replace(string("MON"), 1),
replace(string("TUE"), 2),
replace(string("WED"), 3),
replace(string("THU"), 4),
replace(string("FRI"), 5),
replace(string("SAT"), 6),
replace(string("SUN"), 0)
])
weekday_alias = unwrap_and_tag(weekday_choice, :literal)
range =
integer(min: 1, max: 2)
|> ignore(string("-"))
|> integer(min: 1, max: 2)
|> tag(:range)
weekday_range =
weekday_choice
|> ignore(string("-"))
|> concat(weekday_choice)
|> tag(:range)
wild =
"*"
|> string()
|> unwrap_and_tag(:wild)
step =
[wild, range]
|> choice()
|> ignore(string("/"))
|> integer(min: 1, max: 2)
|> tag(:step)
literal =
[min: 1, max: 2]
|> integer()
|> unwrap_and_tag(:literal)
separator =
","
|> string()
|> ignore()
expression = choice([step, range, literal, wild, separator])
minutes =
expression
|> times(min: 1)
|> tag(:minutes)
hours =
expression
|> times(min: 1)
|> tag(:hours)
days =
expression
|> times(min: 1)
|> tag(:days)
months =
[month_alias, expression]
|> choice()
|> times(min: 1)
|> tag(:months)
weekdays =
[weekday_range, weekday_alias, expression]
|> choice()
|> times(min: 1)
|> tag(:weekdays)
whitespace = ascii_string([?\s, ?\t], min: 1)
defparsec(
:cron,
minutes
|> ignore(whitespace)
|> concat(hours)
|> ignore(whitespace)
|> concat(days)
|> ignore(whitespace)
|> concat(months)
|> ignore(whitespace)
|> concat(weekdays)
)
# parsec:Oban.Crontab.Parser
end