poro_validator 0.2.0 → 0.2.1

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
  SHA1:
3
- metadata.gz: 7b4d11e09f822043d4a06bf638d63d1340203a0b
4
- data.tar.gz: a3190629a9fcd8f330cb3b9305b84f75a07a6c79
3
+ metadata.gz: 8ee244b3419abaf9da6d989f4f2ee3aa85438808
4
+ data.tar.gz: d8ab4bf0e662566812d6f587f91be927c2d5f2e5
5
5
  SHA512:
6
- metadata.gz: 131f42ab7e0cd7e2df6ab86e2d6227680107e2b0b62f08690e32b1b5204b296b7bcd0bd579821a7dce6d295b86ee5bdb9ed72e8710282bf3672de71ea85ebf47
7
- data.tar.gz: c9fc039ac60eb4cc055e95411627f60be31bac40f66ab59e45c997ba84e93429f1d6db2e387f6866050b7e4f0494e980c4587e5ae4b6d45044dbd0fb0fe5ebe2
6
+ metadata.gz: e2badd5a79da6691e5e9c5a19cf879166690f01306630e90f424b6644a9a9c6e4818ac3d613a3b10e46dfee753ab302de912c918139d53f278edc6671ba9fbd5
7
+ data.tar.gz: be0f9fd1d0b8f56a6bc100e94883330a0456ce3962277603fcbbf67b5b6c7b29e0f518bd4f35f834fc61b74c1d0e2f7e9d5825890335beeb879a83070e10e2ee
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # PORO Validator #
2
2
 
3
+ [![Join the chat at https://gitter.im/magicalbanana/poro_validator](https://badges.gitter.im/magicalbanana/poro_validator.svg)](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
@@ -67,6 +67,10 @@ module PoroValidator
67
67
  end
68
68
 
69
69
  def valid?(entity)
70
+ if entity.is_a?(::Hash)
71
+ entity.extend(::PoroValidator::Utils::DeepSymbolizeKeys)
72
+ entity = entity.deep_symbolize_keys
73
+ end
70
74
  validate_entity(entity)
71
75
  errors.empty?
72
76
  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
- klass.valid?(context.entity[attribute] || {})
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
- klass.valid?(context.entity.public_send(attribute))
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
- errors.add([attribute, k.to_sym], v.pop)
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(
@@ -1,3 +1,3 @@
1
1
  module PoroValidator
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -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"
@@ -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, presence: true
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.0
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-21 00:00:00.000000000 Z
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