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 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