foobara 0.0.2 → 0.0.3

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: 782f9f751e5ade5abc8f593f9f3fb6afe456df2d2a5636554652432ff44722e5
4
- data.tar.gz: ce77c639a1a7e5f9c79833610655e65ee6ed5e8051ce77c19ca43bbb58c748eb
3
+ metadata.gz: 0c67b545a741174d59b5a74553449d32169d2745b33824ad14ee21e4dac7085b
4
+ data.tar.gz: 1e54750375fe79b83ee0bbf08e460021193124e5f7f661c4eef39afd53c3573b
5
5
  SHA512:
6
- metadata.gz: dfce0e9aec6e7b6212ee1bc236e8bca42fba3a380ddce7a2fe75db012f738c3ad13d41a9f8d98438d18252ba92f3a87b90cdb5087d5cfc19006672d6d519db6f
7
- data.tar.gz: b2221f7c2920cb7f5978f5ead9e3655a47fe464d6a738445f111e619736d6212f56d97e066d90000934878844c2a6b3937b58366eb086990987fc367b58d1649
6
+ metadata.gz: 18d0063f27c3c708b30603091ddaaba2bb11ad864d6902b705f0b120ba64ed32f33f64023561a11086e3cf266cf426b927deefc44e173d625156e6aa4d2c9a19
7
+ data.tar.gz: 84f34116a5033ae5c2f34c6e408520cb61a2b0efbedbb59b1b07792c35992c1622153a4b254c8c5c4bd3782b6a22c0a04ec828160f3a0c11e0729871a160ccc7
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.0.3] - 2024-08-15
2
+
3
+ - Do not automatically try to map subcommand types to calling command result type
4
+ - Add some crude help info for models in http connector
5
+
1
6
  ## [0.0.2] - 2024-06-20
2
7
 
3
8
  - Make sure content-type is json if we are json serializing an HTTP response
@@ -4,22 +4,35 @@ module Foobara
4
4
  module DomainMappers
5
5
  include Concern
6
6
 
7
- def run_mapped_subcommand!(subcommand_class, unmapped_inputs)
7
+ def run_mapped_subcommand!(subcommand_class, *args)
8
+ unmapped_inputs, has_result_type, result_type =
9
+ case args.size
10
+ when 1
11
+ [args.first]
12
+ when 2
13
+ [args[1], true, args[0]]
14
+ else
15
+ # :nocov:
16
+ raise ArgumentError,
17
+ "Wrong number of arguments: (#{args.size}. Expected 2 or 3 argument."
18
+ # :nocov:
19
+ end
20
+
8
21
  inputs = domain_map!(unmapped_inputs, to: subcommand_class, strict: true)
9
22
 
10
23
  result = run_subcommand!(subcommand_class, inputs)
11
24
 
12
- result_mapper = self.class.domain.foobara_domain_mapper_registry.lookup(
13
- from: result,
14
- to: result_type,
15
- strict: true
16
- )
25
+ if has_result_type
26
+ result_mapper = self.class.domain.foobara_domain_mapper_registry.lookup!(
27
+ from: result,
28
+ to: result_type,
29
+ strict: true
30
+ )
17
31
 
18
- if result_mapper
19
- result_mapper.map(result)
20
- else
21
- result
32
+ result = result_mapper.map(result)
22
33
  end
34
+
35
+ result
23
36
  end
24
37
 
25
38
  def domain_map(...)
@@ -1 +1,11 @@
1
- <%= full_type_name %>
1
+ <h1><%= full_entity_name %></h1>
2
+ <p><%= description %></p>
3
+
4
+ <h2>Attributes</h2>
5
+ <%= render_html_list(attributes_type) %>
6
+
7
+ <h2>Primary Key</h2>
8
+ <%= primary_key_attribute %>
9
+
10
+ <h2>Possible Errors</h2>
11
+ <%= render_html_list(possible_errors) %>
@@ -1 +1,8 @@
1
- <%= full_type_name %>
1
+ <h1><%= full_model_name %></h1>
2
+ <p><%= description %></p>
3
+
4
+ <h2>Attributes</h2>
5
+ <%= render_html_list(attributes_type) %>
6
+
7
+ <h2>Possible Errors</h2>
8
+ <%= render_html_list(possible_errors) %>
@@ -1,5 +1,30 @@
1
1
  module Foobara
2
2
  class DomainMapper
3
+ class NoDomainMapperFoundError < StandardError
4
+ attr_accessor :value, :from, :to, :has_value
5
+
6
+ def initialize(from, to, **opts)
7
+ valid_keys = [:value]
8
+ invalid_keys = opts.keys - [:value]
9
+
10
+ if invalid_keys.any?
11
+ # :nocov:
12
+ raise ArgumentError, "Invalid keys: #{invalid_keys.join(", ")}. expected one of: #{valid_keys.join(", ")}"
13
+ # :nocov:
14
+ end
15
+
16
+ if opts.key?(:value)
17
+ self.has_value = true
18
+ self.value = opts[:value]
19
+ end
20
+
21
+ self.from = from
22
+ self.to = to
23
+
24
+ super("No domain mapper found for #{value}. from: #{from}. to: #{to}.")
25
+ end
26
+ end
27
+
3
28
  class Registry
4
29
  class AmbiguousDomainMapperError < StandardError
5
30
  attr_accessor :candidates, :from, :to
@@ -17,6 +42,12 @@ module Foobara
17
42
  mappers << mapper
18
43
  end
19
44
 
45
+ def lookup!(from: nil, to: nil, strict: false)
46
+ result = lookup(from:, to:, strict:)
47
+
48
+ result || raise(NoDomainMapperFoundError.new(from, to))
49
+ end
50
+
20
51
  def lookup(from: nil, to: nil, strict: false)
21
52
  candidates = mappers.select do |mapper|
22
53
  mapper.applicable?(from, to)
@@ -4,18 +4,6 @@ module Foobara
4
4
  class AlreadyRegisteredError < StandardError; end
5
5
  class CannotSetTypeConstantError < StandardError; end
6
6
 
7
- class NoDomainMapperFoundError < StandardError
8
- attr_accessor :value, :from, :to
9
-
10
- def initialize(value, from, to)
11
- self.value = value
12
- self.from = from
13
- self.to = to
14
-
15
- super("No domain mapper found for #{value}. from: #{from}. to: #{to}.")
16
- end
17
- end
18
-
19
7
  class << self
20
8
  def global
21
9
  GlobalDomain
@@ -165,9 +153,8 @@ module Foobara
165
153
 
166
154
  def foobara_domain_map!(value, from: value, to: nil, strict: false)
167
155
  mapper = foobara_domain_mapper_registry.lookup(from:, to:, strict:)
168
-
169
156
  unless mapper
170
- raise NoDomainMapperFoundError.new(value, from, to)
157
+ raise Foobara::DomainMapper::NoDomainMapperFoundError.new(from, to, value:)
171
158
  end
172
159
 
173
160
  mapper.call(value)
@@ -8,9 +8,6 @@ module Foobara
8
8
  end
9
9
 
10
10
  module Monorepo
11
- # universal
12
- project "version"
13
-
14
11
  # could be independent projects
15
12
  projects "delegate",
16
13
  "concerns",
@@ -25,6 +25,10 @@ module Foobara
25
25
  super - [primary_key_name]
26
26
  end
27
27
 
28
+ def full_entity_name
29
+ full_model_name
30
+ end
31
+
28
32
  def associations
29
33
  @associations ||= self[:associations].to_h do |path_key, type_name|
30
34
  [path_key.to_sym, Type.new(root_manifest, [:type, type_name])]
@@ -15,6 +15,10 @@ module Foobara
15
15
  attributes_type.attribute_names
16
16
  end
17
17
 
18
+ def full_model_name
19
+ scoped_full_name
20
+ end
21
+
18
22
  # TODO: rename
19
23
  def has_associations?(type = attributes_type)
20
24
  case type
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.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miles Georgi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-21 00:00:00.000000000 Z
11
+ date: 2024-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: foobara-util
@@ -378,8 +378,6 @@ files:
378
378
  - projects/value/src/processor/selection.rb
379
379
  - projects/value/src/transformer.rb
380
380
  - projects/value/src/validator.rb
381
- - projects/version/lib/foobara/version.rb
382
- - projects/version/src/version.rb
383
381
  - projects/weak_object_set/lib/foobara/weak_object_set.rb
384
382
  - projects/weak_object_set/src/weak_object_set.rb
385
383
  homepage: https://github.com/foobara/foobara
@@ -390,7 +388,7 @@ metadata:
390
388
  source_code_uri: https://github.com/foobara/foobara
391
389
  changelog_uri: https://github.com/foobara/foobara/CHANGELOG.md
392
390
  rubygems_mfa_required: 'true'
393
- post_install_message:
391
+ post_install_message:
394
392
  rdoc_options: []
395
393
  require_paths:
396
394
  - "./projects/builtin_types/lib"
@@ -417,7 +415,6 @@ require_paths:
417
415
  - "./projects/type_declarations/lib"
418
416
  - "./projects/types/lib"
419
417
  - "./projects/value/lib"
420
- - "./projects/version/lib"
421
418
  - "./projects/weak_object_set/lib"
422
419
  required_ruby_version: !ruby/object:Gem::Requirement
423
420
  requirements:
@@ -431,7 +428,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
431
428
  version: '0'
432
429
  requirements: []
433
430
  rubygems_version: 3.4.10
434
- signing_key:
431
+ signing_key:
435
432
  specification_version: 4
436
433
  summary: Implements command pattern for encapsulating and managing domain complexity
437
434
  as well as many supporting libraries including entities.
@@ -1,4 +0,0 @@
1
- module Foobara
2
- module Version
3
- end
4
- end
@@ -1,5 +0,0 @@
1
- module Foobara
2
- module Version
3
- VERSION = "0.0.2".freeze
4
- end
5
- end