cronex 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/CHANGELOG.md +4 -1
- data/cronex.gemspec +1 -0
- data/lib/cronex/description/day_of_week.rb +2 -2
- data/lib/cronex/description/month.rb +1 -1
- data/lib/cronex/exp_descriptor.rb +5 -3
- data/lib/cronex/version.rb +1 -1
- data/resources/resources_en.yml +19 -0
- data/resources/resources_pt_BR.yml +75 -0
- data/spec/{exp_descriptor_spec.rb → exp_descriptor_en_spec.rb} +0 -0
- data/spec/exp_descriptor_pt_BR_spec.rb +364 -0
- data/spec/spec_helper.rb +4 -0
- metadata +21 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YmM2NjgwNmY4ZTEyMmIzYmIyYjg4YmZjYTZlN2IwZTc4ZGZiMzkwZg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTg1NDIxYjM0MmFiZGUzZmRlODVjMDc3ZTljNzcwNzY4ZTViNDk5Ng==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MjMzYzUzNDEzMjcwNWE2NjcyNzBmYWVhY2RkZDM1NDY5MjhlNWFhMjA3MjYx
|
10
|
+
ZTc3Mzk5YmMzM2VhNTAyZjAyYmM0ZmJjZDIyZjkwMTkxM2Q4YmM2MTA4NTc2
|
11
|
+
MTdjOTk3NjM0MjMwNjVhZjA5OGIzZWJjODMzYmM3NTZlZGM4MjE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MDc4MTgwMmQwYjZhYWFiNjFiNWE2MzJiMDkzMjAyZGMzZGZiMTMwODY3ODBk
|
14
|
+
MjhhMmYyNDYxZGJkMTgzZmNiMGZiZmM4N2Q1MzIyMWE0Y2ZjMTgxZDQwNTAw
|
15
|
+
MzA3Mjg0ZGE2MTA5M2I4YzdiMjhiZjdkY2Q5ZTBhY2MzYTY2OTY=
|
data/CHANGELOG.md
CHANGED
data/cronex.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.test_files = spec.files.grep(/^(test|spec|features)\//)
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
+
spec.add_runtime_dependency 'unicode'
|
23
24
|
spec.add_development_dependency 'pry', '~> 0.10'
|
24
25
|
spec.add_development_dependency 'rake', '~> 10.1'
|
25
26
|
spec.add_development_dependency 'rspec', '~> 3.1'
|
@@ -13,11 +13,11 @@ module Cronex
|
|
13
13
|
zero_based_dow = options[:zero_based_dow]
|
14
14
|
invalid_dow = !zero_based_dow && dow_num <= 1
|
15
15
|
if invalid_dow || (zero_based_dow && dow_num == 0)
|
16
|
-
return Cronex::Utils.day_of_week_name(0) # or 7 as in java DateTime().withDayOfWeek(7) for Sunday
|
16
|
+
return resources.get(Cronex::Utils.day_of_week_name(0).downcase) # or 7 as in java DateTime().withDayOfWeek(7) for Sunday
|
17
17
|
elsif !zero_based_dow
|
18
18
|
dow_num -= 1
|
19
19
|
end
|
20
|
-
return Cronex::Utils.day_of_week_name(dow_num)
|
20
|
+
return resources.get(Cronex::Utils.day_of_week_name(dow_num).downcase)
|
21
21
|
else
|
22
22
|
return Date.parse(exp.capitalize).strftime('%A')
|
23
23
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Cronex
|
2
2
|
class MonthDescription < Description
|
3
3
|
def single_item_description(expression)
|
4
|
-
DateTime.new(Time.now.year, Integer(expression), 1).strftime('%B')
|
4
|
+
resources.get(DateTime.new(Time.now.year, Integer(expression), 1).strftime('%B').downcase)
|
5
5
|
end
|
6
6
|
|
7
7
|
def interval_description_format(expression)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'unicode'
|
2
|
+
|
1
3
|
module Cronex
|
2
4
|
|
3
5
|
CASINGS = [:title, :sentence, :lower]
|
@@ -170,11 +172,11 @@ module Cronex
|
|
170
172
|
def transform_case(desc, case_type = :lower)
|
171
173
|
case case_type
|
172
174
|
when :sentence
|
173
|
-
desc.sub(/\
|
175
|
+
desc.sub(/\b[[:word:]]/u) { |s| Unicode.upcase(s) }
|
174
176
|
when :title
|
175
|
-
desc.gsub(/\
|
177
|
+
desc.gsub(/\b[[:word:]]/u) { |s| Unicode.upcase(s) }
|
176
178
|
else
|
177
|
-
|
179
|
+
Unicode.downcase(desc)
|
178
180
|
end
|
179
181
|
end
|
180
182
|
|
data/lib/cronex/version.rb
CHANGED
data/resources/resources_en.yml
CHANGED
@@ -54,3 +54,22 @@ month: month
|
|
54
54
|
months: months
|
55
55
|
year: year
|
56
56
|
years: years
|
57
|
+
monday: Monday
|
58
|
+
tuesday: Tuesday
|
59
|
+
wednesday: Wednesday
|
60
|
+
thursday: Thursday
|
61
|
+
friday: Friday
|
62
|
+
saturday: Saturday
|
63
|
+
sunday: Sunday
|
64
|
+
january: January
|
65
|
+
february: February
|
66
|
+
march: March
|
67
|
+
april: April
|
68
|
+
may: May
|
69
|
+
june: June
|
70
|
+
july: July
|
71
|
+
august: August
|
72
|
+
september: September
|
73
|
+
october: October
|
74
|
+
november: November
|
75
|
+
december: December
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# resources_pt_BR.yml
|
2
|
+
---
|
3
|
+
expression_empty_exception: 'A expressão não pode ser nula ou vazia'
|
4
|
+
interval_description_format: 'a cada %s dias da semana'
|
5
|
+
between_description_format: 'de %s a %s'
|
6
|
+
between_weekday_description_format: 'de %s a %s'
|
7
|
+
on_the_day_of_the_month: 'no(a) {{nth}} %s do mês'
|
8
|
+
on_the_of_the_month: 'no %s do mês'
|
9
|
+
on_the_last_of_the_month: 'no(a) último(a) %s do mês'
|
10
|
+
on_the_last_day_of_the_month: 'no último dia do mês'
|
11
|
+
on_the_last_weekday_of_the_month: 'no último dia útil do mês'
|
12
|
+
between_days_of_the_month: 'entre os dias %s e %s do mês'
|
13
|
+
seconds_through_past_the_minute: 'entre %s e %s segundos após o minuto'
|
14
|
+
between_x_and_y: 'entre %s e %s'
|
15
|
+
past_the_hour: 'após a hora'
|
16
|
+
at_x_seconds_past_the_minute: '%s segundos após o minuto'
|
17
|
+
minutes_through_past_the_hour: 'entre %s e %s minutos após a hora'
|
18
|
+
on_day_of_the_month: 'no dia %s do mês'
|
19
|
+
first_weekday: 'primeiro dia útil'
|
20
|
+
weekday_nearest_day: 'dia útil mais próximo a %s'
|
21
|
+
starting: 'iniciando'
|
22
|
+
only_on: 'todo(a) %s'
|
23
|
+
only_in: 'em %s'
|
24
|
+
every_x_seconds: 'a cada %s segundos'
|
25
|
+
every_minute_between: 'A cada minuto entre %s e %s'
|
26
|
+
every_second: 'a cada segundo'
|
27
|
+
every_minute: 'a cada minuto'
|
28
|
+
every_1_minute: 'a cada 1 minuto'
|
29
|
+
every_hour: 'a cada hora'
|
30
|
+
every_1_hour: 'a cada 1 hora'
|
31
|
+
every_day: 'todo dia'
|
32
|
+
every_1_day: 'a cada 1 dia'
|
33
|
+
every_year: 'a cada ano'
|
34
|
+
every_x: 'a cada %s'
|
35
|
+
at_x: '%s'
|
36
|
+
on_x: '%s'
|
37
|
+
in_x: 'em %s'
|
38
|
+
first: primeiro(a)
|
39
|
+
second: segundo(a)
|
40
|
+
third: terceiro(a)
|
41
|
+
fourth: quarto(a)
|
42
|
+
fifth: quinto(a)
|
43
|
+
time_pm: após meio-dia
|
44
|
+
time_am: antes do meio-dia
|
45
|
+
and: e
|
46
|
+
at: às
|
47
|
+
day: dia
|
48
|
+
days: dias
|
49
|
+
hour: hora
|
50
|
+
hours: horas
|
51
|
+
minute: minuto
|
52
|
+
minutes: minutos
|
53
|
+
month: mês
|
54
|
+
months: mêses
|
55
|
+
year: ano
|
56
|
+
years: anos
|
57
|
+
monday: segunda-feira
|
58
|
+
tuesday: terça-feira
|
59
|
+
wednesday: quarta-feira
|
60
|
+
thursday: quinta-feira
|
61
|
+
friday: sexta-feira
|
62
|
+
saturday: sábado
|
63
|
+
sunday: domingo
|
64
|
+
january: janeiro
|
65
|
+
february: fevereiro
|
66
|
+
march: março
|
67
|
+
april: abril
|
68
|
+
may: maio
|
69
|
+
june: junho
|
70
|
+
july: julho
|
71
|
+
august: agosto
|
72
|
+
september: setembro
|
73
|
+
october: outubro
|
74
|
+
november: novembro
|
75
|
+
december: dezembro
|
File without changes
|
@@ -0,0 +1,364 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'cronex'
|
3
|
+
|
4
|
+
module Cronex
|
5
|
+
describe ExpressionDescriptor do
|
6
|
+
|
7
|
+
let(:opts) { { zero_based_dow: false } }
|
8
|
+
|
9
|
+
it 'every second' do
|
10
|
+
expect(desc_pt_br('* * * * * *')).to eq('A cada segundo')
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'every 45 seconds' do
|
14
|
+
expect(desc_pt_br('*/45 * * * * *')).to eq('A cada 45 segundos')
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'minute span' do
|
18
|
+
expect(desc_pt_br('0-10 11 * * *')).to eq('A cada minuto entre 11:00 AM e 11:10 AM')
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'every minute' do
|
22
|
+
it 'every minute' do
|
23
|
+
expect(desc_pt_br('* * * * *')).to eq('A cada minuto')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'every minute */1' do
|
27
|
+
expect(desc_pt_br('*/1 * * * *')).to eq('A cada minuto')
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'every minute 0 0/1' do
|
31
|
+
expect(desc_pt_br('0 0/1 * * * ?')).to eq('A cada minuto')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'every X minutes:' do
|
36
|
+
it 'every 5 minutes' do
|
37
|
+
expect(desc_pt_br('*/5 * * * *')).to eq('A cada 5 minutos')
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'every 5 minute 0 */5' do
|
41
|
+
expect(desc_pt_br('0 */5 * * * *')).to eq('A cada 5 minutos')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'every 10 minutes 0 0/10' do
|
45
|
+
expect(desc_pt_br('0 0/10 * * * ?')).to eq('A cada 10 minutos')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'every hour:' do
|
50
|
+
it 'every hour 0 0' do
|
51
|
+
expect(desc_pt_br('0 0 * * * ?')).to eq('A cada hora')
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'every hour 0 0 0/1' do
|
55
|
+
expect(desc_pt_br('0 0 0/1 * * ?')).to eq('A cada hora')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'daily at time' do
|
60
|
+
expect(desc_pt_br('30 11 * * *')).to eq('Às 11:30 AM')
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'time of day certain days of week:' do
|
64
|
+
it 'time of day on MON-FRI' do
|
65
|
+
expect(desc_pt_br('0 23 ? * MON-FRI')).to eq('Às 11:00 PM, de segunda-feira a sexta-feira')
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'time of day on 1-5' do
|
69
|
+
expect(desc_pt_br('30 11 * * 1-5')).to eq('Às 11:30 AM, de segunda-feira a sexta-feira')
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'one month todo(a)' do
|
74
|
+
expect(desc_pt_br('* * * 3 *')).to eq('A cada minuto, em março')
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'two months todo(a)' do
|
78
|
+
expect(desc_pt_br('* * * 3,6 *')).to eq('A cada minuto, em março e junho')
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'two times each afternoon' do
|
82
|
+
expect(desc_pt_br('30 14,16 * * *')).to eq('Às 2:30 PM e 4:30 PM')
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'three times daily' do
|
86
|
+
expect(desc_pt_br('30 6,14,16 * * *')).to eq('Às 6:30 AM, 2:30 PM e 4:30 PM')
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'once a week:' do
|
90
|
+
it 'once a week 0' do
|
91
|
+
expect(desc_pt_br('46 9 * * 0')).to eq('Às 9:46 AM, todo(a) domingo')
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'once a week SUN' do
|
95
|
+
expect(desc_pt_br('46 9 * * SUN')).to eq('Às 9:46 AM, todo(a) domingo')
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'once a week 7' do
|
99
|
+
expect(desc_pt_br('46 9 * * 7')).to eq('Às 9:46 AM, todo(a) domingo')
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'once a week 1' do
|
103
|
+
expect(desc_pt_br('46 9 * * 1')).to eq('Às 9:46 AM, todo(a) segunda-feira')
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'once a week 6' do
|
107
|
+
expect(desc_pt_br('46 9 * * 6')).to eq('Às 9:46 AM, todo(a) sábado')
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'once a week non zero based:' do
|
112
|
+
it 'once a week 1' do
|
113
|
+
expect(desc_pt_br('46 9 * * 1', opts)).to eq('Às 9:46 AM, todo(a) domingo')
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'once a week SUN' do
|
117
|
+
expect(desc_pt_br('46 9 * * SUN', opts)).to eq('Às 9:46 AM, todo(a) domingo')
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'once a week 2' do
|
121
|
+
expect(desc_pt_br('46 9 * * 2', opts)).to eq('Às 9:46 AM, todo(a) segunda-feira')
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'once a week 7' do
|
125
|
+
expect(desc_pt_br('46 9 * * 7', opts)).to eq('Às 9:46 AM, todo(a) sábado')
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
context 'twice a week:' do
|
130
|
+
it 'twice a week 1,2' do
|
131
|
+
expect(desc_pt_br('46 9 * * 1,2')).to eq('Às 9:46 AM, todo(a) segunda-feira e terça-feira')
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'twice a week MON,TUE' do
|
135
|
+
expect(desc_pt_br('46 9 * * MON,TUE')).to eq('Às 9:46 AM, todo(a) segunda-feira e terça-feira')
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'twice a week 0,6' do
|
139
|
+
expect(desc_pt_br('46 9 * * 0,6')).to eq('Às 9:46 AM, todo(a) domingo e sábado')
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'twice a week 6,7' do
|
143
|
+
expect(desc_pt_br('46 9 * * 6,7')).to eq('Às 9:46 AM, todo(a) sábado e domingo')
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
context 'twice a week non zero based:' do
|
148
|
+
it 'twice a week 1,2' do
|
149
|
+
expect(desc_pt_br('46 9 * * 1,2', opts)).to eq('Às 9:46 AM, todo(a) domingo e segunda-feira')
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'twice a week SUN,MON' do
|
153
|
+
expect(desc_pt_br('46 9 * * SUN,MON', opts)).to eq('Às 9:46 AM, todo(a) domingo e segunda-feira')
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'twice a week 6,7' do
|
157
|
+
expect(desc_pt_br('46 9 * * 6,7', opts)).to eq('Às 9:46 AM, todo(a) sexta-feira e sábado')
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
it 'day of month' do
|
162
|
+
expect(desc_pt_br('23 12 15 * *')).to eq('Às 12:23 PM, no dia 15 do mês')
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'day of month ignores day of week' do
|
166
|
+
expect(desc_pt_br('23 12 15 * SUN')).to eq('Às 12:23 PM, no dia 15 do mês')
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'month name' do
|
170
|
+
expect(desc_pt_br('23 12 * JAN *')).to eq('Às 12:23 PM, em janeiro')
|
171
|
+
end
|
172
|
+
|
173
|
+
it 'day of month with question mark' do
|
174
|
+
expect(desc_pt_br('23 12 ? JAN *')).to eq('Às 12:23 PM, em janeiro')
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'month name range 2' do
|
178
|
+
expect(desc_pt_br('23 12 * JAN-FEB *')).to eq('Às 12:23 PM, de janeiro a fevereiro')
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'month name range 3' do
|
182
|
+
expect(desc_pt_br('23 12 * JAN-MAR *')).to eq('Às 12:23 PM, de janeiro a março')
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'day of week name' do
|
186
|
+
expect(desc_pt_br('23 12 * * SUN')).to eq('Às 12:23 PM, todo(a) domingo')
|
187
|
+
end
|
188
|
+
|
189
|
+
context 'day of week range:' do
|
190
|
+
it 'day of week range MON-FRI' do
|
191
|
+
expect(desc_pt_br('*/5 15 * * MON-FRI')).to eq('A cada 5 minutos, 3:00 PM, de segunda-feira a sexta-feira')
|
192
|
+
end
|
193
|
+
|
194
|
+
it 'day of week range 0-6' do
|
195
|
+
expect(desc_pt_br('*/5 15 * * 0-6')).to eq('A cada 5 minutos, 3:00 PM, de domingo a sábado')
|
196
|
+
end
|
197
|
+
|
198
|
+
it 'day of week range 6-7' do
|
199
|
+
expect(desc_pt_br('*/5 15 * * 6-7')).to eq('A cada 5 minutos, 3:00 PM, de sábado a domingo')
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
context 'day of week once in month:' do
|
204
|
+
it 'day of week once MON#3' do
|
205
|
+
expect(desc_pt_br('* * * * MON#3')).to eq('A cada minuto, no(a) terceiro(a) segunda-feira do mês')
|
206
|
+
end
|
207
|
+
|
208
|
+
it 'day of week once 0#3' do
|
209
|
+
expect(desc_pt_br('* * * * 0#3')).to eq('A cada minuto, no(a) terceiro(a) domingo do mês')
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
context 'last day of week of the month:' do
|
214
|
+
it 'last day of week 4L' do
|
215
|
+
expect(desc_pt_br('* * * * 4L')).to eq('A cada minuto, no(a) último(a) quinta-feira do mês')
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'last day of week 0L' do
|
219
|
+
expect(desc_pt_br('* * * * 0L')).to eq('A cada minuto, no(a) último(a) domingo do mês')
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
it 'last day of the month' do
|
224
|
+
expect(desc_pt_br('*/5 * L JAN *')).to eq('A cada 5 minutos, no último dia do mês, em janeiro')
|
225
|
+
end
|
226
|
+
|
227
|
+
it 'time of day with seconds' do
|
228
|
+
expect(desc_pt_br('30 02 14 * * *')).to eq('Às 2:02:30 PM')
|
229
|
+
end
|
230
|
+
|
231
|
+
it 'second intervals' do
|
232
|
+
expect(desc_pt_br('5-10 * * * * *')).to eq('Entre 5 e 10 segundos após o minuto')
|
233
|
+
end
|
234
|
+
|
235
|
+
it 'second minutes hours intervals' do
|
236
|
+
expect(desc_pt_br('5-10 30-35 10-12 * * *')).to eq(
|
237
|
+
'Entre 5 e 10 segundos após o minuto, entre 30 e 35 minutos após a hora, entre 10:00 AM e 12:59 PM')
|
238
|
+
end
|
239
|
+
|
240
|
+
it 'every 5 minutes at 30 seconds' do
|
241
|
+
expect(desc_pt_br('30 */5 * * * *')).to eq('30 segundos após o minuto, a cada 5 minutos')
|
242
|
+
end
|
243
|
+
|
244
|
+
it 'minutes past the hour range' do
|
245
|
+
expect(desc_pt_br('0 30 10-13 ? * WED,FRI')).to eq(
|
246
|
+
'30 minutos após a hora, entre 10:00 AM e 1:59 PM, todo(a) quarta-feira e sexta-feira')
|
247
|
+
end
|
248
|
+
|
249
|
+
it 'seconds past the minute interval' do
|
250
|
+
expect(desc_pt_br('10 0/5 * * * ?')).to eq('10 segundos após o minuto, a cada 5 minutos')
|
251
|
+
end
|
252
|
+
|
253
|
+
it 'between with interval' do
|
254
|
+
expect(desc_pt_br('2-59/3 1,9,22 11-26 1-6 ?')).to eq(
|
255
|
+
'A cada 3 minutos, entre 02 e 59 minutos após a hora, 1:00 AM, 9:00 AM e 10:00 PM, entre os dias 11 e 26 do mês, de janeiro a junho')
|
256
|
+
end
|
257
|
+
|
258
|
+
it 'recurring first of month' do
|
259
|
+
expect(desc_pt_br('0 0 6 1/1 * ?')).to eq('Às 6:00 AM')
|
260
|
+
end
|
261
|
+
|
262
|
+
it 'minutes past the hour' do
|
263
|
+
expect(desc_pt_br('0 5 0/1 * * ?')).to eq('05 minutos após a hora')
|
264
|
+
end
|
265
|
+
|
266
|
+
it 'every past the hour' do
|
267
|
+
expect(desc_pt_br('0 0,5,10,15,20,25,30,35,40,45,50,55 * ? * *')).to eq(
|
268
|
+
'00, 05, 10, 15, 20, 25, 30, 35, 40, 45, 50 e 55 minutos após a hora')
|
269
|
+
end
|
270
|
+
|
271
|
+
it 'every x minute past the hour with interval' do
|
272
|
+
expect(desc_pt_br('0 0-30/2 17 ? * MON-FRI')).to eq(
|
273
|
+
'A cada 2 minutos, entre 00 e 30 minutos após a hora, 5:00 PM, de segunda-feira a sexta-feira')
|
274
|
+
end
|
275
|
+
|
276
|
+
it 'one year only with seconds' do
|
277
|
+
expect(desc_pt_br('* * * * * * 2013')).to eq('A cada segundo, em 2013')
|
278
|
+
end
|
279
|
+
|
280
|
+
it 'one year todo(a) without seconds' do
|
281
|
+
expect(desc_pt_br('* * * * * 2013')).to eq('A cada minuto, em 2013')
|
282
|
+
end
|
283
|
+
|
284
|
+
it 'two years todo(a)' do
|
285
|
+
expect(desc_pt_br('* * * * * 2013,2014')).to eq('A cada minuto, em 2013 e 2014')
|
286
|
+
end
|
287
|
+
|
288
|
+
it 'year range 2' do
|
289
|
+
expect(desc_pt_br('23 12 * JAN-FEB * 2013-2014')).to eq('Às 12:23 PM, de janeiro a fevereiro, de 2013 a 2014')
|
290
|
+
end
|
291
|
+
|
292
|
+
it 'year range 3' do
|
293
|
+
expect(desc_pt_br('23 12 * JAN-MAR * 2013-2015')).to eq('Às 12:23 PM, de janeiro a março, de 2013 a 2015')
|
294
|
+
end
|
295
|
+
|
296
|
+
context 'multi part range seconds:' do
|
297
|
+
it 'multi part range seconds 2,4-5' do
|
298
|
+
expect(desc_pt_br('2,4-5 1 * * *')).to eq('Entre 02,04 e 05 minutos após a hora, 1:00 AM')
|
299
|
+
end
|
300
|
+
|
301
|
+
it 'multi part range seconds 2,26-28' do
|
302
|
+
expect(desc_pt_br('2,26-28 18 * * *')).to eq('Entre 02,26 e 28 minutos após a hora, 6:00 PM')
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
context 'minutes past the hour:' do
|
307
|
+
it 'minutes past the hour 5,10' do
|
308
|
+
expect(desc_pt_br('5,10 0 * * *')).to eq('05 e 10 minutos após a hora')
|
309
|
+
end
|
310
|
+
|
311
|
+
it 'minutes past the hour 5,10 day 2' do
|
312
|
+
expect(desc_pt_br('5,10 0 2 * *')).to eq('05 e 10 minutos após a hora, no dia 2 do mês')
|
313
|
+
end
|
314
|
+
|
315
|
+
it 'minutes past the hour 5/10 day 2' do
|
316
|
+
expect(desc_pt_br('5/10 0 2 * *')).to eq('A cada 10 minutos, iniciando 05 minutos após a hora, no dia 2 do mês')
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
context 'seconds past the minute:' do
|
321
|
+
it 'seconds past the minute 5,6' do
|
322
|
+
expect(desc_pt_br('5,6 0 0 * * *')).to eq('5 e 6 segundos após o minuto')
|
323
|
+
end
|
324
|
+
|
325
|
+
it 'seconds past the minute 5,6 at 1' do
|
326
|
+
expect(desc_pt_br('5,6 0 1 * * *')).to eq('5 e 6 segundos após o minuto, 1:00 AM')
|
327
|
+
end
|
328
|
+
|
329
|
+
it 'seconds past the minute 5,6 day 2' do
|
330
|
+
expect(desc_pt_br('5,6 0 0 2 * *')).to eq('5 e 6 segundos após o minuto, no dia 2 do mês')
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
context 'increments starting at X > 1:' do
|
335
|
+
it 'second increments' do
|
336
|
+
expect(desc_pt_br('5/15 0 * * * *')).to eq('A cada 15 segundos, iniciando 5 segundos após o minuto')
|
337
|
+
end
|
338
|
+
|
339
|
+
it 'minute increments' do
|
340
|
+
expect(desc_pt_br('30/10 * * * *')).to eq('A cada 10 minutos, iniciando 30 minutos após a hora')
|
341
|
+
end
|
342
|
+
|
343
|
+
it 'hour increments' do
|
344
|
+
expect(desc_pt_br('0 30 2/6 * * ?')).to eq('30 minutos após a hora, a cada 6 horas, iniciando 2:00 AM')
|
345
|
+
end
|
346
|
+
|
347
|
+
it 'day of month increments' do
|
348
|
+
expect(desc_pt_br('0 30 8 2/7 * *')).to eq('Às 8:30 AM, a cada 7 dias, iniciando no dia 2 do mês')
|
349
|
+
end
|
350
|
+
|
351
|
+
it 'day of week increments' do
|
352
|
+
expect(desc_pt_br('0 30 11 * * 2/2')).to eq('Às 11:30 AM, a cada 2 dias da semana, iniciando terça-feira')
|
353
|
+
end
|
354
|
+
|
355
|
+
it 'month increments' do
|
356
|
+
expect(desc_pt_br('0 20 10 * 2/3 THU')).to eq('Às 10:20 AM, todo(a) quinta-feira, a cada 3 mêses, iniciando em fevereiro')
|
357
|
+
end
|
358
|
+
|
359
|
+
it 'year increments' do
|
360
|
+
expect(desc_pt_br('0 0 0 1 MAR * 2010/5')).to eq('Às 0:00 AM, no dia 1 do mês, em março, a cada 5 anos, iniciando em 2010')
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
364
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,4 +8,8 @@ RSpec.configure do |config|
|
|
8
8
|
def desc(expression, opts = {})
|
9
9
|
Cronex::ExpressionDescriptor.new(expression, opts).description
|
10
10
|
end
|
11
|
+
|
12
|
+
def desc_pt_br(expression, opts = {})
|
13
|
+
Cronex::ExpressionDescriptor.new(expression, opts, 'pt_BR').description
|
14
|
+
end
|
11
15
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cronex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adrian Kazaku
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: unicode
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: pry
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -85,8 +99,10 @@ files:
|
|
85
99
|
- lib/cronex/utils.rb
|
86
100
|
- lib/cronex/version.rb
|
87
101
|
- resources/resources_en.yml
|
102
|
+
- resources/resources_pt_BR.yml
|
88
103
|
- spec/casing_spec.rb
|
89
|
-
- spec/
|
104
|
+
- spec/exp_descriptor_en_spec.rb
|
105
|
+
- spec/exp_descriptor_pt_BR_spec.rb
|
90
106
|
- spec/spec_helper.rb
|
91
107
|
homepage: https://github.com/alpinweis/cronex
|
92
108
|
licenses:
|
@@ -114,5 +130,6 @@ specification_version: 4
|
|
114
130
|
summary: Ruby library that converts cron expressions into human readable strings
|
115
131
|
test_files:
|
116
132
|
- spec/casing_spec.rb
|
117
|
-
- spec/
|
133
|
+
- spec/exp_descriptor_en_spec.rb
|
134
|
+
- spec/exp_descriptor_pt_BR_spec.rb
|
118
135
|
- spec/spec_helper.rb
|