datacaster 3.1.3 → 3.1.5

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: d7cd7191206c373ab38c5516505bf38cbbdc76a7b7c433f976498accda34b054
4
- data.tar.gz: 0443edf8c8f494caeacfb55ba902cce19210a53cf9f726e8306f7e487de58fd8
3
+ metadata.gz: 29c3f6c825f2c2d9a664e370079cde58df4ce9685d34d8428fb29aa7b98c52f3
4
+ data.tar.gz: 7d90ad442a4bd32ae4526d403629676c3aec9566973486bacd6565e8cb3d7bbd
5
5
  SHA512:
6
- metadata.gz: 2f00d6cd8c2aae72cba3723dbea6b1c6cb9d760309e9fefa7897e5da691123459496348045849f47700f241df668e505120ba1d2e2f54c93a033e72b222dc3b9
7
- data.tar.gz: 15c5d76c7cc7a16be05890bec3bcf549c0a5d103e9ba8bb42e2743c834e874bc1296fa5daa3af4feff93107d5acd8db2bd3b2da103f1c29aca1a169b86883c24
6
+ metadata.gz: acc11fefd17414ba1400bd98d2105b194301ac63f4d6b4204f001f918984326ab711c92d89133b475fd09d51b10c5d6427f6d6f516742a4ceb0a3eb2cf07f983
7
+ data.tar.gz: 07f288ab4e44e0b7a931aa43b34bac1a98d34d68f9d72241fc34f1648aeedc0412b51bdbe1113d9c34674a283e5fc6c559d4d2c5c385f5ec55c65d3b8345fb73
data/README.md CHANGED
@@ -415,6 +415,7 @@ Notice that shortcut definitions are available (illustrated in the example above
415
415
 
416
416
  * `switch(:key)` is exactly the same as `switch(pick(:key))` (works for a string, a symbol, or an array thereof)
417
417
  * `on(:key, ...)` is exactly the same as `on(compare(:key), ...)` (works for a string or a symbol)
418
+ * `on(:key, ...)` will match on `:key` and `'key'` value, and the same is true for `on('key', ...)` (to disable that behavior provide `strict: true` keyword arg: `on('key', ..., strict: true)`)
418
419
  * `switch([caster], on_check => on_caster, ...)` is exactly the same as `switch([caster]).on(on_check, on_caster).on(...)`
419
420
 
420
421
  `switch()` without a `base` argument will pass the incoming value to the `.on(...)` casters.
@@ -7,17 +7,14 @@ module Datacaster
7
7
  attr_accessor :i18n_module
8
8
 
9
9
  def add_predefined_caster(name, definition)
10
- caster =
11
- case definition
12
- when Proc
13
- Datacaster.partial_schema(&definition)
14
- when Base
15
- definition
16
- else
17
- raise ArgumentError.new("Expected Datacaster defintion lambda or Datacaster instance")
18
- end
19
-
20
- Predefined.define_method(name.to_sym) { caster }
10
+ case definition
11
+ when Proc
12
+ Predefined.define_method(name.to_sym, &definition)
13
+ when Base
14
+ Predefined.define_method(name.to_sym) { definition }
15
+ else
16
+ raise ArgumentError.new("Expected Datacaster defintion lambda or Datacaster instance")
17
+ end
21
18
  end
22
19
 
23
20
  def i18n_t
@@ -54,15 +54,15 @@ module Datacaster
54
54
  end
55
55
 
56
56
  def schema(base)
57
- ContextNodes::StructureCleaner.new(base, strategy: :fail)
57
+ ContextNodes::StructureCleaner.new(base, :fail)
58
58
  end
59
59
 
60
60
  def choosy_schema(base)
61
- ContextNodes::StructureCleaner.new(base, strategy: :remove)
61
+ ContextNodes::StructureCleaner.new(base, :remove)
62
62
  end
63
63
 
64
64
  def partial_schema(base)
65
- ContextNodes::StructureCleaner.new(base, strategy: :pass)
65
+ ContextNodes::StructureCleaner.new(base, :pass)
66
66
  end
67
67
 
68
68
  # 'Meta' types
@@ -16,11 +16,18 @@ module Datacaster
16
16
  @else = else_caster
17
17
  end
18
18
 
19
- def on(caster_or_value, clause)
19
+ def on(caster_or_value, clause, strict: false)
20
20
  caster =
21
21
  case caster_or_value
22
22
  when Datacaster::Base
23
23
  caster_or_value
24
+ when String, Symbol
25
+ if strict
26
+ Datacaster::Predefined.compare(caster_or_value)
27
+ else
28
+ Datacaster::Predefined.compare(caster_or_value.to_s) |
29
+ Datacaster::Predefined.compare(caster_or_value.to_sym)
30
+ end
24
31
  else
25
32
  Datacaster::Predefined.compare(caster_or_value)
26
33
  end
@@ -1,3 +1,3 @@
1
1
  module Datacaster
2
- VERSION = "3.1.3"
2
+ VERSION = "3.1.5"
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.1.3
4
+ version: 3.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugene Zolotarev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-06 00:00:00.000000000 Z
11
+ date: 2023-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel