poro_validator 0.2.0 → 0.2.1
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 +4 -4
- data/README.md +2 -0
- data/lib/poro_validator/utils/deep_symbolize_keys.rb +19 -0
- data/lib/poro_validator/validator.rb +4 -0
- data/lib/poro_validator/validators/with_validator.rb +20 -3
- data/lib/poro_validator/version.rb +1 -1
- data/lib/poro_validator.rb +4 -2
- data/poro_validator.gemspec +2 -0
- data/spec/lib/poro_validator/utils/deep_symbolize_keys_spec.rb +40 -0
- data/spec/lib/poro_validator/validators/with_validator_spec.rb +35 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ee244b3419abaf9da6d989f4f2ee3aa85438808
|
4
|
+
data.tar.gz: d8ab4bf0e662566812d6f587f91be927c2d5f2e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2badd5a79da6691e5e9c5a19cf879166690f01306630e90f424b6644a9a9c6e4818ac3d613a3b10e46dfee753ab302de912c918139d53f278edc6671ba9fbd5
|
7
|
+
data.tar.gz: be0f9fd1d0b8f56a6bc100e94883330a0456ce3962277603fcbbf67b5b6c7b29e0f518bd4f35f834fc61b74c1d0e2f7e9d5825890335beeb879a83070e10e2ee
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# PORO Validator #
|
2
2
|
|
3
|
+
[](https://gitter.im/magicalbanana/poro_validator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
|
+
|
3
5
|
[![Gem Version][GV img]][Gem Version]
|
4
6
|
[![Build Status][BS img]][Build Status]
|
5
7
|
[![Dependency Status][DS img]][Dependency Status]
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module PoroValidator
|
2
|
+
module Utils
|
3
|
+
module DeepSymbolizeKeys
|
4
|
+
class ::Hash
|
5
|
+
def deep_symbolize_keys
|
6
|
+
deep_transform_keys{ |key| key.to_sym rescue key }
|
7
|
+
end
|
8
|
+
|
9
|
+
def deep_transform_keys(&block)
|
10
|
+
result = {}
|
11
|
+
each do |key, value|
|
12
|
+
result[yield(key)] = value.is_a?(Hash) ? value.deep_transform_keys(&block) : value
|
13
|
+
end
|
14
|
+
result
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -6,13 +6,30 @@ module PoroValidator
|
|
6
6
|
case validator_class
|
7
7
|
when Class
|
8
8
|
klass = validator_class.new
|
9
|
+
|
9
10
|
if context.entity.is_a?(::Hash)
|
10
|
-
|
11
|
+
entity = context.entity[attribute]
|
12
|
+
|
13
|
+
if entity.nil? || entity.is_a?(::Symbol) || entity.is_a?(::String)
|
14
|
+
klass.valid?(attribute => entity)
|
15
|
+
else
|
16
|
+
klass.valid?(context.entity[attribute] || {})
|
17
|
+
end
|
11
18
|
else
|
12
|
-
|
19
|
+
entity = context.entity.public_send(attribute)
|
20
|
+
if entity.nil? || entity.is_a?(::Symbol) || entity.is_a?(::String)
|
21
|
+
klass.valid?(attribute => entity)
|
22
|
+
else
|
23
|
+
klass.valid?(entity)
|
24
|
+
end
|
13
25
|
end
|
26
|
+
|
14
27
|
klass.errors.public_send(:store).data.each do |k,v|
|
15
|
-
|
28
|
+
if k.to_s == attribute.to_s
|
29
|
+
errors.add(attribute, v.pop)
|
30
|
+
else
|
31
|
+
errors.add([attribute, k.to_sym], v.pop)
|
32
|
+
end
|
16
33
|
end
|
17
34
|
else
|
18
35
|
raise ::PoroValidator::InvalidValidator.new(
|
data/lib/poro_validator.rb
CHANGED
@@ -28,6 +28,10 @@ module PoroValidator
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
# Utils
|
32
|
+
require "poro_validator/utils/deep_fetch"
|
33
|
+
require "poro_validator/utils/deep_symbolize_keys"
|
34
|
+
|
31
35
|
# Base Classes
|
32
36
|
require "poro_validator/version"
|
33
37
|
require "poro_validator/error_store"
|
@@ -54,8 +58,6 @@ require "poro_validator/validators/float_validator"
|
|
54
58
|
require "poro_validator/validators/length_validator"
|
55
59
|
require "poro_validator/validators/numeric_validator"
|
56
60
|
|
57
|
-
# Utils
|
58
|
-
require "poro_validator/utils/deep_fetch"
|
59
61
|
|
60
62
|
# Modules
|
61
63
|
require "poro_validator/validator"
|
data/poro_validator.gemspec
CHANGED
@@ -47,6 +47,7 @@ Gem::Specification.new do |spec|
|
|
47
47
|
lib/poro_validator/errors.rb
|
48
48
|
lib/poro_validator/exceptions.rb
|
49
49
|
lib/poro_validator/utils/deep_fetch.rb
|
50
|
+
lib/poro_validator/utils/deep_symbolize_keys.rb
|
50
51
|
lib/poro_validator/validator.rb
|
51
52
|
lib/poro_validator/validator/base_class.rb
|
52
53
|
lib/poro_validator/validator/conditions.rb
|
@@ -76,6 +77,7 @@ Gem::Specification.new do |spec|
|
|
76
77
|
spec/lib/poro_validator/error_store_spec.rb
|
77
78
|
spec/lib/poro_validator/errors_spec.rb
|
78
79
|
spec/lib/poro_validator/utils/deep_fetch_spec.rb
|
80
|
+
spec/lib/poro_validator/utils/deep_symbolize_keys_spec.rb
|
79
81
|
spec/lib/poro_validator/validator/base_class_spec.rb
|
80
82
|
spec/lib/poro_validator/validator/conditions_spec.rb
|
81
83
|
spec/lib/poro_validator/validator/factory_spec.rb
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe PoroValidator::Utils::DeepSymbolizeKeys, type: :utils do
|
4
|
+
describe ::Hash do
|
5
|
+
describe "#deep_symbolize_keys" do
|
6
|
+
let(:unsymbolized_hash) do
|
7
|
+
{
|
8
|
+
"first_name" => "manbearpig",
|
9
|
+
"last_name" => "gore",
|
10
|
+
"dob" => "01/01/1977",
|
11
|
+
"phone_numbers" => ["33333", "44444"],
|
12
|
+
"address" => {
|
13
|
+
"line1" => "foo",
|
14
|
+
"line2" => "boo"
|
15
|
+
}
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
let(:symbolized_hash) do
|
20
|
+
{
|
21
|
+
first_name: "manbearpig",
|
22
|
+
last_name: "gore",
|
23
|
+
dob: "01/01/1977",
|
24
|
+
phone_numbers: ["33333", "44444"],
|
25
|
+
address: {
|
26
|
+
line1: "foo",
|
27
|
+
line2: "boo"
|
28
|
+
}
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
it "symbolizes all non symbol keys in a hash" do
|
33
|
+
unsymbolized_hash.extend(::PoroValidator::Utils::DeepSymbolizeKeys)
|
34
|
+
expect(unsymbolized_hash.deep_symbolize_keys).to eq(
|
35
|
+
symbolized_hash
|
36
|
+
)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -7,6 +7,12 @@ class AddressValidator
|
|
7
7
|
validates :line2, presence: true
|
8
8
|
end
|
9
9
|
|
10
|
+
class FirstNameValidator
|
11
|
+
include PoroValidator.validator
|
12
|
+
|
13
|
+
validates :first_name, presence: true
|
14
|
+
end
|
15
|
+
|
10
16
|
RSpec.describe PoroValidator::Validators::WithValidator do
|
11
17
|
include SpecHelpers::ValidatorTestMacros
|
12
18
|
|
@@ -15,7 +21,7 @@ RSpec.describe PoroValidator::Validators::WithValidator do
|
|
15
21
|
Class.new do
|
16
22
|
include PoroValidator.validator
|
17
23
|
|
18
|
-
validates :first_name,
|
24
|
+
validates :first_name, with: FirstNameValidator
|
19
25
|
validates :last_name, presence: true, if: proc { true }
|
20
26
|
validates :dob, presence: true, if: proc { false }
|
21
27
|
validates :address, with: AddressValidator
|
@@ -85,6 +91,34 @@ RSpec.describe PoroValidator::Validators::WithValidator do
|
|
85
91
|
end
|
86
92
|
end
|
87
93
|
|
94
|
+
expect_validator_to_be_valid do
|
95
|
+
let(:entity) do
|
96
|
+
{
|
97
|
+
first_name: "manbearpig",
|
98
|
+
last_name: "gore",
|
99
|
+
dob: "01/01/1977",
|
100
|
+
address: {
|
101
|
+
line1: "foo",
|
102
|
+
line2: "boo"
|
103
|
+
}
|
104
|
+
}
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
expect_validator_to_be_valid do
|
109
|
+
let(:entity) do
|
110
|
+
{
|
111
|
+
"first_name" => "manbearpig",
|
112
|
+
"last_name" => "gore",
|
113
|
+
"dob" => "01/01/1977",
|
114
|
+
"address" => {
|
115
|
+
"line1" => "foo",
|
116
|
+
"line2" => "boo"
|
117
|
+
}
|
118
|
+
}
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
88
122
|
context "non class is passed for with:" do
|
89
123
|
let(:entity) do
|
90
124
|
OpenStruct.new
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poro_validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kareem Gan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -126,6 +126,7 @@ files:
|
|
126
126
|
- lib/poro_validator/errors.rb
|
127
127
|
- lib/poro_validator/exceptions.rb
|
128
128
|
- lib/poro_validator/utils/deep_fetch.rb
|
129
|
+
- lib/poro_validator/utils/deep_symbolize_keys.rb
|
129
130
|
- lib/poro_validator/validator.rb
|
130
131
|
- lib/poro_validator/validator/base_class.rb
|
131
132
|
- lib/poro_validator/validator/conditions.rb
|
@@ -155,6 +156,7 @@ files:
|
|
155
156
|
- spec/lib/poro_validator/error_store_spec.rb
|
156
157
|
- spec/lib/poro_validator/errors_spec.rb
|
157
158
|
- spec/lib/poro_validator/utils/deep_fetch_spec.rb
|
159
|
+
- spec/lib/poro_validator/utils/deep_symbolize_keys_spec.rb
|
158
160
|
- spec/lib/poro_validator/validator/base_class_spec.rb
|
159
161
|
- spec/lib/poro_validator/validator/conditions_spec.rb
|
160
162
|
- spec/lib/poro_validator/validator/factory_spec.rb
|