assistant 0.1.0 → 1.0.0.rc1

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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.github/PULL_REQUEST_TEMPLATE.md +39 -0
  3. data/.github/workflows/ci.yml +99 -0
  4. data/.github/workflows/docs.yml +64 -0
  5. data/.github/workflows/release.yml +1 -1
  6. data/.gitignore +5 -1
  7. data/.opencode/.gitignore +4 -0
  8. data/.opencode/opencode.json +13 -0
  9. data/.opencode/skills/create-pr/SKILL.md +138 -0
  10. data/.opencode/skills/ruby-services/SKILL.md +81 -0
  11. data/.rubocop.yml +14 -4
  12. data/.yardopts +17 -0
  13. data/CHANGELOG.md +378 -0
  14. data/CONTRIBUTING.md +131 -0
  15. data/Gemfile +10 -0
  16. data/Gemfile.lock +196 -29
  17. data/README.md +125 -16
  18. data/Rakefile +45 -0
  19. data/SECURITY.md +50 -0
  20. data/Steepfile +49 -0
  21. data/_config.yml +87 -0
  22. data/assistant.gemspec +24 -7
  23. data/docs/api-reference.md +264 -0
  24. data/docs/changelog.md +26 -0
  25. data/docs/deprecations.md +86 -0
  26. data/docs/examples/cli-handler.md +17 -0
  27. data/docs/examples/composing-services.md +17 -0
  28. data/docs/examples/execute-callbacks.md +17 -0
  29. data/docs/examples/index.md +29 -0
  30. data/docs/examples/instrumentation-notifier.md +17 -0
  31. data/docs/examples/rails-service.md +17 -0
  32. data/docs/examples/rbs-generator.md +17 -0
  33. data/docs/examples/sidekiq-worker.md +17 -0
  34. data/docs/getting-started.md +136 -0
  35. data/docs/guides/composing-services.md +222 -0
  36. data/docs/guides/index.md +25 -0
  37. data/docs/guides/inputs.md +333 -0
  38. data/docs/guides/logging-and-results.md +202 -0
  39. data/docs/guides/rbs-and-types.md +16 -0
  40. data/docs/guides/validation.md +180 -0
  41. data/docs/index.md +69 -0
  42. data/docs/roadmap.md +33 -0
  43. data/exe/assistant-rbs +7 -0
  44. data/lib/assistant/execute_callbacks.rb +103 -0
  45. data/lib/assistant/execute_callbacks.rbs +30 -0
  46. data/lib/assistant/input_builder/accessors.rb +36 -0
  47. data/lib/assistant/input_builder/accessors.rbs +10 -0
  48. data/lib/assistant/input_builder/default_option.rb +41 -0
  49. data/lib/assistant/input_builder/default_option.rbs +11 -0
  50. data/lib/assistant/input_builder/dsl.rb +37 -0
  51. data/lib/assistant/input_builder/dsl.rbs +12 -0
  52. data/lib/assistant/input_builder/optional_option.rb +45 -0
  53. data/lib/assistant/input_builder/optional_option.rbs +10 -0
  54. data/lib/assistant/input_builder/registry.rb +27 -0
  55. data/lib/assistant/input_builder/registry.rbs +13 -0
  56. data/lib/assistant/input_builder/require_validator.rb +104 -0
  57. data/lib/assistant/input_builder/require_validator.rbs +24 -0
  58. data/lib/assistant/input_builder/type_validator.rb +47 -0
  59. data/lib/assistant/input_builder/type_validator.rbs +18 -0
  60. data/lib/assistant/input_builder.rb +25 -81
  61. data/lib/assistant/input_builder.rbs +15 -0
  62. data/lib/assistant/log_item.rb +74 -16
  63. data/lib/assistant/log_item.rbs +40 -0
  64. data/lib/assistant/log_list.rb +43 -17
  65. data/lib/assistant/log_list.rbs +48 -0
  66. data/lib/assistant/rbs_generator/cli.rb +109 -0
  67. data/lib/assistant/rbs_generator/cli.rbs +24 -0
  68. data/lib/assistant/rbs_generator/renderer.rb +67 -0
  69. data/lib/assistant/rbs_generator/renderer.rbs +11 -0
  70. data/lib/assistant/rbs_generator/writer.rb +65 -0
  71. data/lib/assistant/rbs_generator/writer.rbs +24 -0
  72. data/lib/assistant/rbs_generator.rb +38 -0
  73. data/lib/assistant/rbs_generator.rbs +5 -0
  74. data/lib/assistant/refinements/string_blankness.rb +9 -13
  75. data/lib/assistant/refinements/string_blankness.rbs +6 -0
  76. data/lib/assistant/service.rb +300 -11
  77. data/lib/assistant/service.rbs +82 -1
  78. data/lib/assistant/version.rb +5 -1
  79. data/lib/assistant/version.rbs +5 -0
  80. data/lib/assistant.rb +54 -4
  81. data/lib/assistant.rbs +25 -0
  82. data/mise.toml +2 -0
  83. data/sig/examples/greeter.rbs +14 -0
  84. metadata +142 -38
  85. data/.fasterer.yml +0 -19
  86. data/.rubocop_todo.yml +0 -7
metadata CHANGED
@@ -1,28 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: assistant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ramon Rodrigues
8
- bindir: bin
8
+ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: brakeman
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - "~>"
17
- - !ruby/object:Gem::Version
18
- version: '8.0'
19
- type: :development
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - "~>"
24
- - !ruby/object:Gem::Version
25
- version: '8.0'
26
12
  - !ruby/object:Gem::Dependency
27
13
  name: bundler
28
14
  requirement: !ruby/object:Gem::Requirement
@@ -65,34 +51,20 @@ dependencies:
65
51
  - - "~>"
66
52
  - !ruby/object:Gem::Version
67
53
  version: '1.1'
68
- - !ruby/object:Gem::Dependency
69
- name: fasterer
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: 0.11.0
75
- type: :development
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: 0.11.0
82
54
  - !ruby/object:Gem::Dependency
83
55
  name: minitest
84
56
  requirement: !ruby/object:Gem::Requirement
85
57
  requirements:
86
58
  - - "~>"
87
59
  - !ruby/object:Gem::Version
88
- version: '5.25'
60
+ version: '6.0'
89
61
  type: :development
90
62
  prerelease: false
91
63
  version_requirements: !ruby/object:Gem::Requirement
92
64
  requirements:
93
65
  - - "~>"
94
66
  - !ruby/object:Gem::Version
95
- version: '5.25'
67
+ version: '6.0'
96
68
  - !ruby/object:Gem::Dependency
97
69
  name: rake
98
70
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +86,9 @@ dependencies:
114
86
  - - "~>"
115
87
  - !ruby/object:Gem::Version
116
88
  version: '1.86'
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 1.86.2
117
92
  type: :development
118
93
  prerelease: false
119
94
  version_requirements: !ruby/object:Gem::Requirement
@@ -121,6 +96,9 @@ dependencies:
121
96
  - - "~>"
122
97
  - !ruby/object:Gem::Version
123
98
  version: '1.86'
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: 1.86.2
124
102
  - !ruby/object:Gem::Dependency
125
103
  name: rubocop-minitest
126
104
  requirement: !ruby/object:Gem::Requirement
@@ -163,49 +141,175 @@ dependencies:
163
141
  - - "~>"
164
142
  - !ruby/object:Gem::Version
165
143
  version: '0.7'
166
- description: Simple, composable services
144
+ - !ruby/object:Gem::Dependency
145
+ name: rubocop-style-compact_nesting
146
+ requirement: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '0.1'
151
+ type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '0.1'
158
+ - !ruby/object:Gem::Dependency
159
+ name: simplecov
160
+ requirement: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: '0.22'
165
+ type: :development
166
+ prerelease: false
167
+ version_requirements: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - "~>"
170
+ - !ruby/object:Gem::Version
171
+ version: '0.22'
172
+ - !ruby/object:Gem::Dependency
173
+ name: steep
174
+ requirement: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - "~>"
177
+ - !ruby/object:Gem::Version
178
+ version: '2.0'
179
+ type: :development
180
+ prerelease: false
181
+ version_requirements: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - "~>"
184
+ - !ruby/object:Gem::Version
185
+ version: '2.0'
186
+ - !ruby/object:Gem::Dependency
187
+ name: yard
188
+ requirement: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - "~>"
191
+ - !ruby/object:Gem::Version
192
+ version: '0.9'
193
+ type: :development
194
+ prerelease: false
195
+ version_requirements: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: '0.9'
200
+ description: |
201
+ Assistant is a tiny, dependency-free Ruby library for writing soft-fail,
202
+ composable service objects. A service declares its inputs, validates
203
+ them, runs its body, and returns a uniform result that always carries
204
+ either a value plus warnings or a list of errors — never raising for
205
+ expected failures. Ships with RBS signatures, a 1.0-frozen public API,
206
+ and zero runtime gem dependencies.
167
207
  email:
168
208
  - cerberus.ramon@gmail.com
169
- executables: []
209
+ executables:
210
+ - assistant-rbs
170
211
  extensions: []
171
212
  extra_rdoc_files: []
172
213
  files:
173
214
  - ".editorconfig"
174
- - ".fasterer.yml"
215
+ - ".github/PULL_REQUEST_TEMPLATE.md"
175
216
  - ".github/dependabot.yml"
176
217
  - ".github/workflows/ci.yml"
218
+ - ".github/workflows/docs.yml"
177
219
  - ".github/workflows/release.yml"
178
220
  - ".gitignore"
179
221
  - ".markdownlint.json"
222
+ - ".opencode/.gitignore"
223
+ - ".opencode/opencode.json"
224
+ - ".opencode/skills/create-pr/SKILL.md"
225
+ - ".opencode/skills/ruby-services/SKILL.md"
180
226
  - ".rubocop.yml"
181
- - ".rubocop_todo.yml"
182
227
  - ".ruby-version"
228
+ - ".yardopts"
183
229
  - CHANGELOG.md
184
230
  - CODE_OF_CONDUCT.md
231
+ - CONTRIBUTING.md
185
232
  - Gemfile
186
233
  - Gemfile.lock
187
234
  - LICENSE.txt
188
235
  - README.md
189
236
  - Rakefile
237
+ - SECURITY.md
238
+ - Steepfile
239
+ - _config.yml
190
240
  - assistant.gemspec
191
241
  - bin/console
192
242
  - bin/setup
193
243
  - bin/version
244
+ - docs/api-reference.md
245
+ - docs/changelog.md
246
+ - docs/deprecations.md
247
+ - docs/examples/cli-handler.md
248
+ - docs/examples/composing-services.md
249
+ - docs/examples/execute-callbacks.md
250
+ - docs/examples/index.md
251
+ - docs/examples/instrumentation-notifier.md
252
+ - docs/examples/rails-service.md
253
+ - docs/examples/rbs-generator.md
254
+ - docs/examples/sidekiq-worker.md
255
+ - docs/getting-started.md
256
+ - docs/guides/composing-services.md
257
+ - docs/guides/index.md
258
+ - docs/guides/inputs.md
259
+ - docs/guides/logging-and-results.md
260
+ - docs/guides/rbs-and-types.md
261
+ - docs/guides/validation.md
262
+ - docs/index.md
263
+ - docs/roadmap.md
264
+ - exe/assistant-rbs
194
265
  - lib/assistant.rb
266
+ - lib/assistant.rbs
267
+ - lib/assistant/execute_callbacks.rb
268
+ - lib/assistant/execute_callbacks.rbs
195
269
  - lib/assistant/input_builder.rb
270
+ - lib/assistant/input_builder.rbs
271
+ - lib/assistant/input_builder/accessors.rb
272
+ - lib/assistant/input_builder/accessors.rbs
273
+ - lib/assistant/input_builder/default_option.rb
274
+ - lib/assistant/input_builder/default_option.rbs
275
+ - lib/assistant/input_builder/dsl.rb
276
+ - lib/assistant/input_builder/dsl.rbs
277
+ - lib/assistant/input_builder/optional_option.rb
278
+ - lib/assistant/input_builder/optional_option.rbs
279
+ - lib/assistant/input_builder/registry.rb
280
+ - lib/assistant/input_builder/registry.rbs
281
+ - lib/assistant/input_builder/require_validator.rb
282
+ - lib/assistant/input_builder/require_validator.rbs
283
+ - lib/assistant/input_builder/type_validator.rb
284
+ - lib/assistant/input_builder/type_validator.rbs
196
285
  - lib/assistant/log_item.rb
286
+ - lib/assistant/log_item.rbs
197
287
  - lib/assistant/log_list.rb
288
+ - lib/assistant/log_list.rbs
289
+ - lib/assistant/rbs_generator.rb
290
+ - lib/assistant/rbs_generator.rbs
291
+ - lib/assistant/rbs_generator/cli.rb
292
+ - lib/assistant/rbs_generator/cli.rbs
293
+ - lib/assistant/rbs_generator/renderer.rb
294
+ - lib/assistant/rbs_generator/renderer.rbs
295
+ - lib/assistant/rbs_generator/writer.rb
296
+ - lib/assistant/rbs_generator/writer.rbs
198
297
  - lib/assistant/refinements/string_blankness.rb
298
+ - lib/assistant/refinements/string_blankness.rbs
199
299
  - lib/assistant/service.rb
200
300
  - lib/assistant/service.rbs
201
301
  - lib/assistant/version.rb
302
+ - lib/assistant/version.rbs
202
303
  - mise.toml
304
+ - sig/examples/greeter.rbs
203
305
  homepage: https://github.com/ramongr/assistant
204
306
  licenses:
205
307
  - MIT
206
308
  metadata:
207
309
  allowed_push_host: https://rubygems.org
310
+ bug_tracker_uri: https://github.com/ramongr/assistant/issues
208
311
  changelog_uri: https://github.com/ramongr/assistant/blob/main/CHANGELOG.md
312
+ documentation_uri: https://rubydoc.info/gems/assistant
209
313
  homepage_uri: https://github.com/ramongr/assistant
210
314
  rubygems_mfa_required: 'true'
211
315
  source_code_uri: https://github.com/ramongr/assistant
@@ -223,7 +327,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
327
  - !ruby/object:Gem::Version
224
328
  version: '0'
225
329
  requirements: []
226
- rubygems_version: 4.0.6
330
+ rubygems_version: 4.0.10
227
331
  specification_version: 4
228
- summary: Simple, soft fail enabled, composable services
332
+ summary: Tiny, dependency-free soft-fail service objects for Ruby
229
333
  test_files: []
data/.fasterer.yml DELETED
@@ -1,19 +0,0 @@
1
- speedups:
2
- rescue_vs_respond_to: true
3
- module_eval: true
4
- shuffle_first_vs_sample: true
5
- for_loop_vs_each: true
6
- each_with_index_vs_while: false
7
- map_flatten_vs_flat_map: true
8
- reverse_each_vs_reverse_each: true
9
- select_first_vs_detect: true
10
- select_last_vs_reverse_detect: true
11
- sort_vs_sort_by: true
12
- fetch_with_argument_vs_block: true
13
- keys_each_vs_each_key: true
14
- hash_merge_bang_vs_hash_brackets: true
15
- block_vs_symbol_to_proc: true
16
- proc_call_vs_yield: true
17
- gsub_vs_tr: true
18
- getter_vs_attr_reader: true
19
- setter_vs_attr_writer: true
data/.rubocop_todo.yml DELETED
@@ -1,7 +0,0 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 20000`
3
- # on 2023-11-27 19:58:04 UTC using RuboCop version 1.57.2.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.