hash_validator 0.0.2 → 0.1.0

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: 1a1492f217366ea561ca20646b123578e23a3d08
4
- data.tar.gz: 9bfa7a9b44345a7bcca3837ee439b38db1f76bd7
3
+ metadata.gz: 1db341e997808db63ae406e44a49d51b1ca45287
4
+ data.tar.gz: b1d8af971d7c0fcdcdfb839bab7aec52092a4fc2
5
5
  SHA512:
6
- metadata.gz: 5d4026acaac90a08173375923d6932b68d7151c2c1a6d3b7f5df82f2373111909d08b70f052a8bb4dd9010019480985ce90497296ef9630ada45b387f130bfe1
7
- data.tar.gz: 3384677eaef109084a8d8089f21cb82c7a25d78ec5c4eb25554bcd26d8c451156328d64abcdfb5b330fad9849f4468632558fab69a2ab67b1a00a416d4d640cd
6
+ metadata.gz: 949b8a43860f1ec57f5fd3c23d0f18bb41dabf4615a215f636d6af7cbeb22cf69c78e20646bf6d4836ab38da28aaefe0e1fcd690e0df8867a3215a0b65b6e5a7
7
+ data.tar.gz: 61e7ca533f2b11c352218104382a8d2b04a1db4ac62f11cd4eefe8daab9c95b4bcf2b8eca5f559a54d7d8d7445ca40b8f632fd6625e4938beb0e8d29360c4fea
data/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  [![Build Status](https://travis-ci.org/JamesBrooks/hash_validator.png)](https://travis-ci.org/JamesBrooks/hash_validator)
4
4
  [![Code Climate](https://codeclimate.com/github/JamesBrooks/hash_validator.png)](https://codeclimate.com/github/JamesBrooks/hash_validator)
5
5
  [![Gem Version](https://badge.fury.io/rb/hash_validator.png)](http://badge.fury.io/rb/hash_validator)
6
+ [![Coverage Status](https://coveralls.io/repos/JamesBrooks/hash_validator/badge.png?branch=master)](https://coveralls.io/r/JamesBrooks/hash_validator)
6
7
  [![Dependency Status](https://gemnasium.com/JamesBrooks/hash_validator.png)](https://gemnasium.com/JamesBrooks/hash_validator)
7
8
 
8
9
  Ruby library to validate hashes (Hash) against user-defined requirements
@@ -67,6 +68,7 @@ Define a validation hash which will be used to validate. This has can be nested
67
68
  * `numeric`
68
69
  * `array`
69
70
  * `time`
71
+ * `required`: just requires any value to be present for the designated key.
70
72
  * hashes are validates by nesting validations, or if just the presence of a hash is required `{}` can be used.
71
73
 
72
74
  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).
@@ -21,4 +21,5 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency 'bundler', '~> 1.3'
22
22
  spec.add_development_dependency 'rake'
23
23
  spec.add_development_dependency 'rspec', '~> 2.13.0'
24
+ spec.add_development_dependency 'coveralls'
24
25
  end
@@ -17,4 +17,5 @@ end
17
17
  # Load validators
18
18
  require 'hash_validator/validators/base'
19
19
  require 'hash_validator/validators/hash_validator'
20
+ require 'hash_validator/validators/presence_validator'
20
21
  require 'hash_validator/validators/simple_type_validator'
@@ -3,6 +3,10 @@ class HashValidator::Validator::HashValidator < HashValidator::Validator::Base
3
3
  'hash'
4
4
  end
5
5
 
6
+ def presence_error_message
7
+ "#{name} required"
8
+ end
9
+
6
10
  def should_validate?(rhs)
7
11
  rhs.is_a?(Hash)
8
12
  end
@@ -10,7 +14,7 @@ class HashValidator::Validator::HashValidator < HashValidator::Validator::Base
10
14
  def validate(key, value, validations, errors)
11
15
  # Validate hash
12
16
  unless value.is_a?(Hash)
13
- errors[name] = 'should be hash'
17
+ errors[key] = presence_error_message
14
18
  return
15
19
  end
16
20
 
@@ -22,7 +26,7 @@ class HashValidator::Validator::HashValidator < HashValidator::Validator::Base
22
26
 
23
27
  # Key presence
24
28
  unless value[v_key]
25
- errors[v_key] = "#{validator.name} required"
29
+ errors[v_key] = validator.presence_error_message
26
30
  next
27
31
  end
28
32
 
@@ -0,0 +1,22 @@
1
+ class HashValidator::Validator::PresenceValidator < HashValidator::Validator::Base
2
+ def name
3
+ 'required'
4
+ end
5
+
6
+ def presence_error_message
7
+ 'is required'
8
+ end
9
+
10
+ def should_validate?(rhs)
11
+ rhs == name
12
+ end
13
+
14
+ def validate(key, value, validations, errors)
15
+ unless value
16
+ errors[key] = presence_error_message
17
+ end
18
+ end
19
+ end
20
+
21
+
22
+ HashValidator.append_validator(HashValidator::Validator::PresenceValidator.new)
@@ -7,13 +7,17 @@ class HashValidator::Validator::SimpleTypeValidator < HashValidator::Validator::
7
7
  self.klass = klass
8
8
  end
9
9
 
10
+ def presence_error_message
11
+ "#{name} required"
12
+ end
13
+
10
14
  def should_validate?(rhs)
11
15
  rhs == self.name
12
16
  end
13
17
 
14
18
  def validate(key, value, validations, errors)
15
19
  unless value.is_a?(klass)
16
- errors[key] = "should be #{name}"
20
+ errors[key] = presence_error_message
17
21
  end
18
22
  end
19
23
  end
@@ -1,3 +1,3 @@
1
1
  module HashValidator
2
- VERSION = '0.0.2'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -4,12 +4,30 @@ describe HashValidator do
4
4
  describe 'individual type validations' do
5
5
  it 'should validate hash' do
6
6
  validate({ v: {} }, { v: {} }).valid?.should be_true
7
+
7
8
  validate({ v: '' }, { v: {} }).valid?.should be_false
9
+ validate({ v: '' }, { v: {} }).errors.should eq({ v: 'hash required' })
10
+ end
11
+
12
+ it 'should validate presence' do
13
+ validate({ v: 'test' }, { v: 'required' }).valid?.should be_true
14
+ validate({ v: 1234 }, { v: 'required' }).valid?.should be_true
15
+
16
+ validate({ v: nil }, { v: 'required' }).valid?.should be_false
17
+ validate({ v: nil }, { v: 'required' }).errors.should eq({ v: 'is required' })
18
+
19
+ validate({ x: 'test' }, { v: 'required' }).valid?.should be_false
20
+ validate({ x: 'test' }, { v: 'required' }).errors.should eq({ v: 'is required' })
21
+
22
+ validate({ x: 1234 }, { v: 'required' }).valid?.should be_false
23
+ validate({ x: 1234 }, { v: 'required' }).errors.should eq({ v: 'is required' })
8
24
  end
9
25
 
10
26
  it 'should validate string' do
11
27
  validate({ v: 'test' }, { v: 'string' }).valid?.should be_true
28
+
12
29
  validate({ v: 123456 }, { v: 'string' }).valid?.should be_false
30
+ validate({ v: 123456 }, { v: 'string' }).errors.should eq({ v: 'string required' })
13
31
  end
14
32
 
15
33
  it 'should validate numeric' do
@@ -114,7 +132,7 @@ describe HashValidator do
114
132
  it 'should not validate a simple hash 2' do
115
133
  v = validate(invalid_simple_hash, validations)
116
134
  v.valid?.should be_false
117
- v.errors.should eq({ bar: 'should be string' })
135
+ v.errors.should eq({ bar: 'string required' })
118
136
  end
119
137
 
120
138
  it 'should validate a complex hash' do
@@ -126,12 +144,12 @@ describe HashValidator do
126
144
  it 'should not validate a complex hash 2' do
127
145
  v = validate(invalid_complex_hash, validations)
128
146
  v.valid?.should be_false
129
- v.errors.should eq({ bar: 'should be string' })
147
+ v.errors.should eq({ bar: 'string required' })
130
148
  end
131
149
  end
132
150
 
133
151
  describe 'nested validations' do
134
- let(:validations) {{ foo: 'numeric', bar: 'string', user: { first_name: 'string', age: 'numeric', likes: 'array' } }}
152
+ let(:validations) {{ foo: 'numeric', bar: 'string', user: { first_name: 'string', age: 'required', likes: 'array' } }}
135
153
 
136
154
  it 'should validate a complex hash' do
137
155
  v = validate(complex_hash, validations)
@@ -142,7 +160,7 @@ describe HashValidator do
142
160
  it 'should not validate a complex hash 2' do
143
161
  v = validate(invalid_complex_hash, validations)
144
162
  v.valid?.should be_false
145
- v.errors.should eq({ bar: 'should be string', user: { age: 'numeric required', likes: 'should be array' } })
163
+ v.errors.should eq({ bar: 'string required', user: { age: 'is required', likes: 'array required' } })
146
164
  end
147
165
  end
148
166
  end
@@ -1,3 +1,6 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
1
4
  require 'rubygems'
2
5
  require 'bundler/setup'
3
6
  require 'hash_validator'
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe HashValidator::Validator::Base do
4
+ let(:validator) { HashValidator::Validator::Base.new }
5
+
6
+ describe '#should_validate?' do
7
+ it 'throws an exception' do
8
+ expect { validator.should_validate?('name') }.to raise_error(StandardError, 'should_validate? should not be called directly on BaseValidator')
9
+ end
10
+ end
11
+
12
+ describe '#validate' do
13
+ it 'throws an exception' do
14
+ expect { validator.validate('key', 'value', {}, {}) }.to raise_error(StandardError, 'validate should not be called directly on BaseValidator')
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe HashValidator::Validator::Base do
4
+ let(:validator) { HashValidator::Validator::PresenceValidator.new }
5
+ let(:errors) { Hash.new }
6
+
7
+ describe '#should_validate?' do
8
+ it 'should validate the name "required"' do
9
+ validator.should_validate?('required').should be_true
10
+ end
11
+
12
+ it 'should not validate other names' do
13
+ validator.should_validate?('string').should be_false
14
+ validator.should_validate?('array').should be_false
15
+ validator.should_validate?(nil).should be_false
16
+ end
17
+ end
18
+
19
+ describe '#validate' do
20
+ it 'should validate a string with true' do
21
+ validator.validate(:key, 'test', {}, errors)
22
+
23
+ errors.should be_empty
24
+ end
25
+
26
+ it 'should validate a number with true' do
27
+ validator.validate(:key, 123, {}, errors)
28
+
29
+ errors.should be_empty
30
+ end
31
+
32
+ it 'should validate a time with true' do
33
+ validator.validate(:key, Time.now, {}, errors)
34
+
35
+ errors.should be_empty
36
+ end
37
+
38
+ it 'should validate nil with false' do
39
+ validator.validate(:key, nil, {}, errors)
40
+
41
+ errors.should_not be_empty
42
+ errors.should eq({ key: 'is required' })
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe HashValidator::Validator::Base do
4
+ let(:my_class) { Class.new }
5
+ let(:validator) { HashValidator::Validator::SimpleTypeValidator.new('my_class', my_class) }
6
+ let(:errors) { Hash.new }
7
+
8
+ describe '#should_validate?' do
9
+ it 'should validate the name "my_class"' do
10
+ validator.should_validate?('my_class').should be_true
11
+ end
12
+
13
+ it 'should not validate other names' do
14
+ validator.should_validate?('string').should be_false
15
+ validator.should_validate?('array').should be_false
16
+ validator.should_validate?(nil).should be_false
17
+ end
18
+ end
19
+
20
+ describe '#validate' do
21
+ it 'should validate the my_class class with true' do
22
+ validator.validate(:key, my_class.new, {}, errors)
23
+
24
+ errors.should be_empty
25
+ end
26
+
27
+ it 'should validate other classes with errrors' do
28
+ validator.validate(:key, "foo bar", {}, errors)
29
+
30
+ errors.should_not be_empty
31
+ errors.should eq({ key: 'my_class required' })
32
+ end
33
+ end
34
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Brooks
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-15 00:00:00.000000000 Z
11
+ date: 2013-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: 2.13.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: coveralls
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: Ruby library to validate hashes (Hash) against user-defined requirements
56
70
  email:
57
71
  - james@gooddogdesign.com
@@ -72,11 +86,15 @@ files:
72
86
  - lib/hash_validator/validators.rb
73
87
  - lib/hash_validator/validators/base.rb
74
88
  - lib/hash_validator/validators/hash_validator.rb
89
+ - lib/hash_validator/validators/presence_validator.rb
75
90
  - lib/hash_validator/validators/simple_type_validator.rb
76
91
  - lib/hash_validator/version.rb
77
92
  - spec/hash_validator_spec.rb
78
93
  - spec/hash_validator_spec_helper.rb
79
94
  - spec/spec_helper.rb
95
+ - spec/validators/base_spec.rb
96
+ - spec/validators/presence_spec.rb
97
+ - spec/validators/simple_type_spec.rb
80
98
  homepage: https://github.com/JamesBrooks/hash_validator
81
99
  licenses:
82
100
  - MIT
@@ -105,3 +123,6 @@ test_files:
105
123
  - spec/hash_validator_spec.rb
106
124
  - spec/hash_validator_spec_helper.rb
107
125
  - spec/spec_helper.rb
126
+ - spec/validators/base_spec.rb
127
+ - spec/validators/presence_spec.rb
128
+ - spec/validators/simple_type_spec.rb