datacaster 4.0.1 → 4.1.0

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: 9709949f8f91c24538332b215d2d08af58a7b1e83869dcde0198512889b1775c
4
- data.tar.gz: 791d875d336e229796f302b448256b6b4ad1a3d6f10e10702af49a3cbb6faf4e
3
+ metadata.gz: 1cbcb054db89c228c0c38e19a2af1a3863a1835708dd9717a9f3d5c0b3f27286
4
+ data.tar.gz: 79aa8db52e0cb760b1fd6e8b49bf77b7853b7fae192f2a746d4a9205bc3c1b14
5
5
  SHA512:
6
- metadata.gz: 7631f63485017a7c431993b80ecb9795c060e02c8742a2cf82400866b578e244caa9d2e783769cf7b3d153336d8242790c68daf652c6d53fdbe94f387230a1bc
7
- data.tar.gz: 551810cf2025496263579b9b3bfd051970a5149a08bf51fd6ac7a4b6ad40fc74b8819fb3e941e7738a8e2e826f75ac5119759864ea740826e95ca3c30d9e316a
6
+ metadata.gz: f5a325a3bd5534b69024488ea015d05e5c1e12970df5c07a2eeb26c34a0c8be48bbc2f2c98971f1ba4653231c7740d06cf38359c628ee030e4d8423cafebb278
7
+ data.tar.gz: aa0b7b42f0ecd22f9d4d9865e0c2c95602a990585550f5579c2b466f2a9bde4d6814adf0faeffe08d0e9e391d79c27519a1e5647a9fb0f9370276f72c8e461d2
data/README.md CHANGED
@@ -1547,6 +1547,18 @@ schema.with_context(five: 15).(nil)
1547
1547
  # => Datacaster::ValidResult(nil)
1548
1548
  ```
1549
1549
 
1550
+ Method `has_key?` could be used to determine whether key is available in the context
1551
+
1552
+ ```ruby
1553
+ schema =
1554
+ Datacaster.schema do
1555
+ check { context.has_key?(:five) }
1556
+ end
1557
+
1558
+ schema.with_context(five: 15).(nil)
1559
+ # => Datacaster::ValidResult(nil)
1560
+ ```
1561
+
1550
1562
  **Note**
1551
1563
 
1552
1564
  `context` can be accesed only in casters' blocks. It can't be used in schema definition itself:
@@ -4,6 +4,10 @@ module Datacaster
4
4
  module Runtimes
5
5
  class UserContext < Base
6
6
  class ContextStruct
7
+ def self.context_has_key?(context, key)
8
+ context.respond_to?(:key?) && context.key?(key) || context.to_h.key?(key.to_sym)
9
+ end
10
+
7
11
  def initialize(context, node)
8
12
  @context = context
9
13
  @node = node
@@ -14,10 +18,7 @@ module Datacaster
14
18
  return super
15
19
  end
16
20
 
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?
21
+ if self.class.context_has_key?(@context, m) && args.empty?
21
22
  return @context[m]
22
23
  end
23
24
 
@@ -31,6 +32,12 @@ module Datacaster
31
32
  raise NoMethodError.new("Key #{m.inspect} is not found in the context")
32
33
  end
33
34
  end
35
+
36
+ def has_key?(key)
37
+ self.class.context_has_key?(@context, key) || @node.class.send_to_parent(@node, :context).has_key?(key)
38
+ rescue NoMethodError
39
+ false
40
+ end
34
41
  end
35
42
 
36
43
  def initialize(parent, user_context)
@@ -1,3 +1,3 @@
1
1
  module Datacaster
2
- VERSION = "4.0.1"
2
+ VERSION = "4.1.0"
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: 4.0.1
4
+ version: 4.1.0
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-10-08 00:00:00.000000000 Z
11
+ date: 2024-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -193,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  requirements: []
196
- rubygems_version: 3.5.21
196
+ rubygems_version: 3.1.6
197
197
  signing_key:
198
198
  specification_version: 4
199
199
  summary: Run-time type checker and transformer for Ruby