schemacop 3.0.31 → 3.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,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