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