openapi_first 0.12.5 → 0.13.0
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 +4 -4
 - data/CHANGELOG.md +4 -0
 - data/Gemfile.lock +1 -1
 - data/README.md +6 -1
 - data/benchmarks/Gemfile.lock +6 -6
 - data/lib/openapi_first/find_handler.rb +2 -4
 - data/lib/openapi_first/request_validation.rb +15 -2
 - data/lib/openapi_first/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 5ffea2d2aacb32af3f0253ff3bf149b63c65d2cc18a91b688d631021b120612f
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 36c3a76640b9a2210da41a165b5254d719c226dd67b32bc7867dbdc809338b50
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 1acb6eb311fb503b30c182e16c37fbdfe4e8ed8219a6900bdc8602d9e4ab83762bb755bbf6a78a5ea7783d39441d3aa15bf49f7a5e631326955e4eb38b03e6ea
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: a899dcf6876cc3b8f81d5d4be7bbdc5f9cdd0e04aa67bcd7e74fad7d29a5497e882864e87d7895db88678c5d48a7b6132effc624d36b214c2ccb391a79bbbf06
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -79,7 +79,12 @@ This middleware adds `env[OpenapiFirst::INBOX]` which holds the (filtered) path 
     | 
|
| 
       79 
79 
     | 
    
         
             
            ### Parameter validation
         
     | 
| 
       80 
80 
     | 
    
         | 
| 
       81 
81 
     | 
    
         
             
            The middleware filteres all top-level query parameters and paths parameters and tries to convert numeric values. Meaning, if you have an `:something_id` path with `type: integer`, it will try convert the value to an integer.
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            It just works with a parameter with `name: filter[age]`.
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            OpenapiFirst also supports `type: array` for query parameters and will convert `items` just as described above. [`style`](http://spec.openapis.org/oas/v3.0.3#style-values) and `explode` attributes are not supported for query parameters. It will always act as if `style: form` and `explode: false` were used for query parameters.
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            Conversion is currently done only for path and query parameters, but not for the request body. OpenapiFirst currently does not convert date, date-time or time formats.
         
     | 
| 
       83 
88 
     | 
    
         | 
| 
       84 
89 
     | 
    
         
             
            If you want to forbid _nested_ query parameters you will need to use [`additionalProperties: false`](https://json-schema.org/understanding-json-schema/reference/object.html#properties) in your query parameter JSON schema.
         
     | 
| 
       85 
90 
     | 
    
         | 
    
        data/benchmarks/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            PATH
         
     | 
| 
       2 
2 
     | 
    
         
             
              remote: ..
         
     | 
| 
       3 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                openapi_first (0. 
     | 
| 
      
 4 
     | 
    
         
            +
                openapi_first (0.13.0)
         
     | 
| 
       5 
5 
     | 
    
         
             
                  deep_merge (>= 1.2.1)
         
     | 
| 
       6 
6 
     | 
    
         
             
                  hanami-router (~> 2.0.alpha3)
         
     | 
| 
       7 
7 
     | 
    
         
             
                  hanami-utils (~> 2.0.alpha1)
         
     | 
| 
         @@ -25,11 +25,11 @@ GEM 
     | 
|
| 
       25 
25 
     | 
    
         
             
                benchmark-memory (0.1.2)
         
     | 
| 
       26 
26 
     | 
    
         
             
                  memory_profiler (~> 0.9)
         
     | 
| 
       27 
27 
     | 
    
         
             
                builder (3.2.4)
         
     | 
| 
       28 
     | 
    
         
            -
                committee (4. 
     | 
| 
      
 28 
     | 
    
         
            +
                committee (4.2.0)
         
     | 
| 
       29 
29 
     | 
    
         
             
                  json_schema (~> 0.14, >= 0.14.3)
         
     | 
| 
       30 
30 
     | 
    
         
             
                  openapi_parser (>= 0.11.1)
         
     | 
| 
       31 
31 
     | 
    
         
             
                  rack (>= 1.5)
         
     | 
| 
       32 
     | 
    
         
            -
                concurrent-ruby (1.1. 
     | 
| 
      
 32 
     | 
    
         
            +
                concurrent-ruby (1.1.7)
         
     | 
| 
       33 
33 
     | 
    
         
             
                deep_merge (1.2.1)
         
     | 
| 
       34 
34 
     | 
    
         
             
                dry-configurable (0.11.6)
         
     | 
| 
       35 
35 
     | 
    
         
             
                  concurrent-ruby (~> 1.0)
         
     | 
| 
         @@ -42,7 +42,7 @@ GEM 
     | 
|
| 
       42 
42 
     | 
    
         
             
                  concurrent-ruby (~> 1.0)
         
     | 
| 
       43 
43 
     | 
    
         
             
                dry-equalizer (0.3.0)
         
     | 
| 
       44 
44 
     | 
    
         
             
                dry-inflector (0.2.0)
         
     | 
| 
       45 
     | 
    
         
            -
                dry-logic (1.0. 
     | 
| 
      
 45 
     | 
    
         
            +
                dry-logic (1.0.7)
         
     | 
| 
       46 
46 
     | 
    
         
             
                  concurrent-ruby (~> 1.0)
         
     | 
| 
       47 
47 
     | 
    
         
             
                  dry-core (~> 0.2)
         
     | 
| 
       48 
48 
     | 
    
         
             
                  dry-equalizer (~> 0.2)
         
     | 
| 
         @@ -72,7 +72,7 @@ GEM 
     | 
|
| 
       72 
72 
     | 
    
         
             
                  transproc (~> 1.0)
         
     | 
| 
       73 
73 
     | 
    
         
             
                hansi (0.2.0)
         
     | 
| 
       74 
74 
     | 
    
         
             
                hash-deep-merge (0.1.1)
         
     | 
| 
       75 
     | 
    
         
            -
                i18n (1.8. 
     | 
| 
      
 75 
     | 
    
         
            +
                i18n (1.8.5)
         
     | 
| 
       76 
76 
     | 
    
         
             
                  concurrent-ruby (~> 1.0)
         
     | 
| 
       77 
77 
     | 
    
         
             
                json_schema (0.20.9)
         
     | 
| 
       78 
78 
     | 
    
         
             
                json_schemer (0.2.13)
         
     | 
| 
         @@ -101,7 +101,7 @@ GEM 
     | 
|
| 
       101 
101 
     | 
    
         
             
                  hash-deep-merge
         
     | 
| 
       102 
102 
     | 
    
         
             
                  mustermann-contrib (~> 1.1.1)
         
     | 
| 
       103 
103 
     | 
    
         
             
                  nokogiri
         
     | 
| 
       104 
     | 
    
         
            -
                openapi_parser (0. 
     | 
| 
      
 104 
     | 
    
         
            +
                openapi_parser (0.12.1)
         
     | 
| 
       105 
105 
     | 
    
         
             
                public_suffix (4.0.5)
         
     | 
| 
       106 
106 
     | 
    
         
             
                rack (2.2.3)
         
     | 
| 
       107 
107 
     | 
    
         
             
                rack-accept (0.4.5)
         
     | 
| 
         @@ -9,10 +9,8 @@ module OpenapiFirst 
     | 
|
| 
       9 
9 
     | 
    
         
             
                  @handlers = spec.operations.each_with_object({}) do |operation, hash|
         
     | 
| 
       10 
10 
     | 
    
         
             
                    operation_id = operation.operation_id
         
     | 
| 
       11 
11 
     | 
    
         
             
                    handler = find_handler(operation_id)
         
     | 
| 
       12 
     | 
    
         
            -
                    if handler.nil?
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                      next
         
     | 
| 
       15 
     | 
    
         
            -
                    end
         
     | 
| 
      
 12 
     | 
    
         
            +
                    next if handler.nil?
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
       16 
14 
     | 
    
         
             
                    hash[operation_id] = handler
         
     | 
| 
       17 
15 
     | 
    
         
             
                  end
         
     | 
| 
       18 
16 
     | 
    
         
             
                end
         
     | 
| 
         @@ -150,14 +150,27 @@ module OpenapiFirst 
     | 
|
| 
       150 
150 
     | 
    
         
             
                def parse_parameter(value, schema)
         
     | 
| 
       151 
151 
     | 
    
         
             
                  return filtered_params(schema, value) if schema['properties']
         
     | 
| 
       152 
152 
     | 
    
         | 
| 
      
 153 
     | 
    
         
            +
                  return parse_array_parameter(value, schema) if schema['type'] == 'array'
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                  parse_simple_value(value, schema)
         
     | 
| 
      
 156 
     | 
    
         
            +
                end
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
                def parse_array_parameter(value, schema)
         
     | 
| 
      
 159 
     | 
    
         
            +
                  array = value.is_a?(Array) ? value : value.split(',')
         
     | 
| 
      
 160 
     | 
    
         
            +
                  return array unless schema['items']
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
                  array.map! { |e| parse_simple_value(e, schema['items']) }
         
     | 
| 
      
 163 
     | 
    
         
            +
                end
         
     | 
| 
      
 164 
     | 
    
         
            +
             
     | 
| 
      
 165 
     | 
    
         
            +
                def parse_simple_value(value, schema)
         
     | 
| 
      
 166 
     | 
    
         
            +
                  return to_boolean(value) if schema['type'] == 'boolean'
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
       153 
168 
     | 
    
         
             
                  begin
         
     | 
| 
       154 
169 
     | 
    
         
             
                    return Integer(value, 10) if schema['type'] == 'integer'
         
     | 
| 
       155 
170 
     | 
    
         
             
                    return Float(value) if schema['type'] == 'number'
         
     | 
| 
       156 
171 
     | 
    
         
             
                  rescue ArgumentError
         
     | 
| 
       157 
172 
     | 
    
         
             
                    value
         
     | 
| 
       158 
173 
     | 
    
         
             
                  end
         
     | 
| 
       159 
     | 
    
         
            -
                  return to_boolean(value) if schema['type'] == 'boolean'
         
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
174 
     | 
    
         
             
                  value
         
     | 
| 
       162 
175 
     | 
    
         
             
                end
         
     | 
| 
       163 
176 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: openapi_first
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.13.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Andreas Haller
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2020-08- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2020-08-27 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: deep_merge
         
     |