ice_cube 0.14.0 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/locales/de.yml +178 -0
- data/config/locales/fr.yml +173 -0
- data/config/locales/ru.yml +195 -0
- data/config/locales/sv.yml +169 -0
- data/lib/ice_cube/parsers/ical_parser.rb +16 -25
- data/lib/ice_cube/rule.rb +35 -15
- data/lib/ice_cube/schedule.rb +2 -2
- data/lib/ice_cube/time_util.rb +11 -3
- data/lib/ice_cube/validations/day.rb +2 -0
- data/lib/ice_cube/validations/until.rb +2 -2
- data/lib/ice_cube/version.rb +1 -1
- metadata +7 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4da7e2dd818b7ab5f3c5dd023370bbc80f8e8ced
|
4
|
+
data.tar.gz: e131a536a09b9c2bda6373b8c1f76cc2b8857245
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ea3d24d220d7683a46c74b7b63bb2ab9959de7e1b4d08dd96664593f99bf78402e0f27fc395a4e21e46ce7cdea01a7780b7c5948fc10299a671cfe8f1c4a8f9
|
7
|
+
data.tar.gz: ab2b07d2a5023c56a165b0cd3f8407f4c36816413efb005e1e31a8b82123cd4ba878a710b05832c2d521804d6dfb62fbd328199286b32e341e64f0e180fdd7ea
|
@@ -0,0 +1,178 @@
|
|
1
|
+
de:
|
2
|
+
ice_cube:
|
3
|
+
pieces_connector: ' / '
|
4
|
+
not: 'außer %{target}'
|
5
|
+
not_on: 'außer am %{target}'
|
6
|
+
date:
|
7
|
+
formats:
|
8
|
+
default: '%-d. %B %Y'
|
9
|
+
month_names:
|
10
|
+
-
|
11
|
+
- Januar
|
12
|
+
- Februar
|
13
|
+
- März
|
14
|
+
- April
|
15
|
+
- Mai
|
16
|
+
- Juni
|
17
|
+
- Juli
|
18
|
+
- August
|
19
|
+
- September
|
20
|
+
- Oktober
|
21
|
+
- November
|
22
|
+
- Dezember
|
23
|
+
day_names:
|
24
|
+
- Sonntag
|
25
|
+
- Montag
|
26
|
+
- Dienstag
|
27
|
+
- Mittwoch
|
28
|
+
- Donnerstag
|
29
|
+
- Freitag
|
30
|
+
- Samstag
|
31
|
+
times:
|
32
|
+
other: '%{count} mal'
|
33
|
+
one: '%{count} mal'
|
34
|
+
until: 'bis zum %{date}'
|
35
|
+
days_of_week: '%{segments} %{day}'
|
36
|
+
days_of_month:
|
37
|
+
one: '%{segments} Tag des Monats'
|
38
|
+
other: '%{segments} Tag des Monats'
|
39
|
+
days_of_year:
|
40
|
+
one: '%{segments} Tag des Jahres'
|
41
|
+
other: '%{segments} Tag des Jahres'
|
42
|
+
at_hours_of_the_day:
|
43
|
+
one: in der %{segments} Stunde des Tages
|
44
|
+
other: in der %{segments} Stunde des Tages
|
45
|
+
on_minutes_of_hour:
|
46
|
+
one: in der %{segments} Minute der Stunde
|
47
|
+
other: in der %{segments} Minute der Stunde
|
48
|
+
at_seconds_of_minute:
|
49
|
+
one: in der %{segments} Sekunde
|
50
|
+
other: in der %{segments} Sekunde
|
51
|
+
on_seconds_of_minute:
|
52
|
+
one: in der %{segments} Sekunde der Minute
|
53
|
+
other: in der %{segments} Sekunde der Minute
|
54
|
+
each_second:
|
55
|
+
one: Jede Sekunde
|
56
|
+
other: Alle %{count} Sekunden
|
57
|
+
each_minute:
|
58
|
+
one: Jede Minute
|
59
|
+
other: Alle %{count} Minuten
|
60
|
+
each_hour:
|
61
|
+
one: Stündlich
|
62
|
+
other: Alle %{count} Stunden
|
63
|
+
each_day:
|
64
|
+
one: Täglich
|
65
|
+
other: Alle %{count} Tage
|
66
|
+
each_week:
|
67
|
+
one: Wöchentlich
|
68
|
+
other: Alle %{count} Wochen
|
69
|
+
each_month:
|
70
|
+
one: Monatlich
|
71
|
+
other: Alle %{count} Monate
|
72
|
+
each_year:
|
73
|
+
one: Jährlich
|
74
|
+
other: Alle %{count} Jahre
|
75
|
+
'on': am %{sentence}
|
76
|
+
in: 'im %{target}'
|
77
|
+
integer:
|
78
|
+
negative: '%{ordinal}. letzter'
|
79
|
+
literal_ordinals:
|
80
|
+
-1: letzten
|
81
|
+
-2: vorletzten
|
82
|
+
ordinal: '%{number}%{ordinal}'
|
83
|
+
ordinals:
|
84
|
+
default: '.'
|
85
|
+
# 1: st
|
86
|
+
# 2: nd
|
87
|
+
# 3: rd
|
88
|
+
# 11: th
|
89
|
+
# 12: th
|
90
|
+
# 13: th
|
91
|
+
on_weekends: am Wochenende
|
92
|
+
on_weekdays: an Wochentagen
|
93
|
+
days_on:
|
94
|
+
- Sonntags
|
95
|
+
- Montags
|
96
|
+
- Dienstags
|
97
|
+
- Mittwochs
|
98
|
+
- Donnerstags
|
99
|
+
- Freitags
|
100
|
+
- Samstags
|
101
|
+
on_days: '%{days}'
|
102
|
+
array:
|
103
|
+
last_word_connector: ' und '
|
104
|
+
two_words_connector: ' und '
|
105
|
+
words_connector: ', '
|
106
|
+
string:
|
107
|
+
format:
|
108
|
+
day: '%{rest} %{current}'
|
109
|
+
day_of_week: '%{rest} %{current}'
|
110
|
+
day_of_month: '%{rest} %{current}'
|
111
|
+
day_of_year: '%{rest} %{current}'
|
112
|
+
hour_of_day: '%{rest} %{current}'
|
113
|
+
minute_of_hour: '%{rest} %{current}'
|
114
|
+
until: '%{rest} %{current}'
|
115
|
+
count: '%{rest} %{current}'
|
116
|
+
default: '%{rest} %{current}'
|
117
|
+
|
118
|
+
date:
|
119
|
+
abbr_day_names:
|
120
|
+
- So
|
121
|
+
- Mo
|
122
|
+
- Di
|
123
|
+
- Mi
|
124
|
+
- Do
|
125
|
+
- Fr
|
126
|
+
- Sa
|
127
|
+
abbr_month_names:
|
128
|
+
-
|
129
|
+
- Jan
|
130
|
+
- Feb
|
131
|
+
- Mär
|
132
|
+
- Apr
|
133
|
+
- Mai
|
134
|
+
- Jun
|
135
|
+
- Jul
|
136
|
+
- Aug
|
137
|
+
- Sep
|
138
|
+
- Okt
|
139
|
+
- Nov
|
140
|
+
- Dez
|
141
|
+
day_names:
|
142
|
+
- Sonntag
|
143
|
+
- Montag
|
144
|
+
- Dinstag
|
145
|
+
- Mittwoch
|
146
|
+
- Donnerstag
|
147
|
+
- Freitag
|
148
|
+
- Samstag
|
149
|
+
formats:
|
150
|
+
default: "%Y-%m-%d"
|
151
|
+
long: "%B %d, %Y"
|
152
|
+
short: "%b %d"
|
153
|
+
month_names:
|
154
|
+
-
|
155
|
+
- Januar
|
156
|
+
- Februar
|
157
|
+
- März
|
158
|
+
- April
|
159
|
+
- Mai
|
160
|
+
- Juni
|
161
|
+
- Juli
|
162
|
+
- August
|
163
|
+
- September
|
164
|
+
- Oktober
|
165
|
+
- November
|
166
|
+
- Dezember
|
167
|
+
order:
|
168
|
+
- :year
|
169
|
+
- :month
|
170
|
+
- :day
|
171
|
+
|
172
|
+
time:
|
173
|
+
am: am
|
174
|
+
formats:
|
175
|
+
default: "%a, %d %b %Y %H:%M:%S %z"
|
176
|
+
long: "%B %d, %Y %H:%M"
|
177
|
+
short: "%d %b %H:%M"
|
178
|
+
pm: pm
|
@@ -0,0 +1,173 @@
|
|
1
|
+
fr:
|
2
|
+
ice_cube:
|
3
|
+
pieces_connector: ' / '
|
4
|
+
not: 'pas %{target}'
|
5
|
+
not_on: 'pas durant %{target}'
|
6
|
+
date:
|
7
|
+
formats:
|
8
|
+
default: '%d %B %Y'
|
9
|
+
month_names:
|
10
|
+
-
|
11
|
+
- janvier
|
12
|
+
- février
|
13
|
+
- mars
|
14
|
+
- avril
|
15
|
+
- mai
|
16
|
+
- juin
|
17
|
+
- juillet
|
18
|
+
- août
|
19
|
+
- septembre
|
20
|
+
- octobre
|
21
|
+
- novembre
|
22
|
+
- décembre
|
23
|
+
day_names:
|
24
|
+
- dimanche
|
25
|
+
- lundi
|
26
|
+
- mardi
|
27
|
+
- mercredi
|
28
|
+
- jeudi
|
29
|
+
- vendredi
|
30
|
+
- samedi
|
31
|
+
times:
|
32
|
+
other: '%{count} fois'
|
33
|
+
one: '%{count} fois'
|
34
|
+
until: "jusqu'au %{date}"
|
35
|
+
days_of_week: '%{segments} %{day}'
|
36
|
+
days_of_month:
|
37
|
+
other: '%{segments} jours du mois'
|
38
|
+
one: '%{segments} jours du mois'
|
39
|
+
days_of_year:
|
40
|
+
other: "%{segments} jours de l'année"
|
41
|
+
one: "%{segments} jours de l'année"
|
42
|
+
at_hours_of_the_day:
|
43
|
+
other: aux %{segments} heures de la journée
|
44
|
+
one: à %{segments}h
|
45
|
+
on_minutes_of_hour:
|
46
|
+
other: aux %{segments} minutes de l'heure
|
47
|
+
one: à la %{segments} minute de l'heure
|
48
|
+
at_seconds_of_minute:
|
49
|
+
other: aux %{segments} secondes
|
50
|
+
one: à la %{segments} seconde
|
51
|
+
on_seconds_of_minute:
|
52
|
+
other: aux %{segments} secondes de la minute
|
53
|
+
one: à la %{segments} seconde de la minute
|
54
|
+
each_second:
|
55
|
+
one: Toutes les secondes
|
56
|
+
other: Toutes les %{count} secondes
|
57
|
+
each_minute:
|
58
|
+
one: Toutes les minutes
|
59
|
+
other: Toutes les %{count} minutes
|
60
|
+
each_hour:
|
61
|
+
one: Toutes les heures
|
62
|
+
other: Toutes les %{count} heures
|
63
|
+
each_day:
|
64
|
+
one: Quotidien
|
65
|
+
other: Tous les %{count} jours
|
66
|
+
each_week:
|
67
|
+
one: Hebdomadaire
|
68
|
+
other: Toutes les %{count} semaines
|
69
|
+
each_month:
|
70
|
+
one: Mensuel
|
71
|
+
other: Tous les %{count} mois
|
72
|
+
each_year:
|
73
|
+
one: Annuel
|
74
|
+
other: Tous les %{count} ans
|
75
|
+
'on': les %{sentence}
|
76
|
+
in: 'en %{target}'
|
77
|
+
integer:
|
78
|
+
negative: '%{ordinal} depuis la fin'
|
79
|
+
literal_ordinals:
|
80
|
+
-1: derniers
|
81
|
+
-2: avant-derniers
|
82
|
+
ordinal: '%{number}%{ordinal}'
|
83
|
+
ordinals:
|
84
|
+
default: '°'
|
85
|
+
1: °
|
86
|
+
on_weekends: pendant les weekends
|
87
|
+
on_weekdays: pendant les jours ouvrés
|
88
|
+
days_on:
|
89
|
+
- dimanches
|
90
|
+
- lundis
|
91
|
+
- mardis
|
92
|
+
- mercredis
|
93
|
+
- jeudis
|
94
|
+
- vendredis
|
95
|
+
- samedis
|
96
|
+
on_days: les %{days}
|
97
|
+
array:
|
98
|
+
last_word_connector: ', et '
|
99
|
+
two_words_connector: ' et '
|
100
|
+
words_connector: ', '
|
101
|
+
string:
|
102
|
+
format:
|
103
|
+
day: '%{rest} %{current}'
|
104
|
+
day_of_week: '%{rest} %{current}'
|
105
|
+
day_of_month: '%{rest} %{current}'
|
106
|
+
day_of_year: '%{rest} %{current}'
|
107
|
+
hour_of_day: '%{rest} %{current}'
|
108
|
+
minute_of_hour: '%{rest} %{current}'
|
109
|
+
until: '%{rest} %{current}'
|
110
|
+
count: '%{rest} %{current}'
|
111
|
+
default: '%{rest} %{current}'
|
112
|
+
|
113
|
+
date:
|
114
|
+
abbr_day_names:
|
115
|
+
- Dim
|
116
|
+
- Lun
|
117
|
+
- Mar
|
118
|
+
- Mer
|
119
|
+
- Jeu
|
120
|
+
- Ven
|
121
|
+
- Sam
|
122
|
+
abbr_month_names:
|
123
|
+
-
|
124
|
+
- Jan
|
125
|
+
- Fév
|
126
|
+
- Mar
|
127
|
+
- Avr
|
128
|
+
- Mai
|
129
|
+
- Jun
|
130
|
+
- Jul
|
131
|
+
- Aou
|
132
|
+
- Sep
|
133
|
+
- Oct
|
134
|
+
- Nov
|
135
|
+
- Déc
|
136
|
+
day_names:
|
137
|
+
- dimanche
|
138
|
+
- lundi
|
139
|
+
- mardi
|
140
|
+
- mecredi
|
141
|
+
- jeudi
|
142
|
+
- vendredi
|
143
|
+
- samedi
|
144
|
+
formats:
|
145
|
+
default: "%d-%m-%Y"
|
146
|
+
long: "%d %B %Y"
|
147
|
+
short: "%d %b"
|
148
|
+
month_names:
|
149
|
+
-
|
150
|
+
- janvier
|
151
|
+
- février
|
152
|
+
- mars
|
153
|
+
- avril
|
154
|
+
- mai
|
155
|
+
- juin
|
156
|
+
- juillet
|
157
|
+
- août
|
158
|
+
- septembre
|
159
|
+
- octobre
|
160
|
+
- novembre
|
161
|
+
- décembre
|
162
|
+
order:
|
163
|
+
- :year
|
164
|
+
- :month
|
165
|
+
- :day
|
166
|
+
|
167
|
+
time:
|
168
|
+
am: am
|
169
|
+
formats:
|
170
|
+
default: "%a, %d %b %Y %H:%M:%S %z"
|
171
|
+
long: "%d %B %Y %H:%M"
|
172
|
+
short: "%d %b %H:%M"
|
173
|
+
pm: pm
|
@@ -0,0 +1,195 @@
|
|
1
|
+
ru:
|
2
|
+
ice_cube:
|
3
|
+
pieces_connector: ' / '
|
4
|
+
not: 'не %{target}'
|
5
|
+
not_on: 'не в %{target}'
|
6
|
+
date:
|
7
|
+
formats:
|
8
|
+
default: '%-d %B %Y'
|
9
|
+
month_names:
|
10
|
+
-
|
11
|
+
- январь
|
12
|
+
- февраль
|
13
|
+
- март
|
14
|
+
- апрель
|
15
|
+
- май
|
16
|
+
- июнь
|
17
|
+
- июль
|
18
|
+
- август
|
19
|
+
- сентябрь
|
20
|
+
- октябрь
|
21
|
+
- ноябрь
|
22
|
+
- декабрь
|
23
|
+
day_names:
|
24
|
+
- воскресенье
|
25
|
+
- понедельник
|
26
|
+
- вторник
|
27
|
+
- среда
|
28
|
+
- четверг
|
29
|
+
- пятница
|
30
|
+
- суббота
|
31
|
+
times:
|
32
|
+
other: '%{count} раза'
|
33
|
+
many: '%{count} раз'
|
34
|
+
few: '%{count} раза'
|
35
|
+
one: '%{count} раз'
|
36
|
+
until: 'до %{date}'
|
37
|
+
days_of_week: '%{segments} %{day}'
|
38
|
+
days_of_month:
|
39
|
+
other: '%{segments} день месяца'
|
40
|
+
many: '%{segments} день месяца'
|
41
|
+
few: '%{segments} день месяца'
|
42
|
+
one: '%{segments} день месяца'
|
43
|
+
days_of_year:
|
44
|
+
other: '%{segments} день года'
|
45
|
+
many: '%{segments} день года'
|
46
|
+
few: '%{segments} день года'
|
47
|
+
one: '%{segments} день года'
|
48
|
+
at_hours_of_the_day:
|
49
|
+
other: в %{segments} часы дня
|
50
|
+
many: в %{segments} часы дня
|
51
|
+
few: в %{segments} часы дня
|
52
|
+
one: в %{segments} час дня
|
53
|
+
on_minutes_of_hour:
|
54
|
+
other: в %{segments} минуты часа
|
55
|
+
many: в %{segments} минуты часа
|
56
|
+
few: в %{segments} минуты часа
|
57
|
+
one: в %{segments} минуту часа
|
58
|
+
on_seconds_of_minute:
|
59
|
+
other: на %{segments} секунде минуты
|
60
|
+
many: на %{segments} секунде минуты
|
61
|
+
few: на %{segments} секунде минуты
|
62
|
+
one: на %{segments} секунде минуты
|
63
|
+
each_second:
|
64
|
+
one: Ежесекундно
|
65
|
+
few: Каждые %{count} секунды
|
66
|
+
many: Каждые %{count} секунд
|
67
|
+
other: Каждые %{count} секунды
|
68
|
+
each_minute:
|
69
|
+
one: Ежеминутно
|
70
|
+
few: Каждые %{count} минуты
|
71
|
+
many: Каждые %{count} минут
|
72
|
+
other: Каждые %{count} минуты
|
73
|
+
each_hour:
|
74
|
+
one: Каждый час
|
75
|
+
few: Каждые %{count} часа
|
76
|
+
many: Каждые %{count} часов
|
77
|
+
other: Каждые %{count} часа
|
78
|
+
each_day:
|
79
|
+
one: Ежедневно
|
80
|
+
few: Каждые %{count} дня
|
81
|
+
many: Каждые %{count} дней
|
82
|
+
other: Каждые %{count} дня
|
83
|
+
each_week:
|
84
|
+
one: Еженедельно
|
85
|
+
few: Каждые %{count} недели
|
86
|
+
many: Каждые %{count} недель
|
87
|
+
other: Каждые %{count} недели
|
88
|
+
each_month:
|
89
|
+
one: Ежемесячно
|
90
|
+
few: Каждые %{count} месяца
|
91
|
+
many: Каждые %{count} месяцев
|
92
|
+
other: Каждые %{count} месяца
|
93
|
+
each_year:
|
94
|
+
one: Ежегодно
|
95
|
+
few: Каждые %{count} года
|
96
|
+
many: Каждые %{count} лет
|
97
|
+
other: Каждые %{count} года
|
98
|
+
'on': в %{sentence}
|
99
|
+
in: 'через %{target}'
|
100
|
+
integer:
|
101
|
+
negative: '%{ordinal} с конца'
|
102
|
+
literal_ordinals:
|
103
|
+
-1: последний
|
104
|
+
-2: предпоследний
|
105
|
+
ordinal: '%{number}%{ordinal}'
|
106
|
+
ordinals:
|
107
|
+
default: ''
|
108
|
+
on_weekends: на выходных
|
109
|
+
on_weekdays: по будням
|
110
|
+
days_on:
|
111
|
+
- воскресеньям
|
112
|
+
- понедельникам
|
113
|
+
- вторникам
|
114
|
+
- средам
|
115
|
+
- четвергам
|
116
|
+
- пятницам
|
117
|
+
- субботам
|
118
|
+
on_days: по %{days}
|
119
|
+
array:
|
120
|
+
last_word_connector: ' и '
|
121
|
+
two_words_connector: ' и '
|
122
|
+
words_connector: ', '
|
123
|
+
string:
|
124
|
+
format:
|
125
|
+
day: '%{rest} %{current}'
|
126
|
+
day_of_week: '%{rest} %{current}'
|
127
|
+
day_of_month: '%{rest} %{current}'
|
128
|
+
day_of_year: '%{rest} %{current}'
|
129
|
+
hour_of_day: '%{rest} %{current}'
|
130
|
+
minute_of_hour: '%{rest} %{current}'
|
131
|
+
until: '%{rest} %{current}'
|
132
|
+
count: '%{rest} %{current}'
|
133
|
+
default: '%{rest} %{current}'
|
134
|
+
|
135
|
+
date:
|
136
|
+
abbr_day_names:
|
137
|
+
- Вс
|
138
|
+
- Пн
|
139
|
+
- Вт
|
140
|
+
- Ср
|
141
|
+
- Чт
|
142
|
+
- Пт
|
143
|
+
- Сб
|
144
|
+
abbr_month_names:
|
145
|
+
-
|
146
|
+
- Янв.
|
147
|
+
- Февр.
|
148
|
+
- Марта
|
149
|
+
- Апр.
|
150
|
+
- Мая
|
151
|
+
- Июня
|
152
|
+
- Июля
|
153
|
+
- Авг.
|
154
|
+
- Сент.
|
155
|
+
- Окт.
|
156
|
+
- Нояб.
|
157
|
+
- Дек.
|
158
|
+
day_names:
|
159
|
+
- Воскресенье
|
160
|
+
- Понедельник
|
161
|
+
- Вторник
|
162
|
+
- Среда
|
163
|
+
- Четверг
|
164
|
+
- Пятница
|
165
|
+
- Суббота
|
166
|
+
formats:
|
167
|
+
default: "%d.%m.%Y"
|
168
|
+
short: "%d %b"
|
169
|
+
long: "%d %B %Y"
|
170
|
+
month_names:
|
171
|
+
-
|
172
|
+
- Января
|
173
|
+
- Февраля
|
174
|
+
- Марта
|
175
|
+
- Апреля
|
176
|
+
- Мая
|
177
|
+
- Июня
|
178
|
+
- Июля
|
179
|
+
- Августа
|
180
|
+
- Сентября
|
181
|
+
- Октября
|
182
|
+
- Ноября
|
183
|
+
- Декабря
|
184
|
+
order:
|
185
|
+
- :day
|
186
|
+
- :month
|
187
|
+
- :year
|
188
|
+
|
189
|
+
time:
|
190
|
+
am: утра
|
191
|
+
formats:
|
192
|
+
default: "%a, %d %b %Y, %H:%M:%S %z"
|
193
|
+
short: "%d %b, %H:%M"
|
194
|
+
long: "%d %B %Y, %H:%M"
|
195
|
+
pm: вечера
|
@@ -0,0 +1,169 @@
|
|
1
|
+
sv:
|
2
|
+
ice_cube:
|
3
|
+
pieces_connector: ' / '
|
4
|
+
not: 'inte %{target}'
|
5
|
+
not_on: 'inte i %{target}'
|
6
|
+
date:
|
7
|
+
formats:
|
8
|
+
default: '%-d %B %Y'
|
9
|
+
month_names:
|
10
|
+
-
|
11
|
+
- januari
|
12
|
+
- februari
|
13
|
+
- mars
|
14
|
+
- april
|
15
|
+
- maj
|
16
|
+
- juni
|
17
|
+
- juli
|
18
|
+
- augusti
|
19
|
+
- september
|
20
|
+
- oktober
|
21
|
+
- november
|
22
|
+
- december
|
23
|
+
day_names:
|
24
|
+
- söndag
|
25
|
+
- måndag
|
26
|
+
- tisdag
|
27
|
+
- onsdag
|
28
|
+
- torsdag
|
29
|
+
- fredag
|
30
|
+
- lördag
|
31
|
+
times:
|
32
|
+
other: '%{count} gånger'
|
33
|
+
one: '%{count} gång'
|
34
|
+
until: 'tills %{date}'
|
35
|
+
days_of_week: '%{segments} %{day}'
|
36
|
+
days_of_month:
|
37
|
+
other: '%{segments} dagen i månaden'
|
38
|
+
one: '%{segments} dagen i månaden'
|
39
|
+
days_of_year:
|
40
|
+
other: '%{segments} dagen på året'
|
41
|
+
one: '%{segments} dagen på året'
|
42
|
+
at_hours_of_the_day:
|
43
|
+
other: i %{segments} timme på dygnet
|
44
|
+
one: i %{segments} timme på dygnet
|
45
|
+
on_minutes_of_hour:
|
46
|
+
other: i %{segments} minuter av timmen
|
47
|
+
one: i %{segments} minuten av timmen
|
48
|
+
on_seconds_of_minute:
|
49
|
+
other: på %{segments} sekunden av minuten
|
50
|
+
one: på %{segments} sekunden av minuten
|
51
|
+
each_second:
|
52
|
+
one: Varje sekund
|
53
|
+
other: Varje %{count} sekund
|
54
|
+
each_minute:
|
55
|
+
one: Varje minut
|
56
|
+
other: Varje %{count} minut
|
57
|
+
each_hour:
|
58
|
+
one: Varje timme
|
59
|
+
other: Varje %{count} timme
|
60
|
+
each_day:
|
61
|
+
one: Varje dag
|
62
|
+
other: Varje %{count} dag
|
63
|
+
each_week:
|
64
|
+
one: Varje vecka
|
65
|
+
other: Varje %{count} vecka
|
66
|
+
each_month:
|
67
|
+
one: Varje månad
|
68
|
+
other: Varje %{count} månad
|
69
|
+
each_year:
|
70
|
+
one: Varje år
|
71
|
+
other: Varje %{count} år
|
72
|
+
'on': i %{sentence}
|
73
|
+
in: 'efter %{target}'
|
74
|
+
integer:
|
75
|
+
negative: '%{ordinal} från slutet'
|
76
|
+
literal_ordinals:
|
77
|
+
-1: sista
|
78
|
+
-2: nästsista
|
79
|
+
ordinal: '%{number}%{ordinal}'
|
80
|
+
ordinals:
|
81
|
+
default: ''
|
82
|
+
on_weekends: på helger
|
83
|
+
on_weekdays: på vardagar
|
84
|
+
days_on:
|
85
|
+
- söndagar
|
86
|
+
- måndagar
|
87
|
+
- tisdagar
|
88
|
+
- onsdagar
|
89
|
+
- torsdagar
|
90
|
+
- fredagar
|
91
|
+
- lördagar
|
92
|
+
on_days: på %{days}
|
93
|
+
array:
|
94
|
+
last_word_connector: ' och '
|
95
|
+
two_words_connector: ' och '
|
96
|
+
words_connector: ', '
|
97
|
+
string:
|
98
|
+
format:
|
99
|
+
day: '%{rest} %{current}'
|
100
|
+
day_of_week: '%{rest} %{current}'
|
101
|
+
day_of_month: '%{rest} %{current}'
|
102
|
+
day_of_year: '%{rest} %{current}'
|
103
|
+
hour_of_day: '%{rest} %{current}'
|
104
|
+
minute_of_hour: '%{rest} %{current}'
|
105
|
+
until: '%{rest} %{current}'
|
106
|
+
count: '%{rest} %{current}'
|
107
|
+
default: '%{rest} %{current}'
|
108
|
+
|
109
|
+
date:
|
110
|
+
abbr_day_names:
|
111
|
+
- Sön
|
112
|
+
- Mån
|
113
|
+
- Tis
|
114
|
+
- Ons
|
115
|
+
- Tor
|
116
|
+
- Fre
|
117
|
+
- Lör
|
118
|
+
abbr_month_names:
|
119
|
+
-
|
120
|
+
- Jan
|
121
|
+
- Feb
|
122
|
+
- Mar
|
123
|
+
- Apr
|
124
|
+
- Maj
|
125
|
+
- Jun
|
126
|
+
- Jul
|
127
|
+
- Aug
|
128
|
+
- Sep
|
129
|
+
- Okt
|
130
|
+
- Mov
|
131
|
+
- Dec
|
132
|
+
day_names:
|
133
|
+
- Söndag
|
134
|
+
- Måndag
|
135
|
+
- Tisdag
|
136
|
+
- Onsdag
|
137
|
+
- Torsdag
|
138
|
+
- Fredag
|
139
|
+
- Lördag
|
140
|
+
formats:
|
141
|
+
default: "%Y-%m-%d"
|
142
|
+
long: "%e %B %Y"
|
143
|
+
short: "%e %b"
|
144
|
+
month_names:
|
145
|
+
-
|
146
|
+
- Januari
|
147
|
+
- Februari
|
148
|
+
- Mars
|
149
|
+
- April
|
150
|
+
- Maj
|
151
|
+
- Juni
|
152
|
+
- Juli
|
153
|
+
- Augusti
|
154
|
+
- September
|
155
|
+
- Oktober
|
156
|
+
- November
|
157
|
+
- December
|
158
|
+
order:
|
159
|
+
- :day
|
160
|
+
- :month
|
161
|
+
- :year
|
162
|
+
|
163
|
+
time:
|
164
|
+
am: ''
|
165
|
+
formats:
|
166
|
+
default: "%a, %e %b %Y %H:%M:%S %z"
|
167
|
+
long: "%e %B %Y %H:%M"
|
168
|
+
short: "%e %b %H:%M"
|
169
|
+
pm: ''
|
@@ -24,14 +24,17 @@ module IceCube
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.rule_from_ical(ical)
|
27
|
-
|
27
|
+
raise ArgumentError, 'empty ical rule' if ical.nil?
|
28
|
+
|
29
|
+
validations = {}
|
30
|
+
params = {validations: validations, interval: 1}
|
28
31
|
|
29
32
|
ical.split(';').each do |rule|
|
30
33
|
(name, value) = rule.split('=')
|
31
34
|
value.strip!
|
32
35
|
case name
|
33
36
|
when 'FREQ'
|
34
|
-
params[:
|
37
|
+
params[:rule_type] = "IceCube::#{value[0]}#{value.downcase[1..-1]}Rule"
|
35
38
|
when 'INTERVAL'
|
36
39
|
params[:interval] = value.to_i
|
37
40
|
when 'COUNT'
|
@@ -39,13 +42,13 @@ module IceCube
|
|
39
42
|
when 'UNTIL'
|
40
43
|
params[:until] = Time.parse(value).utc
|
41
44
|
when 'WKST'
|
42
|
-
params[:
|
45
|
+
params[:week_start] = TimeUtil.ical_day_to_symbol(value)
|
43
46
|
when 'BYSECOND'
|
44
|
-
|
47
|
+
validations[:second_of_minute] = value.split(',').map(&:to_i)
|
45
48
|
when 'BYMINUTE'
|
46
|
-
|
49
|
+
validations[:minute_of_hour] = value.split(',').map(&:to_i)
|
47
50
|
when 'BYHOUR'
|
48
|
-
|
51
|
+
validations[:hour_of_day] = value.split(',').map(&:to_i)
|
49
52
|
when 'BYDAY'
|
50
53
|
dows = {}
|
51
54
|
days = []
|
@@ -59,33 +62,21 @@ module IceCube
|
|
59
62
|
days.push TimeUtil.sym_to_wday(day) if dows[day].nil?
|
60
63
|
end
|
61
64
|
end
|
62
|
-
|
63
|
-
|
65
|
+
validations[:day_of_week] = dows unless dows.empty?
|
66
|
+
validations[:day] = days unless days.empty?
|
64
67
|
when 'BYMONTHDAY'
|
65
|
-
|
68
|
+
validations[:day_of_month] = value.split(',').map(&:to_i)
|
66
69
|
when 'BYMONTH'
|
67
|
-
|
70
|
+
validations[:month_of_year] = value.split(',').map(&:to_i)
|
68
71
|
when 'BYYEARDAY'
|
69
|
-
|
72
|
+
validations[:day_of_year] = value.split(',').map(&:to_i)
|
70
73
|
when 'BYSETPOS'
|
71
74
|
else
|
72
|
-
|
75
|
+
validations[name] = nil # invalid type
|
73
76
|
end
|
74
77
|
end
|
75
78
|
|
76
|
-
params
|
77
|
-
|
78
|
-
# WKST only valid for weekly rules
|
79
|
-
params.delete(:wkst) unless params[:freq] == 'weekly'
|
80
|
-
|
81
|
-
rule = Rule.send(*params.values_at(:freq, :interval, :wkst).compact)
|
82
|
-
rule.count(params[:count]) if params[:count]
|
83
|
-
rule.until(params[:until]) if params[:until]
|
84
|
-
params[:validations].each do |key, value|
|
85
|
-
value.is_a?(Array) ? rule.send(key, *value) : rule.send(key, value)
|
86
|
-
end
|
87
|
-
|
88
|
-
rule
|
79
|
+
Rule.from_hash(params)
|
89
80
|
end
|
90
81
|
end
|
91
82
|
end
|
data/lib/ice_cube/rule.rb
CHANGED
@@ -4,6 +4,11 @@ module IceCube
|
|
4
4
|
|
5
5
|
class Rule
|
6
6
|
|
7
|
+
INTERVAL_TYPES = [
|
8
|
+
:secondly, :minutely, :hourly,
|
9
|
+
:daily, :weekly, :monthly, :yearly
|
10
|
+
]
|
11
|
+
|
7
12
|
attr_reader :uses
|
8
13
|
|
9
14
|
# Is this a terminating schedule?
|
@@ -46,21 +51,6 @@ module IceCube
|
|
46
51
|
raise MethodNotImplemented, "Expected to be overridden by subclasses"
|
47
52
|
end
|
48
53
|
|
49
|
-
# Convert from a hash and create a rule
|
50
|
-
def self.from_hash(original_hash)
|
51
|
-
hash = IceCube::FlexibleHash.new original_hash
|
52
|
-
return nil unless match = hash[:rule_type].match(/\:\:(.+?)Rule/)
|
53
|
-
rule = IceCube::Rule.send(match[1].downcase.to_sym, hash[:interval] || 1)
|
54
|
-
rule.interval(hash[:interval] || 1, TimeUtil.wday_to_sym(hash[:week_start] || 0)) if match[1] == "Weekly"
|
55
|
-
rule.until(TimeUtil.deserialize_time(hash[:until])) if hash[:until]
|
56
|
-
rule.count(hash[:count]) if hash[:count]
|
57
|
-
hash[:validations] && hash[:validations].each do |key, value|
|
58
|
-
key = key.to_sym unless key.is_a?(Symbol)
|
59
|
-
value.is_a?(Array) ? rule.send(key, *value) : rule.send(key, value)
|
60
|
-
end
|
61
|
-
rule
|
62
|
-
end
|
63
|
-
|
64
54
|
# Reset the uses on the rule to 0
|
65
55
|
def reset
|
66
56
|
@uses = 0
|
@@ -78,6 +68,36 @@ module IceCube
|
|
78
68
|
!@count.nil?
|
79
69
|
end
|
80
70
|
|
71
|
+
class << self
|
72
|
+
|
73
|
+
# Convert from a hash and create a rule
|
74
|
+
def from_hash(original_hash)
|
75
|
+
hash = IceCube::FlexibleHash.new original_hash
|
76
|
+
return nil unless match = hash[:rule_type].match(/\:\:(.+?)Rule/)
|
77
|
+
|
78
|
+
interval_type = match[1].downcase.to_sym
|
79
|
+
raise ArgumentError, "Invalid rule frequency type: #{match[1]}" unless INTERVAL_TYPES.include?(interval_type)
|
80
|
+
|
81
|
+
rule = IceCube::Rule.send(interval_type, hash[:interval] || 1)
|
82
|
+
rule.interval(hash[:interval] || 1, TimeUtil.wday_to_sym(hash[:week_start] || 0)) if match[1] == "Weekly"
|
83
|
+
rule.until(TimeUtil.deserialize_time(hash[:until])) if hash[:until]
|
84
|
+
rule.count(hash[:count]) if hash[:count]
|
85
|
+
hash[:validations] && hash[:validations].each do |name, args|
|
86
|
+
apply_validation(rule, name, args)
|
87
|
+
end
|
88
|
+
rule
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def apply_validation(rule, name, args)
|
94
|
+
name = name.to_sym
|
95
|
+
raise ArgumentError, "Invalid rule validation type: #{name}" unless ValidatedRule::VALIDATION_ORDER.include?(name)
|
96
|
+
args.is_a?(Array) ? rule.send(name, *args) : rule.send(name, args)
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
81
101
|
# Convenience methods for creating Rules
|
82
102
|
class << self
|
83
103
|
|
data/lib/ice_cube/schedule.rb
CHANGED
@@ -181,14 +181,14 @@ module IceCube
|
|
181
181
|
|
182
182
|
# The previous occurrence from a given time
|
183
183
|
def previous_occurrence(from)
|
184
|
-
from = TimeUtil.match_zone(from, start_time) or raise ArgumentError, "Time required, got #{
|
184
|
+
from = TimeUtil.match_zone(from, start_time) or raise ArgumentError, "Time required, got #{from.inspect}"
|
185
185
|
return nil if from <= start_time
|
186
186
|
enumerate_occurrences(start_time, from - 1).to_a.last
|
187
187
|
end
|
188
188
|
|
189
189
|
# The previous n occurrences before a given time
|
190
190
|
def previous_occurrences(num, from)
|
191
|
-
from = TimeUtil.match_zone(from, start_time) or raise ArgumentError, "Time required, got #{
|
191
|
+
from = TimeUtil.match_zone(from, start_time) or raise ArgumentError, "Time required, got #{from.inspect}"
|
192
192
|
return [] if from <= start_time
|
193
193
|
a = enumerate_occurrences(start_time, from - 1).to_a
|
194
194
|
a.size > num ? a[-1*num,a.size] : a
|
data/lib/ice_cube/time_util.rb
CHANGED
@@ -42,7 +42,7 @@ module IceCube
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def self.match_zone(input_time, reference)
|
45
|
-
return unless time = ensure_time(input_time)
|
45
|
+
return unless time = ensure_time(input_time, reference)
|
46
46
|
time = if reference.respond_to? :time_zone
|
47
47
|
time.in_time_zone(reference.time_zone)
|
48
48
|
else
|
@@ -58,13 +58,21 @@ module IceCube
|
|
58
58
|
end
|
59
59
|
|
60
60
|
# Ensure that this is either nil, or a time
|
61
|
-
def self.ensure_time(time, date_eod = false)
|
61
|
+
def self.ensure_time(time, reference = nil, date_eod = false)
|
62
62
|
case time
|
63
63
|
when DateTime
|
64
64
|
warn "IceCube: DateTime support is deprecated (please use Time) at: #{ caller[2] }"
|
65
65
|
Time.local(time.year, time.month, time.day, time.hour, time.min, time.sec)
|
66
66
|
when Date
|
67
|
-
date_eod
|
67
|
+
if date_eod
|
68
|
+
end_of_date(time, reference)
|
69
|
+
else
|
70
|
+
if reference
|
71
|
+
build_in_zone([time.year, time.month, time.day], reference)
|
72
|
+
else
|
73
|
+
time.to_time
|
74
|
+
end
|
75
|
+
end
|
68
76
|
else
|
69
77
|
time
|
70
78
|
end
|
@@ -5,6 +5,8 @@ module IceCube
|
|
5
5
|
module Validations::Day
|
6
6
|
|
7
7
|
def day(*days)
|
8
|
+
days = days.flatten
|
9
|
+
return self if days.empty?
|
8
10
|
days.flatten.each do |day|
|
9
11
|
unless day.is_a?(Fixnum) || day.is_a?(Symbol)
|
10
12
|
raise ArgumentError, "expecting Fixnum or Symbol value for day, got #{day.inspect}"
|
@@ -11,7 +11,6 @@ module IceCube
|
|
11
11
|
deprecated_alias :until_date, :until_time
|
12
12
|
|
13
13
|
def until(time)
|
14
|
-
time = TimeUtil.ensure_time(time, true)
|
15
14
|
@until = time
|
16
15
|
replace_validations_for(:until, time.nil? ? nil : [Validation.new(time)])
|
17
16
|
self
|
@@ -34,7 +33,8 @@ module IceCube
|
|
34
33
|
end
|
35
34
|
|
36
35
|
def validate(step_time, schedule)
|
37
|
-
|
36
|
+
end_time = TimeUtil.ensure_time(time, schedule.start_time, true)
|
37
|
+
raise UntilExceeded if step_time > end_time
|
38
38
|
end
|
39
39
|
|
40
40
|
def build_s(builder)
|
data/lib/ice_cube/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ice_cube
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Crepezzi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -38,48 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 2.12.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: activesupport
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 3.0.0
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 3.0.0
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: tzinfo
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: i18n
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
41
|
description: ice_cube is a recurring date library for Ruby. It allows for quick,
|
84
42
|
programatic expansion of recurring date rules.
|
85
43
|
email: john@crepezzi.com
|
@@ -87,9 +45,13 @@ executables: []
|
|
87
45
|
extensions: []
|
88
46
|
extra_rdoc_files: []
|
89
47
|
files:
|
48
|
+
- config/locales/de.yml
|
90
49
|
- config/locales/en.yml
|
91
50
|
- config/locales/es.yml
|
51
|
+
- config/locales/fr.yml
|
92
52
|
- config/locales/ja.yml
|
53
|
+
- config/locales/ru.yml
|
54
|
+
- config/locales/sv.yml
|
93
55
|
- lib/ice_cube.rb
|
94
56
|
- lib/ice_cube/builders/hash_builder.rb
|
95
57
|
- lib/ice_cube/builders/ical_builder.rb
|
@@ -158,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
120
|
version: '0'
|
159
121
|
requirements: []
|
160
122
|
rubyforge_project: ice-cube
|
161
|
-
rubygems_version: 2.
|
123
|
+
rubygems_version: 2.5.2
|
162
124
|
signing_key:
|
163
125
|
specification_version: 4
|
164
126
|
summary: Ruby Date Recurrence Library
|