varify 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 763aded5cac48164416a5e0ccaa754591ebed284
4
- data.tar.gz: aef8ce54a9d0f62c7efadee030a06be09696b38b
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YWEzNmRkZTcyMTYwZWIwMzhkMzgyODQ4MDJiOGZiNzk2MThiM2Q5MA==
5
+ data.tar.gz: !binary |-
6
+ Zjc2ZWU0ZWNhZmQ5OGE4ZWM5MGY5ZDVmYzZkYWI5NGE4ZDMzNTViYw==
5
7
  SHA512:
6
- metadata.gz: ee09b59330a05714a91c4f8a73bf40e02810814c18307afa0b29a235bf47b8aed9e206c8b222a862747479ff7be786d6ced5587c1675b8b93d6fe0b7e39f43f7
7
- data.tar.gz: 4aa6db6e02da6c67f5beae29638e4e10255d11bc5faaa5f229e160874d6ec01e00238e5ba1dbf99ee9fb58f853b728fdb685b664e5bdf371ec2a59ed3a8a9c42
8
+ metadata.gz: !binary |-
9
+ MjY3NWVkNmU1NGJiMGRhZmFlYjBiOTIyYWJiYTZiZDE5MGNlM2JmZTA3YWU1
10
+ YzkzZmI0YmI1MGZmNDk5OTIxN2QyYTU0OTg2MWM1Nzg4ZWE3YzNkNDIwOWQx
11
+ MDM5YTBhNThmYzhkOGUyNmExYmM0OGE3NTQ2MDYzMTljZDE4YmE=
12
+ data.tar.gz: !binary |-
13
+ MjFmNTNhZDY5YmRmYTg5M2UwZWI0ZTM0ZTY3MWI5N2FlMmMzMjVlM2UzNDY4
14
+ MGIzM2EyZjVmZTEyNGEzODdlZDU0ZTYyMmNlNDc0Y2NiYzVlOTI1ODIzM2U5
15
+ NTk0Y2NmN2ExOWJjY2Q1MjVjZGUwZDQ4NGIwMzhjNmNlNjU1M2Q=
@@ -1,3 +1,3 @@
1
1
  require 'varify/base'
2
2
  require 'varify/hash'
3
- require 'varify/ostruct'
3
+ require 'varify/openstruct'
@@ -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
- def self.varify(key, params={}, options={},&block)
5
- value = params[key]
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
@@ -1,9 +1,7 @@
1
1
  require 'varify/base'
2
2
 
3
- module Varify
4
- class Hash
5
- def varify(key, options = {})
6
- Varify.varify(key, self, options)
7
- end
3
+ class Hash
4
+ def varify(key, options = {})
5
+ Varify::Base.varify(key, self, options)
8
6
  end
9
7
  end
@@ -0,0 +1,8 @@
1
+ require 'ostruct'
2
+ require 'varify/base'
3
+
4
+ class OpenStruct
5
+ def varify(key, options = {})
6
+ Varify::Base.varify(key, self.marshal_dump, options)
7
+ end
8
+ end
@@ -0,0 +1,15 @@
1
+ require 'varify/rules/rule'
2
+
3
+ module Varify
4
+ module Rules
5
+ class IsARule < Rule
6
+ def valid?
7
+ @value.is_a?(@options)
8
+ end
9
+
10
+ def error_message
11
+ "#{@name} (:#{@key}) must be a #{@options.name}"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -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.1
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-18 00:00:00.000000000 Z
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/ostruct.rb
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.4.5
118
+ rubygems_version: 2.2.2
87
119
  signing_key:
88
120
  specification_version: 4
89
121
  summary: Varify
@@ -1,10 +0,0 @@
1
- require 'ostruct'
2
- require 'varify/base'
3
-
4
- module Varify
5
- class OStruct
6
- def varify(key, options = {})
7
- Varify.varify(key, self.to_h, options)
8
- end
9
- end
10
- end