varify 0.0.1 → 0.0.2
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 +13 -5
- data/lib/varify.rb +1 -1
- data/lib/varify/base.rb +67 -2
- data/lib/varify/hash.rb +3 -5
- data/lib/varify/openstruct.rb +8 -0
- data/lib/varify/rules/is_a.rb +15 -0
- data/lib/varify/rules/one_of.rb +24 -0
- data/lib/varify/rules/required.rb +19 -0
- data/lib/varify/rules/rule.rb +22 -0
- metadata +44 -12
- data/lib/varify/ostruct.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YWEzNmRkZTcyMTYwZWIwMzhkMzgyODQ4MDJiOGZiNzk2MThiM2Q5MA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
Zjc2ZWU0ZWNhZmQ5OGE4ZWM5MGY5ZDVmYzZkYWI5NGE4ZDMzNTViYw==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MjY3NWVkNmU1NGJiMGRhZmFlYjBiOTIyYWJiYTZiZDE5MGNlM2JmZTA3YWU1
|
10
|
+
YzkzZmI0YmI1MGZmNDk5OTIxN2QyYTU0OTg2MWM1Nzg4ZWE3YzNkNDIwOWQx
|
11
|
+
MDM5YTBhNThmYzhkOGUyNmExYmM0OGE3NTQ2MDYzMTljZDE4YmE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MjFmNTNhZDY5YmRmYTg5M2UwZWI0ZTM0ZTY3MWI5N2FlMmMzMjVlM2UzNDY4
|
14
|
+
MGIzM2EyZjVmZTEyNGEzODdlZDU0ZTYyMmNlNDc0Y2NiYzVlOTI1ODIzM2U5
|
15
|
+
NTk0Y2NmN2ExOWJjY2Q1MjVjZGUwZDQ4NGIwMzhjNmNlNjU1M2Q=
|
data/lib/varify.rb
CHANGED
data/lib/varify/base.rb
CHANGED
@@ -1,8 +1,73 @@
|
|
1
1
|
|
2
|
+
require 'varify/rules/required'
|
3
|
+
require 'varify/rules/is_a'
|
4
|
+
require 'varify/rules/one_of'
|
5
|
+
|
2
6
|
module Varify
|
3
7
|
module Base
|
4
|
-
|
5
|
-
|
8
|
+
RULES = {
|
9
|
+
required: Varify::Rules::RequiredRule,
|
10
|
+
is_a: Varify::Rules::IsARule,
|
11
|
+
one_of: Varify::Rules::OneOfRule
|
12
|
+
}
|
13
|
+
|
14
|
+
|
15
|
+
# Sets the callback for when a validation fails
|
16
|
+
# @param &block [Proc] the callback to run when validation fails
|
17
|
+
# @yieldparam
|
18
|
+
def self.callback(&block)
|
19
|
+
@callback = block
|
20
|
+
end
|
21
|
+
|
22
|
+
# Used by the varify method to send error messages to the callback
|
23
|
+
# @param [Hash] options the information to post for the error
|
24
|
+
# @option options [String] :message the user readable message
|
25
|
+
# @option options [Symbol] :key the key of the value to get from the Hashh
|
26
|
+
# @option options [Symbol] :rule the Rule ID from RULES
|
27
|
+
# @api private
|
28
|
+
def self.fail(options={})
|
29
|
+
message = options.is_a?(String) ? options : options[:message]
|
30
|
+
raise "Fail (fail) requires a string message or hash with :message" unless message
|
31
|
+
raise "Key (:key) is required in calling fail" unless options[:key]
|
32
|
+
raise "Rule (:rule) is required in calling fail" unless options[:rule]
|
33
|
+
|
34
|
+
error = {
|
35
|
+
message: message,
|
36
|
+
key: options[:key],
|
37
|
+
rule: options[:rule]
|
38
|
+
}
|
39
|
+
|
40
|
+
if @callback
|
41
|
+
@callback.call(error)
|
42
|
+
else
|
43
|
+
raise ArgumentError, message
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Processes the input parameter
|
48
|
+
# @param [Symbol] Varify::Base.callback the key to identify the value out of the hash
|
49
|
+
# @param [Hash] params the hash of keys
|
50
|
+
# @param [Hash] options set of rules to test
|
51
|
+
# @param [Proc] &block optional block to use as a validator
|
52
|
+
def self.varify(param_key, params={}, options={},&block)
|
53
|
+
value = params[param_key] || options[:default]
|
54
|
+
name = params[:name] || param_key.to_s.split('_').map{|e| e.capitalize}.join(' ')
|
55
|
+
rules = {}
|
56
|
+
|
57
|
+
rules_to_process = options.dup
|
58
|
+
rules_to_process.delete(:default)
|
59
|
+
rules_to_process.delete(:name)
|
60
|
+
|
61
|
+
rules_to_process.each do |rule_key,rule_value|
|
62
|
+
rule_class = RULES[rule_key]
|
63
|
+
raise "Rule ':#{rule_key}' is not defined" unless rule_class
|
64
|
+
rules[rule_key] = rule_class.new(param_key,name,value,rule_value)
|
65
|
+
end
|
66
|
+
|
67
|
+
rules.each do |rule_key,rule|
|
68
|
+
fail(message: rule.error_message, key: param_key, rule:rule_key) unless rule.valid?
|
69
|
+
end
|
70
|
+
|
6
71
|
value
|
7
72
|
end
|
8
73
|
end
|
data/lib/varify/hash.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'varify/rules/rule'
|
2
|
+
|
3
|
+
module Varify
|
4
|
+
module Rules
|
5
|
+
class OneOfRule < Rule
|
6
|
+
def valid?
|
7
|
+
@options.include?(@value)
|
8
|
+
end
|
9
|
+
|
10
|
+
def error_message
|
11
|
+
message = if @options.count >=2
|
12
|
+
last = "'#{@options[-1]}'"
|
13
|
+
first = @options[0..-2].map{|o| "'#{o}'"}.join(', ')
|
14
|
+
"#{@name} (:#{@key}) must be #{first} or #{last}"
|
15
|
+
elsif @options.count == 1
|
16
|
+
"#{@name} (:#{@key}) must be '#{@options[0]}'"
|
17
|
+
else
|
18
|
+
"#{@name} (:#{@key}) can't be valid because no valid options were provided"
|
19
|
+
end
|
20
|
+
message
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'varify/rules/rule'
|
2
|
+
|
3
|
+
module Varify
|
4
|
+
module Rules
|
5
|
+
class RequiredRule < Rule
|
6
|
+
def valid?
|
7
|
+
if @options
|
8
|
+
!@value.nil?
|
9
|
+
else
|
10
|
+
true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def error_message
|
15
|
+
"#{@name} (:#{@key}) is required"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
module Varify
|
3
|
+
module Rules
|
4
|
+
class Rule
|
5
|
+
|
6
|
+
def initialize(key,name,value,options={})
|
7
|
+
@value = value
|
8
|
+
@key = key
|
9
|
+
@name = name
|
10
|
+
@options = options
|
11
|
+
end
|
12
|
+
|
13
|
+
def valid?
|
14
|
+
raise NotImplementedError
|
15
|
+
end
|
16
|
+
|
17
|
+
def error_message
|
18
|
+
"#{@name} (:#{@key}) failed verification"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,57 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: varify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maciej Skierkowski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: codeclimate-test-reporter
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.4.7
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.4.7
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 3.2.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 3.2.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 10.4.2
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 10.4.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.12.5
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.12.5
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 4.5.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 4.5.0
|
55
83
|
description:
|
56
84
|
email:
|
57
85
|
- maciej@factor.io
|
@@ -62,7 +90,11 @@ files:
|
|
62
90
|
- lib/varify.rb
|
63
91
|
- lib/varify/base.rb
|
64
92
|
- lib/varify/hash.rb
|
65
|
-
- lib/varify/
|
93
|
+
- lib/varify/openstruct.rb
|
94
|
+
- lib/varify/rules/is_a.rb
|
95
|
+
- lib/varify/rules/one_of.rb
|
96
|
+
- lib/varify/rules/required.rb
|
97
|
+
- lib/varify/rules/rule.rb
|
66
98
|
homepage: https://factor.io
|
67
99
|
licenses:
|
68
100
|
- MIT
|
@@ -73,17 +105,17 @@ require_paths:
|
|
73
105
|
- lib
|
74
106
|
required_ruby_version: !ruby/object:Gem::Requirement
|
75
107
|
requirements:
|
76
|
-
- -
|
108
|
+
- - ! '>='
|
77
109
|
- !ruby/object:Gem::Version
|
78
110
|
version: '0'
|
79
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
112
|
requirements:
|
81
|
-
- -
|
113
|
+
- - ! '>='
|
82
114
|
- !ruby/object:Gem::Version
|
83
115
|
version: '0'
|
84
116
|
requirements: []
|
85
117
|
rubyforge_project:
|
86
|
-
rubygems_version: 2.
|
118
|
+
rubygems_version: 2.2.2
|
87
119
|
signing_key:
|
88
120
|
specification_version: 4
|
89
121
|
summary: Varify
|