repeatable 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +8 -3
- data/CHANGELOG.md +10 -1
- data/Gemfile +2 -1
- data/Gemfile.lock +75 -29
- data/README.md +17 -0
- data/bin/tapioca +29 -0
- data/lib/repeatable/conversions.rb +2 -1
- data/lib/repeatable/expression/base.rb +6 -0
- data/lib/repeatable/expression/biweekly.rb +1 -0
- data/lib/repeatable/expression/date.rb +1 -0
- data/lib/repeatable/expression/day_in_month.rb +1 -0
- data/lib/repeatable/expression/difference.rb +1 -0
- data/lib/repeatable/expression/exact_date.rb +1 -0
- data/lib/repeatable/expression/intersection.rb +2 -0
- data/lib/repeatable/expression/range_in_year.rb +1 -0
- data/lib/repeatable/expression/set.rb +3 -2
- data/lib/repeatable/expression/union.rb +2 -0
- data/lib/repeatable/expression/weekday.rb +1 -0
- data/lib/repeatable/expression/weekday_in_month.rb +1 -0
- data/lib/repeatable/expression.rb +1 -0
- data/lib/repeatable/last_date_of_month.rb +1 -0
- data/lib/repeatable/parse_error.rb +1 -0
- data/lib/repeatable/parser.rb +1 -0
- data/lib/repeatable/schedule.rb +6 -0
- data/lib/repeatable/types.rb +1 -0
- data/lib/repeatable/version.rb +2 -1
- data/lib/repeatable.rb +1 -0
- data/rbi/repeatable.rbi +9 -3
- data/sorbet/config +2 -1
- data/sorbet/rbi/annotations/.gitattributes +1 -0
- data/sorbet/rbi/{sorbet-typed/lib/rainbow/all → annotations}/rainbow.rbi +23 -30
- data/sorbet/rbi/gems/.gitattributes +1 -0
- data/sorbet/rbi/gems/ast@2.4.2.rbi +584 -0
- data/sorbet/rbi/gems/coderay@1.1.3.rbi +3426 -0
- data/sorbet/rbi/gems/commander@4.6.0.rbi +8 -0
- data/sorbet/rbi/gems/diff-lcs@1.4.4.rbi +1082 -0
- data/sorbet/rbi/gems/docile@1.4.0.rbi +376 -0
- data/sorbet/rbi/gems/erubi@1.12.0.rbi +145 -0
- data/sorbet/rbi/gems/highline@2.0.3.rbi +8 -0
- data/sorbet/rbi/gems/json@2.7.2.rbi +1561 -0
- data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +14237 -0
- data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +239 -0
- data/sorbet/rbi/gems/method_source@1.0.0.rbi +272 -0
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +158 -0
- data/sorbet/rbi/gems/parallel@1.24.0.rbi +280 -0
- data/sorbet/rbi/gems/parlour@8.1.0.rbi +3053 -0
- data/sorbet/rbi/gems/parser@3.3.1.0.rbi +7320 -0
- data/sorbet/rbi/gems/prism@0.28.0.rbi +37903 -0
- data/sorbet/rbi/gems/pry@0.14.0.rbi +10072 -0
- data/sorbet/rbi/gems/racc@1.7.3.rbi +161 -0
- data/sorbet/rbi/gems/rainbow@3.1.1.rbi +402 -0
- data/sorbet/rbi/gems/rake@13.0.3.rbi +3024 -0
- data/sorbet/rbi/gems/rbi@0.1.13.rbi +3071 -0
- data/sorbet/rbi/gems/regexp_parser@2.9.0.rbi +3771 -0
- data/sorbet/rbi/gems/rexml@3.2.6.rbi +4781 -0
- data/sorbet/rbi/gems/rspec-core@3.10.1.rbi +10837 -0
- data/sorbet/rbi/gems/rspec-expectations@3.10.1.rbi +7930 -0
- data/sorbet/rbi/gems/rspec-mocks@3.10.2.rbi +5247 -0
- data/sorbet/rbi/gems/rspec-support@3.10.2.rbi +1594 -0
- data/sorbet/rbi/gems/rspec@3.10.0.rbi +76 -0
- data/sorbet/rbi/gems/rubocop-ast@1.31.3.rbi +7014 -0
- data/sorbet/rbi/gems/rubocop-performance@1.20.2.rbi +8 -0
- data/sorbet/rbi/gems/rubocop@1.62.1.rbi +57542 -0
- data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1317 -0
- data/sorbet/rbi/gems/simplecov-html@0.12.3.rbi +216 -0
- data/sorbet/rbi/gems/simplecov@0.21.2.rbi +2135 -0
- data/sorbet/rbi/gems/simplecov_json_formatter@0.1.4.rbi +8 -0
- data/sorbet/rbi/gems/spoom@1.3.2.rbi +4420 -0
- data/sorbet/rbi/gems/standard-custom@1.0.2.rbi +8 -0
- data/sorbet/rbi/gems/standard-performance@1.3.1.rbi +8 -0
- data/sorbet/rbi/gems/standard@1.35.1.rbi +850 -0
- data/sorbet/rbi/gems/tapioca@0.13.3.rbi +3527 -0
- data/sorbet/rbi/gems/thor@1.3.1.rbi +4351 -0
- data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +65 -0
- data/sorbet/rbi/gems/yard-sorbet@0.8.1.rbi +428 -0
- data/sorbet/rbi/gems/yard@0.9.36.rbi +18220 -0
- data/sorbet/tapioca/config.yml +13 -0
- data/sorbet/tapioca/require.rb +4 -0
- metadata +53 -39
- data/sorbet/rbi/gems/ast.rbi +0 -49
- data/sorbet/rbi/gems/coderay.rbi +0 -285
- data/sorbet/rbi/gems/commander.rbi +0 -197
- data/sorbet/rbi/gems/docile.rbi +0 -36
- data/sorbet/rbi/gems/highline.rbi +0 -577
- data/sorbet/rbi/gems/method_source.rbi +0 -64
- data/sorbet/rbi/gems/parallel.rbi +0 -83
- data/sorbet/rbi/gems/parlour.rbi +0 -840
- data/sorbet/rbi/gems/parser.rbi +0 -1950
- data/sorbet/rbi/gems/pry.rbi +0 -1898
- data/sorbet/rbi/gems/rainbow.rbi +0 -118
- data/sorbet/rbi/gems/rake.rbi +0 -646
- data/sorbet/rbi/gems/regexp_parser.rbi +0 -926
- data/sorbet/rbi/gems/repeatable.rbi +0 -13
- data/sorbet/rbi/gems/rexml.rbi +0 -583
- data/sorbet/rbi/gems/rspec-core.rbi +0 -1919
- data/sorbet/rbi/gems/rspec-expectations.rbi +0 -1150
- data/sorbet/rbi/gems/rspec-mocks.rbi +0 -1100
- data/sorbet/rbi/gems/rspec-support.rbi +0 -280
- data/sorbet/rbi/gems/rspec.rbi +0 -15
- data/sorbet/rbi/gems/rubocop-ast.rbi +0 -1356
- data/sorbet/rbi/gems/rubocop-performance.rbi +0 -487
- data/sorbet/rbi/gems/rubocop.rbi +0 -7923
- data/sorbet/rbi/gems/ruby-progressbar.rbi +0 -304
- data/sorbet/rbi/gems/simplecov-html.rbi +0 -35
- data/sorbet/rbi/gems/simplecov.rbi +0 -419
- data/sorbet/rbi/gems/simplecov_json_formatter.rbi +0 -47
- data/sorbet/rbi/gems/standard.rbi +0 -130
- data/sorbet/rbi/gems/unicode-display_width.rbi +0 -20
- data/sorbet/rbi/hidden-definitions/errors.txt +0 -4273
- data/sorbet/rbi/hidden-definitions/hidden.rbi +0 -9013
- data/sorbet/rbi/sorbet-typed/lib/rake/all/rake.rbi +0 -645
- data/sorbet/rbi/sorbet-typed/lib/rspec-core/all/rspec-core.rbi +0 -24
- data/sorbet/rbi/sorbet-typed/lib/rubocop/>=1.8/rubocop.rbi +0 -12
- data/sorbet/rbi/sorbet-typed/lib/rubocop-performance/~>1.6/rubocop-performance.rbi +0 -149
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b0b02925c282f8d672cff3b6c4683939d5c734f0e682b1a4ea8e5feb931a765
|
4
|
+
data.tar.gz: 4446324d2c752fd1f33ef15545f58de7680ae48743d4f9343062c9151569abbc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: daa01ada7a7d30730829bcf01ba053c4dd325923a574cf78af0b8a5531b543752392f239d96f3658f8a2045313e5df50cca92c75d91fc29aa5484e7e16224ccd
|
7
|
+
data.tar.gz: '080a67d068f2b4663d0ed106d78371f10c47b576b65a52fb5d43fc19b78b0fc1a3449cb288899b089c1b26b77a039cf29cb9fc5b0e828fdd1b7a9a3154aecebb'
|
data/.github/workflows/ci.yml
CHANGED
@@ -22,10 +22,13 @@ jobs:
|
|
22
22
|
- '3.0'
|
23
23
|
- '3.1'
|
24
24
|
include:
|
25
|
-
- ruby-version: '3.
|
25
|
+
- ruby-version: '3.1'
|
26
26
|
coverage: 'true'
|
27
27
|
steps:
|
28
28
|
- uses: actions/checkout@v2
|
29
|
+
- name: Remove Gemfile.lock for older Ruby versions
|
30
|
+
if: ${{ fromJSON(matrix.ruby-version) < 3.1 }}
|
31
|
+
run: rm Gemfile.lock
|
29
32
|
- name: Set up Ruby ${{ matrix.ruby-version }}
|
30
33
|
uses: ruby/setup-ruby@v1
|
31
34
|
with:
|
@@ -55,7 +58,7 @@ jobs:
|
|
55
58
|
- name: Set up Ruby
|
56
59
|
uses: ruby/setup-ruby@v1
|
57
60
|
with:
|
58
|
-
ruby-version: '3.
|
61
|
+
ruby-version: '3.1'
|
59
62
|
bundler-cache: true
|
60
63
|
- name: Run Standard
|
61
64
|
run: bundle exec rake standard
|
@@ -66,7 +69,9 @@ jobs:
|
|
66
69
|
- name: Set up Ruby
|
67
70
|
uses: ruby/setup-ruby@v1
|
68
71
|
with:
|
69
|
-
ruby-version: '3.
|
72
|
+
ruby-version: '3.1'
|
70
73
|
bundler-cache: true
|
74
|
+
- name: Check gem RBI files
|
75
|
+
run: bin/tapioca gems --verify
|
71
76
|
- name: Run Sorbet
|
72
77
|
run: bundle exec rake sorbet
|
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,16 @@
|
|
2
2
|
|
3
3
|
### Unreleased
|
4
4
|
|
5
|
-
[Commits](https://github.com/molawson/repeatable/compare/v1.
|
5
|
+
[Commits](https://github.com/molawson/repeatable/compare/v1.2.0...main)
|
6
|
+
|
7
|
+
### 1.2.0 (2024-04-25)
|
8
|
+
|
9
|
+
Changes:
|
10
|
+
|
11
|
+
* Support pattern matching for `Expression` and `Schedule`
|
12
|
+
* Support more recent versions of sorbet
|
13
|
+
|
14
|
+
[Commits](https://github.com/molawson/repeatable/compare/v1.1.0...v1.2.0)
|
6
15
|
|
7
16
|
### 1.1.0 (2022-02-25)
|
8
17
|
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
repeatable (1.
|
4
|
+
repeatable (1.2.0)
|
5
5
|
sorbet-runtime
|
6
6
|
|
7
7
|
GEM
|
@@ -13,23 +13,34 @@ GEM
|
|
13
13
|
highline (~> 2.0.0)
|
14
14
|
diff-lcs (1.4.4)
|
15
15
|
docile (1.4.0)
|
16
|
+
erubi (1.12.0)
|
16
17
|
highline (2.0.3)
|
18
|
+
json (2.7.2)
|
19
|
+
language_server-protocol (3.17.0.3)
|
20
|
+
lint_roller (1.1.0)
|
17
21
|
method_source (1.0.0)
|
18
|
-
|
19
|
-
|
22
|
+
netrc (0.11.0)
|
23
|
+
parallel (1.24.0)
|
24
|
+
parlour (8.1.0)
|
20
25
|
commander (~> 4.5)
|
21
26
|
parser
|
22
27
|
rainbow (~> 3.0)
|
23
28
|
sorbet-runtime (>= 0.5)
|
24
|
-
parser (3.
|
29
|
+
parser (3.3.1.0)
|
25
30
|
ast (~> 2.4.1)
|
31
|
+
racc
|
32
|
+
prism (0.28.0)
|
26
33
|
pry (0.14.0)
|
27
34
|
coderay (~> 1.1)
|
28
35
|
method_source (~> 1.0)
|
29
|
-
|
36
|
+
racc (1.7.3)
|
37
|
+
rainbow (3.1.1)
|
30
38
|
rake (13.0.3)
|
31
|
-
|
32
|
-
|
39
|
+
rbi (0.1.13)
|
40
|
+
prism (>= 0.18.0, < 1.0.0)
|
41
|
+
sorbet-runtime (>= 0.5.9204)
|
42
|
+
regexp_parser (2.9.0)
|
43
|
+
rexml (3.2.6)
|
33
44
|
rspec (3.10.0)
|
34
45
|
rspec-core (~> 3.10.0)
|
35
46
|
rspec-expectations (~> 3.10.0)
|
@@ -43,40 +54,74 @@ GEM
|
|
43
54
|
diff-lcs (>= 1.2.0, < 2.0)
|
44
55
|
rspec-support (~> 3.10.0)
|
45
56
|
rspec-support (3.10.2)
|
46
|
-
rubocop (1.
|
57
|
+
rubocop (1.62.1)
|
58
|
+
json (~> 2.3)
|
59
|
+
language_server-protocol (>= 3.17.0)
|
47
60
|
parallel (~> 1.10)
|
48
|
-
parser (>= 3.
|
61
|
+
parser (>= 3.3.0.2)
|
49
62
|
rainbow (>= 2.2.2, < 4.0)
|
50
63
|
regexp_parser (>= 1.8, < 3.0)
|
51
|
-
rexml
|
52
|
-
rubocop-ast (>= 1.
|
64
|
+
rexml (>= 3.2.5, < 4.0)
|
65
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
53
66
|
ruby-progressbar (~> 1.7)
|
54
|
-
unicode-display_width (>=
|
55
|
-
rubocop-ast (1.
|
56
|
-
parser (>=
|
57
|
-
rubocop-performance (1.
|
58
|
-
rubocop (>=
|
59
|
-
rubocop-ast (>=
|
60
|
-
ruby-progressbar (1.
|
67
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
68
|
+
rubocop-ast (1.31.3)
|
69
|
+
parser (>= 3.3.1.0)
|
70
|
+
rubocop-performance (1.20.2)
|
71
|
+
rubocop (>= 1.48.1, < 2.0)
|
72
|
+
rubocop-ast (>= 1.30.0, < 2.0)
|
73
|
+
ruby-progressbar (1.13.0)
|
61
74
|
simplecov (0.21.2)
|
62
75
|
docile (~> 1.1)
|
63
76
|
simplecov-html (~> 0.11)
|
64
77
|
simplecov_json_formatter (~> 0.1)
|
65
78
|
simplecov-html (0.12.3)
|
66
79
|
simplecov_json_formatter (0.1.4)
|
67
|
-
sorbet (0.5.
|
68
|
-
sorbet-static (= 0.5.
|
69
|
-
sorbet-runtime (0.5.
|
70
|
-
sorbet-static (0.5.
|
71
|
-
sorbet-static (0.5.
|
72
|
-
sorbet-static (0.5.
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
80
|
+
sorbet (0.5.11370)
|
81
|
+
sorbet-static (= 0.5.11370)
|
82
|
+
sorbet-runtime (0.5.11370)
|
83
|
+
sorbet-static (0.5.11370-aarch64-linux)
|
84
|
+
sorbet-static (0.5.11370-universal-darwin)
|
85
|
+
sorbet-static (0.5.11370-x86_64-linux)
|
86
|
+
sorbet-static-and-runtime (0.5.11370)
|
87
|
+
sorbet (= 0.5.11370)
|
88
|
+
sorbet-runtime (= 0.5.11370)
|
89
|
+
spoom (1.3.2)
|
90
|
+
erubi (>= 1.10.0)
|
91
|
+
prism (>= 0.19.0)
|
92
|
+
sorbet-static-and-runtime (>= 0.5.10187)
|
93
|
+
thor (>= 0.19.2)
|
94
|
+
standard (1.35.1)
|
95
|
+
language_server-protocol (~> 3.17.0.2)
|
96
|
+
lint_roller (~> 1.0)
|
97
|
+
rubocop (~> 1.62.0)
|
98
|
+
standard-custom (~> 1.0.0)
|
99
|
+
standard-performance (~> 1.3)
|
100
|
+
standard-custom (1.0.2)
|
101
|
+
lint_roller (~> 1.0)
|
102
|
+
rubocop (~> 1.50)
|
103
|
+
standard-performance (1.3.1)
|
104
|
+
lint_roller (~> 1.1)
|
105
|
+
rubocop-performance (~> 1.20.2)
|
106
|
+
tapioca (0.13.3)
|
107
|
+
bundler (>= 2.2.25)
|
108
|
+
netrc (>= 0.11.0)
|
109
|
+
parallel (>= 1.21.0)
|
110
|
+
rbi (>= 0.1.4, < 0.2)
|
111
|
+
sorbet-static-and-runtime (>= 0.5.11087)
|
112
|
+
spoom (>= 1.2.0)
|
113
|
+
thor (>= 1.2.0)
|
114
|
+
yard-sorbet
|
115
|
+
thor (1.3.1)
|
116
|
+
unicode-display_width (2.5.0)
|
117
|
+
yard (0.9.36)
|
118
|
+
yard-sorbet (0.8.1)
|
119
|
+
sorbet-runtime (>= 0.5)
|
120
|
+
yard (>= 0.9)
|
77
121
|
|
78
122
|
PLATFORMS
|
79
123
|
arm64-darwin-21
|
124
|
+
arm64-darwin-23
|
80
125
|
linux
|
81
126
|
x86_64-darwin-19
|
82
127
|
x86_64-linux
|
@@ -88,8 +133,9 @@ DEPENDENCIES
|
|
88
133
|
repeatable!
|
89
134
|
rspec (~> 3.0)
|
90
135
|
simplecov (~> 0.18)
|
91
|
-
sorbet
|
136
|
+
sorbet-static-and-runtime
|
92
137
|
standard (~> 1.0)
|
138
|
+
tapioca
|
93
139
|
|
94
140
|
BUNDLED WITH
|
95
141
|
2.3.6
|
data/README.md
CHANGED
@@ -159,6 +159,21 @@ schedule.to_h
|
|
159
159
|
# can be used to recreate an identical Schedule object at a later time
|
160
160
|
```
|
161
161
|
|
162
|
+
#### Pattern Matching
|
163
|
+
|
164
|
+
Both `Repeatable::Schedule` and all `Repeatable::Expression` classes support Ruby 2.7+ [pattern matching][ruby-pattern-matching] which is particularly useful for parsing or presenting an existing schedule.
|
165
|
+
|
166
|
+
```ruby
|
167
|
+
case schedule
|
168
|
+
in weekday: { weekday: }
|
169
|
+
"Weekly on #{Date::DAYNAMES[weekday]}"
|
170
|
+
in day_in_month: { day: }
|
171
|
+
"Every month on the #{day.ordinalize}"
|
172
|
+
in weekday_in_month: { weekday:, count: }
|
173
|
+
"Every month on the #{count.ordinalize} #{Date::DAYNAMES[weekday]}"
|
174
|
+
end
|
175
|
+
```
|
176
|
+
|
162
177
|
#### Equivalence
|
163
178
|
|
164
179
|
Both `Repeatable::Schedule` and all `Repeatable::Expression` classes have equivalence `#==` defined according to what's appropriate for each class, so regardless of the order of arguments passed to each, you can tell whether one object is equivalent to the other in terms of whether or not, when asked the same questions, you'd receive the same results from each.
|
@@ -218,3 +233,5 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
218
233
|
## Code of Conduct
|
219
234
|
|
220
235
|
Everyone interacting in the Repeatable project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/molawson/repeatable/blob/main/CODE_OF_CONDUCT.md).
|
236
|
+
|
237
|
+
[ruby-pattern-matching]: https://docs.ruby-lang.org/en/3.0/syntax/pattern_matching_rdoc.html
|
data/bin/tapioca
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'tapioca' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("tapioca", "tapioca")
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# typed: strict
|
2
|
+
|
2
3
|
module Repeatable
|
3
4
|
module Conversions
|
4
5
|
extend T::Sig
|
@@ -11,7 +12,7 @@ module Repeatable
|
|
11
12
|
when Date, Time
|
12
13
|
arg.to_date
|
13
14
|
else
|
14
|
-
Date.parse(arg)
|
15
|
+
Date.parse(T.let(arg, T.untyped))
|
15
16
|
end
|
16
17
|
rescue ArgumentError
|
17
18
|
Kernel.raise TypeError, "Cannot convert #{arg.inspect} to Date"
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# typed: strict
|
2
|
+
|
2
3
|
module Repeatable
|
3
4
|
module Expression
|
4
5
|
class Base
|
@@ -26,6 +27,11 @@ module Repeatable
|
|
26
27
|
{hash_key => hash_value}
|
27
28
|
end
|
28
29
|
|
30
|
+
sig { params(_keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.any(Types::SymbolHash, T::Array[Types::SymbolHash])]) }
|
31
|
+
def deconstruct_keys(_keys)
|
32
|
+
to_h
|
33
|
+
end
|
34
|
+
|
29
35
|
sig { params(other: Expression::Base).returns(Expression::Union) }
|
30
36
|
def union(other)
|
31
37
|
Union.new(self, other)
|
@@ -1,9 +1,11 @@
|
|
1
1
|
# typed: strict
|
2
|
+
|
2
3
|
module Repeatable
|
3
4
|
module Expression
|
4
5
|
class Intersection < Set
|
5
6
|
sig { params(elements: T.any(Expression::Base, T::Array[Expression::Base])).void }
|
6
7
|
def initialize(*elements)
|
8
|
+
elements = Array(elements).flatten
|
7
9
|
other_intersections, not_intersections = elements.partition { |e| e.is_a?(self.class) }
|
8
10
|
other_intersections = T.cast(other_intersections, T::Array[Expression::Intersection])
|
9
11
|
super(other_intersections.flat_map(&:elements).concat(not_intersections))
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# typed: strict
|
2
|
+
|
2
3
|
module Repeatable
|
3
4
|
module Expression
|
4
5
|
class Set < Base
|
@@ -7,8 +8,8 @@ module Repeatable
|
|
7
8
|
sig { returns(T::Array[Expression::Base]) }
|
8
9
|
attr_reader :elements
|
9
10
|
|
10
|
-
sig { params(elements: T
|
11
|
-
def initialize(
|
11
|
+
sig { params(elements: T::Array[Expression::Base]).void }
|
12
|
+
def initialize(elements)
|
12
13
|
@elements = T.let(elements.flatten.uniq, T::Array[Expression::Base])
|
13
14
|
end
|
14
15
|
|
@@ -1,9 +1,11 @@
|
|
1
1
|
# typed: strict
|
2
|
+
|
2
3
|
module Repeatable
|
3
4
|
module Expression
|
4
5
|
class Union < Set
|
5
6
|
sig { params(elements: T.any(Expression::Base, T::Array[Expression::Base])).void }
|
6
7
|
def initialize(*elements)
|
8
|
+
elements = Array(elements).flatten
|
7
9
|
other_unions, not_unions = elements.partition { |e| e.is_a?(self.class) }
|
8
10
|
other_unions = T.cast(other_unions, T::Array[Expression::Union])
|
9
11
|
super(other_unions.flat_map(&:elements).concat(not_unions))
|
data/lib/repeatable/parser.rb
CHANGED
data/lib/repeatable/schedule.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# typed: strict
|
2
|
+
|
2
3
|
module Repeatable
|
3
4
|
class Schedule
|
4
5
|
extend T::Sig
|
@@ -54,6 +55,11 @@ module Repeatable
|
|
54
55
|
expression.to_h
|
55
56
|
end
|
56
57
|
|
58
|
+
sig { params(_keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.any(Types::SymbolHash, T::Array[Types::SymbolHash])]) }
|
59
|
+
def deconstruct_keys(_keys)
|
60
|
+
to_h
|
61
|
+
end
|
62
|
+
|
57
63
|
sig { params(other: Object).returns(T::Boolean) }
|
58
64
|
def ==(other)
|
59
65
|
other.is_a?(self.class) && expression == other.expression
|
data/lib/repeatable/types.rb
CHANGED
data/lib/repeatable/version.rb
CHANGED
data/lib/repeatable.rb
CHANGED
data/rbi/repeatable.rbi
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# typed: strong
|
2
2
|
module Repeatable
|
3
|
-
VERSION = "1.
|
3
|
+
VERSION = "1.2.0"
|
4
4
|
|
5
5
|
module Conversions
|
6
6
|
extend T::Sig
|
@@ -65,6 +65,9 @@ module Repeatable
|
|
65
65
|
sig { returns(T::Hash[Symbol, T.any(Types::SymbolHash, T::Array[Types::SymbolHash])]) }
|
66
66
|
def to_h; end
|
67
67
|
|
68
|
+
sig { params(_keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.any(Types::SymbolHash, T::Array[Types::SymbolHash])]) }
|
69
|
+
def deconstruct_keys(_keys); end
|
70
|
+
|
68
71
|
sig { params(other: Object).returns(T::Boolean) }
|
69
72
|
def ==(other); end
|
70
73
|
|
@@ -92,6 +95,9 @@ module Repeatable
|
|
92
95
|
sig { returns(T::Hash[Symbol, T.any(Types::SymbolHash, T::Array[Types::SymbolHash])]) }
|
93
96
|
def to_h; end
|
94
97
|
|
98
|
+
sig { params(_keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.any(Types::SymbolHash, T::Array[Types::SymbolHash])]) }
|
99
|
+
def deconstruct_keys(_keys); end
|
100
|
+
|
95
101
|
sig { params(other: Expression::Base).returns(Expression::Union) }
|
96
102
|
def union(other); end
|
97
103
|
|
@@ -241,8 +247,8 @@ module Repeatable
|
|
241
247
|
sig { returns(T::Array[Expression::Base]) }
|
242
248
|
attr_reader :elements
|
243
249
|
|
244
|
-
sig { params(elements: T
|
245
|
-
def initialize(
|
250
|
+
sig { params(elements: T::Array[Expression::Base]).void }
|
251
|
+
def initialize(elements); end
|
246
252
|
|
247
253
|
sig { params(element: T.untyped).returns(Repeatable::Expression::Set) }
|
248
254
|
def <<(element); end
|
data/sorbet/config
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
**/*.rbi linguist-vendored=true
|
@@ -1,13 +1,11 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# https://github.com/sorbet/sorbet-typed/edit/master/lib/rainbow/all/rainbow.rbi
|
7
|
-
#
|
8
|
-
# typed: strong
|
1
|
+
# typed: true
|
2
|
+
|
3
|
+
# DO NOT EDIT MANUALLY
|
4
|
+
# This file was pulled from a central RBI files repository.
|
5
|
+
# Please run `bin/tapioca annotations` to update it.
|
9
6
|
|
10
7
|
module Rainbow
|
8
|
+
# @shim: https://github.com/sickill/rainbow/blob/master/lib/rainbow.rb#L10-L12
|
11
9
|
sig { returns(T::Boolean) }
|
12
10
|
attr_accessor :enabled
|
13
11
|
|
@@ -15,18 +13,13 @@ module Rainbow
|
|
15
13
|
sig { returns(Symbol) }
|
16
14
|
attr_reader :ground
|
17
15
|
|
18
|
-
sig
|
19
|
-
params(
|
20
|
-
ground: Symbol,
|
21
|
-
values: T.any([Integer], [Integer, Integer, Integer])
|
22
|
-
).returns(Color)
|
23
|
-
end
|
16
|
+
sig { params(ground: Symbol, values: T.any([Integer], [Integer, Integer, Integer])).returns(Color) }
|
24
17
|
def self.build(ground, values); end
|
25
18
|
|
26
19
|
sig { params(hex: String).returns([Integer, Integer, Integer]) }
|
27
20
|
def self.parse_hex_color(hex); end
|
28
21
|
|
29
|
-
class Indexed < Color
|
22
|
+
class Indexed < Rainbow::Color
|
30
23
|
sig { returns(Integer) }
|
31
24
|
attr_reader :num
|
32
25
|
|
@@ -37,44 +30,44 @@ module Rainbow
|
|
37
30
|
def codes; end
|
38
31
|
end
|
39
32
|
|
40
|
-
class Named < Indexed
|
33
|
+
class Named < Rainbow::Color::Indexed
|
41
34
|
NAMES = T.let(nil, T::Hash[Symbol, Integer])
|
42
35
|
|
36
|
+
sig { params(ground: Symbol, name: Symbol).void }
|
37
|
+
def initialize(ground, name); end
|
38
|
+
|
43
39
|
sig { returns(T::Array[Symbol]) }
|
44
40
|
def self.color_names; end
|
45
41
|
|
46
42
|
sig { returns(String) }
|
47
43
|
def self.valid_names; end
|
48
|
-
|
49
|
-
sig { params(ground: Symbol, name: Symbol).void }
|
50
|
-
def initialize(ground, name); end
|
51
44
|
end
|
52
45
|
|
53
|
-
class RGB < Indexed
|
46
|
+
class RGB < Rainbow::Color::Indexed
|
54
47
|
sig { returns(Integer) }
|
55
|
-
|
56
|
-
|
57
|
-
sig { params(value: Numeric).returns(Integer) }
|
58
|
-
def to_ansi_domain(value); end
|
48
|
+
attr_reader :r, :g, :b
|
59
49
|
|
60
50
|
sig { params(ground: Symbol, values: Integer).void }
|
61
51
|
def initialize(ground, *values); end
|
62
52
|
|
63
53
|
sig { returns(T::Array[Integer]) }
|
64
54
|
def codes; end
|
55
|
+
|
56
|
+
sig { params(value: Numeric).returns(Integer) }
|
57
|
+
def self.to_ansi_domain(value); end
|
65
58
|
end
|
66
59
|
|
67
|
-
class X11Named < RGB
|
68
|
-
include X11ColorNames
|
60
|
+
class X11Named < Rainbow::Color::RGB
|
61
|
+
include Rainbow::X11ColorNames
|
62
|
+
|
63
|
+
sig { params(ground: Symbol, name: Symbol).void }
|
64
|
+
def initialize(ground, name); end
|
69
65
|
|
70
66
|
sig { returns(T::Array[Symbol]) }
|
71
67
|
def self.color_names; end
|
72
68
|
|
73
69
|
sig { returns(String) }
|
74
70
|
def self.valid_names; end
|
75
|
-
|
76
|
-
sig { params(ground: Symbol, name: Symbol).void }
|
77
|
-
def initialize(ground, name); end
|
78
71
|
end
|
79
72
|
end
|
80
73
|
|
@@ -251,7 +244,7 @@ module Rainbow
|
|
251
244
|
def self.wrap_with_sgr(string, codes); end
|
252
245
|
|
253
246
|
sig { params(string: String).returns(String) }
|
254
|
-
def uncolor(string); end
|
247
|
+
def self.uncolor(string); end
|
255
248
|
end
|
256
249
|
|
257
250
|
VERSION = T.let(nil, String)
|
@@ -0,0 +1 @@
|
|
1
|
+
**/*.rbi linguist-generated=true
|