openapi_parameters 0.2.2 → 0.3.1

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: d08c51fd9da86ddf6ef26a0e0778031b33224475091f21bf212cbdda65dd0b80
4
- data.tar.gz: b8c2d56ad760c556cb51996e694d7bb8dbfe3d6188f4407702f698e8ca49b720
3
+ metadata.gz: 25ce53f3254aebc92f56f59faf54a0b82a26a9908956c5f9ef1e6696f42d5ef9
4
+ data.tar.gz: 134af6813487d225ded3b84040f7039276f64906d2d4be635ac2681689035553
5
5
  SHA512:
6
- metadata.gz: fdb3cf5fd14b1decad231f881229d9344020a59722c07086e5a79c0ee6f58bbad335f982a8847d60e64fb9e62c066636a142f514239ca78a7ec5de0916663abd
7
- data.tar.gz: affa943a27552eb4a9a1495272d80d5d8cb2f591145b79758056c2d2eb93949d61e63524733a0474a3596d1a7d0bc4c77c5187e0a7d4bd9cd02e41cbd88e6706
6
+ metadata.gz: b5229198046f5e0455ed437110c170024131b5046aaaea598471080804a3e56774997640f323b463567e197308668874633c8186cbf518871a013cfbe4bd1593
7
+ data.tar.gz: 517df02187fe286fb67d21f9bd807fdc07bcdea04e62df0fce16a32bb994215d6706b47c97f6ec32e59c439edccee23e13a993b3b59c390b623f4f53f28850a6
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.1] - 2023-11-09
4
+ - Make it work with Zeitwerk's `eager_load`
5
+
6
+ ## [0.3.0] - 2023-10-27
7
+
8
+ - Query parameters: Don't attempt to convert arras within deepObject objects. Behaviour is not defined in OpenApi 3.1.
9
+
3
10
  ## [0.2.2] - 2023-06-01
4
11
 
5
12
  - Remove superflous validation of "in" property
data/Gemfile CHANGED
@@ -5,8 +5,8 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in OpenapiParameters.gemspec
6
6
  gemspec
7
7
 
8
+ gem 'rack-test'
8
9
  gem 'rake', '~> 13.0'
9
-
10
10
  gem 'rspec', '~> 3.0'
11
11
  gem 'rspec-benchmark'
12
12
  gem 'rubocop'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- openapi_parameters (0.2.2)
4
+ openapi_parameters (0.3.1)
5
5
  rack (>= 2.2)
6
6
  zeitwerk (~> 2.6)
7
7
 
@@ -14,14 +14,19 @@ GEM
14
14
  benchmark-trend (0.4.0)
15
15
  diff-lcs (1.5.0)
16
16
  json (2.6.3)
17
+ language_server-protocol (3.17.0.3)
17
18
  parallel (1.23.0)
18
- parser (3.2.2.1)
19
+ parser (3.2.2.4)
19
20
  ast (~> 2.4.1)
20
- rack (3.0.7)
21
+ racc
22
+ racc (1.7.1)
23
+ rack (3.0.8)
24
+ rack-test (2.1.0)
25
+ rack (>= 1.3)
21
26
  rainbow (3.1.1)
22
27
  rake (13.0.6)
23
- regexp_parser (2.8.0)
24
- rexml (3.2.5)
28
+ regexp_parser (2.8.2)
29
+ rexml (3.2.6)
25
30
  rspec (3.12.0)
26
31
  rspec-core (~> 3.12.0)
27
32
  rspec-expectations (~> 3.12.0)
@@ -36,33 +41,34 @@ GEM
36
41
  rspec-expectations (3.12.3)
37
42
  diff-lcs (>= 1.2.0, < 2.0)
38
43
  rspec-support (~> 3.12.0)
39
- rspec-mocks (3.12.5)
44
+ rspec-mocks (3.12.6)
40
45
  diff-lcs (>= 1.2.0, < 2.0)
41
46
  rspec-support (~> 3.12.0)
42
- rspec-support (3.12.0)
43
- rubocop (1.51.0)
47
+ rspec-support (3.12.1)
48
+ rubocop (1.57.2)
44
49
  json (~> 2.3)
50
+ language_server-protocol (>= 3.17.0)
45
51
  parallel (~> 1.10)
46
- parser (>= 3.2.0.0)
52
+ parser (>= 3.2.2.4)
47
53
  rainbow (>= 2.2.2, < 4.0)
48
54
  regexp_parser (>= 1.8, < 3.0)
49
55
  rexml (>= 3.2.5, < 4.0)
50
- rubocop-ast (>= 1.28.0, < 2.0)
56
+ rubocop-ast (>= 1.28.1, < 2.0)
51
57
  ruby-progressbar (~> 1.7)
52
58
  unicode-display_width (>= 2.4.0, < 3.0)
53
- rubocop-ast (1.28.1)
59
+ rubocop-ast (1.30.0)
54
60
  parser (>= 3.2.1.0)
55
- rubocop-capybara (2.18.0)
61
+ rubocop-capybara (2.19.0)
56
62
  rubocop (~> 1.41)
57
- rubocop-factory_bot (2.23.1)
58
- rubocop (~> 1.33)
59
- rubocop-rspec (2.22.0)
63
+ rubocop-factory_bot (2.24.0)
60
64
  rubocop (~> 1.33)
65
+ rubocop-rspec (2.25.0)
66
+ rubocop (~> 1.40)
61
67
  rubocop-capybara (~> 2.17)
62
68
  rubocop-factory_bot (~> 2.22)
63
69
  ruby-progressbar (1.13.0)
64
- unicode-display_width (2.4.2)
65
- zeitwerk (2.6.8)
70
+ unicode-display_width (2.5.0)
71
+ zeitwerk (2.6.12)
66
72
 
67
73
  PLATFORMS
68
74
  arm64-darwin-21
@@ -72,6 +78,7 @@ PLATFORMS
72
78
 
73
79
  DEPENDENCIES
74
80
  openapi_parameters!
81
+ rack-test
75
82
  rake (~> 13.0)
76
83
  rspec (~> 3.0)
77
84
  rspec-benchmark
@@ -3,87 +3,77 @@
3
3
  module OpenapiParameters
4
4
  ##
5
5
  # Tries to convert a request parameter value (string) to the type specified in the JSON Schema.
6
- class Converter
7
- ##
8
- # @param input [String, Hash, Array] the value to convert
9
- # @param schema [Hash] the schema to use for conversion.
10
- def self.call(input, schema)
11
- new(input, schema).call
12
- end
13
-
14
- def initialize(input, schema)
15
- @input = input
16
- @root_schema = schema
17
- end
18
-
19
- def call
20
- convert(@input, @root_schema)
21
- end
22
-
23
- private
6
+ module Converter
7
+ class << self
8
+ ##
9
+ # @param input [String, Hash, Array] the value to convert
10
+ # @param schema [Hash] the schema to use for conversion.
11
+ def convert(value, schema) # rubocop:disable Metrics
12
+ return if value.nil?
13
+ return value if schema.nil?
24
14
 
25
- def convert(value, schema) # rubocop:disable Metrics/*
26
- # check_supported!(schema)
27
- return if value.nil?
28
- return value if schema.nil?
29
-
30
- case type(schema)
31
- when 'integer'
32
- begin
33
- Integer(value, 10)
34
- rescue StandardError
35
- value
36
- end
37
- when 'number'
38
- begin
39
- Float(value)
40
- rescue StandardError
41
- value
42
- end
43
- when 'boolean'
44
- if value == 'true'
45
- true
15
+ case type(schema)
16
+ when 'integer'
17
+ begin
18
+ Integer(value, 10)
19
+ rescue StandardError
20
+ value
21
+ end
22
+ when 'number'
23
+ begin
24
+ Float(value)
25
+ rescue StandardError
26
+ value
27
+ end
28
+ when 'boolean'
29
+ if value == 'true'
30
+ true
31
+ else
32
+ value == 'false' ? false : value
33
+ end
34
+ when 'object'
35
+ convert_object(value, schema)
36
+ when 'array'
37
+ convert_array(value, schema)
46
38
  else
47
- value == 'false' ? false : value
39
+ value
48
40
  end
49
- when 'object'
50
- convert_object(value, schema)
51
- when 'array'
52
- convert_array(value, schema)
53
- else
54
- value
55
41
  end
56
- end
57
42
 
58
- def type(schema)
59
- schema && schema['type']
60
- end
43
+ private
61
44
 
62
- def convert_object(object, schema)
63
- object.each_with_object({}) do |(key, value), hsh|
64
- hsh[key] = convert(value, schema['properties']&.fetch(key))
45
+ def type(schema)
46
+ schema && schema['type']
65
47
  end
66
- end
67
48
 
68
- def convert_array(array, schema)
69
- item_schema = schema['items']
70
- prefix_schemas = schema['prefixItems']
71
- return convert_array_with_prefixes(array, prefix_schemas, item_schema) if prefix_schemas
49
+ def convert_object(object, schema)
50
+ object.each_with_object({}) do |(key, value), hsh|
51
+ hsh[key] = convert(value, schema['properties']&.fetch(key))
52
+ end
53
+ end
72
54
 
73
- array.map { |item| convert(item, item_schema) }
74
- end
55
+ def convert_array(array, schema)
56
+ return array unless array.is_a?(Array)
75
57
 
76
- def convert_array_with_prefixes(array, prefix_schemas, item_schema)
77
- prefixes =
78
- array
79
- .slice(0, prefix_schemas.size)
80
- .each_with_index
81
- .map { |item, index| convert(item, prefix_schemas[index]) }
82
- array =
83
- array[prefix_schemas.size..].map! do |item|
84
- convert(item, item_schema)
85
- end
86
- prefixes + array
58
+ item_schema = schema['items']
59
+ prefix_schemas = schema['prefixItems']
60
+ return convert_array_with_prefixes(array, prefix_schemas, item_schema) if prefix_schemas
61
+
62
+ array.map { |item| convert(item, item_schema) }
63
+ end
64
+
65
+ def convert_array_with_prefixes(array, prefix_schemas, item_schema)
66
+ prefixes =
67
+ array
68
+ .slice(0, prefix_schemas.size)
69
+ .each_with_index
70
+ .map { |item, index| convert(item, prefix_schemas[index]) }
71
+ array =
72
+ array[prefix_schemas.size..].map! do |item|
73
+ convert(item, item_schema)
74
+ end
75
+ prefixes + array
76
+ end
87
77
  end
88
78
  end
89
79
  end
@@ -21,7 +21,7 @@ module OpenapiParameters
21
21
 
22
22
  result[parameter.name] = catch :skip do
23
23
  value = Unpacker.unpack_value(parameter, cookies[parameter.name])
24
- @convert ? Converter.call(value, parameter.schema) : value
24
+ @convert ? Converter.convert(value, parameter.schema) : value
25
25
  end
26
26
  end
27
27
  end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenapiParameters
4
+ class Error < StandardError
5
+ end
6
+ end
@@ -18,7 +18,7 @@ module OpenapiParameters
18
18
 
19
19
  result[parameter.name] = catch :skip do
20
20
  value = Unpacker.unpack_value(parameter, headers[parameter.name])
21
- @convert ? Converter.call(value, parameter.schema) : value
21
+ @convert ? Converter.convert(value, parameter.schema) : value
22
22
  end
23
23
  end
24
24
  end
@@ -1,9 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenapiParameters
4
- class Error < StandardError
5
- end
6
-
7
4
  class NotSupportedError < Error
8
5
  end
9
6
  end
@@ -22,7 +22,7 @@ module OpenapiParameters
22
22
 
23
23
  result[parameter.name] = catch :skip do
24
24
  value = Unpacker.unpack_value(parameter, path_params[parameter.name])
25
- @convert ? Converter.call(value, parameter.schema) : value
25
+ @convert ? Converter.convert(value, parameter.schema) : value
26
26
  end
27
27
  end
28
28
  end
@@ -34,11 +34,18 @@ module OpenapiParameters
34
34
 
35
35
  private
36
36
 
37
+ def convert_primitive(value, parameter)
38
+ return value unless @convert
39
+ return value if value == ''
40
+
41
+ Converter.convert_primitive(value, parameter.schema)
42
+ end
43
+
37
44
  def convert(value, parameter)
38
45
  return value unless @convert
39
46
  return value if value == ''
40
47
 
41
- Converter.call(value, parameter.schema)
48
+ Converter.convert(value, parameter.schema)
42
49
  end
43
50
  end
44
51
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenapiParameters
4
- VERSION = '0.2.2'
4
+ VERSION = '0.3.1'
5
5
  end
@@ -1,11 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'zeitwerk'
4
- loader = Zeitwerk::Loader.for_gem
5
- loader.setup
6
4
 
7
5
  # OpenapiParameters is a gem that parses OpenAPI parameters from Rack
8
6
  module OpenapiParameters
7
+ LOADER = Zeitwerk::Loader.for_gem
8
+ LOADER.setup
9
9
  end
10
-
11
- require_relative 'openapi_parameters/errors'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openapi_parameters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Haller
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-01 00:00:00.000000000 Z
11
+ date: 2023-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -58,9 +58,10 @@ files:
58
58
  - lib/openapi_parameters.rb
59
59
  - lib/openapi_parameters/converter.rb
60
60
  - lib/openapi_parameters/cookie.rb
61
- - lib/openapi_parameters/errors.rb
61
+ - lib/openapi_parameters/error.rb
62
62
  - lib/openapi_parameters/header.rb
63
63
  - lib/openapi_parameters/headers_hash.rb
64
+ - lib/openapi_parameters/not_supported_error.rb
64
65
  - lib/openapi_parameters/parameter.rb
65
66
  - lib/openapi_parameters/path.rb
66
67
  - lib/openapi_parameters/query.rb