hv 0.1.0 → 0.1.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: '0353278d4798a60106d524f47a02b0b9f823fe0a'
4
- data.tar.gz: 7c0c2bf9299d9fe828bf631ec64452c76fa0e2bd
3
+ metadata.gz: 9ce070297444b94651fa7b6123b493acc5711fff
4
+ data.tar.gz: 1d560767fb9fad4d9e92743ad1a5d8fd8e0f3808
5
5
  SHA512:
6
- metadata.gz: d00da52f72a809c438a7b1d27e83770893327e2eb4dd7f30f0c97365d90a792b34b8cefb6726e8df77c9b8bf2404f993fd580351cf0d20e98b3992d256eb0014
7
- data.tar.gz: d083ba5b30499bee85e19abc7e482cfe4225853eb9a39a3fe78e759b92c44bafdd59060cfeed5a017dbdeae61275bce7e89ad246f85aa6360c9efcdc4b44c9aa
6
+ metadata.gz: d821845aba2b7d75ad702f4020b080443cdf29822f772a51d9b529200186ad2b9146e6d89d69e5683c8285bf3ef88f0e7e0dc002657c5605cbfc04e7ba85e429
7
+ data.tar.gz: 70dff345ce9442850dde2fbfa3d6b67b5056cfebd7db73fa5f5a3f6a89140511c2e7de17495fd86f49f926457f88667a61ef838f99637f54e694642213936223
data/.gitignore CHANGED
@@ -6,3 +6,6 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ test/notepad.txt
10
+ .byebug_history
11
+ notepad.txt
data/Gemfile.lock ADDED
@@ -0,0 +1,24 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ hv (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ byebug (10.0.0)
10
+ minitest (5.11.3)
11
+ rake (10.5.0)
12
+
13
+ PLATFORMS
14
+ ruby
15
+
16
+ DEPENDENCIES
17
+ bundler (~> 1.16)
18
+ byebug
19
+ hv!
20
+ minitest (~> 5.0)
21
+ rake (~> 10.0)
22
+
23
+ BUNDLED WITH
24
+ 1.16.0
data/hv.gemspec CHANGED
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "bundler", "~> 1.16"
25
25
  spec.add_development_dependency "minitest", "~> 5.0"
26
26
  spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "byebug"
27
28
  end
data/lib/hv.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "hv/version"
2
+ require "hv/errors_processor"
2
3
  require "hv/schema"
3
4
 
4
5
  module Hv
@@ -0,0 +1,10 @@
1
+ module Hv
2
+ module ErrorsProcessor
3
+ def self.call(result)
4
+ result.map do |path, validator, spec, given|
5
+ path_text = path.empty? ? "" : " in #{path}"
6
+ "Expected #{given.inspect}#{path_text} to be #{validator}:#{spec}"
7
+ end
8
+ end
9
+ end
10
+ end
data/lib/hv/schema.rb CHANGED
@@ -1,10 +1,6 @@
1
1
  module Hv
2
2
  class Schema
3
3
 
4
- def allowed_validators
5
- [:optional?, :format?, :min_size?, :max_size?, :size?, :lt?, :gt?, :types?, :type?, :enum?, :proc?, :array?, :empty?]
6
- end
7
-
8
4
  def initialize(schema)
9
5
  @schema = schema
10
6
  end
@@ -13,20 +9,33 @@ module Hv
13
9
  @result
14
10
  end
15
11
 
16
- def path
17
- @path
18
- end
19
-
20
12
  def validates?(input)
21
13
  @result = []
22
14
  validate_schema(@schema, input, [])
23
15
  end
24
16
 
17
+ def errors(errors_processor=Hv::ErrorsProcessor)
18
+ errors_processor.call(@result)
19
+ end
20
+
25
21
  private
26
22
 
23
+ def validator_key?(key)
24
+ allowed_validators.include?(key) ||
25
+ custom_validators.include?(key)
26
+ end
27
+
28
+ def allowed_validators
29
+ [:optional?, :format?, :min_size?, :max_size?, :size?, :lt?, :gt?, :types?, :type?, :enum?, :proc?, :array?, :empty?]
30
+ end
31
+
32
+ def custom_validators
33
+ []
34
+ end
35
+
27
36
  def validate_schema(spec, value, path=nil)
28
37
  spec.each do |key, _spec|
29
- if !allowed_validators.include?(key)
38
+ if !validator_key?(key)
30
39
  _value = value[key] rescue nil
31
40
  validate_schema(_spec, _value, [path, key].flatten)
32
41
  else
@@ -34,29 +43,29 @@ module Hv
34
43
  true
35
44
  else
36
45
  next if key == :optional?
37
- method("validate_#{key}").call(_spec, value)
46
+ method("validate_#{key}").call(_spec, value, path)
38
47
  end
39
- @result << [path, key, _spec, false, value] unless match
48
+ @result << [path, key, _spec, value] unless match
40
49
  end
41
50
  end
42
51
  @result.empty?
43
52
  end
44
53
 
45
54
  def optional_attr?(path)
46
- @schema.dig(*path)[:optional?] rescue false
55
+ (@schema.dig(*path) || {})[:optional?]
47
56
  end
48
57
 
49
- def validate_enum?(spec, value)
58
+ def validate_enum?(spec, value, path)
50
59
  spec.include?(value)
51
60
  end
52
61
 
53
- def validate_types?(spec, value)
62
+ def validate_types?(spec, value, path)
54
63
  raise "Argument for :types? must be an array of types" unless spec.is_a? Array
55
64
  spec.any? { |_type| value.is_a?(_type) }
56
65
  end
57
66
 
58
67
 
59
- def validate_type?(spec, value)
68
+ def validate_type?(spec, value, path)
60
69
  value.is_a?(spec)
61
70
  end
62
71
 
@@ -69,27 +78,27 @@ module Hv
69
78
  end
70
79
  end
71
80
 
72
- def validate_min_size?(spec, value)
81
+ def validate_min_size?(spec, value, path)
73
82
  validate_size(spec, value, '>=')
74
83
  end
75
84
 
76
- def validate_max_size?(spec, value)
85
+ def validate_max_size?(spec, value, path)
77
86
  validate_size(spec, value, '<=')
78
87
  end
79
88
 
80
- def validate_size?(spec, value)
89
+ def validate_size?(spec, value, path)
81
90
  validate_size(spec, value, '==')
82
91
  end
83
92
 
84
- def validate_lt?(spec, value)
93
+ def validate_lt?(spec, value, path)
85
94
  validate_size(spec, value, '<')
86
95
  end
87
96
 
88
- def validate_gt?(spec, value)
97
+ def validate_gt?(spec, value, path)
89
98
  validate_size(spec, value, '>')
90
99
  end
91
100
 
92
- def validate_format?(spec, value)
101
+ def validate_format?(spec, value, path)
93
102
  if value.respond_to? :match?
94
103
  value.match?(spec)
95
104
  else
@@ -99,8 +108,8 @@ module Hv
99
108
 
100
109
  def validate_array?(spec, values, path=nil)
101
110
  return false unless values.is_a?(Array)
102
- values.all? {|value|
103
- validate_schema(spec, value, path)
111
+ values.to_enum.with_index.all? {|value, index|
112
+ validate_schema(spec, value, [path, index].flatten)
104
113
  }
105
114
  end
106
115
 
data/lib/hv/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Hv
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Monkey Square Lab
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-06 00:00:00.000000000 Z
11
+ date: 2018-03-07 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: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
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: Hash validation
56
70
  email:
57
71
  - monkeysquarelab@gmail.com
@@ -63,6 +77,7 @@ files:
63
77
  - ".travis.yml"
64
78
  - CODE_OF_CONDUCT.md
65
79
  - Gemfile
80
+ - Gemfile.lock
66
81
  - LICENSE.txt
67
82
  - README.md
68
83
  - Rakefile
@@ -70,8 +85,10 @@ files:
70
85
  - bin/setup
71
86
  - hv.gemspec
72
87
  - lib/hv.rb
88
+ - lib/hv/errors_processor.rb
73
89
  - lib/hv/schema.rb
74
90
  - lib/hv/version.rb
91
+ - releases/hv-0.1.0.gem
75
92
  homepage: https://github.com/monkeysquarelab/hv
76
93
  licenses:
77
94
  - MIT