open_api_import 0.2.2 → 0.3.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/README.md +36 -1
- data/lib/open_api_import.rb +45 -20
- 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: 1f87b9b81f1429055c87f8a1008e79051eab82269f976fd4c1aa4fbe8ed4f748
         | 
| 4 | 
            +
              data.tar.gz: 82a6fdc38c437e350dd16cac5daad820af3f1bffa7705799f33a5aa92b65cbf8
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 0ad5187d6bfd18bbbdacd09968a8c142c687bab121600a2f052e9fcc91729fddc2b7b11327cc1b79227b4e273921ec2a3d7b5893b613dfbd488471f22ed7b393
         | 
| 7 | 
            +
              data.tar.gz: 5eafedf7aba260a9c4ad6aecd621a1f0fc2607993a519bd883c46814d67195f08d95c5d3019cd8618549659be26add433f2b02c534df7b6a607073d4c3e5d869
         | 
    
        data/README.md
    CHANGED
    
    | @@ -196,12 +196,16 @@ The output will generate methods like this: | |
| 196 196 |  | 
| 197 197 | 
             
            How the module names will be created.
         | 
| 198 198 |  | 
| 199 | 
            -
            Accepts  | 
| 199 | 
            +
            Accepts five different options: :path, :path_file, :tags, :tags_file and :fixed. By default :path. 
         | 
| 200 200 |  | 
| 201 201 | 
             
              path: It will be used the first folder of the path to create the module name, for example the path /users/list will be in the module Users and all the requests from all modules in the same file.
         | 
| 202 202 |  | 
| 203 203 | 
             
              path_file: It will be used the first folder of the path to create the module name, for example the path /users/list will be in the module Users and each module will be in a new requests file.
         | 
| 204 204 |  | 
| 205 | 
            +
              tags: It will be used the tags key to create the module name, for example the tags: \[users, list] will create the module UsersList and all the requests from all modules in the same file. In case the tags are equal to the beginning of the operationId then it will be removed from the method name.
         | 
| 206 | 
            +
              
         | 
| 207 | 
            +
              tags_file: It will be used the tags key to create the module name, for example the tags: \[users, list] will create the module UsersList and and each module will be in a new requests file. In case the tags are equal to the beginning of the operationId then it will be removed from the method name.
         | 
| 208 | 
            +
             | 
| 205 209 | 
             
              fixed: all the requests will be under the module Requests
         | 
| 206 210 |  | 
| 207 211 | 
             
            ```ruby
         | 
| @@ -280,6 +284,37 @@ This is the output of the run: | |
| 280 284 | 
             
              - /petstore-simple.yaml.rb
         | 
| 281 285 | 
             
            ```
         | 
| 282 286 |  | 
| 287 | 
            +
            In case using :tags
         | 
| 288 | 
            +
             | 
| 289 | 
            +
            ```ruby
         | 
| 290 | 
            +
              require 'open_api_import'
         | 
| 291 | 
            +
             | 
| 292 | 
            +
              OpenApiImport.from "./spec/fixtures/v2.0/yaml/uber.yaml", name_for_module: :tags, create_method_name: :path
         | 
| 293 | 
            +
             | 
| 294 | 
            +
            ```
         | 
| 295 | 
            +
             | 
| 296 | 
            +
            It will generate just one file including every request under the module generated from the first folder of the path
         | 
| 297 | 
            +
             | 
| 298 | 
            +
            ```ruby
         | 
| 299 | 
            +
            module Swagger
         | 
| 300 | 
            +
              module UberApi
         | 
| 301 | 
            +
                module V1_0_0
         | 
| 302 | 
            +
                  module Products
         | 
| 303 | 
            +
             | 
| 304 | 
            +
                    # operationId: unknown, method: get
         | 
| 305 | 
            +
                    # summary: Product Types
         | 
| 306 | 
            +
                    # description:
         | 
| 307 | 
            +
                    #     The Products endpoint returns information about the Uber products offered at a given location. 
         | 
| 308 | 
            +
                    #     The response includes the display name and other details about each product, and lists the products in the proper display order.
         | 
| 309 | 
            +
                    # parameters description:
         | 
| 310 | 
            +
                    #    latitude: (number) (required) Latitude component of location.
         | 
| 311 | 
            +
                    #    longitude: (number) (required) Longitude component of location.
         | 
| 312 | 
            +
                    def self.get_products(latitude, longitude)
         | 
| 313 | 
            +
            ...
         | 
| 314 | 
            +
            ...
         | 
| 315 | 
            +
            ```
         | 
| 316 | 
            +
             | 
| 317 | 
            +
             | 
| 283 318 | 
             
            ### include_responses
         | 
| 284 319 |  | 
| 285 320 | 
             
            If you want to add the examples of responses in the resultant file.
         | 
    
        data/lib/open_api_import.rb
    CHANGED
    
    | @@ -20,6 +20,8 @@ class OpenApiImport | |
| 20 20 | 
             
              # @param name_for_module [Symbol]. (:path, :path_file, :fixed) (default: :path). How the module names will be created.
         | 
| 21 21 | 
             
              #   path: It will be used the first folder of the path to create the module name, for example the path /users/list will be in the module Users and all the requests from all modules in the same file.
         | 
| 22 22 | 
             
              #   path_file: It will be used the first folder of the path to create the module name, for example the path /users/list will be in the module Users and each module will be in a new requests file.
         | 
| 23 | 
            +
              #   tags: It will be used the tags key to create the module name, for example the tags: [users,list] will create the module UsersList and all the requests from all modules in the same file.
         | 
| 24 | 
            +
              #   tags_file: It will be used the tags key to create the module name, for example the tags: [users,list] will create the module UsersList and and each module will be in a new requests file.
         | 
| 23 25 | 
             
              #   fixed: all the requests will be under the module Requests
         | 
| 24 26 | 
             
              ##############################################################################################
         | 
| 25 27 | 
             
              def self.from(swagger_file, create_method_name: :operation_id, include_responses: true, mock_response: false, name_for_module: :path)
         | 
| @@ -93,13 +95,15 @@ class OpenApiImport | |
| 93 95 | 
             
                  module_requests = ""
         | 
| 94 96 |  | 
| 95 97 | 
             
                  definition.paths.each do |path|
         | 
| 98 | 
            +
             | 
| 96 99 | 
             
                    raw = path.raw.deep_symbolize_keys
         | 
| 97 100 |  | 
| 98 101 | 
             
                    if raw.key?(:parameters)
         | 
| 99 102 | 
             
                      raw.each do |met, cont|
         | 
| 100 103 | 
             
                        if met != :parameters
         | 
| 101 104 | 
             
                          if raw[met].key?(:parameters)
         | 
| 102 | 
            -
                             | 
| 105 | 
            +
                            #todo: check if in some cases the parameters on the method can be added to the ones in the path
         | 
| 106 | 
            +
                            #raw[met][:parameters] = raw[met][:parameters] & raw[:parameters]
         | 
| 103 107 | 
             
                          else
         | 
| 104 108 | 
             
                            raw[met][:parameters] = raw[:parameters]
         | 
| 105 109 | 
             
                          end
         | 
| @@ -109,6 +113,7 @@ class OpenApiImport | |
| 109 113 | 
             
                    end
         | 
| 110 114 |  | 
| 111 115 | 
             
                    raw.each do |met, cont|
         | 
| 116 | 
            +
             | 
| 112 117 | 
             
                      if %w[get post put delete patch].include?(met.to_s.downcase)
         | 
| 113 118 | 
             
                        params = []
         | 
| 114 119 | 
             
                        params_path = []
         | 
| @@ -129,31 +134,48 @@ class OpenApiImport | |
| 129 134 | 
             
                          method_name = (met.to_s + "_" + path.path.to_s).snake_case
         | 
| 130 135 | 
             
                          method_name.chop! if method_name[-1] == "_"
         | 
| 131 136 | 
             
                        elsif create_method_name == :operation_id
         | 
| 132 | 
            -
                           | 
| 137 | 
            +
                          if (name_for_module == :tags or name_for_module == :tags_file) and cont.key?(:tags) and cont[:tags].is_a?(Array) and cont[:tags].size>0
         | 
| 138 | 
            +
                            metnametmp = cont[:operationId].gsub(/^#{cont[:tags].join}[\s_]*/, '')
         | 
| 139 | 
            +
                          else
         | 
| 140 | 
            +
                            metnametmp = cont[:operationId]
         | 
| 141 | 
            +
                          end
         | 
| 142 | 
            +
                          method_name = metnametmp.to_s.snake_case
         | 
| 133 143 | 
             
                        else
         | 
| 134 | 
            -
                           | 
| 144 | 
            +
                          if (name_for_module == :tags or name_for_module == :tags_file) and cont.key?(:tags) and cont[:tags].is_a?(Array) and cont[:tags].size>0
         | 
| 145 | 
            +
                            method_name = cont[:operationId].gsub(/^#{cont[:tags].join}[\s_]*/, '')
         | 
| 146 | 
            +
                          else
         | 
| 147 | 
            +
                            method_name = cont[:operationId]
         | 
| 148 | 
            +
                          end
         | 
| 135 149 | 
             
                        end
         | 
| 136 150 |  | 
| 137 151 | 
             
                        path_txt = path.path.dup.to_s
         | 
| 138 | 
            -
                        if  | 
| 152 | 
            +
                        if [:path, :path_file, :tags, :tags_file].include?(name_for_module)
         | 
| 139 153 | 
             
                          old_module_requests = module_requests
         | 
| 140 | 
            -
                           | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
                             | 
| 146 | 
            -
             | 
| 154 | 
            +
                          if [:path, :path_file].include?(name_for_module)
         | 
| 155 | 
            +
                            # to remove version from path fex: /v1/Customer
         | 
| 156 | 
            +
                            path_requests = path_txt.gsub(/^\/v[\d\.]*\//i, "")
         | 
| 157 | 
            +
                            # to remove version from path fex: /1.0/Customer
         | 
| 158 | 
            +
                            path_requests = path_requests.gsub(/^\/[\d\.]*\//i, "")
         | 
| 159 | 
            +
                            if (path_requests == path_txt) && (path_txt.scan("/").size == 1)
         | 
| 160 | 
            +
                              # no folder in path
         | 
| 161 | 
            +
                              module_requests = "Root"
         | 
| 162 | 
            +
                            else
         | 
| 163 | 
            +
                              res_path = path_requests.scan(/(\w+)/)
         | 
| 164 | 
            +
                              module_requests = res_path[0][0].camel_case
         | 
| 165 | 
            +
                            end
         | 
| 147 166 | 
             
                          else
         | 
| 148 | 
            -
                             | 
| 149 | 
            -
             | 
| 167 | 
            +
                            if cont.key?(:tags) and cont[:tags].is_a?(Array) and cont[:tags].size>0
         | 
| 168 | 
            +
                              module_requests = cont[:tags].join(" ").camel_case
         | 
| 169 | 
            +
                            else
         | 
| 170 | 
            +
                              module_requests = "Unknown"
         | 
| 171 | 
            +
                            end
         | 
| 150 172 | 
             
                          end
         | 
| 151 173 | 
             
                          if old_module_requests != module_requests
         | 
| 152 | 
            -
                            output << "end" unless old_module_requests == "" or name_for_module == :path_file
         | 
| 153 | 
            -
                            if name_for_module == :path
         | 
| 174 | 
            +
                            output << "end" unless old_module_requests == "" or name_for_module == :path_file or name_for_module == :tags_file
         | 
| 175 | 
            +
                            if name_for_module == :path or name_for_module == :tags
         | 
| 154 176 | 
             
                              # to add the end for the previous module unless is the first one
         | 
| 155 177 | 
             
                              output << "module #{module_requests}"
         | 
| 156 | 
            -
                            else #:path_file
         | 
| 178 | 
            +
                            else #:path_file, :tags_file
         | 
| 157 179 | 
             
                              if old_module_requests != ""
         | 
| 158 180 | 
             
                                unless files.key?(old_module_requests)
         | 
| 159 181 | 
             
                                  files[old_module_requests] = Array.new
         | 
| @@ -161,7 +183,7 @@ class OpenApiImport | |
| 161 183 | 
             
                                files[old_module_requests].concat(output)
         | 
| 162 184 | 
             
                                output = Array.new
         | 
| 163 185 | 
             
                              end
         | 
| 164 | 
            -
                              output << "module #{module_requests}" unless files.key?(module_requests) #  | 
| 186 | 
            +
                              output << "module #{module_requests}" unless files.key?(module_requests) # don't add in case already existed
         | 
| 165 187 | 
             
                            end
         | 
| 166 188 | 
             
                          end
         | 
| 167 189 | 
             
                        end
         | 
| @@ -186,7 +208,6 @@ class OpenApiImport | |
| 186 208 |  | 
| 187 209 | 
             
                            response_example = get_response_examples(v)
         | 
| 188 210 |  | 
| 189 | 
            -
             | 
| 190 211 | 
             
                            if !response_example.empty?
         | 
| 191 212 | 
             
                              responses << "'#{k}': { "
         | 
| 192 213 | 
             
                              responses << "message: '#{v[:description]}', "
         | 
| @@ -257,7 +278,11 @@ class OpenApiImport | |
| 257 278 | 
             
                                      if dpv.keys.include?(:example)
         | 
| 258 279 | 
             
                                        valv = dpv[:example]
         | 
| 259 280 | 
             
                                      else
         | 
| 260 | 
            -
                                         | 
| 281 | 
            +
                                        if dpv.type == "object"
         | 
| 282 | 
            +
                                          valv = "{}"
         | 
| 283 | 
            +
                                        else  
         | 
| 284 | 
            +
                                          valv = ""
         | 
| 285 | 
            +
                                        end
         | 
| 261 286 | 
             
                                      end
         | 
| 262 287 | 
             
                                      if dpv.keys.include?(:description)
         | 
| 263 288 | 
             
                                        description_parameters << "#    #{dpk}: (#{dpv[:type]}) #{dpv[:description]}"
         | 
| @@ -405,7 +430,7 @@ class OpenApiImport | |
| 405 430 |  | 
| 406 431 | 
             
                  output_footer = []
         | 
| 407 432 |  | 
| 408 | 
            -
                  output_footer << "end" unless (module_requests == "") && ( | 
| 433 | 
            +
                  output_footer << "end" unless (module_requests == "") && ([:path, :path_file, :tags, :tags_file].include?(name_for_module))
         | 
| 409 434 | 
             
                  output_footer << "end" << "end" << "end"
         | 
| 410 435 |  | 
| 411 436 | 
             
                  if files.size == 0
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: open_api_import
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Mario Ruiz
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019-02- | 
| 11 | 
            +
            date: 2019-02-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: oas_parser
         |