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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e87035b2c58689f1682294141d8ef6dfe02c6054a810e7bcda3a22f2d934091
4
- data.tar.gz: d6262e0130ef3f831731e9b0d6095a40fa7a19bfa9eecd5a0630c5eb8a3d9513
3
+ metadata.gz: c44e05c449320297096373bd48d942aae81776c5ad358f831215d875628d0ce2
4
+ data.tar.gz: 831752e1d0028d3d9e3d9423e515c34b587d13aecdcd24be4b12a1d74d073b61
5
5
  SHA512:
6
- metadata.gz: 6800f34a95b7e8baaad2d2f093f4c6be58e35904220339c2c8c5452fcea375b169224ebf49c699d965073cf9b3777ab00b91adf48184d539c2ff1616accde73f
7
- data.tar.gz: b8f9fd1227da11c029af5af57fb336f7e10f29b763123517ed4e5fbae0b27ca9ff6a65367841684edc366066ad27c720d367a318578b09637bfa98680bfcb58c
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` is an [OpenStruct](https://ruby-doc.org/stdlib-3.1.0/libdoc/ostruct/rdoc/OpenStruct.html) instance.
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
 
@@ -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.is_a?(Hash)
25
- raise "with_context expected Hash as argument, got #{context.inspect} instead"
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 !args.empty? || block_given?
13
+ if args.length > 1 || block_given?
14
14
  return super
15
15
  end
16
16
 
17
- if @context.key?(m)
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
@@ -1,3 +1,3 @@
1
1
  module Datacaster
2
- VERSION = "3.2.5"
2
+ VERSION = "3.2.6"
3
3
  end
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.5
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-07 00:00:00.000000000 Z
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.1.6
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: []