reprise 0.1.1-x86_64-linux-musl → 0.1.3-x86_64-linux-musl
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/Cargo.lock +1 -1
- data/README.md +45 -36
- data/lib/reprise/3.1/reprise.so +0 -0
- data/lib/reprise/3.2/reprise.so +0 -0
- data/lib/reprise/3.3/reprise.so +0 -0
- data/lib/reprise/core/occurrence.rb +2 -2
- data/lib/reprise/schedule.rb +28 -8
- data/lib/reprise/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c84eb9e641b23e632914a6332b75e0a3f551016bad57f680e191b0a7ad2f52b
|
4
|
+
data.tar.gz: 2c5d94c9825a5a7a1252cdbd33104d0df4eda43237a3885ea866b5d9c8e5a1c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3f4065b323284db348bdc4068eaf5e488d64547462a3a3df5719af6f4801b0073d195d45d18f68566fb39c28368ca8a4ab38ad96bc0c2b497f95996b1f7f724
|
7
|
+
data.tar.gz: 5278e30c4da1506a3a80a5790b8cac329fad28de33c6b280ee2a29a57b4013ba0f8a2dc0051460c3c8c67e58a697cb8e09a4c2fba2b0f293b08c5527d2d75f32
|
data/Cargo.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Reprise
|
2
2
|
|
3
|
-
[](https://github.com/jordanhiltunen/reprise/actions/workflows/test.yml) | [](https://github.com/jordanhiltunen/reprise/actions/workflows/cruby-build-and-install.yml)
|
3
|
+
[](https://badge.fury.io/rb/reprise) | [](https://github.com/jordanhiltunen/reprise/actions/workflows/test.yml) | [](https://github.com/jordanhiltunen/reprise/actions/workflows/cruby-build-and-install.yml)
|
4
4
|
|
5
5
|
Reprise is an experimental performance-first Ruby gem that provides support for defining event recurrence
|
6
6
|
rules and generating & querying their future occurrences. Depending on your use case,
|
@@ -21,9 +21,11 @@ gem "reprise"
|
|
21
21
|
|
22
22
|
## Usage
|
23
23
|
|
24
|
+
_For a complete reference of all of the methods and options available, please [see our documentation](https://rubydoc.info/gems/reprise)._
|
25
|
+
|
24
26
|
### Initialize a new schedule
|
25
27
|
|
26
|
-
All schedules need to be initialized with
|
28
|
+
All schedules need to be initialized with `starts_at` and `ends_at` time bookends:
|
27
29
|
|
28
30
|
```ruby
|
29
31
|
may_26_2015_four_thirty_pm_in_rome = Time.parse("2015-05-26 10:30:45").in_time_zone("Rome")
|
@@ -64,8 +66,9 @@ started at as the local time for each future occurrence:
|
|
64
66
|
|
65
67
|
```ruby
|
66
68
|
first_occurrence = schedule.occurrences.first
|
67
|
-
# => <Reprise::Core::Occurrence
|
68
|
-
|
69
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-31T14:30:45+00:00" ends_at="2015-05-31T14:45:45+00:00" label="nil">
|
70
|
+
|
71
|
+
first_occurrence.starts_at.in_time_zone("Rome")
|
69
72
|
# => Sun, 31 May 2015 16:30:45.000000000 CEST +02:00 # <- 4:30 PM
|
70
73
|
```
|
71
74
|
|
@@ -75,8 +78,9 @@ either by passing an hour/minute/second hash to `time_of_day`:
|
|
75
78
|
```ruby
|
76
79
|
schedule.repeat_weekly(:sunday, time_of_day: { hour: 9, minute: 30 }, duration_in_seconds: 60)
|
77
80
|
first_occurrence = schedule.occurrences.first
|
78
|
-
# =>
|
79
|
-
|
81
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-31T07:30:00+00:00" ends_at="2015-05-31T07:31:00+00:00" label="nil">
|
82
|
+
|
83
|
+
first_occurrence.starts_at.in_time_zone("Rome")
|
80
84
|
# => Sun, 31 May 2015 09:30:00.000000000 CEST +02:00
|
81
85
|
```
|
82
86
|
|
@@ -85,8 +89,9 @@ Or, by passing a `Time` object instead:
|
|
85
89
|
```ruby
|
86
90
|
ten_forty_five_pm_in_rome = Time.parse("2015-05-27 04:45:00").in_time_zone("Rome")
|
87
91
|
schedule.repeat_weekly(:tuesday, time_of_day: ten_forty_five_pm_in_rome, duration_in_seconds: 60)
|
88
|
-
# => <Reprise::Core::Occurrence
|
89
|
-
|
92
|
+
# => <Reprise::Core::Occurrence starts_at="2015-06-02T08:45:00+00:00" ends_at="2015-06-02T08:46:00+00:00" label="nil">
|
93
|
+
|
94
|
+
first_occurrence.starts_at.in_time_zone("Rome")
|
90
95
|
# => Tue, 02 Jun 2015 10:45:00.000000000 CEST +02:00
|
91
96
|
```
|
92
97
|
|
@@ -102,9 +107,11 @@ schedule = Reprise::Schedule.new(
|
|
102
107
|
|
103
108
|
schedule.repeat_weekly(:wednesday, time_of_day: { hour: 9, minute: 30 }, duration_in_seconds: 10.minutes)
|
104
109
|
occurrences = schedule.occurrences
|
110
|
+
|
105
111
|
puts occurrences.size
|
106
112
|
# => 29
|
107
|
-
|
113
|
+
|
114
|
+
puts (occurrences.last.starts_at.to_date - occurrences.first.starts_at.to_date).to_i
|
108
115
|
# => 196 # days
|
109
116
|
```
|
110
117
|
|
@@ -121,18 +128,20 @@ schedule.repeat_weekly(
|
|
121
128
|
occurrences = schedule.occurrences
|
122
129
|
puts occurrences.size
|
123
130
|
# => 8
|
124
|
-
|
131
|
+
|
132
|
+
puts occurrences.first.starts_at.in_time_zone("Rome")
|
125
133
|
# 2015-07-10 04:01:00 +0200
|
126
|
-
|
134
|
+
|
135
|
+
puts occurrences.last.starts_at.in_time_zone("Rome")
|
127
136
|
# 2015-08-28 04:01:00 +0200
|
128
|
-
|
137
|
+
|
138
|
+
puts (occurrences.last.starts_at.to_date - occurrences.first.starts_at.to_date).to_i
|
129
139
|
# => 49 # days
|
130
140
|
```
|
131
141
|
|
132
142
|
There are many recurring series that you can create; `#repeat_minutely`, `#repeat_hourly`,
|
133
|
-
`#repeat_daily`, `#repeat_weekly`, `#repeat_monthly_by_day`,
|
134
|
-
|
135
|
-
For more information on each method, see the docs.
|
143
|
+
`#repeat_daily`, `#repeat_weekly`, `#repeat_monthly_by_day`, `#repeat_monthly_by_nth_weekday`,
|
144
|
+
and `#repeat_annually_by_day`.
|
136
145
|
|
137
146
|
#### Adding labels to the occurrences of each series
|
138
147
|
|
@@ -142,14 +151,15 @@ you can add an optional label:
|
|
142
151
|
```ruby
|
143
152
|
schedule.repeat_daily(label: "Coffee Time", time_of_day: { hour: 8 }, duration_in_seconds: 15.minutes)
|
144
153
|
schedule.repeat_daily(label: "Tea Time", interval: 3, time_of_day: { hour: 9 }, duration_in_seconds: 10.minutes)
|
154
|
+
|
145
155
|
schedule.occurrences.take(7).map { |o| puts o.inspect }
|
146
|
-
# => <Reprise::Core::Occurrence label="Coffee Time"
|
147
|
-
# => <Reprise::Core::Occurrence label="Tea Time"
|
148
|
-
# => <Reprise::Core::Occurrence label="Coffee Time"
|
149
|
-
# => <Reprise::Core::Occurrence label="Coffee Time"
|
150
|
-
# => <Reprise::Core::Occurrence label="Coffee Time"
|
151
|
-
# => <Reprise::Core::Occurrence label="Tea Time"
|
152
|
-
# => <Reprise::Core::Occurrence label="Coffee Time"
|
156
|
+
# => <Reprise::Core::Occurrence label="Coffee Time" starts_at="2015-05-27T06:00:00+00:00" ends_at="2015-05-27T06:15:00+00:00">
|
157
|
+
# => <Reprise::Core::Occurrence label="Tea Time" starts_at="2015-05-27T07:00:00+00:00" ends_at="2015-05-27T07:10:00+00:00">
|
158
|
+
# => <Reprise::Core::Occurrence label="Coffee Time" starts_at="2015-05-28T06:00:00+00:00" ends_at="2015-05-28T06:15:00+00:00">
|
159
|
+
# => <Reprise::Core::Occurrence label="Coffee Time" starts_at="2015-05-29T06:00:00+00:00" ends_at="2015-05-29T06:15:00+00:00">
|
160
|
+
# => <Reprise::Core::Occurrence label="Coffee Time" starts_at="2015-05-30T06:00:00+00:00" ends_at="2015-05-30T06:15:00+00:00">
|
161
|
+
# => <Reprise::Core::Occurrence label="Tea Time" starts_at="2015-05-30T07:00:00+00:00" ends_at="2015-05-30T07:10:00+00:00">
|
162
|
+
# => <Reprise::Core::Occurrence label="Coffee Time" starts_at="2015-05-31T06:00:00+00:00" ends_at="2015-05-31T06:15:00+00:00">
|
153
163
|
```
|
154
164
|
|
155
165
|
#### Excluding time intervals from the schedule's occurrences
|
@@ -160,11 +170,11 @@ occurrences and need to be excluded, you can add exclusions to your schedule bef
|
|
160
170
|
```ruby
|
161
171
|
schedule.repeat_daily(label: "Standing Meeting", ends_at: may_26_2015_four_thirty_pm_in_rome + 5.days, duration_in_seconds: 15.minutes)
|
162
172
|
schedule.occurrences.map { |o| puts o.inspect }
|
163
|
-
# => <Reprise::Core::Occurrence
|
164
|
-
# => <Reprise::Core::Occurrence
|
165
|
-
# => <Reprise::Core::Occurrence
|
166
|
-
# => <Reprise::Core::Occurrence
|
167
|
-
# => <Reprise::Core::Occurrence
|
173
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-26T14:30:45+00:00" ends_at="2015-05-26T14:45:45+00:00" label="Standing Meeting">
|
174
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-27T14:30:45+00:00" ends_at="2015-05-27T14:45:45+00:00" label="Standing Meeting">
|
175
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-28T14:30:45+00:00" ends_at="2015-05-28T14:45:45+00:00" label="Standing Meeting">
|
176
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-29T14:30:45+00:00" ends_at="2015-05-29T14:45:45+00:00" label="Standing Meeting">
|
177
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-30T14:30:45+00:00" ends_at="2015-05-30T14:45:45+00:00" label="Standing Meeting">
|
168
178
|
|
169
179
|
# You don't need to specify entire days; you can pass time intervals as narrow or wide as you like.
|
170
180
|
schedule.add_exclusion(
|
@@ -174,10 +184,10 @@ schedule.add_exclusion(
|
|
174
184
|
|
175
185
|
schedule.occurrences.map { |o| puts o.inspect }
|
176
186
|
# N.B. The occurrence on 2015-05-28 is now excluded.
|
177
|
-
# => <Reprise::Core::Occurrence
|
178
|
-
# => <Reprise::Core::Occurrence
|
179
|
-
# => <Reprise::Core::Occurrence
|
180
|
-
# => <Reprise::Core::Occurrence
|
187
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-26T14:30:45+00:00" ends_at="2015-05-26T14:45:45+00:00" label="Standing Meeting">
|
188
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-27T14:30:45+00:00" ends_at="2015-05-27T14:45:45+00:00" label="Standing Meeting">
|
189
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-29T14:30:45+00:00" ends_at="2015-05-29T14:45:45+00:00" label="Standing Meeting">
|
190
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-30T14:30:45+00:00" ends_at="2015-05-30T14:45:45+00:00" label="Standing Meeting">
|
181
191
|
```
|
182
192
|
|
183
193
|
#### Querying for occurrences within a given time interval
|
@@ -198,7 +208,7 @@ schedule.occurrences_between(
|
|
198
208
|
may_26_2015_four_thirty_pm_in_rome + 2.days,
|
199
209
|
may_26_2015_four_thirty_pm_in_rome + 3.days,
|
200
210
|
).map { |o| puts o.inspect }
|
201
|
-
# => <Reprise::Core::Occurrence
|
211
|
+
# => <Reprise::Core::Occurrence starts_at="2015-05-28T14:30:45+00:00" ends_at="2015-05-28T14:45:45+00:00" label="Standing Meeting">
|
202
212
|
```
|
203
213
|
|
204
214
|
Both `#occurs_between?` and `#occurrences_between` also support an optional `include_overlapping`
|
@@ -219,7 +229,7 @@ you would probably be much better served by choosing one of those two gems inste
|
|
219
229
|
the influence of Rust leaks into its Ruby API. Alternative gems offer much more flexible APIs that support a variety
|
220
230
|
of more idiomatic calling conventions: they have better, more forgiving ergonomics. Reprise may invest more efforts
|
221
231
|
here in the future, but not until we have landed on a feature-complete, performant core - our primary design goal.
|
222
|
-
Until then,
|
232
|
+
Until then, our API will remain sparse but sufficient.
|
223
233
|
- **Stability.** Reprise is still experimental; we do not yet have a `1.0.0` release or a public roadmap. Breaking changes
|
224
234
|
may be frequent across releases. If you do not want to pin Reprise to a specific version and want a library that you can
|
225
235
|
upgrade without reviewing the changelog, you may want to consider an alternative for now.
|
@@ -235,6 +245,7 @@ A truism in the Ruby community is that "Ruby is slow, but that doesn't matter fo
|
|
235
245
|
> speed, or throughput that Ruby chokes on. Or because the trade-offs are worth it: Often the
|
236
246
|
> quicker development, cheaper development, faster time-to-market etc is worth the extra resources
|
237
247
|
> (servers, hardware, SAAS) you must throw at your app to keep it performing acceptable.
|
248
|
+
>
|
238
249
|
> https://berk.es/2022/08/09/ruby-slow-database-slow/
|
239
250
|
|
240
251
|
This is often delightfully true, until on the odd occasion Ruby's speed requires that a straightforward feature
|
@@ -305,9 +316,7 @@ and 3:30 - 4:30 PM.
|
|
305
316
|
How do you filter out recurring series occurrences that conflict with other schedule entries that exist
|
306
317
|
in your application?
|
307
318
|
|
308
|
-
At time of writing, alternative gems' solutions to this problem are
|
309
|
-
- **None**: It is entirely the responsibility of the client application to handle occurrence exclusions,
|
310
|
-
despite this logic being core to the domain of recurring schedule management.
|
319
|
+
At time of writing, alternative gems' solutions to this problem are somewhat wanting:
|
311
320
|
- **Date-based exclusion**: Client applications can pass specific dates when occurrences should be excluded.
|
312
321
|
This is not sufficient except for in the most simple of circumstances. Again, consider our hypothetical
|
313
322
|
Monday @ 12:30 PM recurring series: being able to exclude a specific _date_ from your recurrence rule still
|
data/lib/reprise/3.1/reprise.so
CHANGED
Binary file
|
data/lib/reprise/3.2/reprise.so
CHANGED
Binary file
|
data/lib/reprise/3.3/reprise.so
CHANGED
Binary file
|
@@ -8,9 +8,9 @@ module Reprise
|
|
8
8
|
# of adding documentation; it is defined dynamically within
|
9
9
|
# the Rust extension.
|
10
10
|
class Occurrence
|
11
|
-
# @!attribute [r]
|
11
|
+
# @!attribute [r] starts_at
|
12
12
|
# @return [Time] The start time of the occurrence, given in the current system time zone.
|
13
|
-
# @!attribute [r]
|
13
|
+
# @!attribute [r] ends_at
|
14
14
|
# @return [Time] The end time of the occurrence, given in the current system time zone.
|
15
15
|
# @!attribute [r] label
|
16
16
|
# @return [String, nil] The label given to the recurring series from which the
|
data/lib/reprise/schedule.rb
CHANGED
@@ -81,10 +81,16 @@ module Reprise
|
|
81
81
|
|
82
82
|
# @!macro [new] duration_in_seconds
|
83
83
|
# @param duration_in_seconds [Integer]
|
84
|
-
# This determines the end time of each occurrence ({Reprise::Core::Occurrence#
|
84
|
+
# This determines the end time of each occurrence ({Reprise::Core::Occurrence#ends_at}), and also
|
85
85
|
# influences occurrence queries, and whether any added exclusions conflict with any of the schedule's
|
86
86
|
# occurrences.
|
87
87
|
|
88
|
+
# @!macro [new] count
|
89
|
+
# @param count [Integer, nil] An optional count limit to apply to the occurrences
|
90
|
+
# of a series; once the schedule has generated the requested number of occurrences,
|
91
|
+
# it will halt further expansion of that specific series. The count takes precedence
|
92
|
+
# over the optional +ends_at+ param.
|
93
|
+
|
88
94
|
# @!macro [new] label
|
89
95
|
# @param label [String, nil] An optional label to apply to all of the occurrences
|
90
96
|
# that are generated from the series. See {Reprise::Core::Occurrence#label}.
|
@@ -93,15 +99,17 @@ module Reprise
|
|
93
99
|
# @!macro duration_in_seconds
|
94
100
|
# @!macro interval
|
95
101
|
# @!macro recurring_series_start_and_end_times
|
102
|
+
# @!macro count
|
96
103
|
# @!macro label
|
97
104
|
# @return [void]
|
98
|
-
def repeat_minutely(time_of_day: nil, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, label: nil)
|
105
|
+
def repeat_minutely(time_of_day: nil, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, count: nil, label: nil)
|
99
106
|
internal_schedule.repeat_minutely(
|
100
107
|
time_of_day: TimeOfDay.new(time_of_day || self.starts_at).to_h,
|
101
108
|
duration_in_seconds:,
|
102
109
|
interval:,
|
103
110
|
starts_at_unix_timestamp: starts_at.presence&.to_i,
|
104
111
|
ends_at_unix_timestamp: ends_at.presence&.to_i,
|
112
|
+
count:,
|
105
113
|
label:
|
106
114
|
)
|
107
115
|
end
|
@@ -110,15 +118,17 @@ module Reprise
|
|
110
118
|
# @!macro duration_in_seconds
|
111
119
|
# @!macro interval
|
112
120
|
# @!macro recurring_series_start_and_end_times
|
121
|
+
# @!macro count
|
113
122
|
# @!macro label
|
114
123
|
# @return [void]
|
115
|
-
def repeat_hourly(time_of_day: nil, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, label: nil)
|
124
|
+
def repeat_hourly(time_of_day: nil, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, count: nil, label: nil)
|
116
125
|
internal_schedule.repeat_hourly(
|
117
126
|
time_of_day: TimeOfDay.new(time_of_day || self.starts_at).to_h,
|
118
127
|
duration_in_seconds:,
|
119
128
|
interval:,
|
120
129
|
starts_at_unix_timestamp: starts_at.presence&.to_i,
|
121
130
|
ends_at_unix_timestamp: ends_at.presence&.to_i,
|
131
|
+
count:,
|
122
132
|
label:
|
123
133
|
)
|
124
134
|
end
|
@@ -127,15 +137,17 @@ module Reprise
|
|
127
137
|
# @!macro duration_in_seconds
|
128
138
|
# @!macro interval
|
129
139
|
# @!macro recurring_series_start_and_end_times
|
140
|
+
# @!macro count
|
130
141
|
# @!macro label
|
131
142
|
# @return [void]
|
132
|
-
def repeat_daily(time_of_day: nil, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, label: nil)
|
143
|
+
def repeat_daily(time_of_day: nil, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, count: nil, label: nil)
|
133
144
|
internal_schedule.repeat_daily(
|
134
145
|
time_of_day: TimeOfDay.new(time_of_day || self.starts_at).to_h,
|
135
146
|
duration_in_seconds:,
|
136
147
|
interval:,
|
137
148
|
starts_at_unix_timestamp: starts_at.presence&.to_i,
|
138
149
|
ends_at_unix_timestamp: ends_at.presence&.to_i,
|
150
|
+
count:,
|
139
151
|
label:
|
140
152
|
)
|
141
153
|
end
|
@@ -145,6 +157,7 @@ module Reprise
|
|
145
157
|
# @!macro duration_in_seconds
|
146
158
|
# @!macro interval
|
147
159
|
# @!macro recurring_series_start_and_end_times
|
160
|
+
# @!macro count
|
148
161
|
# @!macro label
|
149
162
|
# @return [void]
|
150
163
|
# @example with a +time_of_day+ hash
|
@@ -152,7 +165,7 @@ module Reprise
|
|
152
165
|
# @example with a local time for +time_of_day+
|
153
166
|
# local_time = Time.current.in_time_zone(my_current_time_zone)
|
154
167
|
# schedule.repeat_weekly(:monday, time_of_day: local_time, duration_in_seconds: 30)
|
155
|
-
def repeat_weekly(weekday, time_of_day: nil, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, label: nil)
|
168
|
+
def repeat_weekly(weekday, time_of_day: nil, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, count: nil, label: nil)
|
156
169
|
internal_schedule.repeat_weekly(
|
157
170
|
weekday,
|
158
171
|
time_of_day: TimeOfDay.new(time_of_day || self.starts_at).to_h,
|
@@ -160,6 +173,7 @@ module Reprise
|
|
160
173
|
interval:,
|
161
174
|
starts_at_unix_timestamp: starts_at.presence&.to_i,
|
162
175
|
ends_at_unix_timestamp: ends_at.presence&.to_i,
|
176
|
+
count:,
|
163
177
|
label:
|
164
178
|
)
|
165
179
|
end
|
@@ -169,11 +183,12 @@ module Reprise
|
|
169
183
|
# @!macro duration_in_seconds
|
170
184
|
# @!macro interval
|
171
185
|
# @!macro recurring_series_start_and_end_times
|
186
|
+
# @!macro count
|
172
187
|
# @!macro label
|
173
188
|
# @return [void]
|
174
189
|
# @example
|
175
190
|
# schedule.repeat_monthly_by_day(15, time_of_day: { hour: 9 }, duration_in_seconds: 30)
|
176
|
-
def repeat_monthly_by_day(day_number, time_of_day:, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, label: nil)
|
191
|
+
def repeat_monthly_by_day(day_number, time_of_day:, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, count: nil, label: nil)
|
177
192
|
internal_schedule.repeat_monthly_by_day(
|
178
193
|
day_number,
|
179
194
|
time_of_day: TimeOfDay.new(time_of_day || self.starts_at).to_h,
|
@@ -181,6 +196,7 @@ module Reprise
|
|
181
196
|
interval:,
|
182
197
|
starts_at_unix_timestamp: starts_at.presence&.to_i,
|
183
198
|
ends_at_unix_timestamp: ends_at.presence&.to_i,
|
199
|
+
count:,
|
184
200
|
label:
|
185
201
|
)
|
186
202
|
end
|
@@ -191,9 +207,10 @@ module Reprise
|
|
191
207
|
# @!macro duration_in_seconds
|
192
208
|
# @!macro interval
|
193
209
|
# @!macro recurring_series_start_and_end_times
|
210
|
+
# @!macro count
|
194
211
|
# @!macro label
|
195
212
|
# @return [void]
|
196
|
-
def repeat_monthly_by_nth_weekday(weekday, nth_day, time_of_day:, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, label: nil)
|
213
|
+
def repeat_monthly_by_nth_weekday(weekday, nth_day, time_of_day:, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, count: nil, label: nil)
|
197
214
|
internal_schedule.repeat_monthly_by_nth_weekday(
|
198
215
|
weekday,
|
199
216
|
nth_day,
|
@@ -202,6 +219,7 @@ module Reprise
|
|
202
219
|
interval:,
|
203
220
|
starts_at_unix_timestamp: starts_at.presence&.to_i,
|
204
221
|
ends_at_unix_timestamp: ends_at.presence&.to_i,
|
222
|
+
count:,
|
205
223
|
label:
|
206
224
|
)
|
207
225
|
end
|
@@ -211,11 +229,12 @@ module Reprise
|
|
211
229
|
# @!macro duration_in_seconds
|
212
230
|
# @!macro interval
|
213
231
|
# @!macro recurring_series_start_and_end_times
|
232
|
+
# @!macro count
|
214
233
|
# @!macro label
|
215
234
|
# @return [void]
|
216
235
|
# @example
|
217
236
|
# schedule.repeat_annually_by_day(200, duration_in_seconds: 30)
|
218
|
-
def repeat_annually_by_day(day_number, time_of_day:, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, label: nil)
|
237
|
+
def repeat_annually_by_day(day_number, time_of_day:, duration_in_seconds:, interval: 1, starts_at: nil, ends_at: nil, count: nil, label: nil)
|
219
238
|
internal_schedule.repeat_annually_by_day(
|
220
239
|
day_number,
|
221
240
|
time_of_day: TimeOfDay.new(time_of_day || self.starts_at).to_h,
|
@@ -223,6 +242,7 @@ module Reprise
|
|
223
242
|
interval:,
|
224
243
|
starts_at_unix_timestamp: starts_at.presence&.to_i,
|
225
244
|
ends_at_unix_timestamp: ends_at.presence&.to_i,
|
245
|
+
count:,
|
226
246
|
label:
|
227
247
|
)
|
228
248
|
end
|
data/lib/reprise/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reprise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: x86_64-linux-musl
|
6
6
|
authors:
|
7
7
|
- Jordan Hiltunen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-07-
|
11
|
+
date: 2024-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ips
|