kharon 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/validate.rb +3 -3
- data/lib/validator.rb +121 -86
- data/spec/lib/validator_spec.rb +2 -1
- metadata +2 -20
- data/spec/spec_helper.rb +0 -14
data/lib/validate.rb
CHANGED
@@ -2,11 +2,11 @@ module Kharon
|
|
2
2
|
module Helpers
|
3
3
|
|
4
4
|
# Validates the datas passed as parameter with a Phenix::Validator and the given instructions.
|
5
|
-
# @param [Hash] the parameters to validate with the given instructions.
|
6
|
-
# @param [Proc] the instructions to apply on the validator.
|
5
|
+
# @param [Hash] datas the parameters to validate with the given instructions.
|
6
|
+
# @param [Proc] block the instructions to apply on the validator.
|
7
7
|
# @return [Hash] the validated and filtered datas.
|
8
8
|
def validate(datas, &block)
|
9
|
-
validator = Kharon::
|
9
|
+
validator = Kharon::Factory.validator(datas)
|
10
10
|
validator.instance_eval(&block)
|
11
11
|
return validator.filtered
|
12
12
|
end
|
data/lib/validator.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
module Kharon
|
2
|
-
# The validator
|
2
|
+
# The validator is the main class of Kharon, it validates a hash given a structure.
|
3
3
|
# @author Vincent Courtois <vincent.courtois@mycar-innovations.com>
|
4
4
|
class Validator
|
5
|
-
include Aquarium::DSL
|
6
5
|
|
7
6
|
# @!attribute [r] datas
|
8
7
|
# @return The datas to filter, they shouldn't be modified to guarantee their integrity.
|
@@ -14,163 +13,190 @@ module Kharon
|
|
14
13
|
|
15
14
|
# Constructor of the classe, receiving the datas to validate and filter.
|
16
15
|
# @param [Hash] datas the datas to validate in the validator.
|
16
|
+
# @example create a new instance of validator.
|
17
|
+
# @validator = Kharon::Validator.new({key: "value"})
|
17
18
|
def initialize(datas)
|
18
19
|
@datas = datas
|
19
20
|
@filtered = Hash.new
|
20
21
|
end
|
21
22
|
|
22
|
-
# @!group Public_interface
|
23
|
-
|
24
23
|
# Checks if the given key is an integer or not.
|
25
24
|
# @param [Object] key the key about which verify the type.
|
26
25
|
# @param [Hash] options a hash of options passed to this method (see documentation to know which options pass).
|
26
|
+
# @example Validates a key so it has to be an integer superior or equal to 2.
|
27
|
+
# @validator.integer(:an_integer_key, min: 2)
|
27
28
|
def integer(key, options = {})
|
28
|
-
|
29
|
+
before_all(key, options)
|
30
|
+
match?(key, /\A\d+\Z/) ? store_numeric(key, ->(item){item.to_i}, options) : raise_type_error(key, "Integer")
|
29
31
|
end
|
30
32
|
|
31
33
|
# Checks if the given key is a numeric or not.
|
32
34
|
# @param [Object] key the key about which verify the type.
|
33
35
|
# @param [Hash] options a hash of options passed to this method (see documentation to know which options pass).
|
36
|
+
# @example Validates a key so it has to be a numeric, is required and is between 2 and 5.5.
|
37
|
+
# @validator.numeric(:a_numeric_key, required: true, between: [2, 5.5])
|
34
38
|
def numeric(key, options = {})
|
35
|
-
|
39
|
+
before_all(key, options)
|
40
|
+
match?(key, /\A([+-]?\d+)([,.](\d+))?\Z/) ? store_decimal(key, ->(item){item.to_s.sub(/,/, ".").to_f}, options) : raise_type_error(key, "Numeric")
|
36
41
|
end
|
37
42
|
|
38
43
|
# Checks if the given key is a not-empty string or not.
|
39
44
|
# @param [Object] key the key about which verify the type.
|
40
45
|
# @param [Hash] options a hash of options passed to this method (see documentation to know which options pass).
|
46
|
+
# @example Validates a key so it has to be a string, and seems like and email address (not sure of the regular expression though).
|
47
|
+
# @validator.text(:an_email, regex: "[a-zA-Z]+@[a-zA-Z]+\.[a-zA-Z]{2-4}")
|
41
48
|
def text(key, options = {})
|
42
|
-
|
49
|
+
before_all(key, options)
|
50
|
+
is_typed?(key, String) ? store_text(key, ->(item){item.to_s}, options) : raise_type_error(key, "String")
|
43
51
|
end
|
44
52
|
|
45
53
|
# Doesn't check the type of the key and let it pass without modification.
|
46
54
|
# @param [Object] key the key about which verify the type.
|
47
55
|
# @param [Hash] options a hash of options passed to this method (see documentation to know which options pass).
|
56
|
+
# @example Just checks if the key is in the hash.
|
57
|
+
# @validator.any(:a_key, required: true)
|
48
58
|
def any(key, options = {})
|
59
|
+
before_all(key, options)
|
49
60
|
store(key, ->(item){item}, options)
|
50
61
|
end
|
51
62
|
|
52
63
|
# Checks if the given key is a datetime or not.
|
53
64
|
# @param [Object] key the key about which verify the type.
|
54
65
|
# @param [Hash] options a hash of options passed to this method (see documentation to know which options pass).
|
66
|
+
# @example Validates a key so it has to be a datetime, and depends on two other keys.
|
67
|
+
# @validator.datetime(:a_datetime, dependencies: [:another_key, :a_third_key])
|
55
68
|
def datetime(key, options = {})
|
69
|
+
before_all(key, options)
|
56
70
|
begin; store(key, ->(item){DateTime.parse(item.to_s)} , options); rescue; raise_type_error(key, "DateTime"); end
|
57
71
|
end
|
58
72
|
|
59
73
|
# Checks if the given key is a date or not.
|
60
74
|
# @param [Object] key the key about which verify the type.
|
61
75
|
# @param [Hash] options a hash of options passed to this method (see documentation to know which options pass).
|
76
|
+
# @example Validates a key so it has to be a date, and depends on another key.
|
77
|
+
# @validator.date(:a_date, dependency: :another_key)
|
62
78
|
def date(key, options = {})
|
79
|
+
before_all(key, options)
|
63
80
|
begin; store(key, ->(item){Date.parse(item.to_s)}, options); rescue; raise_type_error(key, "Date"); end
|
64
81
|
end
|
65
82
|
|
66
83
|
# Checks if the given key is an array or not.
|
67
84
|
# @param [Object] key the key about which verify the type.
|
68
85
|
# @param [Hash] options a hash of options passed to this method (see documentation to know which options pass).
|
86
|
+
# @example Validates a key so it has to be an array, and checks if it has some values in it.
|
87
|
+
# @validator.date(:an_array, contains?: ["first", "second"])
|
69
88
|
def array(key, options = {})
|
70
|
-
|
89
|
+
before_all(key, options)
|
90
|
+
is_typed?(key, Array) ? store_array(key, ->(item){item.to_a}, options) : raise_type_error(key, "Array")
|
71
91
|
end
|
72
92
|
|
73
93
|
# Checks if the given key is a hash or not.
|
74
94
|
# @param [Object] key the key about which verify the type.
|
75
95
|
# @param [Hash] options a hash of options passed to this method (see documentation to know which options pass).
|
96
|
+
# @example Validates a key so it has to be a hash, and checks if it has some keys.
|
97
|
+
# @validator.date(:a_hash, has_keys: [:first, :second])
|
76
98
|
def hash(key, options = {})
|
77
|
-
|
99
|
+
before_all(key, options)
|
100
|
+
is_typed?(key, Hash) ? store_hash(key, ->(item){Hash.try_convert(item)}, options) : raise_type_error(key, "Hash")
|
78
101
|
end
|
79
102
|
|
80
103
|
# Checks if the given key is a boolean or not.
|
81
104
|
# @param [Object] key the key about which verify the type.
|
82
105
|
# @param [Hash] options a hash of options passed to this method (see documentation to know which options pass).
|
106
|
+
# @example Validates a key so it has to be a boolean.
|
107
|
+
# @validator.boolean(:a_boolean)
|
83
108
|
def boolean(key, options = {})
|
109
|
+
before_all(key, options)
|
84
110
|
match?(key, /(true)|(false)/) ? store(key, ->(item){to_boolean(item)}, options) : raise_type_error(key, "Numeric")
|
85
111
|
end
|
86
112
|
|
87
113
|
# Checks if the given key is a SSID for a MongoDB object or not.
|
88
114
|
# @param [Object] key the key about which verify the type.
|
89
115
|
# @param [Hash] options a hash of options passed to this method (see documentation to know which options pass).
|
116
|
+
# @example Validates a key so it has to be a MongoDB SSID.
|
117
|
+
# @validator.ssid(:a_ssid)
|
90
118
|
def ssid(key, options = {})
|
119
|
+
before_all(key, options)
|
91
120
|
match?(key, /^[0-9a-fA-F]{24}$/) ? store(key, ->(item){BSON::ObjectId.from_string(item.to_s)}, options) : raise_type_error(key, "Moped::BSON::ObjectId")
|
92
121
|
end
|
93
122
|
|
94
|
-
|
95
|
-
|
96
|
-
# @!group Advices
|
97
|
-
|
98
|
-
# Before advice checking for "required", "dependency", and "dependencies" options.
|
99
|
-
before calls_to: self.instance_methods(false), exclude_methods: [:initialize, :new, :required, :dependency, :dependencies] do |joint_point, validator, *args|
|
100
|
-
unless !defined?(args[1]) or args[1].nil? or args[1].empty?
|
101
|
-
validator.required(args[0]) if (args[1].has_key?(:required) and args[1][:required] == true)
|
102
|
-
if args[1].has_key?(:dependencies)
|
103
|
-
validator.dependencies(args[0], args[1][:dependencies])
|
104
|
-
elsif args[1].has_key?(:dependency)
|
105
|
-
validator.dependency(args[0], args[1][:dependency])
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
123
|
+
private
|
109
124
|
|
110
|
-
#
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
end
|
125
|
+
# This method is executed before any call to a public method.
|
126
|
+
# @param [Object] key the key associated with the value currently filteres in the filtered datas.
|
127
|
+
# @param [Hash] options the options applied to the initial value.
|
128
|
+
def before_all(key, options)
|
129
|
+
required(key) if (options.has_key?(:required) and options[:required] == true)
|
130
|
+
if options.has_key?(:dependencies)
|
131
|
+
dependencies(key, options[:dependencies])
|
132
|
+
elsif options.has_key?(:dependency)
|
133
|
+
dependency(key, options[:dependency])
|
120
134
|
end
|
121
135
|
end
|
122
136
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
137
|
+
# Stores a numeric number after checking its limits if given.
|
138
|
+
# @param [Object] key the key associated with the value to store in the filtered datas.
|
139
|
+
# @param [Proc] process a process (lambda) to execute on the initial value. Must contain strictly one argument.
|
140
|
+
# @param [Hash] options the options applied to the initial value.
|
141
|
+
def store_numeric(key, process, options)
|
142
|
+
if(options.has_key?(:between))
|
143
|
+
check_min_value(key, options[:between][0])
|
144
|
+
check_max_value(key, options[:between][1])
|
145
|
+
else
|
146
|
+
check_min_value(key, options[:min]) if(options.has_key?(:min))
|
147
|
+
check_max_value(key, options[:max]) if(options.has_key?(:max))
|
132
148
|
end
|
149
|
+
store(key, process, options)
|
133
150
|
end
|
134
151
|
|
135
|
-
#
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
152
|
+
# Stores a decimal number, then apply the eventually passed round, ceil, or floor options.
|
153
|
+
# @param [Object] key the key associated with the value to store in the filtered datas.
|
154
|
+
# @param [Proc] process a process (lambda) to execute on the initial value. Must contain strictly one argument.
|
155
|
+
# @param [Hash] options the options applied to the initial value.
|
156
|
+
def store_decimal(key, process, options)
|
157
|
+
store_numeric(key, process, options)
|
158
|
+
if(options.has_key?(:round) and options[:round].kind_of?(Integer))
|
159
|
+
filtered[key] = filtered[key].round(options[:round]) if filtered.has_key?(key)
|
160
|
+
elsif(options.has_key?(:floor) and options[:floor] == true)
|
161
|
+
filtered[key] = filtered[key].floor if filtered.has_key?(key)
|
162
|
+
elsif(options.has_key?(:ceil) and options[:ceil] == true)
|
163
|
+
filtered[key] = filtered[key].ceil if filtered.has_key?(key)
|
143
164
|
end
|
144
165
|
end
|
145
166
|
|
146
|
-
#
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
167
|
+
# Stores a hash after checking for the contains? and has_keys options.
|
168
|
+
# @param [Object] key the key associated with the value to store in the filtered datas.
|
169
|
+
# @param [Proc] process a process (lambda) to execute on the initial value. Must contain strictly one argument.
|
170
|
+
# @param [Hash] options the options applied to the initial value.
|
171
|
+
def store_hash(key, process, options)
|
172
|
+
has_keys?(key, options[:has_keys]) if(options.has_key?(:has_keys))
|
173
|
+
contains?(filtered, datas[key].values, options[:contains]) if(options.has_key?(:contains))
|
174
|
+
store(key, process, options)
|
152
175
|
end
|
153
176
|
|
154
|
-
#
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
177
|
+
# Stores an array after verifying that it contains the values given in the contains? option.
|
178
|
+
# @param [Object] key the key associated with the value to store in the filtered datas.
|
179
|
+
# @param [Proc] process a process (lambda) to execute on the initial value. Must contain strictly one argument.
|
180
|
+
# @param [Hash] options the options applied to the initial value.
|
181
|
+
def store_array(key, process, options)
|
182
|
+
contains?(key, datas[key], options[:contains]) if(options.has_key?(:contains))
|
183
|
+
store(key, process, options)
|
159
184
|
end
|
160
185
|
|
161
|
-
after
|
162
|
-
|
163
|
-
|
164
|
-
|
186
|
+
# Stores a string after verifying that it respects a regular expression given in parameter.
|
187
|
+
# @param [Object] key the key associated with the value to store in the filtered datas.
|
188
|
+
# @param [Proc] process a process (lambda) to execute on the initial value. Must contain strictly one argument.
|
189
|
+
# @param [Hash] options the options applied to the initial value.
|
190
|
+
def store_text(key, process, options)
|
191
|
+
match_regex?(key, datas[key], options[:regex]) if(options.has_key?(:regex))
|
192
|
+
store(key, process, options)
|
165
193
|
end
|
166
194
|
|
167
|
-
# @!endgroup Advices
|
168
|
-
|
169
195
|
# Checks if a required key is present in provided datas.
|
170
196
|
# @param [Object] key the key of which check the presence.
|
171
197
|
# @raise [ArgumentError] if the key is not present.
|
172
198
|
def required(key)
|
173
|
-
|
199
|
+
raise_error("The key #{key} is required and not provided.") unless @datas.has_key?(key)
|
174
200
|
end
|
175
201
|
|
176
202
|
# Syntaxic sugar used to chack several dependencies at once.
|
@@ -187,7 +213,7 @@ module Kharon
|
|
187
213
|
# @param [Object] dependency the key needed by another key for it to properly work.
|
188
214
|
# @raise [ArgumentError] if the required dependency is not present.
|
189
215
|
def dependency(key, dependency)
|
190
|
-
|
216
|
+
raise_error("The key #{key} needs the key #{dependency} but it was not provided.") unless @datas.has_key?(dependency)
|
191
217
|
end
|
192
218
|
|
193
219
|
# Checks if the value associated with the given key is greater than the given minimum value.
|
@@ -195,7 +221,7 @@ module Kharon
|
|
195
221
|
# @param [Numeric] min_value the required minimum value.
|
196
222
|
# @raise [ArgumentError] if the initial value is strictly lesser than the minimum value.
|
197
223
|
def check_min_value(key, min_value)
|
198
|
-
|
224
|
+
raise_error("The key #{key} was supposed to be greater or equal than #{min_value}, the value was #{datas[key]}") unless datas[key].to_i >= min_value.to_i
|
199
225
|
end
|
200
226
|
|
201
227
|
# Checks if the value associated with the given key is lesser than the given maximum value.
|
@@ -203,7 +229,7 @@ module Kharon
|
|
203
229
|
# @param [Numeric] max_value the required maximum value.
|
204
230
|
# @raise [ArgumentError] if the initial value is strictly greater than the minimum value.
|
205
231
|
def check_max_value(key, max_value)
|
206
|
-
|
232
|
+
raise_error("The key #{key} was supposed to be lesser or equal than #{max_value}, the value was #{datas[key]}") unless datas[key].to_i <= max_value.to_i
|
207
233
|
end
|
208
234
|
|
209
235
|
# Checks if the value associated with the given key is included in the given array of values.
|
@@ -211,7 +237,7 @@ module Kharon
|
|
211
237
|
# @param [Array] values the values in which the initial value should be contained.
|
212
238
|
# @raise [ArgumentError] if the initial value is not included in the given possible values.
|
213
239
|
def in_array?(key, values)
|
214
|
-
|
240
|
+
raise_error("The key #{key} was supposed to be in [#{values.join(", ")}], the value was #{datas[key]}") unless (values.empty? or values.include?(datas[key]))
|
215
241
|
end
|
216
242
|
|
217
243
|
# Checks if the value associated with the given key is equal to the given value.
|
@@ -219,7 +245,7 @@ module Kharon
|
|
219
245
|
# @param [Object] value the values with which the initial value should be compared.
|
220
246
|
# @raise [ArgumentError] if the initial value is not equal to the given value.
|
221
247
|
def equals_to?(key, value)
|
222
|
-
|
248
|
+
raise_error("The key #{key} was supposed to equal than #{value}, the value was #{datas[key]}") unless datas[key] == value
|
223
249
|
end
|
224
250
|
|
225
251
|
# Checks if the value associated with the given key has the given required keys.
|
@@ -227,7 +253,7 @@ module Kharon
|
|
227
253
|
# @param [Array] required_keys the keys that the initial Hash typed value should contain.
|
228
254
|
# @raise [ArgumentError] if the initial value has not each and every one of the given keys.
|
229
255
|
def has_keys?(key, required_keys)
|
230
|
-
|
256
|
+
raise_error("The key #{key} was supposed to contains keys [#{required_keys.join(", ")}]") if (datas[key].keys & required_keys) != required_keys
|
231
257
|
end
|
232
258
|
|
233
259
|
# Checks if the value associated with the given key has the given required values.
|
@@ -235,16 +261,14 @@ module Kharon
|
|
235
261
|
# @param [Array] required_keys the values that the initial Enumerable typed value should contain.
|
236
262
|
# @raise [ArgumentError] if the initial value has not each and every one of the given values.
|
237
263
|
def contains?(key, values, required_values)
|
238
|
-
|
264
|
+
raise_error("The key #{key} was supposed to contains values [#{required_values.join(", ")}]") if (values & required_values) != required_values
|
239
265
|
end
|
240
266
|
|
241
267
|
def match_regex?(key, value, regex)
|
242
268
|
regex = Regexp.new(regex) if regex.kind_of?(String)
|
243
|
-
|
269
|
+
raise_error("The key #{key} was supposed to match the regex #{regex} but its value was #{value}") unless regex.match(value)
|
244
270
|
end
|
245
271
|
|
246
|
-
private
|
247
|
-
|
248
272
|
# Check if the value associated with the given key matches the given regular expression.
|
249
273
|
# @param [Object] key the key of the value to compare with the given regexp.
|
250
274
|
# @param [Regexp] regex the regex with which match the initial value.
|
@@ -261,14 +285,26 @@ module Kharon
|
|
261
285
|
return (!datas.has_key?(key) or datas[key].kind_of?(type))
|
262
286
|
end
|
263
287
|
|
288
|
+
# Transforms a given value in a boolean.
|
289
|
+
# @param [Object] value the value to transform into a boolean.
|
290
|
+
# @return [Boolean] true if the value was true, 1 or yes, false if not.
|
291
|
+
def to_boolean(value)
|
292
|
+
["true", "1", "yes"].include?(value.to_s) ? true : false
|
293
|
+
end
|
294
|
+
|
264
295
|
# Tries to store the associated key in the filtered key, transforming it with the given process.
|
265
296
|
# @param [Object] key the key associated with the value to store in the filtered datas.
|
266
297
|
# @param [Proc] process a process (lambda) to execute on the initial value. Must contain strictly one argument.
|
267
|
-
# @param [Hash] options the options applied to the initial value.
|
298
|
+
# @param [Hash] options the options applied to the initial value.
|
268
299
|
def store(key, process, options = {})
|
269
300
|
unless (options.has_key?(:extract) and options[:extract] == false)
|
270
301
|
if datas.has_key?(key)
|
271
302
|
value = ((options.has_key?(:cast) and options[:cast] == false) ? datas[key] : process.call(datas[key]))
|
303
|
+
if(options.has_key?(:in))
|
304
|
+
in_array?(key, options[:in])
|
305
|
+
elsif(options.has_key?(:equals))
|
306
|
+
equals_to?(key, options[:equals])
|
307
|
+
end
|
272
308
|
options.has_key?(:rename) ? (@filtered[options[:rename]] = value) : (@filtered[key] = value)
|
273
309
|
end
|
274
310
|
end
|
@@ -279,14 +315,13 @@ module Kharon
|
|
279
315
|
# @param [Class] type the expected type, not respected by the initial value.
|
280
316
|
# @raise [ArgumentError] the chosen type error.
|
281
317
|
def raise_type_error(key, type)
|
282
|
-
|
318
|
+
raise_error("The key {key} was supposed to be an instance of #{type}, #{key.class} found.")
|
283
319
|
end
|
284
320
|
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
["true", "1", "yes"].include?(value.to_s) ? true : false
|
321
|
+
protected
|
322
|
+
|
323
|
+
def raise_error(message)
|
324
|
+
raise ArgumentError.new(message)
|
290
325
|
end
|
291
326
|
|
292
327
|
end
|
data/spec/lib/validator_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kharon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,23 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
date: 2014-04-02 00:00:00.000000000 Z
|
13
|
-
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: aquarium
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - '='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: 0.5.1
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - '='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 0.5.1
|
13
|
+
dependencies: []
|
30
14
|
description: Kharon is a ruby hash validator that helps you fix the structure of a
|
31
15
|
hash (type of the keys, dependencies, ...).
|
32
16
|
email: vincent.courtois@mycar-innovations.com
|
@@ -36,7 +20,6 @@ extra_rdoc_files: []
|
|
36
20
|
files:
|
37
21
|
- lib/validator.rb
|
38
22
|
- lib/validate.rb
|
39
|
-
- spec/spec_helper.rb
|
40
23
|
- spec/lib/validator_spec.rb
|
41
24
|
homepage: https://rubygems.org/gems/kharon
|
42
25
|
licenses:
|
@@ -64,5 +47,4 @@ signing_key:
|
|
64
47
|
specification_version: 3
|
65
48
|
summary: Ruby Hash validator
|
66
49
|
test_files:
|
67
|
-
- spec/spec_helper.rb
|
68
50
|
- spec/lib/validator_spec.rb
|
data/spec/spec_helper.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# Sets the environment variable to test before loading all the files.
|
2
|
-
ENV['RACK_ENV'] = 'test'
|
3
|
-
|
4
|
-
require 'rack/test'
|
5
|
-
require 'mocha/api'
|
6
|
-
require 'aquarium'
|
7
|
-
require 'moped'
|
8
|
-
|
9
|
-
module RSpec
|
10
|
-
configure do |configuration|
|
11
|
-
# Configuration rspec to use mocha as mocking API.
|
12
|
-
configuration.mock_with :mocha
|
13
|
-
end
|
14
|
-
end
|