datacaster 3.2.5 → 3.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +27 -1
- data/lib/datacaster/mixin.rb +3 -3
- data/lib/datacaster/runtimes/user_context.rb +10 -3
- data/lib/datacaster/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c44e05c449320297096373bd48d942aae81776c5ad358f831215d875628d0ce2
|
4
|
+
data.tar.gz: 831752e1d0028d3d9e3d9423e515c34b587d13aecdcd24be4b12a1d74d073b61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb18dda544b94751ed2d389e3191d9372f0e9323a162c489fc10731da26cc643d2151ff55a600152dea496d1831251b24bfc00ebf294b13b22a2954f64173cae
|
7
|
+
data.tar.gz: ae9c906810ff03d978b5b85c07a6042750ad92ed46dbe7ea55318a3a1a61ab85ba2854482de5d9c34aa234aed1c687730d1ff4ee80b8232a8a42a28daeecdfa0
|
data/README.md
CHANGED
@@ -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
|
|
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.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugene Zolotarev
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-02-
|
11
|
+
date: 2024-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -106,7 +106,7 @@ dependencies:
|
|
106
106
|
- - "<"
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '3'
|
109
|
-
description:
|
109
|
+
description:
|
110
110
|
email:
|
111
111
|
- eugzol@gmail.com
|
112
112
|
executables: []
|
@@ -178,7 +178,7 @@ licenses:
|
|
178
178
|
- MIT
|
179
179
|
metadata:
|
180
180
|
source_code_uri: https://github.com/EugZol/datacaster
|
181
|
-
post_install_message:
|
181
|
+
post_install_message:
|
182
182
|
rdoc_options: []
|
183
183
|
require_paths:
|
184
184
|
- lib
|
@@ -193,8 +193,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
195
|
requirements: []
|
196
|
-
rubygems_version: 3.
|
197
|
-
signing_key:
|
196
|
+
rubygems_version: 3.4.6
|
197
|
+
signing_key:
|
198
198
|
specification_version: 4
|
199
199
|
summary: Run-time type checker and transformer for Ruby
|
200
200
|
test_files: []
|