aixm 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +5 -0
- data/lib/aixm/schedule/time.rb +33 -12
- data/lib/aixm/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce948465612571ae319c68d7f0eff0664d41c696440fb190298ac475b0e3105d
|
4
|
+
data.tar.gz: 402358be48d240b24baef522ace4c501b1c685073ef28be35ce70985a5eaa9e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee675af09c87b12e15bd50e2b2a2c8f00b457cb6ec53c8ee3d16d1b1b5965e410687c2f24f51c49a9673cef00d882f2ef6101e6af780161d33f6f898ff903f9f
|
7
|
+
data.tar.gz: da8135812e7dd27baeb8068b8eefd6004467370763170737c18258b09cdc520bf09aad70fd6eb4c567dd39d5920c46ac1fd87a0ca5e30895c33b684fdf52ab73
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
data/lib/aixm/schedule/time.rb
CHANGED
@@ -23,7 +23,7 @@ module AIXM
|
|
23
23
|
include AIXM::Concerns::HashEquality
|
24
24
|
extend Forwardable
|
25
25
|
|
26
|
-
EVENTS =
|
26
|
+
EVENTS = { sunrise: :up, sunset: :down }.freeze
|
27
27
|
PRECEDENCES = { first: :min, last: :max }.freeze
|
28
28
|
DATELESS_DATE = ::Date.parse('0000-01-01').freeze
|
29
29
|
|
@@ -32,7 +32,7 @@ module AIXM
|
|
32
32
|
|
33
33
|
# Event or alternative to time
|
34
34
|
#
|
35
|
-
# @return [Symbol, nil] any from {EVENTS}
|
35
|
+
# @return [Symbol, nil] any key from {EVENTS}
|
36
36
|
attr_reader :event
|
37
37
|
|
38
38
|
# Minutes added or subtracted from event
|
@@ -47,6 +47,10 @@ module AIXM
|
|
47
47
|
|
48
48
|
# Parse the given representation of time.
|
49
49
|
#
|
50
|
+
# @note Unlike its twin from the stdlib, this class differs between
|
51
|
+
# +AIXM.time('00:00')+ (beginning of day) and +AIXM.time('24:00')+
|
52
|
+
# (end of day).
|
53
|
+
#
|
50
54
|
# @example
|
51
55
|
# AIXM.time('08:00')
|
52
56
|
# AIXM.time(:sunrise)
|
@@ -58,8 +62,8 @@ module AIXM
|
|
58
62
|
#
|
59
63
|
# @param time_or_event [Time, DateTime, String, Symbol] either time as
|
60
64
|
# stdlib Time or DateTime, "HH:MM" (implicitly UTC), "HH:MM [+-]00:00",
|
61
|
-
# "HH:MM UTC" or
|
62
|
-
# @param or [Symbol] alternative event from {EVENTS}
|
65
|
+
# "HH:MM UTC" or any key from {EVENTS}
|
66
|
+
# @param or [Symbol] alternative event, any key from {EVENTS}
|
63
67
|
# @param plus [Integer] minutes added to event
|
64
68
|
# @param minus [Integer] minutes subtracted from event
|
65
69
|
# @param whichever_comes [Symbol] any key from {PRECEDENCES}
|
@@ -127,7 +131,8 @@ module AIXM
|
|
127
131
|
return self unless hour || min
|
128
132
|
min ||= time.min
|
129
133
|
hour ||= time.hour
|
130
|
-
hour =
|
134
|
+
hour = hour + 1 if wrap && min < time.min
|
135
|
+
hour = hour % 24 unless min.zero?
|
131
136
|
self.class.new("%02d:%02d" % [hour, min])
|
132
137
|
end
|
133
138
|
|
@@ -144,17 +149,17 @@ module AIXM
|
|
144
149
|
#
|
145
150
|
# @param on [AIXM::Date] defaults to today
|
146
151
|
# @param xy [AIXM::XY]
|
152
|
+
# @param round [Integer, nil] round up (sunrise) or down (sunset) to the
|
153
|
+
# given minutes or +nil+ in order not to round round
|
147
154
|
# @return [AIXM::Schedule::Time, self]
|
148
|
-
def resolve(on:, xy:)
|
155
|
+
def resolve(on:, xy:, round: nil)
|
149
156
|
if resolved?
|
150
157
|
self
|
151
158
|
else
|
152
159
|
sun_time = self.class.new(Sun.send(event, on.to_date, xy.lat, xy.long).utc + (delta * 60))
|
153
|
-
if time
|
154
|
-
|
155
|
-
|
156
|
-
sun_time
|
157
|
-
end
|
160
|
+
sun_time = self.class.new([sun_time.time, self.time].send(PRECEDENCES.fetch(precedence))) if time
|
161
|
+
sun_time = sun_time.round(EVENTS.fetch(event) => round) if round
|
162
|
+
sun_time
|
158
163
|
end
|
159
164
|
end
|
160
165
|
|
@@ -165,6 +170,22 @@ module AIXM
|
|
165
170
|
!event
|
166
171
|
end
|
167
172
|
|
173
|
+
# Round this time up or down.
|
174
|
+
#
|
175
|
+
# @param up [Integer, nil] round up to the next given minutes
|
176
|
+
# @param down [Integer, nil] round down to the next given minutes
|
177
|
+
# @return [AIXM::Schedule::Time, self]
|
178
|
+
def round(up: nil, down: nil)
|
179
|
+
step = up || down || fail(ArgumentError, "either up or down is mandatory")
|
180
|
+
rounded_min = min / step * step
|
181
|
+
if rounded_min == min
|
182
|
+
self
|
183
|
+
else
|
184
|
+
rounded_min = (rounded_min + step) % 60 if up
|
185
|
+
at(min: rounded_min, wrap: !!up)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
168
189
|
# Stdlib Time equivalent using the value of {DATELESS_DATE} to represent a
|
169
190
|
# time only.
|
170
191
|
#
|
@@ -232,7 +253,7 @@ module AIXM
|
|
232
253
|
end
|
233
254
|
|
234
255
|
def event=(value)
|
235
|
-
fail ArgumentError if value && !EVENTS.
|
256
|
+
fail ArgumentError if value && !EVENTS.has_key?(value)
|
236
257
|
@event = value
|
237
258
|
end
|
238
259
|
|
data/lib/aixm/version.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aixm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Schwyn
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
1+2Y1+i+4jd1B7qxIgOLxQTNIJiwE0sqU1itFfuesfgUACS7M0IV9u9Bp4hBGNEw
|
31
31
|
5JcY2h7owdMxXIvgk1oakgldFJc=
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2022-04-
|
33
|
+
date: 2022-04-23 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: builder
|
metadata.gz.sig
CHANGED
@@ -1 +1,3 @@
|
|
1
|
-
|
1
|
+
}�j�%�1dZX{I������:�bq�K�@�b�b��l��he�P�cM��AV.蚲�%�i:OX�+�`<���En2��ʎT���!)b��@ЅZ>1�ח�
|
2
|
+
S4�z���4D�qvh��܋w��%U7�(���Z�oH@�C�v�ǟ������82ʿk�E(I@��>�[&���|�x4�o�{�ǍqEP���v�$��&��aI�ټ�"�iz�;c���M�X����7(�؝
|
3
|
+
F}Ue�h�0
|