foobara 0.0.11 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
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