datacaster 3.2.1 → 3.2.3

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: ed24c848eb7b909ee24655728013ccddad59fa7ad0c497326d767fcbe0ea369b
4
- data.tar.gz: 6bc155f410e73bcd09a9941055e23c63aefc79caff1fcff47110d7d03b02b145
3
+ metadata.gz: f2b45e5271b85a571b86bd83ff91494d68486b677a2f0cc0f03daeeb5e8d5307
4
+ data.tar.gz: 7dafa54ec77eee489282217026a845059725a164e381525be695874bbb2cecc3
5
5
  SHA512:
6
- metadata.gz: e59a0fc79dc9fbc350ec581d7741bc61d064439aea06f66cc814fba82e9678423f140ce0a5eeef17aa51a39c3f2457c5bc1b1909ab10db2b7e44ba1d214d2ac6
7
- data.tar.gz: e53f422a189dcaee5f898f8f2b59fb9538fe26e9551b66f0bb3da467f4f1f91aad7480b2237df90b05892a4f72a2bdd56b446ad5691adca5f1d38b39ccfdb27a
6
+ metadata.gz: 37337520c11d06b98d30e5afcb890b2a8b1bfdbc06f05d070fb8d3c3dc52c4adc9263a9f92a29c0cf92051f5b58c57833f9d1330a8f7cb7fe39a46c2fad694f9
7
+ data.tar.gz: 4792f1c3000d5df28c865e5c8c365a87356e8241009b9a7cbe5e55544422c964749ba43e8d6004aba05585a18e1795967dc6c3a22f2e06a03ef87eca0dd4fced
@@ -24,8 +24,9 @@ module Datacaster
24
24
  def transform_result(result)
25
25
  return result unless result.valid?
26
26
  result = cast_success(result)
27
- if @runtime.instance_variable_get(:@parent).respond_to?(:checked_schema=)
28
- @runtime.instance_variable_get(:@parent).checked_schema = @runtime.checked_schema
27
+ parent_runtime = @runtime.instance_variable_get(:@parent)
28
+ if parent_runtime.respond_to?(:checked_schema!)
29
+ parent_runtime.checked_schema!(@runtime.checked_schema)
29
30
  end
30
31
  result
31
32
  end
@@ -35,6 +35,10 @@ module Datacaster
35
35
  @should_check_stack[-1] = true
36
36
  end
37
37
 
38
+ def checked_schema!(schema)
39
+ @pointer_stack[-1].merge!(schema)
40
+ end
41
+
38
42
  def ignore_checks!(&block)
39
43
  @ignore = true
40
44
  result = yield
@@ -1,11 +1,15 @@
1
1
  module Datacaster
2
2
  class SwitchNode < Base
3
- def initialize(base = nil, on_casters = [], else_caster = nil)
3
+ def initialize(base = nil, on_casters: [], else_caster: nil, pick_key: nil)
4
4
  @base = base
5
+ @pick_key = pick_key
5
6
 
6
7
  if Datacaster::Utils.pickable?(@base)
7
- @base = Datacaster::Predefined.run { checked_key!(base) } &
8
- Datacaster::Predefined.pick(base)
8
+ unless @pick_key.nil?
9
+ raise RuntimeError, "pick_key expected to be nil because #{@base.inspect} is pickable"
10
+ end
11
+ @pick_key = base
12
+ @base = Datacaster::Predefined.pick(base)
9
13
  end
10
14
 
11
15
  if !@base.nil? && !Datacaster.instance?(@base)
@@ -34,12 +38,12 @@ module Datacaster
34
38
 
35
39
  clause = DefinitionDSL.expand(clause)
36
40
 
37
- self.class.new(@base, @ons + [[caster, clause]], @else)
41
+ self.class.new(@base, on_casters: @ons + [[caster, clause]], else_caster: @else, pick_key: @pick_key)
38
42
  end
39
43
 
40
44
  def else(else_caster)
41
45
  raise ArgumentError, "Datacaster: double else clause is not permitted", caller if @else
42
- self.class.new(@base, @ons, else_caster)
46
+ self.class.new(@base, on_casters: @ons, else_caster: else_caster, pick_key: @pick_key)
43
47
  end
44
48
 
45
49
  def cast(object, runtime:)
@@ -59,7 +63,11 @@ module Datacaster
59
63
  result = check.with_runtime(runtime).(switch_result)
60
64
  next unless result.valid?
61
65
 
62
- return clause.with_runtime(runtime).(object)
66
+ if @pick_key.nil?
67
+ return clause.with_runtime(runtime).(object)
68
+ else
69
+ return runtime.checked_key!(@pick_key) { clause.with_runtime(runtime).(object) }
70
+ end
63
71
  end
64
72
 
65
73
  # all 'on'-s have failed
@@ -71,7 +79,7 @@ module Datacaster
71
79
  end
72
80
 
73
81
  def inspect
74
- "#<Datacaster::SwitchNode base: #{@base.inspect} on: #{@ons.inspect} else: #{@else.inspect}>"
82
+ "#<Datacaster::SwitchNode base: #{@base.inspect} on: #{@ons.inspect} else: #{@else.inspect} pick_key: #{@pick_key.inspect}>"
75
83
  end
76
84
  end
77
85
  end
@@ -1,3 +1,3 @@
1
1
  module Datacaster
2
- VERSION = "3.2.1"
2
+ VERSION = "3.2.3"
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.1
4
+ version: 3.2.3
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: 2023-10-09 00:00:00.000000000 Z
11
+ date: 2024-02-06 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.4.6
197
- signing_key:
196
+ rubygems_version: 3.1.6
197
+ signing_key:
198
198
  specification_version: 4
199
199
  summary: Run-time type checker and transformer for Ruby
200
200
  test_files: []