foobara 0.0.11 → 0.0.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 753b97d573a8a3b7f532c3e453282944783aab55b3adfcdb7aaef33514396393
4
- data.tar.gz: 2da621b2f9b6fbcfe43869f46fad62e59b5aee755a9c0a0ef9bf1f7c39fd8def
3
+ metadata.gz: a0fe6b2415dddaf6742ae9bd3809f807148d61a8595eff27c7053b7bdf2120b0
4
+ data.tar.gz: a0b48950e37a936d2b4aae09ab9fe5bceaed5ae46da724a7f0d64bfe4177e549
5
5
  SHA512:
6
- metadata.gz: e4c32b52a277f4cee2d0cc592ef87f6149a251629187be5a0221fa2f31d71b5d2a227019969d4ebcd70385dbb55ed03d48db2f2ea9970f2bdd78d2dbb346bfab
7
- data.tar.gz: 8479c7f4283da493f3b703aa37278d2adad83d696cf7fcc07dff493ce56a6fafc892cb427cbe8f5263952ea1d503874cee6b528774e508d154ce584ffaa332bc
6
+ metadata.gz: 67a4249c5ca81daad7c7476eac81dafdea51224135e3e224ca31a4def8a0dc9906a79f4f4500f95a75446073ceccbab6d4ada74fca656bec305aebe7b2b546f7
7
+ data.tar.gz: da74f67ea8f39814874c2393c45ff514fd669dbd9865acbf7da4414e2ed702d9a9522d4381343f2201d6804f1b3d31565fa48926e5cf751f3376e8d7bd7069d4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## [0.0.13] - 2024-11-13
2
+
3
+ - Do not fail :one_of if it is nil and :allows_nil
4
+
5
+ ## [0.0.12] - 2024-10-30
6
+
7
+ - Support delayed command connection
8
+
1
9
  ## [0.0.11] - 2024-10-27
2
10
 
3
11
  - Release under the MPL-2.0 license
data/README.md CHANGED
@@ -14,7 +14,7 @@ run `foob generate ruby-project --name your-org/your-new-project-name`
14
14
 
15
15
  ## Usage
16
16
 
17
- TODO: Write usage instructions here or defer to some tutorial somewhere
17
+ You can find a code demo video and an overview video of what Foobara is at https://foobara.com
18
18
 
19
19
  ## Contributing
20
20
 
@@ -3,6 +3,12 @@ module Foobara
3
3
  module Duck
4
4
  module SupportedValidators
5
5
  class OneOf < TypeDeclarations::Validator
6
+ class << self
7
+ def requires_parent_declaration_data?
8
+ true
9
+ end
10
+ end
11
+
6
12
  class ValueNotValidError < Foobara::Value::DataError
7
13
  class << self
8
14
  def context_type_declaration
@@ -18,6 +24,12 @@ module Foobara
18
24
  declaration_data
19
25
  end
20
26
 
27
+ def applicable?(value)
28
+ # Might there be some way this validator could be marked not-applicable that doesn't require coupling
29
+ # this processor to allow_nil? (or vice-versa)
30
+ !value.nil? || !parent_declaration_data[:allow_nil]
31
+ end
32
+
21
33
  def validation_errors(value)
22
34
  unless valid_values.include?(value)
23
35
  build_error(value)
@@ -90,7 +90,7 @@ module Foobara
90
90
  end
91
91
 
92
92
  error_class = self.class.lookup_input_error_class(symbol, path)
93
- error_class.new(**error_args.merge(path:))
93
+ error_class.new(**error_args, path:)
94
94
  elsif args.size == 2 || args.size == 3
95
95
  input, symbol, message = args
96
96
  context = opts
@@ -250,6 +250,24 @@ module Foobara
250
250
  end
251
251
  end
252
252
 
253
+ def connect_delayed(registerable_name, *args, **opts)
254
+ delayed_connections[registerable_name] = { args:, opts: }
255
+ end
256
+
257
+ def delayed_connections
258
+ @delayed_connections ||= {}
259
+ end
260
+
261
+ def process_delayed_connections
262
+ delayed_connections.each_pair do |registerable_name, arg_hash|
263
+ args = arg_hash[:args]
264
+ opts = arg_hash[:opts] || {}
265
+
266
+ const = Object.const_get(registerable_name)
267
+ connect(const, *args, **opts)
268
+ end
269
+ end
270
+
253
271
  def connect(registerable, *, **)
254
272
  case registerable
255
273
  when Class
@@ -274,6 +292,8 @@ module Foobara
274
292
  raise "Don't know how to register #{registerable} (#{registerable.class})"
275
293
  # :nocov:
276
294
  end
295
+ when Symbol, String
296
+ connect_delayed(registerable, *, **)
277
297
  else
278
298
  # :nocov:
279
299
  raise "Don't know how to register #{registerable} (#{registerable.class})"
@@ -287,6 +307,8 @@ module Foobara
287
307
 
288
308
  # TODO: maybe introduce a Runner interface?
289
309
  def run(*, **)
310
+ process_delayed_connections
311
+
290
312
  request, command = build_request_and_command(*, **)
291
313
 
292
314
  # TODO: feels like a smell
@@ -325,6 +347,8 @@ module Foobara
325
347
  end
326
348
 
327
349
  def foobara_manifest
350
+ process_delayed_connections
351
+
328
352
  # Drive all of this off of the list of exposed commands...
329
353
  to_include = Set.new
330
354
  to_include << command_registry.exposed_global_organization
@@ -410,6 +434,8 @@ module Foobara
410
434
  end
411
435
 
412
436
  def all_exposed_commands
437
+ process_delayed_connections
438
+
413
439
  command_registry.foobara_all_command
414
440
  end
415
441
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foobara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miles Georgi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-27 00:00:00.000000000 Z
11
+ date: 2024-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: foobara-util
@@ -399,7 +399,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
399
399
  - !ruby/object:Gem::Version
400
400
  version: '0'
401
401
  requirements: []
402
- rubygems_version: 3.5.22
402
+ rubygems_version: 3.5.23
403
403
  signing_key:
404
404
  specification_version: 4
405
405
  summary: Implements command pattern for encapsulating and managing domain complexity