hash_validator 0.2.4 → 0.2.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
  SHA1:
3
- metadata.gz: 14c3d859ad35ec3b2ac6b4750bd10a5f6d0d1784
4
- data.tar.gz: 024a49a7d98e43fe7476fd4f7e87b4dbef88393f
3
+ metadata.gz: b0b6578e955c0313a9b21da8f3283ca64c5a292d
4
+ data.tar.gz: f359b808a6471c3699b5bd7cf73e46ed120f81d5
5
5
  SHA512:
6
- metadata.gz: 5bf1fe8300640b5d0f5e3a0a01429526d25f012a031add4594702439ee5e89c7c01f942f7f55b5a6cf86ddd57a61b9d0f84280c7106a2c4336b2b0826f17a318
7
- data.tar.gz: 28d376b771b6e4e38f0c69b1bfb3430053aa7b0f01fe37c2fb7f104d8797c9b7a4b76de98f9f8ee41d1b6a1eba4d43558c4958aab06bb4f1c3c044e921137364
6
+ metadata.gz: 634064627003e36fd25b50b8a6235a5d37dc635465c0427a4427743580b87b26e29f1df8b52ebe938d8565eaf83582aa696d151716a298db161c3edb86926097
7
+ data.tar.gz: 190e54cedb8e9745bc4fe7dc0f01875f39f875bfe7f36d275ef76c5d9aa2d0115c5081918a6d86612da3bdb2a519b0880546d0d8ab50c7c00fd453a004e6334a
data/README.md CHANGED
@@ -83,6 +83,7 @@ Define a validation hash which will be used to validate. This has can be nested
83
83
  Additional validations exist to validate beyond simple typing, such as:
84
84
 
85
85
  * An Enumerable instance: validates that the value is contained within the supplied enumerable.
86
+ * A lambda/Proc instance: validates that the lambda/proc returns true when the value is supplied (lambdas must accept only one argument).
86
87
  * `email`: email address validation (string + email address).
87
88
 
88
89
  Example use-cases include Ruby APIs (I'm currently using it in a Rails API that I'm building for better error responses to developers).
@@ -31,3 +31,4 @@ require 'hash_validator/validators/simple_type_validators'
31
31
  require 'hash_validator/validators/boolean_validator'
32
32
  require 'hash_validator/validators/email_validator'
33
33
  require 'hash_validator/validators/enumerable_validator'
34
+ require 'hash_validator/validators/lambda_validator'
@@ -0,0 +1,35 @@
1
+ class HashValidator::Validator::LambdaValidator < HashValidator::Validator::Base
2
+ def initialize
3
+ super('_lambda') # The name of the validator, underscored as it won't usually be directly invoked (invoked through use of validator)
4
+ end
5
+
6
+ def should_validate?(rhs)
7
+ if rhs.is_a?(Proc)
8
+ if rhs.arity == 1
9
+ true
10
+ else
11
+ raise HashValidator::Validator::LambdaValidator::InvalidArgumentCount.new("Lambda validator should only accept one argument, supplied lambda accepts #{rhs.arity}.")
12
+ end
13
+ else
14
+ false
15
+ end
16
+ end
17
+
18
+ def presence_error_message
19
+ 'is not valid'
20
+ end
21
+
22
+ def validate(key, value, lambda, errors)
23
+ unless lambda.call(value)
24
+ errors[key] = presence_error_message
25
+ end
26
+
27
+ rescue
28
+ errors[key] = presence_error_message
29
+ end
30
+ end
31
+
32
+ class HashValidator::Validator::LambdaValidator::InvalidArgumentCount < StandardError
33
+ end
34
+
35
+ HashValidator.append_validator(HashValidator::Validator::LambdaValidator.new)
@@ -1,3 +1,3 @@
1
1
  module HashValidator
2
- VERSION = '0.2.4'
2
+ VERSION = '0.2.5'
3
3
  end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Functional validator' do
4
+ describe 'Accepting Lambdas in validations' do
5
+ it 'should accept a lambda' do
6
+ validate({}, { foo: lambda { |arg| } })
7
+ end
8
+
9
+ it 'should accept a lambda (new syntax)' do
10
+ validate({}, { foo: -> (arg) {} })
11
+ end
12
+
13
+ it 'should accept a proc' do
14
+ validate({}, { foo: Proc.new { |arg| } })
15
+ end
16
+ end
17
+
18
+ describe 'Correct number of arguments for lambads in validations' do
19
+ it 'should accept a lambda with one argument' do
20
+ expect { validate({}, { foo: -> (arg) {} }) }.to_not raise_error
21
+ end
22
+
23
+ it 'should not accept a lambda with no arguments' do
24
+ expect { validate({}, { foo: -> {} }) }.to raise_error(HashValidator::Validator::LambdaValidator::InvalidArgumentCount)
25
+ end
26
+
27
+ it 'should not accept a lambda with two arguments' do
28
+ expect { validate({}, { foo: -> (a,b) {} }) }.to raise_error(HashValidator::Validator::LambdaValidator::InvalidArgumentCount)
29
+ end
30
+ end
31
+
32
+ describe '#validate' do
33
+ let(:validations) {{ number: -> (n) { n.odd? } }}
34
+
35
+ it 'should validate true when the number is odd' do
36
+ validate({ number: 1 }, validations).valid?.should be_true
37
+ end
38
+
39
+ it 'should validate false when the number is even' do
40
+ validate({ number: 2 }, validations).valid?.should be_false
41
+ end
42
+ end
43
+
44
+ describe 'Thrown exceptions from within the lambda' do
45
+ let(:validations) {{ number: -> (n) { n.odd? } }}
46
+
47
+ it 'should validate false when an exception occurs within the lambda' do
48
+ validate({ number: '2' }, validations).valid?.should be_false
49
+ end
50
+ end
51
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Brooks
@@ -89,6 +89,7 @@ files:
89
89
  - lib/hash_validator/validators/email_validator.rb
90
90
  - lib/hash_validator/validators/enumerable_validator.rb
91
91
  - lib/hash_validator/validators/hash_validator.rb
92
+ - lib/hash_validator/validators/lambda_validator.rb
92
93
  - lib/hash_validator/validators/presence_validator.rb
93
94
  - lib/hash_validator/validators/simple_type_validators.rb
94
95
  - lib/hash_validator/validators/simple_validator.rb
@@ -100,6 +101,7 @@ files:
100
101
  - spec/validators/boolean_spec.rb
101
102
  - spec/validators/email_spec.rb
102
103
  - spec/validators/in_enumerable_spec.rb
104
+ - spec/validators/lambda_spec.rb
103
105
  - spec/validators/presence_spec.rb
104
106
  - spec/validators/simple_spec.rb
105
107
  - spec/validators/simple_types_spec.rb
@@ -136,6 +138,7 @@ test_files:
136
138
  - spec/validators/boolean_spec.rb
137
139
  - spec/validators/email_spec.rb
138
140
  - spec/validators/in_enumerable_spec.rb
141
+ - spec/validators/lambda_spec.rb
139
142
  - spec/validators/presence_spec.rb
140
143
  - spec/validators/simple_spec.rb
141
144
  - spec/validators/simple_types_spec.rb