datacaster 4.1.0 → 4.2.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: 1cbcb054db89c228c0c38e19a2af1a3863a1835708dd9717a9f3d5c0b3f27286
4
- data.tar.gz: 79aa8db52e0cb760b1fd6e8b49bf77b7853b7fae192f2a746d4a9205bc3c1b14
3
+ metadata.gz: 313d4857ebb527af62b00822c82ae25ca81d143fac6d46586704efda3337907d
4
+ data.tar.gz: cafec5e89d47418b72a3b9a9123699d2c4d8c479f8d7720739f4dd59b47e4d72
5
5
  SHA512:
6
- metadata.gz: f5a325a3bd5534b69024488ea015d05e5c1e12970df5c07a2eeb26c34a0c8be48bbc2f2c98971f1ba4653231c7740d06cf38359c628ee030e4d8423cafebb278
7
- data.tar.gz: aa0b7b42f0ecd22f9d4d9865e0c2c95602a990585550f5579c2b466f2a9bde4d6814adf0faeffe08d0e9e391d79c27519a1e5647a9fb0f9370276f72c8e461d2
6
+ metadata.gz: 7929550a2f1ca7c0b3002ccb32b27336a094737647d0aaaffcdc54001d1084ebfebc8c168b98096e59b7d990cccb1dc8e495cf4a4dcd9fbf0cb1168117f43ba1
7
+ data.tar.gz: 2a7fa2d4528c014fefd3c701c797566ea6eb9bcee08442bbe79f3fa881f9adb473e8424d909b05f0e0a2109ce79265bafb6b700b4873cb89778ab2ff601698c2
data/README.md CHANGED
@@ -26,10 +26,13 @@ It is currently used in production in several projects (mainly as request parame
26
26
  - [`float(error_key = nil)`](#floaterror_key--nil)
27
27
  - [`hash_value(error_key = nil)`](#hash_valueerror_key--nil)
28
28
  - [`integer(error_key = nil)`](#integererror_key--nil)
29
+ - [`numeric(error_key = nil)`](#numericerror_key--nil)
29
30
  - [`string(error_key = nil)`](#stringerror_key--nil)
30
31
  - [Convenience types](#convenience-types)
31
32
  - [`hash_with_symbolized_keys(error_key = nil)`](#hash_with_symbolized_keyserror_key--nil)
32
33
  - [`integer32(error_key = nil)`](#integer32error_key--nil)
34
+ - [`maximum(max, error_key = nil, inclusive: true)`](#maximummax-error_key--nil-inclusive-true)
35
+ - [`minimum(min, error_key = nil, inclusive: true)`](#minimummin-error_key--nil-inclusive-true)
33
36
  - [`non_empty_string(error_key = nil)`](#non_empty_stringerror_key--nil)
34
37
  - [`pattern(regexp, error_key = nil)`](#patternregexp-error_key--nil)
35
38
  - [`uuid(error_key = nil)`](#uuiderror_key--nil)
@@ -500,6 +503,12 @@ Returns ValidResult if and only if provided value is an integer. Doesn't transfo
500
503
 
501
504
  I18n keys: `error_key`, `'.integer'`, `'datacaster.errors.integer'`.
502
505
 
506
+ #### `numeric(error_key = nil)`
507
+
508
+ Returns ValidResult if and only if provided value is a number (Ruby's `Numeric`). Doesn't transform the value.
509
+
510
+ I18n keys: `error_key`, `'.numeric'`, `'datacaster.errors.numeric'`.
511
+
503
512
  #### `string(error_key = nil)`
504
513
 
505
514
  Returns ValidResult if and only if provided value is a string. Doesn't transform the value.
@@ -523,6 +532,26 @@ I18n keys:
523
532
  * not an integer – `error_key`, `'.integer'`, `'datacaster.errors.integer'`
524
533
  * too big – `error_key`, `'.integer32'`, `'datacaster.errors.integer32'`
525
534
 
535
+ #### `maximum(max, error_key = nil, inclusive: true)`
536
+
537
+ Returns ValidResult if and only if provided value is a number and is less than `max`. If `inclusive` set to true, provided value should be less than or equal to `max`. Doesn't transform the value.
538
+
539
+ I18n keys:
540
+
541
+ * not a number – `error_key`, `'.numeric'`, `'datacaster.errors.numeric'`
542
+ * is less (when `inclusive` is `true`) – `error_key`, `'.maximum.lteq'`, `'datacaster.errors.maximum.lteq'`
543
+ * is less (when `inclusive` is `false`) – `error_key`, `'.maximum.lt'`, `'datacaster.errors.maximum.lt'`
544
+
545
+ #### `minimum(min, error_key = nil, inclusive: true)`
546
+
547
+ Returns ValidResult if and only if provided value is a number and is greater than `min`. If `inclusive` set to true, provided value should be greater than or equal to `min`. Doesn't transform the value.
548
+
549
+ I18n keys:
550
+
551
+ * not a number – `error_key`, `'.numeric'`, `'datacaster.errors.numeric'`
552
+ * is greater (when `inclusive` is `true`) – `error_key`, `'.minimum.gteq'`, `'datacaster.errors.minimum.gteq'`
553
+ * is greater (when `inclusive` is `false`) – `error_key`, `'.minimum.gt'`, `'datacaster.errors.minimum.gt'`
554
+
526
555
  #### `non_empty_string(error_key = nil)`
527
556
 
528
557
  Returns ValidResult if and only if provided value is a string and is not empty. Doesn't transform the value.
@@ -15,7 +15,14 @@ en:
15
15
  integer: is not an integer
16
16
  integer32: is not a 32-bit integer
17
17
  iso8601: is not a string with ISO-8601 date and time
18
+ maximum:
19
+ lt: '%{value} should be less than %{max}'
20
+ lteq: '%{value} should be less than or equal to %{max}'
21
+ minimum:
22
+ gt: '%{value} should be greater than %{min}'
23
+ gteq: '%{value} should be greater than or equal to %{min}'
18
24
  must_be: "is not %{reference}"
25
+ numeric: is not a number
19
26
  pattern: has invalid format
20
27
  relate: "%{left} should be %{op} %{right}"
21
28
  responds_to: "does not respond to %{reference}"
@@ -296,6 +296,12 @@ module Datacaster
296
296
 
297
297
  # Strict types
298
298
 
299
+ def numeric(error_key = nil)
300
+ error_keys = ['.numeric', 'datacaster.errors.numeric']
301
+ error_keys.unshift(error_key) if error_key
302
+ check { |x| x.is_a?(Numeric) }.i18n_key(*error_keys)
303
+ end
304
+
299
305
  def decimal(digits = 8, error_key = nil)
300
306
  error_keys = ['.decimal', 'datacaster.errors.decimal']
301
307
  error_keys.unshift(error_key) if error_key
@@ -355,6 +361,42 @@ module Datacaster
355
361
  integer(error_key) & check { |x| x.abs <= 2_147_483_647 }.i18n_key(*error_keys)
356
362
  end
357
363
 
364
+ def maximum(max, error_key = nil, inclusive: true)
365
+ subkey = 'lt'
366
+ subkey += 'eq' if inclusive
367
+
368
+ error_keys = [".maximum.#{subkey}", "datacaster.errors.maximum.#{subkey}"]
369
+
370
+ error_keys.unshift(error_key) if error_key
371
+
372
+ caster =
373
+ if inclusive
374
+ check { |x| x <= max }
375
+ else
376
+ check { |x| x < max }
377
+ end
378
+
379
+ numeric(error_key) & caster.i18n_key(*error_keys, max:)
380
+ end
381
+
382
+ def minimum(min, error_key = nil, inclusive: true)
383
+ subkey = 'gt'
384
+ subkey += 'eq' if inclusive
385
+
386
+ error_keys = [".minimum.#{subkey}", "datacaster.errors.minimum.#{subkey}"]
387
+
388
+ error_keys.unshift(error_key) if error_key
389
+
390
+ caster =
391
+ if inclusive
392
+ check { |x| x >= min }
393
+ else
394
+ check { |x| x > min }
395
+ end
396
+
397
+ numeric(error_key) & caster.i18n_key(*error_keys, min:)
398
+ end
399
+
358
400
  def string(error_key = nil)
359
401
  error_keys = ['.string', 'datacaster.errors.string']
360
402
  error_keys.unshift(error_key) if error_key
@@ -1,3 +1,3 @@
1
1
  module Datacaster
2
- VERSION = "4.1.0"
2
+ VERSION = "4.2.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.1.0
4
+ version: 4.2.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-10-17 00:00:00.000000000 Z
11
+ date: 2025-02-03 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.1.6
197
- signing_key:
196
+ rubygems_version: 3.5.20
197
+ signing_key:
198
198
  specification_version: 4
199
199
  summary: Run-time type checker and transformer for Ruby
200
200
  test_files: []