datacaster 3.2.7 → 3.3.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: cecd5729ff179f70e6a7530603255f009814b7d4ef1d9dbe576a5f2b9e0bc222
4
- data.tar.gz: 4e234450bc92faf277789eb21ccbd03ddb544253250978da41d85dd9d12f8e39
3
+ metadata.gz: 57a921f071865d8d6fae653de1e80edc19e1eaf5d2a37450ccd7b32a24f4386f
4
+ data.tar.gz: 5307a9a2f7619c331efd7620a2e1a2a7a3b11a82bec3e6ad760e8ec75a29ad84
5
5
  SHA512:
6
- metadata.gz: 68e2588ec262fad2419fe3adf0a5d87aacfb28375ae47a277c4c8cb03e172913aec763375f1ffce90d2422269d219c1ff0f504921d5afc2be78c1efc8a3a2062
7
- data.tar.gz: 335ef1ea64bbc63c78b0c6ef44d330967173187d6ac15bdc7b788bee9b38be77ebc63e892d97914f99fa7da1f25a604f10c96038c2f6ad4bb15b6319f5b2db0b
6
+ metadata.gz: 5b7f3713ebd7ce4568ae79d612e0ee2a8277d0c6baeb398e24975ff95c1167d151649565378240445765ac3499ff5db0c65380d5f215556449505e6e9f2b88a1
7
+ data.tar.gz: 5dc58c8d0f853ce3d906e6606af932e7531012666f77a813bf38684463a4606e4bdae3d1f0c63ae1159a1573f30b274b3fffcf9224efa82c34705b73b1671261
@@ -6,7 +6,7 @@ jobs:
6
6
  runs-on: ubuntu-latest
7
7
  strategy:
8
8
  matrix:
9
- ruby-version: ['2.7', '3.0', '3.1']
9
+ ruby-version: ['3.1', '3.2', '3.3']
10
10
  steps:
11
11
  - uses: actions/checkout@v3
12
12
  - name: Set up Ruby
data/README.md CHANGED
@@ -31,6 +31,8 @@ It is currently used in production in several projects (mainly as request parame
31
31
  - [`hash_with_symbolized_keys(error_key = nil)`](#hash_with_symbolized_keyserror_key--nil)
32
32
  - [`integer32(error_key = nil)`](#integer32error_key--nil)
33
33
  - [`non_empty_string(error_key = nil)`](#non_empty_stringerror_key--nil)
34
+ - [`pattern(regexp, error_key = nil)`](#patternregexp-error_key--nil)
35
+ - [`uuid(error_key = nil)`](#uuiderror_key--nil)
34
36
  - [Special types](#special-types)
35
37
  - [`absent(error_key = nil, on: nil)`](#absenterror_key--nil-on-nil)
36
38
  - [`any(error_key = nil)`](#anyerror_key--nil)
@@ -525,9 +527,29 @@ I18n keys:
525
527
 
526
528
  Returns ValidResult if and only if provided value is a string and is not empty. Doesn't transform the value.
527
529
 
530
+ I18n keys:
531
+
528
532
  * not a string – `error_key`, `'.string'`, `'datacaster.errors.string'`
529
533
  * is empty – `error_key`, `'.non_empty_string'`, `'datacaster.errors.non_empty_string'`
530
534
 
535
+ #### `pattern(regexp, error_key = nil)`
536
+
537
+ Returns ValidResult if and only if provided value is a string and satisfies regexp. Doesn't transform the value. Don't forget to provide start/end markers in the regexp if needed, e.g. `/\A\d+\z/` for digits-only string.
538
+
539
+ I18n keys:
540
+
541
+ * not a string – `error_key`, `'.string'`, `'datacaster.errors.string'`
542
+ * doesn't satisfy the regexp – `error_key`, `'.pattern'`, `'datacaster.errors.pattern'`
543
+
544
+ #### `uuid(error_key = nil)`
545
+
546
+ Returns ValidResult if and only if provided value is a string and UUID. Doesn't transform the value.
547
+
548
+ I18n keys:
549
+
550
+ * not a string – `error_key`, `'.string'`, `'datacaster.errors.string'`
551
+ * not UUID – `error_key`, `'.uuid'`, `'datacaster.errors.uuid'`
552
+
531
553
  ### Special types
532
554
 
533
555
  #### `absent(error_key = nil, on: nil)`
@@ -825,7 +847,11 @@ I18n keys:
825
847
 
826
848
  #### `transform_to_value(value)`
827
849
 
828
- Always returns ValidResult. The value is transformed to provided argument (disregarding the original value). See also [`default`](#defaultdefault_value-on-nil).
850
+ Always returns ValidResult. The value is transformed to provided argument (disregarding the original value).
851
+
852
+ Returned value is deeply freezed with [`Ractor::make_shareable`](https://docs.ruby-lang.org/en/master/Ractor.html#method-c-make_shareable) to prevent application bugs due to modification of unintentionally shared value. If that effect is undesired, use [`transform { value }`](#transform--value--) instead.
853
+
854
+ See also [`default`](#defaultdefault_value-on-nil).
829
855
 
830
856
  ### "Web-form" types
831
857
 
@@ -16,6 +16,7 @@ en:
16
16
  integer32: is not a 32-bit integer
17
17
  iso8601: is not a string with ISO-8601 date and time
18
18
  must_be: "is not %{reference}"
19
+ pattern: has invalid format
19
20
  relate: "%{left} should be %{op} %{right}"
20
21
  responds_to: "does not respond to %{reference}"
21
22
  string: is not a string
@@ -25,3 +26,4 @@ en:
25
26
  non_empty_string: should be non-empty string
26
27
  switch: is invalid
27
28
  try: raised an error
29
+ uuid: is not UUID
data/datacaster.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
 
9
9
  spec.summary = %q{Run-time type checker and transformer for Ruby}
10
10
  spec.license = 'MIT'
11
- spec.required_ruby_version = Gem::Requirement.new('>= 2.7.0')
11
+ spec.required_ruby_version = Gem::Requirement.new('>= 3.1')
12
12
 
13
13
  spec.metadata['source_code_uri'] = 'https://github.com/EugZol/datacaster'
14
14
  spec.homepage = 'https://github.com/EugZol/datacaster'
@@ -19,5 +19,9 @@ module Datacaster
19
19
  def present?
20
20
  false
21
21
  end
22
+
23
+ def ==(other)
24
+ other.is_a?(self.class)
25
+ end
22
26
  end
23
27
  end
@@ -276,7 +276,7 @@ module Datacaster
276
276
  end
277
277
 
278
278
  def transform_to_value(value)
279
- transform { value }
279
+ transform { Datacaster::Utils.deep_freeze(value) }
280
280
  end
281
281
 
282
282
  def with(keys, caster)
@@ -319,6 +319,12 @@ module Datacaster
319
319
  check { |x| x.is_a?(Float) }.i18n_key(*error_keys)
320
320
  end
321
321
 
322
+ def pattern(regexp, error_key = nil)
323
+ error_keys = ['.pattern', 'datacaster.errors.pattern']
324
+ error_keys.unshift(error_key) if error_key
325
+ string(error_key) & check { |x| x.match?(regexp) }.i18n_key(*error_keys, reference: regexp.inspect)
326
+ end
327
+
322
328
  # 'hash' would be a bad method name, because it would override built in Object#hash
323
329
  def hash_value(error_key = nil)
324
330
  error_keys = ['.hash_value', 'datacaster.errors.hash_value']
@@ -360,6 +366,12 @@ module Datacaster
360
366
  string(error_key) & check { |x| !x.empty? }.i18n_key(*error_keys)
361
367
  end
362
368
 
369
+ def uuid(error_key = nil)
370
+ error_keys = ['.uuid', 'datacaster.errors.uuid']
371
+ error_keys.unshift(error_key) if error_key
372
+ string(error_key) & pattern(/\A\h{8}-\h{4}-\h{4}-\h{4}-\h{12}\z/).i18n_key(*error_keys)
373
+ end
374
+
363
375
  # Form request types
364
376
 
365
377
  def iso8601(error_key = nil)
@@ -2,6 +2,10 @@ module Datacaster
2
2
  module Utils
3
3
  extend self
4
4
 
5
+ def deep_freeze(value, copy: true)
6
+ Ractor.make_shareable(value, copy:)
7
+ end
8
+
5
9
  def merge_errors(left, right)
6
10
  add_error_to_base = ->(hash, error) {
7
11
  hash[:base] ||= []
@@ -1,3 +1,3 @@
1
1
  module Datacaster
2
- VERSION = "3.2.7"
2
+ VERSION = "3.3.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: 3.2.7
4
+ version: 3.3.0
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-04-16 00:00:00.000000000 Z
11
+ date: 2024-07-05 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
@@ -186,15 +186,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
186
186
  requirements:
187
187
  - - ">="
188
188
  - !ruby/object:Gem::Version
189
- version: 2.7.0
189
+ version: '3.1'
190
190
  required_rubygems_version: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - ">="
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.5.14
197
+ signing_key:
198
198
  specification_version: 4
199
199
  summary: Run-time type checker and transformer for Ruby
200
200
  test_files: []