plumb 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 +4 -4
- data/README.md +3 -3
- data/lib/plumb/attribute_value_match.rb +3 -0
- data/lib/plumb/attributes.rb +2 -0
- data/lib/plumb/composable.rb +13 -2
- data/lib/plumb/json_schema_visitor.rb +10 -2
- data/lib/plumb/metadata.rb +13 -4
- data/lib/plumb/metadata_visitor.rb +1 -0
- data/lib/plumb/pipeline.rb +1 -3
- data/lib/plumb/version.rb +1 -1
- data/lib/plumb/visitor_handlers.rb +3 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df4af6e79e345886256e86f2308c57035f838be232ad5f5c119eedd8af75a0b5
|
4
|
+
data.tar.gz: 673fa7649883665445bb0b39f5a129b51ae267618c84946e2578a3a2d9c9d8c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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`
|
@@ -344,7 +344,7 @@ The size is matched via `#===`, so ranges also work.
|
|
344
344
|
Password = Types::String.with(bytesize: 10..20)
|
345
345
|
```
|
346
346
|
|
347
|
-
The helper accepts multiple attribute/
|
347
|
+
The helper accepts multiple attribute/value pairs
|
348
348
|
|
349
349
|
```ruby
|
350
350
|
JoeBloggs = Types::Any[User].with(first_name: 'Joe', last_name: 'Bloggs')
|
@@ -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(
|
913
|
+
result.invalid(errors: resp.status)
|
914
914
|
end
|
915
915
|
}
|
916
916
|
Images = Types::Array[ImageDownload].concurrent
|
@@ -11,6 +11,7 @@ module Plumb
|
|
11
11
|
@attr_name = attr_name
|
12
12
|
@value = value
|
13
13
|
@error = "must have attribute #{attr_name} === #{value.inspect}"
|
14
|
+
@inspect_line = %((#{attr_name} === #{value.inspect}))
|
14
15
|
freeze
|
15
16
|
end
|
16
17
|
|
@@ -21,5 +22,7 @@ module Plumb
|
|
21
22
|
|
22
23
|
result.invalid(errors: @error)
|
23
24
|
end
|
25
|
+
|
26
|
+
private def _inspect = @inspect_line
|
24
27
|
end
|
25
28
|
end
|
data/lib/plumb/attributes.rb
CHANGED
data/lib/plumb/composable.rb
CHANGED
@@ -218,7 +218,7 @@ module Plumb
|
|
218
218
|
if data == Undefined
|
219
219
|
MetadataVisitor.call(self)
|
220
220
|
else
|
221
|
-
|
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
|
-
|
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|
|
data/lib/plumb/metadata.rb
CHANGED
@@ -4,10 +4,11 @@ module Plumb
|
|
4
4
|
class Metadata
|
5
5
|
include Composable
|
6
6
|
|
7
|
-
attr_reader :
|
7
|
+
attr_reader :type
|
8
8
|
|
9
|
-
def initialize(metadata)
|
10
|
-
@
|
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
|
data/lib/plumb/pipeline.rb
CHANGED
data/lib/plumb/version.rb
CHANGED
@@ -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.
|
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-
|
11
|
+
date: 2025-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bigdecimal
|