collection_json_serializer 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 439dfa592c9b1ac966e6c86e50e2985a6ef0b884
4
- data.tar.gz: af50517d57b2d5aa271afc8d6b8e67ea44ed0c48
3
+ metadata.gz: a43d5f7a36d702aceb4fd3bdd71ff86da64e027c
4
+ data.tar.gz: 12b188b39d695b9e1edbef6cc7285b3990a7c572
5
5
  SHA512:
6
- metadata.gz: fa4f479a2761f955b16e14148eae97fdd03a0f3c916d6a9bd7efcd2032fe0971a06c084520d64d10ef417208d6de64efa480c3e5197ae605fbffb3e569d57565
7
- data.tar.gz: ced4ab1f38846231334b103d6ecf74ff07246aeeda66bb37e12fa511aaf1ba157d620e743c8e7ee153ff777cf1a32084a768a54e047f3148b3c630de54d358fb
6
+ metadata.gz: 48434f77b5c372f61c7b4919c1389fc85e10e3e834a0a8f17ae1594d77af316c2b5d4af5e1c5e2ff4201db2d4a8e5e2215e34c3bcaa0bf695c395630c28e8ef9
7
+ data.tar.gz: ad03089d4119b6e799274cba090f4d5e6909553ad12e49347b48220607ca188ef8275521ca80caf0448345580faeafe2cf12813c07d45a917168833d30cba57e
data/README.md CHANGED
@@ -30,7 +30,10 @@ As this gem user, you will be mainly writing/generating and mantaining serialize
30
30
  class UserSerializer < CollectionJson::Serializer
31
31
  href "http://example.com/users",
32
32
 
33
- template :name, email: { prompt: "My email" }
33
+ template :name
34
+ template email: { prompt: "My email" }
35
+ # This could be written in a single line, too, wrapping the hash:
36
+ # template :name, { email: { ... } }
34
37
 
35
38
  # Please note that links can only be passed as hashes
36
39
  links dashboard: { href: "http://example.com/my-dashboard" }
@@ -12,6 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = %q{CollectionJson::Serializer makes it easy to serialize objects into the Collection+JSON hypermedia type.}
13
13
  spec.homepage = "https://github.com/carlesjove/collection_json_serializer"
14
14
  spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 2.0"
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0")
17
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
@@ -10,9 +10,11 @@ require "collection_json_serializer/items"
10
10
  require "collection_json_serializer/spec"
11
11
  require "collection_json_serializer/builder"
12
12
 
13
+ require "collection_json_serializer/validator/base"
13
14
  require "collection_json_serializer/validator"
14
- require "collection_json_serializer/validator/url"
15
- require "collection_json_serializer/validator/value"
15
+ require "collection_json_serializer/validator/items_validator"
16
+ require "collection_json_serializer/validator/types/url"
17
+ require "collection_json_serializer/validator/types/value"
16
18
 
17
19
  require "collection_json_serializer/objects/item"
18
20
  require "collection_json_serializer/objects/template"
@@ -1,24 +1,8 @@
1
1
  module CollectionJson
2
2
  class Serializer
3
- class Validator
3
+ class Validator < Validation
4
4
  include CollectionJson::Serializer::Support
5
5
 
6
- attr_accessor :errors
7
-
8
- def initialize(serializer)
9
- @serializer = serializer
10
- @errors = {}
11
- validate
12
- end
13
-
14
- def valid?
15
- !invalid?
16
- end
17
-
18
- def invalid?
19
- @errors.any?
20
- end
21
-
22
6
  private
23
7
 
24
8
  def validate
@@ -32,57 +16,8 @@ module CollectionJson
32
16
  end
33
17
 
34
18
  def validate_items
35
- validate_items_attributes if attributes?
36
- validate_items_links if links?
37
- end
38
-
39
- def validate_items_attributes
40
- @serializer.items.attributes.each do |attr|
41
- params = attr.extract_params
42
- validate_attributes_values(@serializer.resources, params)
43
- validate_attributes_properties(params) if params[:properties]
44
- end if @serializer.items? && @serializer.items.attributes?
45
- end
46
-
47
- def validate_attributes_values(resources, params)
48
- resources.each do |resource|
49
- val = extract_value_from(resource, params[:name])
50
- if value_is_invalid?(val)
51
- error_for :value, root: :attributes, path: [params[:name]]
52
- end
53
- end
54
- end
55
-
56
- def validate_attributes_properties(params)
57
- params[:properties].each do |key, value|
58
- unless definition[:items][:data].keys.include?(key.to_sym)
59
- error_for(
60
- :unknown_attribute,
61
- root: :attributes,
62
- path: [params[:name], key]
63
- )
64
- next
65
- end unless @serializer.uses?(:open_attrs)
66
-
67
- if value_is_invalid?(value)
68
- error_for :value, root: :attributes, path: [params[:name], key]
69
- end
70
- end
71
- end
72
-
73
- def validate_items_links
74
- @serializer.items.links.each do |attr|
75
- params = attr.extract_params
76
- params[:properties].keys.each do |key|
77
- unless definition[:items][:links].keys.include?(key.to_sym)
78
- error_for(
79
- :unknown_attribute,
80
- root: :items,
81
- path: [:links, params[:name], key]
82
- )
83
- end unless @serializer.uses?(:open_attrs)
84
- end
85
- end
19
+ items_validation = ItemsValidator.new(@serializer)
20
+ @errors.merge!(items_validation.errors)
86
21
  end
87
22
 
88
23
  def validate_href
@@ -199,49 +134,6 @@ module CollectionJson
199
134
  end
200
135
  end if @serializer.queries.present?
201
136
  end
202
-
203
- def value_is_invalid?(value)
204
- v = CollectionJson::Serializer::Validator::Value.new(value)
205
- v.invalid?
206
- end
207
-
208
- def url_is_invalid?(value)
209
- v = CollectionJson::Serializer::Validator::Url.new(value)
210
- v.invalid?
211
- end
212
-
213
- def error_for(kind, root: root, path: [])
214
- case kind.to_sym
215
- when :url
216
- ending = " is an invalid URL"
217
- when :value
218
- ending = " is an invalid value"
219
- when :missing_attribute
220
- ending = " is missing"
221
- when :unknown_attribute
222
- ending = " is an unknown attribute"
223
- else
224
- ending = " is an invalid value"
225
- end
226
-
227
- @errors[root] = [] unless @errors.key? root
228
- e = "#{@serializer.class} #{root}"
229
- e << ":" + path.join(":") if path.any?
230
- e << ending
231
- @errors[root] << e
232
- end
233
-
234
- def definition
235
- CollectionJson::Spec::DEFINITION
236
- end
237
-
238
- def attributes?
239
- @serializer.items? && @serializer.items.attributes?
240
- end
241
-
242
- def links?
243
- @serializer.items? && @serializer.items.links?
244
- end
245
137
  end
246
138
  end
247
139
  end
@@ -0,0 +1,69 @@
1
+ module CollectionJson
2
+ class Serializer
3
+ class Validation
4
+ attr_accessor :errors
5
+
6
+ def initialize(serializer)
7
+ @serializer = serializer
8
+ @errors = {}
9
+ validate
10
+ end
11
+
12
+ def valid?
13
+ !invalid?
14
+ end
15
+
16
+ def invalid?
17
+ @errors.any?
18
+ end
19
+
20
+ private
21
+
22
+ def validate
23
+ raise NotImplementedError, "This should be implemented by validators"
24
+ end
25
+
26
+ def definition
27
+ CollectionJson::Spec::DEFINITION
28
+ end
29
+
30
+ def value_is_invalid?(value)
31
+ v = Value.new(value)
32
+ v.invalid?
33
+ end
34
+
35
+ def url_is_invalid?(value)
36
+ v = Url.new(value)
37
+ v.invalid?
38
+ end
39
+
40
+ def href_or_error(object, root: root, path: path)
41
+ unless object.key?(:href)
42
+ error_for :missing_attribute, root: root, path: path
43
+ end
44
+ end
45
+
46
+ def error_for(kind, root: root, path: [])
47
+ case kind.to_sym
48
+ when :url
49
+ ending = " is an invalid URL"
50
+ when :value
51
+ ending = " is an invalid value"
52
+ when :missing_attribute
53
+ ending = " is missing"
54
+ when :unknown_attribute
55
+ ending = " is an unknown attribute"
56
+ else
57
+ ending = " is an invalid value"
58
+ end
59
+
60
+ @errors[root] = [] unless @errors.key? root
61
+ e = "#{@serializer.class} #{root}"
62
+ e << ":" + path.join(":") if path.any?
63
+ e << ending
64
+ @errors[root] << e
65
+ end
66
+ end
67
+ end
68
+ end
69
+
@@ -0,0 +1,100 @@
1
+ module CollectionJson
2
+ class Serializer
3
+ class Validator
4
+ class ItemsValidator < Validation
5
+ include CollectionJson::Serializer::Support
6
+
7
+ private
8
+
9
+ def validate
10
+ validate_attributes if attributes?
11
+ validate_links if links?
12
+ end
13
+
14
+ def validate_attributes
15
+ @serializer.items.attributes.each do |attr|
16
+ params = attr.extract_params
17
+ validate_attributes_values(@serializer.resources, params)
18
+ validate_attributes_properties(params) if params[:properties]
19
+ end if @serializer.items? && @serializer.items.attributes?
20
+ end
21
+
22
+ def validate_links
23
+ @serializer.items.links.each do |attr|
24
+ link = attr.extract_params
25
+
26
+ href_or_error(
27
+ link[:properties],
28
+ root: :items,
29
+ path: [link[:name]]
30
+ )
31
+
32
+ link[:properties].each do |key, value|
33
+ unless definition[:items][:links].keys.include?(key.to_sym)
34
+ error_for(
35
+ :unknown_attribute,
36
+ root: :items,
37
+ path: [:links, link[:name], key]
38
+ )
39
+ end unless @serializer.uses?(:open_attrs)
40
+
41
+ case key
42
+ when :href
43
+ if url_is_invalid?(value)
44
+ error_for(
45
+ :url,
46
+ root: :items,
47
+ path: [:links, link[:name], key]
48
+ )
49
+ end
50
+ else
51
+ if value_is_invalid?(value)
52
+ error_for(
53
+ :value,
54
+ root: :items,
55
+ path: [:links, link[:name], key]
56
+ )
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ def validate_attributes_values(resources, params)
64
+ resources.each do |resource|
65
+ val = extract_value_from(resource, params[:name])
66
+ if value_is_invalid?(val)
67
+ error_for :value, root: :attributes, path: [params[:name]]
68
+ end
69
+ end
70
+ end
71
+
72
+ def validate_attributes_properties(params)
73
+ params[:properties].each do |key, value|
74
+ unless definition[:items][:data].keys.include?(key.to_sym)
75
+ error_for(
76
+ :unknown_attribute,
77
+ root: :attributes,
78
+ path: [params[:name], key]
79
+ )
80
+ next
81
+ end unless @serializer.uses?(:open_attrs)
82
+
83
+ if value_is_invalid?(value)
84
+ error_for :value, root: :attributes, path: [params[:name], key]
85
+ end
86
+ end
87
+ end
88
+
89
+ def attributes?
90
+ @serializer.items? && @serializer.items.attributes?
91
+ end
92
+
93
+ def links?
94
+ @serializer.items? && @serializer.items.links?
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+
@@ -1,12 +1,12 @@
1
1
  module CollectionJson
2
2
  class Serializer
3
- class Validator
3
+ class Validation
4
4
  class Url
5
5
  # Stolen from https://github.com/eparreno/ruby_regex/blob/master/lib/ruby_regex.rb
6
6
  VALID = /(\A\z)|(\A(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?\z)/ix
7
7
 
8
8
  def initialize(value)
9
- @uri = value
9
+ @uri = value.to_s
10
10
  end
11
11
 
12
12
  def valid?
@@ -1,6 +1,6 @@
1
1
  module CollectionJson
2
2
  class Serializer
3
- class Validator
3
+ class Validation
4
4
  class Value
5
5
  VALID = %w(
6
6
  String
@@ -1,5 +1,5 @@
1
1
  module CollectionJson
2
2
  class Serializer
3
- VERSION = "0.3.2"
3
+ VERSION = "0.3.3"
4
4
  end
5
5
  end
@@ -57,6 +57,10 @@ module CollectionJson
57
57
  name: "email",
58
58
  value: "",
59
59
  prompt: "My email"
60
+ },
61
+ {
62
+ name: "password",
63
+ value: ""
60
64
  }
61
65
  ]
62
66
  },
@@ -138,6 +142,10 @@ module CollectionJson
138
142
  name: "email",
139
143
  value: "",
140
144
  prompt: "My email"
145
+ },
146
+ {
147
+ name: "password",
148
+ value: ""
141
149
  }
142
150
  ]
143
151
  },
@@ -23,9 +23,7 @@ module CollectionJson
23
23
  ]
24
24
  @serializer.items.links = [
25
25
  dashboard: {
26
- # TODO
27
- # This URL shouldn't validate!
28
- href: "/my-dashboard",
26
+ href: "http://example.com/my-dashboard",
29
27
  anything: "at all"
30
28
  }
31
29
  ]
@@ -69,7 +67,7 @@ module CollectionJson
69
67
  links: [
70
68
  {
71
69
  rel: "dashboard",
72
- href: "/my-dashboard",
70
+ href: "http://example.com/my-dashboard",
73
71
  name: "dashboard",
74
72
  anything: "at all",
75
73
  }
@@ -1,7 +1,12 @@
1
1
  class UserSerializer < CollectionJson::Serializer
2
2
  href "http://example.com/users"
3
- template :name, email: { prompt: "My email" }
3
+
4
+ template :name
5
+ template email: { prompt: "My email" }
6
+ template :password
7
+
4
8
  links dashboard: { href: "http://example.com/my-dashboard" }
9
+
5
10
  queries search: {
6
11
  href: "http://example.com/search",
7
12
  name: false
@@ -22,4 +22,45 @@ module TestHelper
22
22
  serializer.items.attributes = []
23
23
  serializer
24
24
  end
25
+
26
+ def values_for_test(of_kind)
27
+ case of_kind
28
+ when :invalid
29
+ return [
30
+ /regex/,
31
+ :symbol,
32
+ {},
33
+ []
34
+ ]
35
+ when :valid
36
+ return [
37
+ "string",
38
+ 1,
39
+ 1.5,
40
+ -1,
41
+ BigDecimal.new(1),
42
+ (22/7.0).to_r,
43
+ true,
44
+ false,
45
+ nil
46
+ ]
47
+ end
48
+ end
49
+
50
+ def urls_for_test(of_kind)
51
+ case of_kind
52
+ when :invalid
53
+ return %w(
54
+ /hello
55
+ http:hello
56
+ )
57
+ when :valid
58
+ return %w(
59
+ http://example.com
60
+ https://example.com
61
+ http://my.example.com
62
+ https://my.example.com/?plus=query_string
63
+ )
64
+ end
65
+ end
25
66
  end
@@ -16,7 +16,8 @@ module CollectionJson
16
16
  def test_that_a_template_can_be_build
17
17
  expected = [
18
18
  { name: "name", value: "" },
19
- { name: "email", value: "", prompt: "My email" }
19
+ { name: "email", value: "", prompt: "My email" },
20
+ { name: "password", value: "" }
20
21
  ]
21
22
 
22
23
  assert_equal expected.to_json, @template.create.to_json
@@ -9,7 +9,13 @@ module CollectionJson
9
9
  end
10
10
 
11
11
  def test_template_attributes
12
- assert_equal [:name, email: { prompt: "My email" }], @user_serializer.class.template
12
+ expected = [
13
+ :name,
14
+ { email: { prompt: "My email" } },
15
+ :password
16
+ ]
17
+
18
+ assert_equal expected, @user_serializer.class.template
13
19
  end
14
20
  end
15
21
  end
@@ -18,13 +18,6 @@ module CollectionJson
18
18
  )
19
19
  @user.account = @account
20
20
 
21
- @invalid_value_types = [
22
- /regex/,
23
- :symbol,
24
- {},
25
- []
26
- ]
27
-
28
21
  @invalid = empty_serializer_for(@user)
29
22
  end
30
23
 
@@ -79,7 +72,7 @@ module CollectionJson
79
72
  def test_that_invalid_attributes_return_values_generate_errors
80
73
  @invalid.items.attributes = [:name]
81
74
 
82
- @invalid_value_types.each do |invalidate|
75
+ values_for_test(:invalid).each do |invalidate|
83
76
  @user.name = invalidate
84
77
  assert @invalid.invalid?,
85
78
  "#{invalidate} should be invalid"
@@ -91,7 +84,7 @@ module CollectionJson
91
84
  end
92
85
 
93
86
  def test_that_invalid_attributes_properties_values_generate_errors
94
- @invalid_value_types.each do |invalidate|
87
+ values_for_test(:invalid).each do |invalidate|
95
88
  @invalid.items.attributes = [
96
89
  name: {
97
90
  prompt: invalidate
@@ -109,7 +102,7 @@ module CollectionJson
109
102
 
110
103
  # Template
111
104
  def test_that_template_values_validate
112
- @invalid_value_types.each do |invalidate|
105
+ values_for_test(:invalid).each do |invalidate|
113
106
  @invalid.class.template = [
114
107
  name: {
115
108
  prompt: invalidate,
@@ -159,7 +152,7 @@ module CollectionJson
159
152
  end
160
153
 
161
154
  def test_that_queries_values_are_validated
162
- @invalid_value_types.each do |invalidate|
155
+ values_for_test(:invalid).each do |invalidate|
163
156
  @invalid.class.queries = [
164
157
  search: {
165
158
  href: "http://example.com/",
@@ -0,0 +1,56 @@
1
+ require "minitest_helper"
2
+
3
+ module CollectionJson
4
+ class Serializer
5
+ class Validator
6
+ class ItemsValidator
7
+ class ItemsValidatorTest < MiniTest::Test
8
+ include TestHelper
9
+
10
+ def setup
11
+ @user = User.new
12
+ end
13
+
14
+ def test_that_attributes_are_validated
15
+ values_for_test(:invalid).each do |invalid|
16
+ @user.name = invalid
17
+ serializer = empty_serializer_for(@user)
18
+ serializer.items.attributes = [:name]
19
+
20
+ items_validator = ItemsValidator.new(serializer)
21
+
22
+ assert items_validator.errors.any?, "should have errors"
23
+ assert items_validator.errors.key?(:attributes),
24
+ "should have key attributes"
25
+ assert items_validator.errors[:attributes][0].
26
+ include?("attributes:name is an invalid value")
27
+ end
28
+ end
29
+
30
+ def test_that_links_are_validated
31
+ values_for_test(:invalid).each do |invalid|
32
+ serializer = empty_serializer_for(@user)
33
+ serializer.items.links = [
34
+ dashboard: {
35
+ href: "invalid url",
36
+ rel: invalid
37
+ }
38
+ ]
39
+
40
+ items_validator = ItemsValidator.new(serializer)
41
+
42
+ assert items_validator.errors.any?, "should have errors"
43
+ assert items_validator.errors.key?(:items),
44
+ "should have key items"
45
+ assert items_validator.errors[:items][0].
46
+ include?("items:links:dashboard:href is an invalid URL")
47
+ assert items_validator.errors[:items][1].
48
+ include?("items:links:dashboard:rel is an invalid value")
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+
@@ -2,16 +2,21 @@ require "minitest_helper"
2
2
 
3
3
  module CollectionJson
4
4
  class Serializer
5
- class Validator
5
+ class Validation
6
6
  class Url
7
7
  class TestUrl < Minitest::Test
8
+ include TestHelper
9
+
8
10
  def test_that_urls_validate
9
- invalid = %w(
10
- /hello
11
- http:hello
12
- )
11
+ urls_for_test(:invalid).each do |url|
12
+ value = Url.new(url)
13
+ refute value.valid?
14
+ assert value.invalid?
15
+ end
16
+ end
13
17
 
14
- invalid.each do |url|
18
+ def test_that_different_data_types_generate_error
19
+ values_for_test(:invalid).each do |url|
15
20
  value = Url.new(url)
16
21
  refute value.valid?
17
22
  assert value.invalid?
@@ -0,0 +1,21 @@
1
+ require 'minitest_helper'
2
+
3
+ module CollectionJson
4
+ class Serializer
5
+ class Validation
6
+ class TestValidation < MiniTest::Test
7
+ include TestHelper
8
+
9
+ def test_that_instantiating_validation_raises_error
10
+ user = User.new(name: 'Carles Jove')
11
+ serializer = empty_serializer_for(user)
12
+
13
+ assert_raises(NotImplementedError) do
14
+ Validation.new(serializer)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+
@@ -2,36 +2,19 @@ require "minitest_helper"
2
2
 
3
3
  module CollectionJson
4
4
  class Serializer
5
- class Validator
5
+ class Validation
6
6
  class Value
7
7
  class TestValue < Minitest::Test
8
- def test_that_values_validate
9
- invalid = [
10
- /regex/,
11
- :symbol,
12
- {},
13
- []
14
- ]
15
-
16
- valid = [
17
- "string",
18
- 1,
19
- 1.5,
20
- -1,
21
- BigDecimal.new(1),
22
- (22/7.0).to_r,
23
- true,
24
- false,
25
- nil
26
- ]
8
+ include TestHelper
27
9
 
28
- invalid.each do |v|
10
+ def test_that_values_validate
11
+ values_for_test(:invalid).each do |v|
29
12
  value = Value.new(v)
30
13
  refute value.valid?, "#{v} should be invalid, but was valid"
31
14
  assert value.invalid?, "#{v} should be invalid, but was valid"
32
15
  end
33
16
 
34
- valid.each do |v|
17
+ values_for_test(:valid) do |v|
35
18
  value = Value.new(v)
36
19
  assert value.valid?, "#{v} should be valid, but was invalid"
37
20
  refute value.invalid?, "#{v} should be valid, but was invalid"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: collection_json_serializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carles Jove i Buxeda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-24 00:00:00.000000000 Z
11
+ date: 2015-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -93,8 +93,10 @@ files:
93
93
  - lib/collection_json_serializer/spec.rb
94
94
  - lib/collection_json_serializer/support.rb
95
95
  - lib/collection_json_serializer/validator.rb
96
- - lib/collection_json_serializer/validator/url.rb
97
- - lib/collection_json_serializer/validator/value.rb
96
+ - lib/collection_json_serializer/validator/base.rb
97
+ - lib/collection_json_serializer/validator/items_validator.rb
98
+ - lib/collection_json_serializer/validator/types/url.rb
99
+ - lib/collection_json_serializer/validator/types/value.rb
98
100
  - lib/collection_json_serializer/version.rb
99
101
  - test/builder/builder_test.rb
100
102
  - test/extensions/open_attrs_test.rb
@@ -123,7 +125,9 @@ files:
123
125
  - test/support/ext_test.rb
124
126
  - test/support/support_test.rb
125
127
  - test/validator/invalid_test.rb
128
+ - test/validator/items_validator_test.rb
126
129
  - test/validator/url_validator_test.rb
130
+ - test/validator/validation_test.rb
127
131
  - test/validator/validator_test.rb
128
132
  - test/validator/value_validator_test.rb
129
133
  homepage: https://github.com/carlesjove/collection_json_serializer
@@ -138,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
138
142
  requirements:
139
143
  - - ">="
140
144
  - !ruby/object:Gem::Version
141
- version: '0'
145
+ version: '2.0'
142
146
  required_rubygems_version: !ruby/object:Gem::Requirement
143
147
  requirements:
144
148
  - - ">="
@@ -178,7 +182,9 @@ test_files:
178
182
  - test/support/ext_test.rb
179
183
  - test/support/support_test.rb
180
184
  - test/validator/invalid_test.rb
185
+ - test/validator/items_validator_test.rb
181
186
  - test/validator/url_validator_test.rb
187
+ - test/validator/validation_test.rb
182
188
  - test/validator/validator_test.rb
183
189
  - test/validator/value_validator_test.rb
184
190
  has_rdoc: