datacaster 3.2.2 → 3.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd23c11d4adffee6cbdc30b7a74f2f8d6964b4ebcdb0fd2e94576f28c4fc7407
4
- data.tar.gz: '0949319f7e070757a51c619cf2e77d355df177ba84f010835a517243d2ad76ec'
3
+ metadata.gz: f2b45e5271b85a571b86bd83ff91494d68486b677a2f0cc0f03daeeb5e8d5307
4
+ data.tar.gz: 7dafa54ec77eee489282217026a845059725a164e381525be695874bbb2cecc3
5
5
  SHA512:
6
- metadata.gz: 3c0edbe35ee2b7b8a0f450df81defbb89371b09ad3f18fd72e55a1b9f7e143d765c9cbe72ca1ab8ce84e25c822dec289e20cdddca2c36044551f0c27f577cc2d
7
- data.tar.gz: 7cea5130149612f5b73e58d426ec28bf34322c57cef08fb601c83537aaeda1769a91c58ca91641cb964883d32fb8c737e68856633646f6c2ec7b792079dc39e8
6
+ metadata.gz: 37337520c11d06b98d30e5afcb890b2a8b1bfdbc06f05d070fb8d3c3dc52c4adc9263a9f92a29c0cf92051f5b58c57833f9d1330a8f7cb7fe39a46c2fad694f9
7
+ data.tar.gz: 4792f1c3000d5df28c865e5c8c365a87356e8241009b9a7cbe5e55544422c964749ba43e8d6004aba05585a18e1795967dc6c3a22f2e06a03ef87eca0dd4fced
@@ -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.2"
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.2
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: []