schemacop 3.0.0.rc3 → 3.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,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b93149de6cee935353aba3381d9e1ee76b51bc4b19763d8634566d375208fcac
4
- data.tar.gz: cb8e1a8b82104f6482d5017d90e3d5c2094d564ac9ef1001d2336bac137886cb
3
+ metadata.gz: 90acd1ba976d75dae0019274d843c5d727858655238148a10bd485973e964fba
4
+ data.tar.gz: 40e63d805b815c61bcf342fc449fa5f0be506f386b7a315df33c9baada0723cd
5
5
  SHA512:
6
- metadata.gz: 0df1ba4b0c314901d015ca969996ffa9df862c79df0a52129bc3b749add7ff2e60ff52a9fb8a874f82b57017fef821c1e8d5d703093e0fd3bade224e8c84d259
7
- data.tar.gz: 1f501b7fdee6cc8347fe1acaf522f268ef5882e595f0c136c68c773b98615b37a05aeeaf1b472c3152546cdd3ae0859dd216eae9850f9f2992c2e970c7111157
6
+ metadata.gz: ff575cb152372e2cf0685ae1f5ac123c88245a6bb23acbdc7dd0daa27098d245fc90f9e6f5d381d9490d4476109d22c01a86df5744e84b872c6708e4841b7a06
7
+ data.tar.gz: fda34143fc547221dadfe7cdcb24206185e2b1736ad8e4925e70928fb7d22a5f280f54a70503b5cdf7380f30fcdf250f5663eeae26323dec8dbabd4e686928dc
data/CHANGELOG.md CHANGED
@@ -10,19 +10,47 @@
10
10
  ### Changes
11
11
  -->
12
12
 
13
- ## 3.0.0.rc3 (2020-01-28)
13
+ ## 3.0.2 (2021-02-14)
14
+
15
+ * Fix #15 Code to ignore Zeitwerk fails when Zeitwerk is disabled
16
+
17
+ ## 3.0.1 (2021-02-11)
18
+
19
+ * Add format `symbol` to strings
20
+
21
+ ## 3.0.0 (2021-02-08)
22
+
23
+ * Setup Zeitwerk ignores for Rails applications
24
+
25
+ * Read previous `3.0.0.rcX` entries for all changes included
26
+ in this stable release
27
+
28
+ ## 3.0.0.rc5 (2021-02-05)
29
+
30
+ * Use `ruby2_keywords` for compatibility with ruby `2.6.2`
31
+
32
+ ## 3.0.0.rc4 (2021-02-02)
33
+
34
+ * Fix some minor bugs
35
+
36
+ * Improve documentation
37
+
38
+ * `used_external_schemas` for the `ReferenceNode` is now applied
39
+ recursively
40
+
41
+ ## 3.0.0.rc3 (2021-01-28)
14
42
 
15
43
  * Add minor improvements to the documentation
16
44
 
17
45
  * Internal restructuring, no changes in API
18
46
 
19
- ## 3.0.0.rc2 (2020-01-28)
47
+ ## 3.0.0.rc2 (2021-01-28)
20
48
 
21
49
  * Represent node names as strings internally
22
50
 
23
51
  * Update documentation
24
52
 
25
- ## 3.0.0.rc1 (2020-01-22)
53
+ ## 3.0.0.rc1 (2021-01-22)
26
54
 
27
55
  * Add support for ruby `3.0.0`
28
56
 
@@ -30,7 +58,7 @@
30
58
 
31
59
  * Document all `v3` nodes
32
60
 
33
- ## 3.0.0.rc0 (2020-01-14)
61
+ ## 3.0.0.rc0 (2021-01-14)
34
62
 
35
63
  * Add `Schemacop::Schema3`
36
64
 
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020 Sitrox
3
+ Copyright © 2016 - 2021 Sitrox
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -118,4 +118,4 @@ To run tests:
118
118
 
119
119
  ## Copyright
120
120
 
121
- Copyright (c) 2020 Sitrox. See `LICENSE` for further details.
121
+ Copyright © 2016 - 2021 Sitrox. See `LICENSE` for further details.
data/README_V3.md CHANGED
@@ -90,7 +90,7 @@ Schemacop can raise the following exceptions:
90
90
  Example:
91
91
 
92
92
  ```ruby
93
- Schemacop::Schema3.new do
93
+ Schemacop::Schema3.new :hash do
94
94
  int!
95
95
  end
96
96
 
@@ -241,6 +241,9 @@ transformed into various types.
241
241
  * `number`
242
242
  The string must be a number and will be casted to a ruby `Float` object.
243
243
 
244
+ * `symbol`
245
+ The string can be anything and will be casted to a ruby `Symbol` object.
246
+
244
247
  #### Examples
245
248
 
246
249
  ```ruby
@@ -380,7 +383,7 @@ schema.validate!(1234) # => Schemacop::Exceptions::ValidationError: /: Invali
380
383
  ### Array
381
384
 
382
385
  Type: `:array`\
383
- DSL: `arr`
386
+ DSL: `ary`
384
387
 
385
388
  The array type represents a ruby `Array`.
386
389
  It consists of one or multiple values, which can be validated using arbitrary nodes.
@@ -587,8 +590,9 @@ It consists of key-value-pairs that can be validated using arbitrary nodes.
587
590
 
588
591
  * `additional_properties`
589
592
  This option specifies whether additional, unspecified properties are allowed
590
- (`true`) or not (`false`). By default, this is `true` if no properties are
591
- specified and `false` if you have specified at least one property.
593
+ (`true`) or not (`false`). By default, this is `false`, i.e. you need to
594
+ explicitly set it to `true` if you want to allow arbitrary additional properties,
595
+ or use the `add` DSL method (see below) to specify additional properties.
592
596
 
593
597
  * `property_names`
594
598
  This option allows to specify a regexp pattern (as string) which validates the
@@ -673,6 +677,61 @@ end
673
677
  schema.validate!(foo: 42, 'foo' => 43) # => Schemacop::Exceptions::ValidationError: /: Has 1 ambiguous properties: [:foo].
674
678
  ```
675
679
 
680
+ In addition to the normal node options (which vary from type to type, check
681
+ the respective nodes for details), properties also support the `as` option.
682
+
683
+ With this, you can "rename" properties in the output:
684
+
685
+ ```ruby
686
+ schema = Schemacop::Schema3.new :hash do
687
+ int! :foo, as: :bar
688
+ end
689
+
690
+ schema.validate!({foo: 42}) # => {"bar"=>42}
691
+ ```
692
+
693
+ Please note that if you specify a node with the same property name multiple
694
+ times, or use the `as` option to rename a node to the same name of another
695
+ node, the last specified node will be used:
696
+
697
+ ```ruby
698
+ schema = Schemacop::Schema3.new :hash do
699
+ int? :foo
700
+ str? :foo
701
+ end
702
+
703
+ schema.validate!({foo: 1}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, expected "string".
704
+ schema.validate!({foo: 'bar'}) # => {"foo"=>"bar"}
705
+ ```
706
+
707
+ As well as:
708
+
709
+ ```ruby
710
+ schema = Schemacop::Schema3.new :hash do
711
+ int? :foo
712
+ int? :bar, as: :foo
713
+ end
714
+
715
+ schema.validate!({foo: 1}) # => {"foo"=>1}
716
+ schema.validate!({foo: 1, bar: 2}) # => {"foo"=>2}
717
+ schema.validate!({bar: 2}) # => {"foo"=>2}
718
+ ```
719
+
720
+ If you want to specify a node which may be one of multiple types, use the `one_of`
721
+ node (see further down for more details):
722
+
723
+ ```ruby
724
+ schema = Schemacop::Schema3.new :hash do
725
+ one_of! :foo do
726
+ int
727
+ str
728
+ end
729
+ end
730
+
731
+ schema.validate!({foo: 1}) # => {"foo"=>1}
732
+ schema.validate!({foo: 'bar'}) # => {"foo"=>"bar"}
733
+ ```
734
+
676
735
  ##### Pattern properties
677
736
 
678
737
  In addition to symbols, property keys can also be a regular expression. Here,
@@ -1135,14 +1194,17 @@ local schemas > context schemas > global schemas
1135
1194
 
1136
1195
  Where:
1137
1196
 
1138
- * local schemas: Defined by using the DSL method? `scm`
1197
+ * local schemas: Defined by using the DSL method `scm`
1139
1198
  * context schemas: Defined in the current context using `context.schema`
1140
1199
  * global schemas: Defined in a ruby file in the load path
1141
1200
 
1142
1201
  ### Rails applications
1143
1202
 
1144
- In Rails applications, your schemas are automatically eager-laoded from the load
1145
- path `'app/schemas'` when your application is started.
1203
+ In Rails applications, your schemas are automatically eager-loaded from the load
1204
+ path `'app/schemas'` when your application is started, unless your application
1205
+ is running in the `DEVELOPMENT` environment. In the `DEVELOPMENT` environment,
1206
+ schemas are loaded each time when they are used, and as such you can make changes
1207
+ to your external schemas without having to restart the server each time.
1146
1208
 
1147
1209
  After starting your application, you can reference them like normally defined
1148
1210
  reference schemas, with the name being relative to the load path.
@@ -1190,8 +1252,12 @@ schema.validate!({usr: {first_name: 'Joe', last_name: 'Doe', groups: [{name: 'fo
1190
1252
  ### Non-Rails applications
1191
1253
 
1192
1254
  Usage in non-Rails applications is the same as with usage in Rails applications,
1193
- however you need to eager load the schemas yourself:
1255
+ however you might need to eager load the schemas yourself:
1194
1256
 
1195
1257
  ```ruby
1196
1258
  Schemacop::V3::GlobalContext.eager_load!
1197
1259
  ```
1260
+
1261
+ As mentioned before, you can also use the external schemas without having to
1262
+ eager-load them, but if you use the schemas multiple times, it might be better
1263
+ to eager-load them on start of your application / script.
data/Rakefile CHANGED
@@ -18,6 +18,7 @@ task :gemspec do
18
18
  # needs access to ActiveSupport::HashWithIndifferentAccess and expects
19
19
  # behavior of that as in version 5 of ActiveSupport.
20
20
  spec.add_dependency 'activesupport', '>= 4.0'
21
+ spec.add_dependency 'ruby2_keywords', '0.0.4'
21
22
  spec.add_development_dependency 'bundler'
22
23
  spec.add_development_dependency 'rake'
23
24
  spec.add_development_dependency 'minitest'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.0.rc3
1
+ 3.0.2
data/lib/schemacop.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # External dependencies
2
+ require 'ruby2_keywords'
2
3
  require 'active_support/all'
3
4
  require 'set'
4
5
 
@@ -5,6 +5,13 @@ module Schemacop
5
5
  unless Rails.env.development?
6
6
  V3::GlobalContext.eager_load!
7
7
  end
8
+
9
+ # Tell Zeitwerk to ignore the files in our load path
10
+ if defined?(Rails) && defined?(Zeitwerk) && Rails.autoloaders.zeitwerk_enabled?
11
+ Schemacop.load_paths.each do |load_path|
12
+ Rails.autoloaders.main.ignore(Rails.root.join(load_path))
13
+ end
14
+ end
8
15
  end
9
16
  end
10
17
  end
@@ -7,14 +7,14 @@ module Schemacop
7
7
  @prefix = prefix
8
8
  end
9
9
 
10
- def method_missing(symbol, *args, **kwargs, &block)
10
+ ruby2_keywords def method_missing(symbol, *args, &block)
11
11
  symbol = :"#{@prefix}#{symbol}" if @prefix
12
12
 
13
13
  if @methods.include?(symbol)
14
14
  if @delegation_object.respond_to?(symbol)
15
- @delegation_object.send(symbol, *args, **kwargs, &block)
15
+ @delegation_object.send(symbol, *args, &block)
16
16
  elsif @backup_binding.respond_to?(symbol)
17
- @backup_binding.send(symbol, *args, **kwargs, &block)
17
+ @backup_binding.send(symbol, *args, &block)
18
18
  else
19
19
  super
20
20
  end
@@ -18,6 +18,7 @@ module Schemacop::V2
18
18
  @data = data
19
19
  @target_type = target_type
20
20
  @caster = nil
21
+ @value = nil
21
22
 
22
23
  if casts.is_a?(Array)
23
24
  from_types = casts
@@ -68,7 +68,7 @@ module Schemacop
68
68
 
69
69
  # In schemacop, by default, additional properties are not allowed,
70
70
  # the users explicitly need to enable additional properties
71
- if options[:additional_properties] == true
71
+ if options[:additional_properties].is_a?(TrueClass)
72
72
  json[:additionalProperties] = true
73
73
  elsif options[:additional_properties].is_a?(Node)
74
74
  json[:additionalProperties] = options[:additional_properties].as_json
@@ -141,7 +141,9 @@ module Schemacop
141
141
  result.error "Property name #{name.inspect} does not match #{options[:property_names].inspect}."
142
142
  end
143
143
 
144
- if options[:additional_properties].blank?
144
+ if options[:additional_properties].is_a?(TrueClass)
145
+ next
146
+ elsif options[:additional_properties].is_a?(FalseClass) || options[:additional_properties].blank?
145
147
  match = property_patterns.keys.find { |p| p.match?(name.to_s) }
146
148
  if match
147
149
  result.in_path(name) do
@@ -176,16 +178,10 @@ module Schemacop
176
178
  data ||= default
177
179
  return nil if data.nil?
178
180
 
179
- original_data_hash = data.dup
180
- data_hash = data.with_indifferent_access
181
-
182
- if original_data_hash.size != data_hash.size
183
- ambiguous_properties = original_data_hash.keys - data_hash.keys
184
-
185
- result.error "Has #{ambiguous_properties.size} ambiguous properties: #{ambiguous_properties}."
186
- end
181
+ data_hash = data.dup.with_indifferent_access
187
182
 
188
183
  property_patterns = {}
184
+ as_names = []
189
185
 
190
186
  @properties.each_value do |prop|
191
187
  if prop.name.is_a?(Regexp)
@@ -193,10 +189,18 @@ module Schemacop
193
189
  next
194
190
  end
195
191
 
196
- result[prop.as || prop.name] = prop.cast(data_hash[prop.name])
192
+ as_names << prop.as&.to_s if prop.as.present?
197
193
 
198
- if result[prop.as || prop.name].nil? && !data_hash.include?(prop.name)
199
- result.delete(prop.as || prop.name)
194
+ prop_name = prop.as&.to_s || prop.name
195
+
196
+ casted_data = prop.cast(data_hash[prop.name])
197
+
198
+ if casted_data.present? || data_hash.include?(prop.name)
199
+ result[prop_name] = casted_data
200
+ end
201
+
202
+ if result[prop_name].nil? && !data_hash.include?(prop.name) && !as_names.include?(prop.name)
203
+ result.delete(prop_name)
200
204
  end
201
205
  end
202
206
 
@@ -213,7 +217,7 @@ module Schemacop
213
217
  end
214
218
 
215
219
  # Handle additional properties
216
- if options[:additional_properties] == true
220
+ if options[:additional_properties].is_a?(TrueClass)
217
221
  result = data_hash.merge(result)
218
222
  elsif options[:additional_properties].is_a?(Node)
219
223
  specified_properties = @properties.keys.to_set
@@ -238,6 +242,11 @@ module Schemacop
238
242
  unless @options[:additional_properties].nil? || @options[:additional_properties].is_a?(TrueClass) || @options[:additional_properties].is_a?(FalseClass)
239
243
  fail Schemacop::Exceptions::InvalidSchemaError, 'Option "additional_properties" must be a boolean value'
240
244
  end
245
+
246
+ # Default the additional_properties option to false if it's not given
247
+ if @options[:additional_properties].nil?
248
+ @options[:additional_properties] = false
249
+ end
241
250
  end
242
251
 
243
252
  def validate_self
@@ -72,7 +72,7 @@ module Schemacop
72
72
  disallowed_options = options.keys - self.class.allowed_options
73
73
 
74
74
  if disallowed_options.any?
75
- fail "Options #{disallowed_options.inspect} are not allowed for this node."
75
+ fail Schemacop::Exceptions::InvalidSchemaError, "Options #{disallowed_options.inspect} are not allowed for this node."
76
76
  end
77
77
 
78
78
  # Assign attributes #
@@ -95,7 +95,7 @@ module Schemacop
95
95
  # Run DSL block #
96
96
  if block_given?
97
97
  unless self.class.supports_children_options
98
- fail "Node #{self.class} does not support blocks."
98
+ fail Schemacop::Exceptions::InvalidSchemaError, "Node #{self.class} does not support blocks."
99
99
  end
100
100
 
101
101
  scope = DslScope.new(self)
@@ -40,10 +40,6 @@ module Schemacop
40
40
  def self.name(klass)
41
41
  @by_class[klass][:name]
42
42
  end
43
-
44
- def self.short_name(klass)
45
- @by_class[klass][:short_name]
46
- end
47
43
  end
48
44
  end
49
45
  end
@@ -36,7 +36,13 @@ module Schemacop
36
36
  end
37
37
 
38
38
  def used_external_schemas
39
- schemas.include?(@path) ? [] : [@path]
39
+ target_children_schema = target.used_external_schemas
40
+
41
+ if schemas.include?(@path)
42
+ return target_children_schema
43
+ else
44
+ return [@path] + target_children_schema
45
+ end
40
46
  end
41
47
 
42
48
  protected
@@ -16,6 +16,7 @@ module Schemacop
16
16
  email: URI::MailTo::EMAIL_REGEXP,
17
17
  boolean: /^(true|false)$/,
18
18
  binary: nil,
19
+ symbol: nil,
19
20
  integer: /^-?[0-9]+$/,
20
21
  number: /^-?[0-9]+(\.[0-9]+)?$/
21
22
  }.freeze
@@ -66,21 +67,31 @@ module Schemacop
66
67
  end
67
68
 
68
69
  def cast(value)
70
+ if value.present?
71
+ to_cast = value
72
+ elsif default.present?
73
+ to_cast = default
74
+ else
75
+ return nil
76
+ end
77
+
69
78
  case options[:format]
70
79
  when :boolean
71
- return value == 'true'
80
+ return to_cast == 'true'
72
81
  when :date
73
- return Date.parse(value)
82
+ return Date.parse(to_cast)
74
83
  when :'date-time'
75
- return DateTime.parse(value)
84
+ return DateTime.parse(to_cast)
76
85
  when :time
77
- Time.parse(value)
86
+ Time.parse(to_cast)
78
87
  when :integer
79
- return Integer(value)
88
+ return Integer(to_cast)
80
89
  when :number
81
- return Float(value)
90
+ return Float(to_cast)
91
+ when :symbol
92
+ return to_cast.to_sym
82
93
  else
83
- return value || default
94
+ return to_cast
84
95
  end
85
96
  end
86
97
 
data/schemacop.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: schemacop 3.0.0.rc3 ruby lib
2
+ # stub: schemacop 3.0.2 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "schemacop".freeze
6
- s.version = "3.0.0.rc3"
6
+ s.version = "3.0.2"
7
7
 
8
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1".freeze) if s.respond_to? :required_rubygems_version=
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Sitrox".freeze]
11
- s.date = "2021-01-28"
12
- s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "README_V2.md".freeze, "README_V3.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "lib/schemacop.rb".freeze, "lib/schemacop/base_schema.rb".freeze, "lib/schemacop/exceptions.rb".freeze, "lib/schemacop/railtie.rb".freeze, "lib/schemacop/schema.rb".freeze, "lib/schemacop/schema2.rb".freeze, "lib/schemacop/schema3.rb".freeze, "lib/schemacop/scoped_env.rb".freeze, "lib/schemacop/v2.rb".freeze, "lib/schemacop/v2/caster.rb".freeze, "lib/schemacop/v2/collector.rb".freeze, "lib/schemacop/v2/dupper.rb".freeze, "lib/schemacop/v2/field_node.rb".freeze, "lib/schemacop/v2/node.rb".freeze, "lib/schemacop/v2/node_resolver.rb".freeze, "lib/schemacop/v2/node_supporting_field.rb".freeze, "lib/schemacop/v2/node_supporting_type.rb".freeze, "lib/schemacop/v2/node_with_block.rb".freeze, "lib/schemacop/v2/root_node.rb".freeze, "lib/schemacop/v2/validator/array_validator.rb".freeze, "lib/schemacop/v2/validator/boolean_validator.rb".freeze, "lib/schemacop/v2/validator/float_validator.rb".freeze, "lib/schemacop/v2/validator/hash_validator.rb".freeze, "lib/schemacop/v2/validator/integer_validator.rb".freeze, "lib/schemacop/v2/validator/nil_validator.rb".freeze, "lib/schemacop/v2/validator/number_validator.rb".freeze, "lib/schemacop/v2/validator/object_validator.rb".freeze, "lib/schemacop/v2/validator/string_validator.rb".freeze, "lib/schemacop/v2/validator/symbol_validator.rb".freeze, "lib/schemacop/v3.rb".freeze, "lib/schemacop/v3/all_of_node.rb".freeze, "lib/schemacop/v3/any_of_node.rb".freeze, "lib/schemacop/v3/array_node.rb".freeze, "lib/schemacop/v3/boolean_node.rb".freeze, "lib/schemacop/v3/combination_node.rb".freeze, "lib/schemacop/v3/context.rb".freeze, "lib/schemacop/v3/dsl_scope.rb".freeze, "lib/schemacop/v3/global_context.rb".freeze, "lib/schemacop/v3/hash_node.rb".freeze, "lib/schemacop/v3/integer_node.rb".freeze, "lib/schemacop/v3/is_not_node.rb".freeze, "lib/schemacop/v3/node.rb".freeze, "lib/schemacop/v3/node_registry.rb".freeze, "lib/schemacop/v3/number_node.rb".freeze, "lib/schemacop/v3/numeric_node.rb".freeze, "lib/schemacop/v3/object_node.rb".freeze, "lib/schemacop/v3/one_of_node.rb".freeze, "lib/schemacop/v3/reference_node.rb".freeze, "lib/schemacop/v3/result.rb".freeze, "lib/schemacop/v3/string_node.rb".freeze, "lib/schemacop/v3/symbol_node.rb".freeze, "schemacop.gemspec".freeze, "test/lib/test_helper.rb".freeze, "test/schemas/nested/group.rb".freeze, "test/schemas/user.rb".freeze, "test/unit/schemacop/v2/casting_test.rb".freeze, "test/unit/schemacop/v2/collector_test.rb".freeze, "test/unit/schemacop/v2/custom_check_test.rb".freeze, "test/unit/schemacop/v2/custom_if_test.rb".freeze, "test/unit/schemacop/v2/defaults_test.rb".freeze, "test/unit/schemacop/v2/empty_test.rb".freeze, "test/unit/schemacop/v2/nil_dis_allow_test.rb".freeze, "test/unit/schemacop/v2/node_resolver_test.rb".freeze, "test/unit/schemacop/v2/short_forms_test.rb".freeze, "test/unit/schemacop/v2/types_test.rb".freeze, "test/unit/schemacop/v2/validator_array_test.rb".freeze, "test/unit/schemacop/v2/validator_boolean_test.rb".freeze, "test/unit/schemacop/v2/validator_float_test.rb".freeze, "test/unit/schemacop/v2/validator_hash_test.rb".freeze, "test/unit/schemacop/v2/validator_integer_test.rb".freeze, "test/unit/schemacop/v2/validator_nil_test.rb".freeze, "test/unit/schemacop/v2/validator_number_test.rb".freeze, "test/unit/schemacop/v2/validator_object_test.rb".freeze, "test/unit/schemacop/v2/validator_string_test.rb".freeze, "test/unit/schemacop/v2/validator_symbol_test.rb".freeze, "test/unit/schemacop/v3/all_of_node_test.rb".freeze, "test/unit/schemacop/v3/any_of_node_test.rb".freeze, "test/unit/schemacop/v3/array_node_test.rb".freeze, "test/unit/schemacop/v3/boolean_node_test.rb".freeze, "test/unit/schemacop/v3/global_context_test.rb".freeze, "test/unit/schemacop/v3/hash_node_test.rb".freeze, "test/unit/schemacop/v3/integer_node_test.rb".freeze, "test/unit/schemacop/v3/is_not_node_test.rb".freeze, "test/unit/schemacop/v3/node_test.rb".freeze, "test/unit/schemacop/v3/number_node_test.rb".freeze, "test/unit/schemacop/v3/object_node_test.rb".freeze, "test/unit/schemacop/v3/one_of_node_test.rb".freeze, "test/unit/schemacop/v3/reference_node_test.rb".freeze, "test/unit/schemacop/v3/string_node_test.rb".freeze, "test/unit/schemacop/v3/symbol_node_test.rb".freeze]
11
+ s.date = "2021-02-14"
12
+ s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "README_V2.md".freeze, "README_V3.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "lib/schemacop.rb".freeze, "lib/schemacop/base_schema.rb".freeze, "lib/schemacop/exceptions.rb".freeze, "lib/schemacop/railtie.rb".freeze, "lib/schemacop/schema.rb".freeze, "lib/schemacop/schema2.rb".freeze, "lib/schemacop/schema3.rb".freeze, "lib/schemacop/scoped_env.rb".freeze, "lib/schemacop/v2.rb".freeze, "lib/schemacop/v2/caster.rb".freeze, "lib/schemacop/v2/collector.rb".freeze, "lib/schemacop/v2/dupper.rb".freeze, "lib/schemacop/v2/field_node.rb".freeze, "lib/schemacop/v2/node.rb".freeze, "lib/schemacop/v2/node_resolver.rb".freeze, "lib/schemacop/v2/node_supporting_field.rb".freeze, "lib/schemacop/v2/node_supporting_type.rb".freeze, "lib/schemacop/v2/node_with_block.rb".freeze, "lib/schemacop/v2/validator/array_validator.rb".freeze, "lib/schemacop/v2/validator/boolean_validator.rb".freeze, "lib/schemacop/v2/validator/float_validator.rb".freeze, "lib/schemacop/v2/validator/hash_validator.rb".freeze, "lib/schemacop/v2/validator/integer_validator.rb".freeze, "lib/schemacop/v2/validator/nil_validator.rb".freeze, "lib/schemacop/v2/validator/number_validator.rb".freeze, "lib/schemacop/v2/validator/object_validator.rb".freeze, "lib/schemacop/v2/validator/string_validator.rb".freeze, "lib/schemacop/v2/validator/symbol_validator.rb".freeze, "lib/schemacop/v3.rb".freeze, "lib/schemacop/v3/all_of_node.rb".freeze, "lib/schemacop/v3/any_of_node.rb".freeze, "lib/schemacop/v3/array_node.rb".freeze, "lib/schemacop/v3/boolean_node.rb".freeze, "lib/schemacop/v3/combination_node.rb".freeze, "lib/schemacop/v3/context.rb".freeze, "lib/schemacop/v3/dsl_scope.rb".freeze, "lib/schemacop/v3/global_context.rb".freeze, "lib/schemacop/v3/hash_node.rb".freeze, "lib/schemacop/v3/integer_node.rb".freeze, "lib/schemacop/v3/is_not_node.rb".freeze, "lib/schemacop/v3/node.rb".freeze, "lib/schemacop/v3/node_registry.rb".freeze, "lib/schemacop/v3/number_node.rb".freeze, "lib/schemacop/v3/numeric_node.rb".freeze, "lib/schemacop/v3/object_node.rb".freeze, "lib/schemacop/v3/one_of_node.rb".freeze, "lib/schemacop/v3/reference_node.rb".freeze, "lib/schemacop/v3/result.rb".freeze, "lib/schemacop/v3/string_node.rb".freeze, "lib/schemacop/v3/symbol_node.rb".freeze, "schemacop.gemspec".freeze, "test/lib/test_helper.rb".freeze, "test/schemas/nested/group.rb".freeze, "test/schemas/user.rb".freeze, "test/unit/schemacop/v2/casting_test.rb".freeze, "test/unit/schemacop/v2/collector_test.rb".freeze, "test/unit/schemacop/v2/custom_check_test.rb".freeze, "test/unit/schemacop/v2/custom_if_test.rb".freeze, "test/unit/schemacop/v2/defaults_test.rb".freeze, "test/unit/schemacop/v2/empty_test.rb".freeze, "test/unit/schemacop/v2/nil_dis_allow_test.rb".freeze, "test/unit/schemacop/v2/node_resolver_test.rb".freeze, "test/unit/schemacop/v2/short_forms_test.rb".freeze, "test/unit/schemacop/v2/types_test.rb".freeze, "test/unit/schemacop/v2/validator_array_test.rb".freeze, "test/unit/schemacop/v2/validator_boolean_test.rb".freeze, "test/unit/schemacop/v2/validator_float_test.rb".freeze, "test/unit/schemacop/v2/validator_hash_test.rb".freeze, "test/unit/schemacop/v2/validator_integer_test.rb".freeze, "test/unit/schemacop/v2/validator_nil_test.rb".freeze, "test/unit/schemacop/v2/validator_number_test.rb".freeze, "test/unit/schemacop/v2/validator_object_test.rb".freeze, "test/unit/schemacop/v2/validator_string_test.rb".freeze, "test/unit/schemacop/v2/validator_symbol_test.rb".freeze, "test/unit/schemacop/v3/all_of_node_test.rb".freeze, "test/unit/schemacop/v3/any_of_node_test.rb".freeze, "test/unit/schemacop/v3/array_node_test.rb".freeze, "test/unit/schemacop/v3/boolean_node_test.rb".freeze, "test/unit/schemacop/v3/global_context_test.rb".freeze, "test/unit/schemacop/v3/hash_node_test.rb".freeze, "test/unit/schemacop/v3/integer_node_test.rb".freeze, "test/unit/schemacop/v3/is_not_node_test.rb".freeze, "test/unit/schemacop/v3/node_test.rb".freeze, "test/unit/schemacop/v3/number_node_test.rb".freeze, "test/unit/schemacop/v3/object_node_test.rb".freeze, "test/unit/schemacop/v3/one_of_node_test.rb".freeze, "test/unit/schemacop/v3/reference_node_test.rb".freeze, "test/unit/schemacop/v3/string_node_test.rb".freeze, "test/unit/schemacop/v3/symbol_node_test.rb".freeze]
13
13
  s.homepage = "https://github.com/sitrox/schemacop".freeze
14
14
  s.licenses = ["MIT".freeze]
15
15
  s.rubygems_version = "3.0.3".freeze
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
 
22
22
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
23
23
  s.add_runtime_dependency(%q<activesupport>.freeze, [">= 4.0"])
24
+ s.add_runtime_dependency(%q<ruby2_keywords>.freeze, ["= 0.0.4"])
24
25
  s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
25
26
  s.add_development_dependency(%q<rake>.freeze, [">= 0"])
26
27
  s.add_development_dependency(%q<minitest>.freeze, [">= 0"])
@@ -32,6 +33,7 @@ Gem::Specification.new do |s|
32
33
  s.add_development_dependency(%q<simplecov>.freeze, ["= 0.21.2"])
33
34
  else
34
35
  s.add_dependency(%q<activesupport>.freeze, [">= 4.0"])
36
+ s.add_dependency(%q<ruby2_keywords>.freeze, ["= 0.0.4"])
35
37
  s.add_dependency(%q<bundler>.freeze, [">= 0"])
36
38
  s.add_dependency(%q<rake>.freeze, [">= 0"])
37
39
  s.add_dependency(%q<minitest>.freeze, [">= 0"])
@@ -44,6 +46,7 @@ Gem::Specification.new do |s|
44
46
  end
45
47
  else
46
48
  s.add_dependency(%q<activesupport>.freeze, [">= 4.0"])
49
+ s.add_dependency(%q<ruby2_keywords>.freeze, ["= 0.0.4"])
47
50
  s.add_dependency(%q<bundler>.freeze, [">= 0"])
48
51
  s.add_dependency(%q<rake>.freeze, [">= 0"])
49
52
  s.add_dependency(%q<minitest>.freeze, [">= 0"])
@@ -1,5 +1,15 @@
1
1
  require 'simplecov'
2
- SimpleCov.start
2
+ SimpleCov.start do
3
+ add_group 'v3', 'lib/schemacop/v3'
4
+ add_group 'v2', 'lib/schemacop/v2'
5
+
6
+ # We don't care about the test coverage for the
7
+ # tests themselves
8
+ add_filter 'test'
9
+
10
+ # Also enable branch coverage reporting
11
+ enable_coverage :branch
12
+ end
3
13
 
4
14
  # TODO: Move to more sensible location
5
15
  def assert_verr(&block)
@@ -141,7 +151,12 @@ class V3Test < SchemacopTest
141
151
  input_data_was = Marshal.load(Marshal.dump(input_data))
142
152
  result = @schema.validate(input_data)
143
153
  assert_empty result.errors
144
- assert_equal expected_data, result.data, 'Unexpected result data.'
154
+
155
+ if expected_data.nil?
156
+ assert_nil result.data, 'Unexpected result data.'
157
+ else
158
+ assert_equal expected_data, result.data, 'Unexpected result data.'
159
+ end
145
160
 
146
161
  if input_data.nil?
147
162
  assert_nil input_data_was, 'Expected input_data to stay the same.'
@@ -115,6 +115,43 @@ module Schemacop
115
115
  assert_equal expected_float, s.validate!(float_field: '')
116
116
  assert_equal expected_float, s.validate!(float_field: ' ')
117
117
  end
118
+
119
+ def test_float_to_integer
120
+ s = Schema.new do
121
+ req :foo, :integer, cast: [Float]
122
+ end
123
+
124
+ assert_equal({ foo: 42 }, s.validate!(foo: 42.0))
125
+ assert_equal({ foo: 42 }, s.validate!(foo: Float(42)))
126
+ end
127
+
128
+ def test_integer_to_float
129
+ s = Schema.new do
130
+ req :foo, :float, cast: [Integer]
131
+ end
132
+
133
+ assert_equal({ foo: 42.0 }, s.validate!(foo: 42))
134
+ assert_equal({ foo: 42.0 }, s.validate!(foo: Integer(42)))
135
+ end
136
+
137
+ def test_invalid_cast_option
138
+ s = Schema.new do
139
+ req :foo, :integer, cast: true
140
+ end
141
+
142
+ assert_raises Schemacop::Exceptions::InvalidSchemaError do
143
+ s.validate!({ foo: '42' })
144
+ end
145
+ end
146
+
147
+ def test_impossible_cast
148
+ s = Schema.new do
149
+ req :foo, :integer, cast: [String]
150
+ end
151
+
152
+ assert_equal({ foo: 42 }, s.validate!(foo: '42'))
153
+ assert_verr { s.validate!(foo: 'foo') }
154
+ end
118
155
  end
119
156
  end
120
157
  end
@@ -90,6 +90,17 @@ module Schemacop
90
90
  assert_verr { s.validate!(o: true) }
91
91
  assert_verr { s.validate!(r: nil, r_nil: false, o: true) }
92
92
  end
93
+
94
+ def test_invalid_hash
95
+ s = Schema.new do
96
+ type :hash do
97
+ req :foo
98
+ end
99
+ end
100
+
101
+ assert_verr { s.validate!({ foo: 42, 'foo' => 42 }) }
102
+ assert_nothing_raised { s.validate!({ foo: 42 }.with_indifferent_access) }
103
+ end
93
104
  end
94
105
  end
95
106
  end
@@ -25,8 +25,10 @@ module Schemacop
25
25
 
26
26
  def test_schemas
27
27
  assert_equal({}, GlobalContext.instance.schemas)
28
+ assert_equal({}, GlobalContext.schemas)
28
29
  GlobalContext.instance.eager_load!
29
30
  assert_equal(%i[nested/group user], GlobalContext.instance.schemas.keys)
31
+ assert_equal(%i[nested/group user], GlobalContext.schemas.keys)
30
32
  assert_is_a Node, GlobalContext.instance.schemas.values.first
31
33
  end
32
34
 
@@ -16,7 +16,7 @@ module Schemacop
16
16
  assert_json(type: :object, additionalProperties: false)
17
17
  end
18
18
 
19
- def test_additional_properties_false
19
+ def test_additional_properties_false_by_default
20
20
  schema
21
21
  assert_validation({})
22
22
  assert_validation(foo: :bar, bar: :baz) do
@@ -26,6 +26,17 @@ module Schemacop
26
26
  assert_json(type: :object, additionalProperties: false)
27
27
  end
28
28
 
29
+ def test_additional_properties_false
30
+ schema :hash, additional_properties: false
31
+
32
+ assert_validation({})
33
+ assert_validation(foo: :bar, bar: :baz) do
34
+ error '/', 'Obsolete property "foo".'
35
+ error '/', 'Obsolete property "bar".'
36
+ end
37
+ assert_json(type: :object, additionalProperties: false)
38
+ end
39
+
29
40
  def test_additional_properties_true
30
41
  schema :hash, additional_properties: true
31
42
  assert_validation({})
@@ -874,11 +885,88 @@ module Schemacop
874
885
  end
875
886
  end
876
887
 
877
- # def test_invalid_key_names
878
- # schema :hash do
879
- # int!
880
- # end
881
- # end
888
+ def test_invalid_options
889
+ assert_raises_with_message Schemacop::Exceptions::InvalidSchemaError, 'Options [:foo] are not allowed for this node.' do
890
+ schema :hash, foo: 'bar' do
891
+ int! :id
892
+ end
893
+ end
894
+ end
895
+
896
+ def test_casting_optional
897
+ schema :hash do
898
+ str? :foo, format: :integer
899
+ end
900
+
901
+ assert_validation(nil)
902
+ assert_validation({})
903
+
904
+ assert_cast(nil, nil)
905
+ assert_cast({}, {}.with_indifferent_access)
906
+ end
907
+
908
+ def test_as_option
909
+ schema :hash do
910
+ int! :foo, as: :bar
911
+ end
912
+
913
+ assert_validation(nil)
914
+ assert_validation({ foo: 42 })
915
+ assert_validation({ bar: 13 }) do
916
+ error '/', 'Obsolete property "bar".'
917
+ error '/foo', 'Value must be given.'
918
+ end
919
+
920
+ assert_validation({ foo: '13' }) do
921
+ error '/foo', 'Invalid type, expected "integer".'
922
+ end
923
+
924
+ assert_cast(nil, nil)
925
+ assert_cast({ foo: 42 }, { bar: 42 }.with_indifferent_access)
926
+ end
927
+
928
+ def test_as_option_overriding
929
+ schema :hash do
930
+ int? :foo, as: :bar
931
+ int? :bar
932
+ end
933
+
934
+ assert_validation(nil)
935
+ assert_validation({})
936
+ assert_validation({ foo: 42 })
937
+ assert_validation({ foo: 42, bar: 13 })
938
+
939
+ assert_validation({ foo: '13' }) do
940
+ error '/foo', 'Invalid type, expected "integer".'
941
+ end
942
+
943
+ # assert_cast(nil, nil)
944
+ assert_cast({ foo: 42 }, { bar: 42 }.with_indifferent_access)
945
+ assert_cast({ foo: 42, bar: 13 }, { bar: 13 }.with_indifferent_access)
946
+ assert_cast({ bar: 13, foo: 42 }, { bar: 13 }.with_indifferent_access)
947
+
948
+ # Swap order
949
+ schema :hash do
950
+ int? :bar
951
+ int! :foo, as: :bar
952
+ end
953
+
954
+ assert_validation(nil)
955
+ assert_validation({ foo: 42 })
956
+ assert_validation({ foo: 42, bar: 13 })
957
+ assert_validation({ bar: 13 }) do
958
+ error '/foo', 'Value must be given.'
959
+ end
960
+
961
+ assert_validation({ foo: '13' }) do
962
+ error '/foo', 'Invalid type, expected "integer".'
963
+ end
964
+
965
+ assert_cast(nil, nil)
966
+ assert_cast({ foo: 42 }, { bar: 42 }.with_indifferent_access)
967
+ assert_cast({ foo: 42, bar: 13 }, { bar: 42 }.with_indifferent_access)
968
+ assert_cast({ bar: 13, foo: 42 }, { bar: 42 }.with_indifferent_access)
969
+ end
882
970
  end
883
971
  end
884
972
  end
@@ -143,6 +143,20 @@ module Schemacop
143
143
  error '/[0]', 'Value must be given.'
144
144
  end
145
145
  end
146
+
147
+ def test_not_support_block
148
+ assert_raises_with_message Schemacop::Exceptions::InvalidSchemaError, 'Node Schemacop::V3::IntegerNode does not support blocks.' do
149
+ schema :integer do
150
+ int :foo
151
+ end
152
+ end
153
+ end
154
+
155
+ def test_node_no_children
156
+ @schema = Schemacop::Schema3.new
157
+
158
+ assert_equal(@schema.root.children, [])
159
+ end
146
160
  end
147
161
  end
148
162
  end
@@ -249,6 +249,8 @@ module Schemacop
249
249
  ref? :node, :Node
250
250
  end
251
251
 
252
+ assert_equal(@schema.root.used_external_schemas, [])
253
+
252
254
  assert_validation({})
253
255
  assert_validation(node: { name: '1', children: [{ name: '1' }, { name: '2' }] })
254
256
  assert_validation(
@@ -313,6 +315,8 @@ module Schemacop
313
315
  ref! :person, :Person
314
316
  end
315
317
 
318
+ assert_equal(@schema.root.used_external_schemas, %i[Person PersonInfo])
319
+
316
320
  assert_validation(person: { first_name: 'John', last_name: 'Doe' })
317
321
  assert_validation(person: { first_name: 'John', last_name: 'Doe', info: { born_at: '1990-01-13' } })
318
322
  assert_validation(person: { first_name_x: 'John', last_name: 'Doe' }) do
@@ -323,6 +327,18 @@ module Schemacop
323
327
  error '/person/info/born_at', 'String does not match format "date".'
324
328
  end
325
329
  end
330
+
331
+ with_context context do
332
+ schema do
333
+ scm :PersonNode do
334
+ ref! :person, :Person
335
+ end
336
+
337
+ ref! :personNode, :PersonNode
338
+ end
339
+
340
+ assert_equal(@schema.root.used_external_schemas, %i[Person PersonInfo])
341
+ end
326
342
  end
327
343
 
328
344
  def test_defaults
@@ -111,6 +111,9 @@ module Schemacop
111
111
  assert_validation 'foo 2020-01-29 bar' do
112
112
  error '/', 'String does not match format "date".'
113
113
  end
114
+
115
+ assert_cast(nil, nil)
116
+ assert_cast('2020-01-13', Date.new(2020, 1, 13))
114
117
  end
115
118
 
116
119
  def test_format_date_time
@@ -132,6 +135,9 @@ module Schemacop
132
135
  assert_validation '2018-11-13T20:20:39Y' do
133
136
  error '/', 'String does not match format "date-time".'
134
137
  end
138
+
139
+ assert_cast(nil, nil)
140
+ assert_cast('2018-11-13T20:20:39+00:00', DateTime.new(2018, 11, 13, 20, 20, 39))
135
141
  end
136
142
 
137
143
  def test_format_email
@@ -154,6 +160,26 @@ module Schemacop
154
160
  assert_validation '@john@example.com' do
155
161
  error '/', 'String does not match format "email".'
156
162
  end
163
+
164
+ assert_cast(nil, nil)
165
+ assert_cast('john.doe@example.com', 'john.doe@example.com')
166
+ end
167
+
168
+ def test_format_symbol
169
+ schema :string, format: :symbol
170
+
171
+ assert_json(type: :string, format: :symbol)
172
+
173
+ assert_validation 'foobar'
174
+ assert_validation ''
175
+
176
+ assert_validation 234 do
177
+ error '/', 'Invalid type, expected "string".'
178
+ end
179
+
180
+ assert_cast(nil, nil)
181
+ assert_cast('foobar', :foobar)
182
+ assert_cast('039n23$g- sfk3/', :'039n23$g- sfk3/')
157
183
  end
158
184
 
159
185
  def test_enum
@@ -187,18 +213,24 @@ module Schemacop
187
213
 
188
214
  assert_cast 'true', true
189
215
  assert_cast 'false', false
216
+
217
+ assert_cast nil, nil
190
218
  end
191
219
 
192
220
  def test_time_casting
193
221
  schema :string, format: :time
194
222
  assert_json(type: :string, format: :time)
195
223
  assert_cast '20:30:39+00:00', Time.strptime('20:30:39+00:00', '%H:%M:%S%z')
224
+
225
+ assert_cast nil, nil
196
226
  end
197
227
 
198
228
  def test_date_casting
199
229
  schema :string, format: :date
200
230
  assert_json(type: :string, format: :date)
201
231
  assert_cast '2018-11-13', Date.new(2018, 11, 13)
232
+
233
+ assert_cast nil, nil
202
234
  end
203
235
 
204
236
  def test_date_time_casting
@@ -207,12 +239,16 @@ module Schemacop
207
239
  assert_cast '2018-11-13T20:20:39+00:00', DateTime.new(2018, 11, 13, 20, 20, 39)
208
240
  assert_cast '2018-11-13T20:20:39Z', DateTime.new(2018, 11, 13, 20, 20, 39)
209
241
  assert_cast '2018-11-13T20:20:39+01:00', DateTime.new(2018, 11, 13, 20, 20, 39, '+1')
242
+
243
+ assert_cast nil, nil
210
244
  end
211
245
 
212
246
  def test_email_casting
213
247
  schema :string, format: :email
214
248
  assert_json(type: :string, format: :email)
215
249
  assert_cast 'support@example.com', 'support@example.com'
250
+
251
+ assert_cast nil, nil
216
252
  end
217
253
 
218
254
  def test_default
@@ -233,6 +269,25 @@ module Schemacop
233
269
  assert_cast(nil, 'Hello')
234
270
  end
235
271
 
272
+ def test_default_casting
273
+ schema :string, format: :integer, default: '42'
274
+
275
+ assert_json(
276
+ type: :string,
277
+ format: :integer,
278
+ default: '42'
279
+ )
280
+
281
+ assert_validation(nil)
282
+ assert_validation('123')
283
+ assert_validation(5) do
284
+ error '/', 'Invalid type, expected "string".'
285
+ end
286
+
287
+ assert_cast('123', 123)
288
+ assert_cast(nil, 42)
289
+ end
290
+
236
291
  # Helper function that checks for all the options if the option is
237
292
  # an integer or something else, in which case it needs to raise
238
293
  def validate_self_should_error(value_to_check)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schemacop
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.rc3
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-28 00:00:00.000000000 Z
11
+ date: 2021-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ruby2_keywords
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.4
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -188,7 +202,6 @@ files:
188
202
  - lib/schemacop/v2/node_supporting_field.rb
189
203
  - lib/schemacop/v2/node_supporting_type.rb
190
204
  - lib/schemacop/v2/node_with_block.rb
191
- - lib/schemacop/v2/root_node.rb
192
205
  - lib/schemacop/v2/validator/array_validator.rb
193
206
  - lib/schemacop/v2/validator/boolean_validator.rb
194
207
  - lib/schemacop/v2/validator/float_validator.rb
@@ -275,9 +288,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
275
288
  version: '0'
276
289
  required_rubygems_version: !ruby/object:Gem::Requirement
277
290
  requirements:
278
- - - ">"
291
+ - - ">="
279
292
  - !ruby/object:Gem::Version
280
- version: 1.3.1
293
+ version: '0'
281
294
  requirements: []
282
295
  rubygems_version: 3.1.4
283
296
  signing_key:
File without changes