datacaster 3.2.5 → 3.2.7
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cecd5729ff179f70e6a7530603255f009814b7d4ef1d9dbe576a5f2b9e0bc222
|
4
|
+
data.tar.gz: 4e234450bc92faf277789eb21ccbd03ddb544253250978da41d85dd9d12f8e39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68e2588ec262fad2419fe3adf0a5d87aacfb28375ae47a277c4c8cb03e172913aec763375f1ffce90d2422269d219c1ff0f504921d5afc2be78c1efc8a3a2062
|
7
|
+
data.tar.gz: 335ef1ea64bbc63c78b0c6ef44d330967173187d6ac15bdc7b788bee9b38be77ebc63e892d97914f99fa7da1f25a604f10c96038c2f6ad4bb15b6319f5b2db0b
|
data/README.md
CHANGED
@@ -1327,7 +1327,7 @@ CommonValidator =
|
|
1327
1327
|
end
|
1328
1328
|
|
1329
1329
|
PersonValidator =
|
1330
|
-
Datacaster.
|
1330
|
+
Datacaster.partial_schema do
|
1331
1331
|
hash_schema(
|
1332
1332
|
name: string
|
1333
1333
|
)
|
@@ -1487,7 +1487,33 @@ current_user = ...
|
|
1487
1487
|
schema.with_context(current_user: current_user).(post_id: 15)
|
1488
1488
|
```
|
1489
1489
|
|
1490
|
-
`context`
|
1490
|
+
`context` behaves similarly to OpenStruct, setter method can be used to set a context value (see also [run](#run--value--) caster):
|
1491
|
+
|
1492
|
+
```ruby
|
1493
|
+
schema =
|
1494
|
+
Datacaster.schema do
|
1495
|
+
run { context.five = 5 } & check { context.five == 5 }
|
1496
|
+
end
|
1497
|
+
|
1498
|
+
# Notice that #with_context call is still required, otherwise
|
1499
|
+
# #context method will not be available in the caster's runtime
|
1500
|
+
schema.with_context.(nil)
|
1501
|
+
# => Datacaster::ValidResult(nil)
|
1502
|
+
```
|
1503
|
+
|
1504
|
+
If there are conflicts between context values, the most specific one (closest to the caster) wins:
|
1505
|
+
|
1506
|
+
```ruby
|
1507
|
+
schema =
|
1508
|
+
Datacaster.schema do
|
1509
|
+
check { context.five == 5 }.
|
1510
|
+
with_context(five: 5). # this will win
|
1511
|
+
with_context(five: 10)
|
1512
|
+
end
|
1513
|
+
|
1514
|
+
schema.with_context(five: 15).(nil)
|
1515
|
+
# => Datacaster::ValidResult(nil)
|
1516
|
+
```
|
1491
1517
|
|
1492
1518
|
**Note**
|
1493
1519
|
|
@@ -24,10 +24,15 @@ module Datacaster
|
|
24
24
|
def transform_result(result)
|
25
25
|
return result unless result.valid?
|
26
26
|
result = cast_success(result)
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
|
28
|
+
# Notify parent runtime of current runtime's schema
|
29
|
+
unless @runtime.unchecked?
|
30
|
+
parent_runtime = @runtime.instance_variable_get(:@parent)
|
31
|
+
if parent_runtime.respond_to?(:checked_schema!)
|
32
|
+
parent_runtime.checked_schema!(@runtime.checked_schema)
|
33
|
+
end
|
30
34
|
end
|
35
|
+
|
31
36
|
result
|
32
37
|
end
|
33
38
|
|
data/lib/datacaster/mixin.rb
CHANGED
@@ -20,9 +20,9 @@ module Datacaster
|
|
20
20
|
ThenNode.new(self, DefinitionDSL.expand(other))
|
21
21
|
end
|
22
22
|
|
23
|
-
def with_context(context)
|
24
|
-
unless context.
|
25
|
-
raise "with_context expected
|
23
|
+
def with_context(context = {})
|
24
|
+
unless context.respond_to?(:[])
|
25
|
+
raise "with_context expected enumerable as argument, got #{context.inspect} instead"
|
26
26
|
end
|
27
27
|
ContextNodes::UserContext.new(self, context)
|
28
28
|
end
|
@@ -10,16 +10,23 @@ module Datacaster
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def method_missing(m, *args)
|
13
|
-
if
|
13
|
+
if args.length > 1 || block_given?
|
14
14
|
return super
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
key_present = @context.respond_to?(:key?) && @context.key?(m) ||
|
18
|
+
@context.to_h.key?(m.to_sym)
|
19
|
+
|
20
|
+
if key_present && args.empty?
|
18
21
|
return @context[m]
|
19
22
|
end
|
20
23
|
|
24
|
+
if m =~ /\A.+=\z/ && args.length == 1
|
25
|
+
return @context[m[0..-2].to_sym] = args[0]
|
26
|
+
end
|
27
|
+
|
21
28
|
begin
|
22
|
-
@node.class.send_to_parent(@node, :context).public_send(m)
|
29
|
+
@node.class.send_to_parent(@node, :context).public_send(m, *args)
|
23
30
|
rescue NoMethodError
|
24
31
|
raise NoMethodError.new("Key #{m.inspect} is not found in the context")
|
25
32
|
end
|
data/lib/datacaster/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datacaster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugene Zolotarev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|