errgonomic 0.1.0 → 0.3.0
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/.rubocop.yml +1 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +11 -1
- data/Rakefile +8 -4
- data/doctest_helper.rb +3 -0
- data/flake.nix +16 -10
- data/gemset.nix +186 -21
- data/lib/errgonomic/core_ext/blank.rb +4 -4
- data/lib/errgonomic/option.rb +358 -0
- data/lib/errgonomic/presence.rb +92 -0
- data/lib/errgonomic/result.rb +316 -0
- data/lib/errgonomic/type.rb +67 -0
- data/lib/errgonomic/version.rb +1 -1
- data/lib/errgonomic.rb +44 -42
- metadata +36 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5b329e5d25e517ff65724ceca5d9ad3e226740e90e57e5ac21917de5f926845
|
4
|
+
data.tar.gz: 2878a2c35bff61a7b57cb5d4a3ec476dd98e42a2ebe21fba3423b6180f8fc68e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b39914d663d14df9816265d5ce5cef11fec14527cdc2a4400e7c1a9424e4d32e65705e6e79493fb1a8c2102ad02d94bf7b0001b11b4855f6310c6041c40f7ff
|
7
|
+
data.tar.gz: d16813545c25785abfd2e3064a51ec80ed5e07c8e9715c349f11c426223a53e40e8976e53c26fb76be9805d2012359d90a2c9a1db08879ca59a8256eab3b6ca1
|
data/.rubocop.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require: rubocop-yard
|
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--plugin yard-doctest
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.2.0] - 2025-05-01
|
4
|
+
|
5
|
+
- Type assertions: `type_or_raise!`, `type_or`
|
6
|
+
|
7
|
+
## [0.2.0] - 2025-03-28
|
8
|
+
|
9
|
+
- Introduce (most of) Result and Option
|
10
|
+
- Presence helpers which raise should have a bang on their name
|
11
|
+
- [Dev, Test] - Replace rspec with yard-doctest
|
12
|
+
|
3
13
|
## [0.1.0] - 2025-02-27
|
4
14
|
|
5
|
-
- Initial release
|
15
|
+
- Initial release with some basic extensions for presence
|
data/Rakefile
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require "rspec/core/rake_task"
|
3
|
+
require 'bundler/gem_tasks'
|
5
4
|
|
5
|
+
require 'rspec/core/rake_task'
|
6
6
|
RSpec::Core::RakeTask.new(:spec)
|
7
7
|
|
8
|
-
require
|
8
|
+
require 'yard/doctest/rake'
|
9
|
+
YARD::Doctest::RakeTask.new do |task|
|
10
|
+
task.doctest_opts = %w[-v]
|
11
|
+
task.pattern = 'lib/**/*.rb'
|
12
|
+
end
|
9
13
|
|
10
|
-
task default: %i[spec
|
14
|
+
task default: %i[spec yard:doctest]
|
data/doctest_helper.rb
ADDED
data/flake.nix
CHANGED
@@ -15,13 +15,6 @@
|
|
15
15
|
"aarch64-darwin"
|
16
16
|
];
|
17
17
|
overlays = [
|
18
|
-
(final: prev: {
|
19
|
-
gems = final.bundlerEnv {
|
20
|
-
name = "errgonomic";
|
21
|
-
gemdir = ./.;
|
22
|
-
# src = final.lib.cleanSource ../.;
|
23
|
-
};
|
24
|
-
})
|
25
18
|
];
|
26
19
|
forAllSystems =
|
27
20
|
f:
|
@@ -36,12 +29,25 @@
|
|
36
29
|
{
|
37
30
|
devShells = forAllSystems (
|
38
31
|
{ pkgs, ... }:
|
32
|
+
let
|
33
|
+
inherit (pkgs) ruby bundix;
|
34
|
+
in
|
39
35
|
{
|
40
36
|
default = pkgs.mkShell {
|
41
37
|
buildInputs = [
|
42
|
-
|
43
|
-
|
44
|
-
pkgs.
|
38
|
+
ruby
|
39
|
+
bundix
|
40
|
+
(pkgs.bundlerEnv {
|
41
|
+
name = "errgonomic";
|
42
|
+
gemdir = ./.;
|
43
|
+
extraConfigPaths = [
|
44
|
+
./errgonomic.gemspec
|
45
|
+
./lib/errgonomic/version.rb
|
46
|
+
];
|
47
|
+
postInstall = ''
|
48
|
+
find . >&2
|
49
|
+
'';
|
50
|
+
})
|
45
51
|
];
|
46
52
|
};
|
47
53
|
}
|
data/gemset.nix
CHANGED
@@ -9,6 +9,26 @@
|
|
9
9
|
};
|
10
10
|
version = "2.4.2";
|
11
11
|
};
|
12
|
+
backport = {
|
13
|
+
groups = ["default"];
|
14
|
+
platforms = [];
|
15
|
+
source = {
|
16
|
+
remotes = ["https://rubygems.org"];
|
17
|
+
sha256 = "0xbzzjrgah0f8ifgd449kak2vyf30micpz6x2g82aipfv7ypsb4i";
|
18
|
+
type = "gem";
|
19
|
+
};
|
20
|
+
version = "1.2.0";
|
21
|
+
};
|
22
|
+
benchmark = {
|
23
|
+
groups = ["default"];
|
24
|
+
platforms = [];
|
25
|
+
source = {
|
26
|
+
remotes = ["https://rubygems.org"];
|
27
|
+
sha256 = "0jl71qcgamm96dzyqk695j24qszhcc7liw74qc83fpjljp2gh4hg";
|
28
|
+
type = "gem";
|
29
|
+
};
|
30
|
+
version = "0.4.0";
|
31
|
+
};
|
12
32
|
concurrent-ruby = {
|
13
33
|
groups = ["default"];
|
14
34
|
platforms = [];
|
@@ -37,7 +57,17 @@
|
|
37
57
|
path = ./.;
|
38
58
|
type = "path";
|
39
59
|
};
|
40
|
-
version = "0.
|
60
|
+
version = "0.3.0";
|
61
|
+
};
|
62
|
+
jaro_winkler = {
|
63
|
+
groups = ["default"];
|
64
|
+
platforms = [];
|
65
|
+
source = {
|
66
|
+
remotes = ["https://rubygems.org"];
|
67
|
+
sha256 = "09645h5an19zc1i7wlmixszj8xxqb2zc8qlf8dmx39bxpas1l24b";
|
68
|
+
type = "gem";
|
69
|
+
};
|
70
|
+
version = "1.6.0";
|
41
71
|
};
|
42
72
|
json = {
|
43
73
|
groups = ["default"];
|
@@ -49,6 +79,28 @@
|
|
49
79
|
};
|
50
80
|
version = "2.10.1";
|
51
81
|
};
|
82
|
+
kramdown = {
|
83
|
+
dependencies = ["rexml"];
|
84
|
+
groups = ["default"];
|
85
|
+
platforms = [];
|
86
|
+
source = {
|
87
|
+
remotes = ["https://rubygems.org"];
|
88
|
+
sha256 = "131nwypz8b4pq1hxs6gsz3k00i9b75y3cgpkq57vxknkv6mvdfw7";
|
89
|
+
type = "gem";
|
90
|
+
};
|
91
|
+
version = "2.5.1";
|
92
|
+
};
|
93
|
+
kramdown-parser-gfm = {
|
94
|
+
dependencies = ["kramdown"];
|
95
|
+
groups = ["default"];
|
96
|
+
platforms = [];
|
97
|
+
source = {
|
98
|
+
remotes = ["https://rubygems.org"];
|
99
|
+
sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
|
100
|
+
type = "gem";
|
101
|
+
};
|
102
|
+
version = "1.1.0";
|
103
|
+
};
|
52
104
|
language_server-protocol = {
|
53
105
|
groups = ["default"];
|
54
106
|
platforms = [];
|
@@ -59,15 +111,66 @@
|
|
59
111
|
};
|
60
112
|
version = "3.17.0.4";
|
61
113
|
};
|
62
|
-
|
114
|
+
logger = {
|
63
115
|
groups = ["default"];
|
64
116
|
platforms = [];
|
65
117
|
source = {
|
66
118
|
remotes = ["https://rubygems.org"];
|
67
|
-
sha256 = "
|
119
|
+
sha256 = "05s008w9vy7is3njblmavrbdzyrwwc1fsziffdr58w9pwqj8sqfx";
|
68
120
|
type = "gem";
|
69
121
|
};
|
70
|
-
version = "1.
|
122
|
+
version = "1.6.6";
|
123
|
+
};
|
124
|
+
mini_portile2 = {
|
125
|
+
groups = ["default"];
|
126
|
+
platforms = [];
|
127
|
+
source = {
|
128
|
+
remotes = ["https://rubygems.org"];
|
129
|
+
sha256 = "0x8asxl83msn815lwmb2d7q5p29p7drhjv5va0byhk60v9n16iwf";
|
130
|
+
type = "gem";
|
131
|
+
};
|
132
|
+
version = "2.8.8";
|
133
|
+
};
|
134
|
+
minitest = {
|
135
|
+
groups = ["default" "development"];
|
136
|
+
platforms = [];
|
137
|
+
source = {
|
138
|
+
remotes = ["https://rubygems.org"];
|
139
|
+
sha256 = "0izrg03wn2yj3gd76ck7ifbm9h2kgy8kpg4fk06ckpy4bbicmwlw";
|
140
|
+
type = "gem";
|
141
|
+
};
|
142
|
+
version = "5.25.4";
|
143
|
+
};
|
144
|
+
nokogiri = {
|
145
|
+
dependencies = ["mini_portile2" "racc"];
|
146
|
+
groups = ["default"];
|
147
|
+
platforms = [];
|
148
|
+
source = {
|
149
|
+
remotes = ["https://rubygems.org"];
|
150
|
+
sha256 = "0npx535cs8qc33n0lpbbwl0p9fi3a5bczn6ayqhxvknh9yqw77vb";
|
151
|
+
type = "gem";
|
152
|
+
};
|
153
|
+
version = "1.18.3";
|
154
|
+
};
|
155
|
+
observer = {
|
156
|
+
groups = ["default"];
|
157
|
+
platforms = [];
|
158
|
+
source = {
|
159
|
+
remotes = ["https://rubygems.org"];
|
160
|
+
sha256 = "1b2h1642jy1xrgyakyzz6bkq43gwp8yvxrs8sww12rms65qi18yq";
|
161
|
+
type = "gem";
|
162
|
+
};
|
163
|
+
version = "0.1.2";
|
164
|
+
};
|
165
|
+
ostruct = {
|
166
|
+
groups = ["default"];
|
167
|
+
platforms = [];
|
168
|
+
source = {
|
169
|
+
remotes = ["https://rubygems.org"];
|
170
|
+
sha256 = "05xqijcf80sza5pnlp1c8whdaay8x5dc13214ngh790zrizgp8q9";
|
171
|
+
type = "gem";
|
172
|
+
};
|
173
|
+
version = "0.6.1";
|
71
174
|
};
|
72
175
|
parallel = {
|
73
176
|
groups = ["default"];
|
@@ -120,6 +223,17 @@
|
|
120
223
|
};
|
121
224
|
version = "13.2.1";
|
122
225
|
};
|
226
|
+
rbs = {
|
227
|
+
dependencies = ["logger"];
|
228
|
+
groups = ["default"];
|
229
|
+
platforms = [];
|
230
|
+
source = {
|
231
|
+
remotes = ["https://rubygems.org"];
|
232
|
+
sha256 = "07cwjkx7b3ssy8ccqq1s34sc5snwvgxan2ikmp9y2rz2a9wy6v1b";
|
233
|
+
type = "gem";
|
234
|
+
};
|
235
|
+
version = "3.8.1";
|
236
|
+
};
|
123
237
|
regexp_parser = {
|
124
238
|
groups = ["default"];
|
125
239
|
platforms = [];
|
@@ -130,6 +244,27 @@
|
|
130
244
|
};
|
131
245
|
version = "2.10.0";
|
132
246
|
};
|
247
|
+
reverse_markdown = {
|
248
|
+
dependencies = ["nokogiri"];
|
249
|
+
groups = ["default"];
|
250
|
+
platforms = [];
|
251
|
+
source = {
|
252
|
+
remotes = ["https://rubygems.org"];
|
253
|
+
sha256 = "195c7yra7amggqj7rir0yr09r4v29c2hgkbkb21mj0jsfs3868mb";
|
254
|
+
type = "gem";
|
255
|
+
};
|
256
|
+
version = "3.0.0";
|
257
|
+
};
|
258
|
+
rexml = {
|
259
|
+
groups = ["default"];
|
260
|
+
platforms = [];
|
261
|
+
source = {
|
262
|
+
remotes = ["https://rubygems.org"];
|
263
|
+
sha256 = "1jmbf6lf7pcyacpb939xjjpn1f84c3nw83dy3p1lwjx0l2ljfif7";
|
264
|
+
type = "gem";
|
265
|
+
};
|
266
|
+
version = "3.4.1";
|
267
|
+
};
|
133
268
|
rspec = {
|
134
269
|
dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
|
135
270
|
groups = ["default"];
|
@@ -206,16 +341,16 @@
|
|
206
341
|
};
|
207
342
|
version = "1.38.1";
|
208
343
|
};
|
209
|
-
rubocop-
|
210
|
-
dependencies = ["rubocop" "
|
211
|
-
groups = ["
|
344
|
+
rubocop-yard = {
|
345
|
+
dependencies = ["rubocop" "yard"];
|
346
|
+
groups = ["development"];
|
212
347
|
platforms = [];
|
213
348
|
source = {
|
214
349
|
remotes = ["https://rubygems.org"];
|
215
|
-
sha256 = "
|
350
|
+
sha256 = "03s8lwah6apkr1g25whhd9y2zrqq9dy56g5kwn0bxp0slakrpisz";
|
216
351
|
type = "gem";
|
217
352
|
};
|
218
|
-
version = "
|
353
|
+
version = "0.10.0";
|
219
354
|
};
|
220
355
|
ruby-progressbar = {
|
221
356
|
groups = ["default"];
|
@@ -227,38 +362,36 @@
|
|
227
362
|
};
|
228
363
|
version = "1.13.0";
|
229
364
|
};
|
230
|
-
|
231
|
-
dependencies = ["
|
365
|
+
solargraph = {
|
366
|
+
dependencies = ["backport" "benchmark" "diff-lcs" "jaro_winkler" "kramdown" "kramdown-parser-gfm" "logger" "observer" "ostruct" "parser" "rbs" "reverse_markdown" "rubocop" "thor" "tilt" "yard" "yard-solargraph"];
|
232
367
|
groups = ["default"];
|
233
368
|
platforms = [];
|
234
369
|
source = {
|
235
370
|
remotes = ["https://rubygems.org"];
|
236
|
-
sha256 = "
|
371
|
+
sha256 = "0fqa486hfn6kdbqp3ppy3jvl9xyj8jz41a2dzgkhc6ny2pj31w92";
|
237
372
|
type = "gem";
|
238
373
|
};
|
239
|
-
version = "
|
374
|
+
version = "0.52.0";
|
240
375
|
};
|
241
|
-
|
242
|
-
dependencies = ["lint_roller" "rubocop"];
|
376
|
+
thor = {
|
243
377
|
groups = ["default"];
|
244
378
|
platforms = [];
|
245
379
|
source = {
|
246
380
|
remotes = ["https://rubygems.org"];
|
247
|
-
sha256 = "
|
381
|
+
sha256 = "1nmymd86a0vb39pzj2cwv57avdrl6pl3lf5bsz58q594kqxjkw7f";
|
248
382
|
type = "gem";
|
249
383
|
};
|
250
|
-
version = "1.
|
384
|
+
version = "1.3.2";
|
251
385
|
};
|
252
|
-
|
253
|
-
dependencies = ["lint_roller" "rubocop-performance"];
|
386
|
+
tilt = {
|
254
387
|
groups = ["default"];
|
255
388
|
platforms = [];
|
256
389
|
source = {
|
257
390
|
remotes = ["https://rubygems.org"];
|
258
|
-
sha256 = "
|
391
|
+
sha256 = "0szpapi229v3scrvw1pgy0vpjm7z3qlf58m1198kxn70cs278g96";
|
259
392
|
type = "gem";
|
260
393
|
};
|
261
|
-
version = "
|
394
|
+
version = "2.6.0";
|
262
395
|
};
|
263
396
|
unicode-display_width = {
|
264
397
|
dependencies = ["unicode-emoji"];
|
@@ -281,4 +414,36 @@
|
|
281
414
|
};
|
282
415
|
version = "4.0.4";
|
283
416
|
};
|
417
|
+
yard = {
|
418
|
+
groups = ["development"];
|
419
|
+
platforms = [];
|
420
|
+
source = {
|
421
|
+
remotes = ["https://rubygems.org"];
|
422
|
+
sha256 = "14k9lb9a60r9z2zcqg08by9iljrrgjxdkbd91gw17rkqkqwi1sd6";
|
423
|
+
type = "gem";
|
424
|
+
};
|
425
|
+
version = "0.9.37";
|
426
|
+
};
|
427
|
+
yard-doctest = {
|
428
|
+
dependencies = ["minitest" "yard"];
|
429
|
+
groups = ["development"];
|
430
|
+
platforms = [];
|
431
|
+
source = {
|
432
|
+
remotes = ["https://rubygems.org"];
|
433
|
+
sha256 = "0zw4fa5ri58w76yawh0sc9xj69z26qm59lvjxr1gqn4zv5smmcvw";
|
434
|
+
type = "gem";
|
435
|
+
};
|
436
|
+
version = "0.1.17";
|
437
|
+
};
|
438
|
+
yard-solargraph = {
|
439
|
+
dependencies = ["yard"];
|
440
|
+
groups = ["default"];
|
441
|
+
platforms = [];
|
442
|
+
source = {
|
443
|
+
remotes = ["https://rubygems.org"];
|
444
|
+
sha256 = "03lklm47k6k294ww97x6zpvlqlyjm5q8jidrixhil622r4cld6m1";
|
445
|
+
type = "gem";
|
446
|
+
};
|
447
|
+
version = "0.1.0";
|
448
|
+
};
|
284
449
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'concurrent/map'
|
4
4
|
|
5
5
|
class Object
|
6
6
|
# An object is blank if it's false, empty, or a whitespace string.
|
@@ -99,7 +99,7 @@ class Array
|
|
99
99
|
# [1,2,3].blank? # => false
|
100
100
|
#
|
101
101
|
# @return [true, false]
|
102
|
-
|
102
|
+
alias blank? empty?
|
103
103
|
|
104
104
|
def present? # :nodoc:
|
105
105
|
!empty?
|
@@ -113,7 +113,7 @@ class Hash
|
|
113
113
|
# { key: 'value' }.blank? # => false
|
114
114
|
#
|
115
115
|
# @return [true, false]
|
116
|
-
|
116
|
+
alias blank? empty?
|
117
117
|
|
118
118
|
def present? # :nodoc:
|
119
119
|
!empty?
|
@@ -125,7 +125,7 @@ class Symbol
|
|
125
125
|
#
|
126
126
|
# :''.blank? # => true
|
127
127
|
# :symbol.blank? # => false
|
128
|
-
|
128
|
+
alias blank? empty?
|
129
129
|
|
130
130
|
def present? # :nodoc:
|
131
131
|
!empty?
|