schemacop 3.0.31 → 3.0.32

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: 2b921a349115da6b915e956565782f34f0a72596a0e5c3c4c38e62ffc7117655
4
- data.tar.gz: 792d6db18eab413e190b6f25a878e8cf832e99bea0ff87039ce54b87fdf682ce
3
+ metadata.gz: e3b529351f7f22ef04eb795de3c5fbbd9d4d34940c35a88bb25b10a833772d95
4
+ data.tar.gz: b07e0415ed32a39aea0b2551d81fb73d4e794442b73605d454131946fc662b15
5
5
  SHA512:
6
- metadata.gz: 58c5fe39a2a685441a9cddaa88ed32313bfdc1702270c472db56848849028a64976e89d3cb026fab1dd82c2f236b9bb2a7e698d279e938f97c7b6bfede29e061
7
- data.tar.gz: a6dde92bccda133ec1ddbae0c8e90e3b91f6abe8a1ab6b6c6fa8d54f7e2511e7a51029dc6fed66a5292fdec0b979759df00beddc9b630dadc9d100289d372e9a
6
+ metadata.gz: c4a92423884489e157089281c2ea407e7aacef1e28488e73f3ba32510bcc314057c017dcc17c9b00353e8830e78fc11816e2436167f634483306dc3b26429807
7
+ data.tar.gz: a52a56c608e9510b9053b845190d1473e3474ddc15f922a6f001d9b19aeef97911da4f85fdaccf849976d1851ab7d4992b270786a62a18028bcd76b47da15622
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Change log
2
2
 
3
+ ## 3.0.32 (2025-02-11)
4
+
5
+ * Add format `ipv4-cidr` to `str` node for Schemacop3 schemas
6
+
3
7
  ## 3.0.31 (2025-02-05)
4
8
 
5
9
  * Add format `ipv4` and `ipv6` to `str` node for Schemacop3 schemas
data/README.md CHANGED
@@ -122,4 +122,4 @@ To run tests:
122
122
 
123
123
  ## Copyright
124
124
 
125
- Copyright © 2016 - 2024 Sitrox. See `LICENSE` for further details.
125
+ Copyright © 2016 - 2025 Sitrox. See `LICENSE` for further details.
data/README_V3.md CHANGED
@@ -273,6 +273,9 @@ transformed into various types.
273
273
  * `ipv4`
274
274
  A valid IPv4 address without netmask. No casting is performed.
275
275
 
276
+ * `ipv4-cidr`
277
+ A valid IPv4 CIDR address with netmask. No casting is performed.
278
+
276
279
  * `ipv6`
277
280
  A valid IPv6 address without netmask. No casting is performed.
278
281
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.31
1
+ 3.0.32
data/lib/schemacop.rb CHANGED
@@ -104,6 +104,12 @@ module Schemacop
104
104
  handler: ->(value) { value }
105
105
  )
106
106
 
107
+ register_string_formatter(
108
+ :'ipv4-cidr',
109
+ pattern: Regexp.new(Resolv::IPv4::Regex.source[0..-3] + %r{/([0-9]|[1-2][0-9]|3[1-2])\z}.source),
110
+ handler: ->(value) { value }
111
+ )
112
+
107
113
  register_string_formatter(
108
114
  :ipv6,
109
115
  pattern: Resolv::IPv6::Regex,
data/schemacop.gemspec CHANGED
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: schemacop 3.0.31 ruby lib
2
+ # stub: schemacop 3.0.32 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "schemacop".freeze
6
- s.version = "3.0.31"
6
+ s.version = "3.0.32"
7
7
 
8
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 = "2025-02-05"
11
+ s.date = "2025-02-11"
12
12
  s.files = [".github/workflows/ruby.yml".freeze, ".gitignore".freeze, ".releaser_config".freeze, ".rubocop.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]
@@ -134,11 +134,11 @@ class V3Test < SchemacopTest
134
134
 
135
135
  Expected
136
136
  --------
137
- #{expected_error.to_s.blue}
137
+ #{expected_error}
138
138
 
139
- #{'Actual'.red}
140
- #{'------'.red}
141
- #{result.messages_by_path[path].join("\n\n").green}
139
+ Actual
140
+ ------
141
+ #{result.messages_by_path[path].join("\n\n")}
142
142
  ERROR
143
143
  end
144
144
  end
@@ -403,6 +403,58 @@ module Schemacop
403
403
  end
404
404
  end
405
405
 
406
+ def test_format_ipv4_cidr
407
+ schema :string, format: :'ipv4-cidr'
408
+
409
+ assert_json(type: :string, format: :'ipv4-cidr')
410
+
411
+ assert_validation 234 do
412
+ error '/', StringNodeTest.invalid_type_error(Integer)
413
+ end
414
+
415
+ assert_validation 'sd sfdij soidf' do
416
+ error '/', 'String does not match format "ipv4-cidr".'
417
+ end
418
+
419
+ # Some valid IPv4 CIDR addresses
420
+ assert_validation '0.1.2.3/23'
421
+ assert_validation '110.0.217.94/1'
422
+ assert_validation '59.1.18.160/32'
423
+ assert_validation '83.212.124.74/24'
424
+ assert_validation '208.122.67.117/10'
425
+ assert_validation '175.186.176.213/8'
426
+
427
+ # Some invalid IPv4 CIDR addresses
428
+ assert_validation '256.1.4.2/24' do
429
+ error '/', 'String does not match format "ipv4-cidr".'
430
+ end
431
+ assert_validation '2.4.522.1/32' do
432
+ error '/', 'String does not match format "ipv4-cidr".'
433
+ end
434
+ assert_validation '1.1.1/21' do
435
+ error '/', 'String does not match format "ipv4-cidr".'
436
+ end
437
+ assert_validation '1/4' do
438
+ error '/', 'String does not match format "ipv4-cidr".'
439
+ end
440
+ assert_validation '0.1.2.3/33' do
441
+ error '/', 'String does not match format "ipv4-cidr".'
442
+ end
443
+ assert_validation '0.1.2.3/123' do
444
+ error '/', 'String does not match format "ipv4-cidr".'
445
+ end
446
+
447
+ # Normal IPv4 addresses are not allowed
448
+ assert_validation '247.182.236.127' do
449
+ error '/', 'String does not match format "ipv4-cidr".'
450
+ end
451
+
452
+ # And IPv6 isn't allowed as well
453
+ assert_validation 'd91c:af3e:72f1:f5c3::::ad81' do
454
+ error '/', 'String does not match format "ipv4-cidr".'
455
+ end
456
+ end
457
+
406
458
  def test_format_ipv6
407
459
  schema :string, format: :ipv6
408
460
 
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.31
4
+ version: 3.0.32
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-05 00:00:00.000000000 Z
11
+ date: 2025-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport