ice_cube 0.16.0 → 0.16.1
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 +4 -4
- data/config/locales/pt-BR.yml +178 -0
- data/lib/ice_cube/rule.rb +1 -2
- data/lib/ice_cube/rules/weekly_rule.rb +18 -6
- data/lib/ice_cube/schedule.rb +13 -0
- data/lib/ice_cube/time_util.rb +8 -0
- data/lib/ice_cube/validated_rule.rb +5 -2
- data/lib/ice_cube/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d075ab984a12f078d212922e5119adb3280095f9
|
4
|
+
data.tar.gz: afed7767f9d95f17308f6dd3a40fcfc025c46d44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a24dc8dc9b8a745a6753bc60d9551366af050e3ce7d80d32b4d7c6b97006c0a9c65338a75fb4b184141bb38467dbb0e73eca98e35f2407f29d79df5bd069a3a
|
7
|
+
data.tar.gz: c309f41dd53711998b439544e5b9b386617d2a2b63b1792688cff76346b56765a11012b4d15e3cede673f8ed658a9997ac0e430c4af34bb7c8fa7aed35f3bc57
|
@@ -0,0 +1,178 @@
|
|
1
|
+
pt-BR:
|
2
|
+
ice_cube:
|
3
|
+
pieces_connector: ' / '
|
4
|
+
not: 'exceto %{target}'
|
5
|
+
not_on: 'exceto o dia %{target}'
|
6
|
+
date:
|
7
|
+
formats:
|
8
|
+
default: '%-d %B %Y'
|
9
|
+
month_names:
|
10
|
+
-
|
11
|
+
- Janeiro
|
12
|
+
- Fevereiro
|
13
|
+
- Março
|
14
|
+
- Abril
|
15
|
+
- Maio
|
16
|
+
- Junho
|
17
|
+
- Julho
|
18
|
+
- Agosto
|
19
|
+
- Setembro
|
20
|
+
- Outubro
|
21
|
+
- Novembro
|
22
|
+
- Dezembro
|
23
|
+
day_names:
|
24
|
+
- Domingo
|
25
|
+
- Segunda
|
26
|
+
- Terça
|
27
|
+
- Quarta
|
28
|
+
- Quinta
|
29
|
+
- Sexta
|
30
|
+
- Sábado
|
31
|
+
times:
|
32
|
+
other: '%{count} vezes'
|
33
|
+
one: '%{count} vez'
|
34
|
+
until: 'até %{date}'
|
35
|
+
days_of_week: '%{segments} %{day}'
|
36
|
+
days_of_month:
|
37
|
+
other: '%{segments} dias do mês'
|
38
|
+
one: '%{segments} dia'
|
39
|
+
days_of_year:
|
40
|
+
other: '%{segments} dias do ano'
|
41
|
+
one: '%{segments} dia'
|
42
|
+
at_hours_of_the_day:
|
43
|
+
other: às %{segments} horas
|
44
|
+
one: à %{segments} hora
|
45
|
+
on_minutes_of_hour:
|
46
|
+
other: aos %{segments} minutos
|
47
|
+
one: ao %{segments} minuto
|
48
|
+
at_seconds_of_minute:
|
49
|
+
other: aos %{segments} segundos
|
50
|
+
one: ao %{segments} segundo
|
51
|
+
on_seconds_of_minute:
|
52
|
+
other: aos %{segments} segundos
|
53
|
+
one: ao %{segments} segundo
|
54
|
+
each_second:
|
55
|
+
one: A cada segundo
|
56
|
+
other: A cada %{count} segundos
|
57
|
+
each_minute:
|
58
|
+
one: A cada minuto
|
59
|
+
other: A cada %{count} minutos
|
60
|
+
each_hour:
|
61
|
+
one: A cada hora
|
62
|
+
other: A cada %{count} horas
|
63
|
+
each_day:
|
64
|
+
one: Diariamente
|
65
|
+
other: A cada %{count} dias
|
66
|
+
each_week:
|
67
|
+
one: Semanalmente
|
68
|
+
other: A cada %{count} semanas
|
69
|
+
each_month:
|
70
|
+
one: Mensalmente
|
71
|
+
other: A cada %{count} meses
|
72
|
+
each_year:
|
73
|
+
one: Anualmente
|
74
|
+
other: A cada %{count} anos
|
75
|
+
'on': no %{sentence}
|
76
|
+
in: 'em %{target}'
|
77
|
+
integer:
|
78
|
+
negative: '%{ordinal} depois que acabar'
|
79
|
+
literal_ordinals:
|
80
|
+
-1: último
|
81
|
+
-2: penúltimo
|
82
|
+
ordinal: '%{number}%{ordinal}'
|
83
|
+
ordinals:
|
84
|
+
default: º
|
85
|
+
1: º
|
86
|
+
2: º
|
87
|
+
3: º
|
88
|
+
11: º
|
89
|
+
12: º
|
90
|
+
13: º
|
91
|
+
on_weekends: nos finais de semana
|
92
|
+
on_weekdays: nos dias úteis
|
93
|
+
days_on:
|
94
|
+
- Domingos
|
95
|
+
- Segundas-feiras
|
96
|
+
- Terças-feiras
|
97
|
+
- Quartas-feiras
|
98
|
+
- Quintas-feiras
|
99
|
+
- Sextas-feiras
|
100
|
+
- Sábados
|
101
|
+
on_days: no dia %{days}
|
102
|
+
array:
|
103
|
+
last_word_connector: ' e '
|
104
|
+
two_words_connector: ' e '
|
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
|
+
- Dom
|
121
|
+
- Seg
|
122
|
+
- Ter
|
123
|
+
- Qua
|
124
|
+
- Qui
|
125
|
+
- Sex
|
126
|
+
- Sáb
|
127
|
+
abbr_month_names:
|
128
|
+
-
|
129
|
+
- Jan
|
130
|
+
- Fev
|
131
|
+
- Mar
|
132
|
+
- Abr
|
133
|
+
- Mai
|
134
|
+
- Jun
|
135
|
+
- Jul
|
136
|
+
- Ago
|
137
|
+
- Set
|
138
|
+
- Out
|
139
|
+
- Nov
|
140
|
+
- Dez
|
141
|
+
day_names:
|
142
|
+
- Domingo
|
143
|
+
- Segunda-feira
|
144
|
+
- Terça-feira
|
145
|
+
- Quarta-feira
|
146
|
+
- Quinta-feira
|
147
|
+
- Sexta-feira
|
148
|
+
- Sábado
|
149
|
+
formats:
|
150
|
+
default: "%d/%m/%Y"
|
151
|
+
long: "%d de %B de %Y"
|
152
|
+
short: "%d de %B"
|
153
|
+
month_names:
|
154
|
+
-
|
155
|
+
- Janeiro
|
156
|
+
- Fevereiro
|
157
|
+
- Março
|
158
|
+
- Abril
|
159
|
+
- Maio
|
160
|
+
- Junho
|
161
|
+
- Julho
|
162
|
+
- Agosto
|
163
|
+
- Setembro
|
164
|
+
- Outubro
|
165
|
+
- Novembro
|
166
|
+
- Dezembro
|
167
|
+
order:
|
168
|
+
- :day
|
169
|
+
- :month
|
170
|
+
- :year
|
171
|
+
|
172
|
+
time:
|
173
|
+
am: ''
|
174
|
+
formats:
|
175
|
+
default: "%a, %d de %B de %Y, %H:%M:%S %z"
|
176
|
+
long: "%d de %B de %Y, %H:%M"
|
177
|
+
short: "%d de %B, %H:%M"
|
178
|
+
pm: ''
|
data/lib/ice_cube/rule.rb
CHANGED
@@ -13,21 +13,33 @@ module IceCube
|
|
13
13
|
reset
|
14
14
|
end
|
15
15
|
|
16
|
-
#
|
17
|
-
# in the week than
|
18
|
-
#
|
19
|
-
#
|
16
|
+
# Move the effective start time to correct for when the schedule has
|
17
|
+
# validations earlier in the week than the selected start time, e.g.
|
18
|
+
#
|
19
|
+
# Schedule.new(wednesday).weekly(2).day(:monday)
|
20
|
+
#
|
21
|
+
# The effective start time gets realigned to the second next Monday, jumping
|
22
|
+
# over the gap week for the interval (2). Without realignment, the correct
|
23
|
+
# Monday occurrence would be missed when the schedule performs a 7-day jump
|
24
|
+
# into the next interval week, arriving on the Wednesday. This corrects any
|
25
|
+
# selections from dates that are misaligned to the schedule interval.
|
20
26
|
#
|
21
27
|
def realign(step_time, start_time)
|
22
28
|
time = TimeUtil::TimeWrapper.new(start_time)
|
23
29
|
offset = wday_offset(step_time, start_time)
|
24
|
-
time.add(:day, offset)
|
30
|
+
time.add(:day, offset)
|
25
31
|
time.to_time
|
26
32
|
end
|
27
33
|
|
34
|
+
# Calculate how many days to the first wday validation in the correct
|
35
|
+
# interval week. This may move backwards within the week if starting in an
|
36
|
+
# interval week with earlier validations.
|
37
|
+
#
|
28
38
|
def wday_offset(step_time, start_time)
|
39
|
+
return 0 if step_time == start_time
|
40
|
+
|
29
41
|
wday_validations = other_interval_validations.select { |v| v.type == :wday }
|
30
|
-
return if wday_validations.none?
|
42
|
+
return 0 if wday_validations.none?
|
31
43
|
|
32
44
|
days = (step_time - start_time).to_i / ONE_DAY
|
33
45
|
interval = base_interval_validation.validate(step_time, start_time).to_i
|
data/lib/ice_cube/schedule.rb
CHANGED
@@ -386,6 +386,19 @@ module IceCube
|
|
386
386
|
recurrence_rules.empty? || recurrence_rules.all?(&:terminating?)
|
387
387
|
end
|
388
388
|
|
389
|
+
def hash
|
390
|
+
[
|
391
|
+
TimeUtil.hash(start_time), duration,
|
392
|
+
*@all_recurrence_rules.map(&:hash).sort!,
|
393
|
+
*@all_exception_rules.map(&:hash).sort!
|
394
|
+
].hash
|
395
|
+
end
|
396
|
+
|
397
|
+
def eql?(other)
|
398
|
+
self.hash == other.hash
|
399
|
+
end
|
400
|
+
alias == eql?
|
401
|
+
|
389
402
|
def self.dump(schedule)
|
390
403
|
return schedule if schedule.nil? || schedule == ""
|
391
404
|
schedule.to_yaml
|
data/lib/ice_cube/time_util.rb
CHANGED
@@ -109,6 +109,14 @@ module IceCube
|
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
112
|
+
# Get a more precise equality for time objects
|
113
|
+
# Ruby provides a Time#hash method, but it fails to account for UTC
|
114
|
+
# offset (so the current date may be different) or DST rules (so the
|
115
|
+
# hour may be wrong for different schedule occurrences)
|
116
|
+
def self.hash(time)
|
117
|
+
[time, time.utc_offset, time.zone].hash
|
118
|
+
end
|
119
|
+
|
112
120
|
# Check the deserialized time offset string against actual local time
|
113
121
|
# offset to try and preserve the original offset for plain Ruby Time. If
|
114
122
|
# the offset is the same as local we can assume the same original zone and
|
@@ -59,7 +59,10 @@ module IceCube
|
|
59
59
|
# to the given start time
|
60
60
|
def next_time(time, start_time, closing_time)
|
61
61
|
@time = time
|
62
|
-
@start_time
|
62
|
+
unless @start_time
|
63
|
+
@start_time = realign(time, start_time)
|
64
|
+
@time = @start_time if @time < @start_time
|
65
|
+
end
|
63
66
|
|
64
67
|
return nil unless find_acceptable_time_before(closing_time)
|
65
68
|
|
@@ -134,7 +137,7 @@ module IceCube
|
|
134
137
|
|
135
138
|
def normalized_interval(interval)
|
136
139
|
int = interval.to_i
|
137
|
-
raise ArgumentError, "'#{interval}' is not a valid input for interval. Please pass
|
140
|
+
raise ArgumentError, "'#{interval}' is not a valid input for interval. Please pass a postive integer." unless int > 0
|
138
141
|
int
|
139
142
|
end
|
140
143
|
|
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.16.
|
4
|
+
version: 0.16.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Crepezzi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04
|
11
|
+
date: 2017-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -50,6 +50,7 @@ files:
|
|
50
50
|
- config/locales/es.yml
|
51
51
|
- config/locales/fr.yml
|
52
52
|
- config/locales/ja.yml
|
53
|
+
- config/locales/pt-BR.yml
|
53
54
|
- config/locales/ru.yml
|
54
55
|
- config/locales/sv.yml
|
55
56
|
- lib/ice_cube.rb
|