validator_fn 0.3.8 → 0.4.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: 6ea7512cdc3b010b687c5cf9d2fec7d79f6724c56547e31ced2903762e81e9b3
4
- data.tar.gz: 5e45c2d9df2ff27104da89d0a97f19788a3de304b4575a3a317fa567620a6692
3
+ metadata.gz: 1ae4f194cce16e854dccde3dc29e7d382084289945402ded960414d94dc7630f
4
+ data.tar.gz: 7a19354da9723c01d81d79540a358dad546a2611b7893399ea38b09025d83f0e
5
5
  SHA512:
6
- metadata.gz: e683c7186d468ac169210bab0a8033601b7873051381ee14f24dc1760d30f9dd8731723b303b8090464081afea842f8db309c8f5fc2d0666a54500efb31fd22d
7
- data.tar.gz: f172ff2aa6e4b1f243ae50000da20f8a6cd86c385f872cbe0c2cea6f222e2c1b025ead98c1af6191637467646e1c11c42628bb9205546dc5a5ac8042b3f3b6ee
6
+ metadata.gz: 452a5fa550d3c5c9948099e1c9e2e840dd800bed22a0b8b777a81c824cdc04d0ea11f496d601fb61b750542585e96741f55292c5bbdf078e499f73b15a961c5b
7
+ data.tar.gz: c2d9d6f854407f958024efe80095490ff7d1c890ee4421f02fc5e26ee44a766c26c3e496bc996fecbe1ec4140f97e3e9a9465df6ef14faf69035ba3a1ab569dd
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- validator_fn (0.2.8)
4
+ validator_fn (0.4.0)
5
5
  fn_reader
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -62,7 +62,7 @@ user = hash_of.({name: is_a.(String), age: to_int})
62
62
  user.({name: "", age: "234"})
63
63
  ```
64
64
 
65
- Since we are using curried lambdas, you can compose validators as you which.
65
+ Since we are using curried lambdas, you can compose validators as you wish.
66
66
 
67
67
  ```ruby
68
68
  postal_code = -> a {
@@ -109,6 +109,9 @@ code = ValidatorFn.generate_validator.(struct)
109
109
  # You can reformat it using a code formatter
110
110
  require "rufo"
111
111
  puts Rufo.format(code)
112
+ ```
113
+ The output
114
+ ```
112
115
  hash_of.({ "login" => is_a.(String),
113
116
  "id" => is_a.(Integer),
114
117
  "node_id" => is_a.(String),
@@ -23,7 +23,7 @@ module ValidatorFn
23
23
 
24
24
  class MissingKey < Error
25
25
  def initialize(key)
26
- super("Missing field #{key}")
26
+ super("Missing field #{key.inspect}")
27
27
  end
28
28
  end
29
29
  end
@@ -1,3 +1,3 @@
1
1
  module ValidatorFn
2
- VERSION = "0.3.8"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/validator_fn.rb CHANGED
@@ -37,13 +37,18 @@ module ValidatorFn
37
37
  @@maybe = either.(is_nil)
38
38
  @@is_a = ->klass, a { invalid.("Expected type #{klass}, got #{a.inspect}") unless a.is_a?(klass); a }.curry
39
39
  @@is_a_bool = ->a { invalid.("Expected bool, got #{a.inspect}") unless a == true || a == false; a }.curry
40
+ # it validates each fields according with a specific algorithm, note that it
41
+ # will filter out fields that are not defined
40
42
  @@hash_of = ->fields, hash {
41
43
  hash ||= {}
42
44
  fields.reduce({}) do |memo, (key, fn)|
43
- memo[key] = fn.(hash[key])
45
+ value = hash.fetch(key) { raise MissingKey.new(key) }
46
+ memo[key] = fn.(value)
44
47
  memo
45
48
  rescue Error => e
46
49
  invalid.("Invalid value for #{key.inspect} key:")
50
+ rescue MissingKey => e
51
+ invalid.(e.message)
47
52
  end
48
53
  }.curry
49
54
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validator_fn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Chabot
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-30 00:00:00.000000000 Z
11
+ date: 2023-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fn_reader
@@ -67,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  requirements: []
70
- rubygems_version: 3.1.2
70
+ rubygems_version: 3.4.12
71
71
  signing_key:
72
72
  specification_version: 4
73
73
  summary: Series of lambdas for validating Ruby structures