plumb 0.0.12 → 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: 1ca210d7dec73b7a2b8d951286ecb712813f05ca6d5cd53aa35b32be745eccb9
4
- data.tar.gz: 819197d52dd0315701e2bc867c44a983abcb7d864a265299c1811bd5273320a4
3
+ metadata.gz: df4af6e79e345886256e86f2308c57035f838be232ad5f5c119eedd8af75a0b5
4
+ data.tar.gz: 673fa7649883665445bb0b39f5a129b51ae267618c84946e2578a3a2d9c9d8c3
5
5
  SHA512:
6
- metadata.gz: 5197327eff0fb0f3cfda0d146cb8cb4cf83548b18c509584523a6fe28ebc9875fb3fe9ed38dbf2eee9f00a11c1e48f03e5cae4bea630d89eefbbdf3ba7be42d5
7
- data.tar.gz: a95867b7288e9c464390b15fa3f6e894787ee6177cbf504f9cbd466209c170bedc6a6521c0bcdc31c68cce3e32a45f050f894f976aa32c57733068a5d091852c
6
+ metadata.gz: a31abce0befe39d78dae4dad15c64df5673afda4057786e96c184a200e7325ad129154d9d69e8fca366a56fef564c6756e6a024e2f85be25b6bb83510b1d2338
7
+ data.tar.gz: 81c4ad73c0a56b4057ae0fdad34391df08c596af472454eefe021dada09118659c4fdaa289e896049ab14bc6265dfb06747cfbce74900f48373e2a67a5da09c4
data/README.md CHANGED
@@ -264,7 +264,7 @@ Checks that the value is not blank (`""` if string, `[]` if array, `{}` if Hash,
264
264
 
265
265
  ```ruby
266
266
  Types::String.present.resolve('') # Failure with errors
267
- Types::Array[Types::String].resolve([]) # Failure with errors
267
+ Types::Array[Types::String].present.resolve([]) # Failure with errors
268
268
  ```
269
269
 
270
270
  #### `#nullable`
@@ -910,7 +910,7 @@ ImageDownload = Types::URL >> ->(result) {
910
910
  if (200...300).include?(resp.status)
911
911
  result.valid(resp.body)
912
912
  else
913
- result.invalid(error: resp.status)
913
+ result.invalid(errors: resp.status)
914
914
  end
915
915
  }
916
916
  Images = Types::Array[ImageDownload].concurrent
@@ -218,7 +218,7 @@ module Plumb
218
218
  if data == Undefined
219
219
  MetadataVisitor.call(self)
220
220
  else
221
- self >> Metadata.new(data)
221
+ Metadata.new(self, data)
222
222
  end
223
223
  end
224
224
 
@@ -282,7 +282,18 @@ module Plumb
282
282
  freeze
283
283
  end
284
284
 
285
- def metadata = type.metadata
285
+ # When wrapping a node in Metadata
286
+ # we need to preserte the Node with cistom node_name.
287
+ # but when just querying metadata,
288
+ # we can delegate to the underlying type.
289
+ def metadata(data = Undefined)
290
+ if data == Undefined
291
+ type.metadata
292
+ else
293
+ Metadata.new(self, data)
294
+ end
295
+ end
296
+
286
297
  def call(result) = type.call(result)
287
298
  end
288
299
 
@@ -36,6 +36,13 @@ module Plumb
36
36
  ENVELOPE.merge(data)
37
37
  end
38
38
 
39
+ # Some rules that are dependent on combinations of aggregates keys
40
+ # Ex. if `format` is set, `pattern` should be removed
41
+ private def clean_up_after_visit(props)
42
+ props.delete(PATTERN) if props.key?(FORMAT)
43
+ props
44
+ end
45
+
39
46
  private def stringify_keys(hash) = hash.transform_keys(&:to_s)
40
47
 
41
48
  on(:any) do |_node, props|
@@ -209,7 +216,7 @@ module Plumb
209
216
  end
210
217
 
211
218
  on(:email) do |_node, props|
212
- props.merge(TYPE => 'string', FORMAT => 'email')
219
+ props.except(PATTERN).merge(TYPE => 'string', FORMAT => 'email')
213
220
  end
214
221
 
215
222
  on(::String) do |_node, props|
@@ -292,7 +299,8 @@ module Plumb
292
299
 
293
300
  on(:metadata) do |node, props|
294
301
  #  TODO: here we should filter out the metadata that is not relevant for JSON Schema
295
- props.merge(stringify_keys(node.metadata))
302
+ props = props.merge(stringify_keys(node.metadata))
303
+ props.merge(visit(node.type, props))
296
304
  end
297
305
 
298
306
  on(:hash_map) do |node, _props|
@@ -4,10 +4,11 @@ module Plumb
4
4
  class Metadata
5
5
  include Composable
6
6
 
7
- attr_reader :metadata
7
+ attr_reader :type
8
8
 
9
- def initialize(metadata)
10
- @metadata = metadata
9
+ def initialize(type, metadata)
10
+ @type = type
11
+ @metadata = type.metadata.merge(metadata)
11
12
  freeze
12
13
  end
13
14
 
@@ -15,8 +16,16 @@ module Plumb
15
16
  other.is_a?(self.class) && @metadata == other.metadata
16
17
  end
17
18
 
19
+ def metadata(data = Undefined)
20
+ if data == Undefined
21
+ @metadata
22
+ else
23
+ Metadata.new(@type, @metadata.merge(data))
24
+ end
25
+ end
26
+
18
27
  def call(result) = result
19
28
 
20
- private def _inspect = "Metadata[#{@metadata.inspect}]"
29
+ private def _inspect = "Metadata[#{type}, #{@metadata.inspect}]"
21
30
  end
22
31
  end
@@ -71,6 +71,7 @@ module Plumb
71
71
  end
72
72
 
73
73
  on(:metadata) do |node, props|
74
+ props = visit(node.type, props)
74
75
  props.merge(node.metadata)
75
76
  end
76
77
 
@@ -83,9 +83,7 @@ module Plumb
83
83
  end
84
84
 
85
85
  def is_a_step?(callable)
86
- return false unless callable.respond_to?(:call)
87
-
88
- true
86
+ callable.respond_to?(:call)
89
87
  end
90
88
 
91
89
  def prepare_step(callable) = callable
data/lib/plumb/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Plumb
4
- VERSION = '0.0.12'
4
+ VERSION = '0.0.13'
5
5
  end
@@ -24,7 +24,7 @@ module Plumb
24
24
  :"#{(node.is_a?(::Class) ? node : node.class)}_class"
25
25
  end
26
26
 
27
- visit_name(method_name, node, props)
27
+ clean_up_after_visit visit_name(method_name, node, props)
28
28
  end
29
29
 
30
30
  def visit_name(method_name, node, props = BLANK_HASH)
@@ -45,5 +45,7 @@ module Plumb
45
45
  visit(child, acc)
46
46
  end
47
47
  end
48
+
49
+ private def clean_up_after_visit(props) = props
48
50
  end
49
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plumb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ismael Celis
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-05-07 00:00:00.000000000 Z
11
+ date: 2025-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal