swagger_docs_generator 0.2.0 → 0.3.0.pre.18
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/lib/swagger_docs_generator/configuration/configuration.rb +14 -5
- data/lib/swagger_docs_generator/configuration/configuration_info.rb +4 -0
- data/lib/swagger_docs_generator/generator.rb +30 -47
- data/lib/swagger_docs_generator/info.rb +1 -1
- data/lib/swagger_docs_generator/metadata/controller.rb +3 -31
- data/lib/swagger_docs_generator/metadata/definition.rb +19 -10
- data/lib/swagger_docs_generator/metadata/jsons.rb +32 -0
- data/lib/swagger_docs_generator/metadata/metadata.rb +11 -1
- data/lib/swagger_docs_generator/parser/action.rb +15 -7
- data/lib/swagger_docs_generator/parser/actions/parameters/body.rb +31 -0
- data/lib/swagger_docs_generator/parser/actions/parameters/form.rb +20 -0
- data/lib/swagger_docs_generator/parser/actions/parameters/header.rb +27 -0
- data/lib/swagger_docs_generator/parser/actions/parameters/path.rb +27 -0
- data/lib/swagger_docs_generator/parser/actions/parameters/query.rb +28 -0
- data/lib/swagger_docs_generator/parser/actions/parameters.rb +31 -57
- data/lib/swagger_docs_generator/parser/actions/response.rb +3 -59
- data/lib/swagger_docs_generator/parser/actions/schema.rb +4 -0
- data/lib/swagger_docs_generator/parser/controller.rb +7 -7
- data/lib/swagger_docs_generator/parser/definition.rb +9 -7
- data/lib/swagger_docs_generator/parser/model.rb +0 -3
- data/lib/swagger_docs_generator/parser/parser.rb +12 -11
- data/lib/swagger_docs_generator.rb +6 -0
- data/lib/tasks/swagger.rake +6 -5
- data/spec/spec_helper.rb +1 -0
- data/spec/support/examples/parameters.rb +154 -0
- data/spec/swagger_docs_generator/configuration/configuration_customize_spec.rb +6 -6
- data/spec/swagger_docs_generator/configuration/configuration_default_spec.rb +8 -3
- data/spec/swagger_docs_generator/parser/parameters/param_body_spec.rb +62 -0
- data/spec/swagger_docs_generator/parser/parameters/param_form_spec.rb +52 -0
- data/spec/swagger_docs_generator/parser/parameters/param_header_spec.rb +62 -0
- data/spec/swagger_docs_generator/parser/parameters/param_path_spec.rb +62 -0
- data/spec/swagger_docs_generator/parser/parameters/param_query_spec.rb +62 -0
- metadata +18 -9
- data/lib/swagger_docs_generator/metadata/path.rb +0 -24
- data/lib/swagger_docs_generator/metadata/tag.rb +0 -24
- data/spec/swagger_docs_generator/metadata/controller_spec.rb +0 -18
- /data/lib/swagger_docs_generator/{parser/models → models}/active_record.rb +0 -0
- /data/lib/swagger_docs_generator/{parser/models → models}/mongo.rb +0 -0
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b051b9f9b3126e0dfde300b94560f20a5960cbfd
         | 
| 4 | 
            +
              data.tar.gz: 9cb75ad8328e271617bbb2a0bfa5f5b1b5971588
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2f8aef3acd286a908de1e73a170f9f67c8dd9ef2f401d17c77580014bf84a28ff0777181202437064b547c1c19271ad3671c2f014055b9c8261023954b5e579d
         | 
| 7 | 
            +
              data.tar.gz: d7c2943197818158acf799cfd96e11cd0feeff52254171a72d5fde516c70003cd18f2177c4602bc6cf55037eccdc751b30b93d70ca2a4ad4b274d9abb43a7f5b
         | 
| @@ -18,18 +18,15 @@ module SwaggerDocsGenerator | |
| 18 18 | 
             
              # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md
         | 
| 19 19 | 
             
              class Configuration
         | 
| 20 20 | 
             
                # Accessors with default value
         | 
| 21 | 
            -
                attr_accessor :swagger, :cleanning, : | 
| 21 | 
            +
                attr_accessor :swagger, :cleanning, :base_path
         | 
| 22 22 |  | 
| 23 23 | 
             
                # Accessors without default value
         | 
| 24 24 | 
             
                attr_accessor :schemes, :consumes, :produces, :host, :external_docs,
         | 
| 25 | 
            -
                              :security, :definitions
         | 
| 26 | 
            -
                # :external_docs, :security_definitions, :security
         | 
| 27 | 
            -
                # :paths, :tags, :host
         | 
| 25 | 
            +
                              :security, :definitions, :doc_class, :doc_folder
         | 
| 28 26 |  | 
| 29 27 | 
             
                # Initalize default value (and requried) for json swagger file
         | 
| 30 28 | 
             
                def initialize
         | 
| 31 29 | 
             
                  @swagger = '2.0'
         | 
| 32 | 
            -
                  @base_controller = ''
         | 
| 33 30 | 
             
                  @base_path = '/'
         | 
| 34 31 | 
             
                  @cleanning = true
         | 
| 35 32 | 
             
                end
         | 
| @@ -43,5 +40,17 @@ module SwaggerDocsGenerator | |
| 43 40 | 
             
                def config
         | 
| 44 41 | 
             
                  @config ||= Configuration.new
         | 
| 45 42 | 
             
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                def file_base
         | 
| 45 | 
            +
                  File.join(@config.doc_folder, @config.doc_class)
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                def file_docs
         | 
| 49 | 
            +
                  Dir[File.join(@config.doc_folder, '*.rb')]
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                def temporary_folder
         | 
| 53 | 
            +
                  Rails.root.join('tmp', SwaggerDocsGenerator::GEM)
         | 
| 54 | 
            +
                end
         | 
| 46 55 | 
             
              end
         | 
| 47 56 | 
             
            end
         | 
| @@ -11,30 +11,44 @@ module SwaggerDocsGenerator | |
| 11 11 | 
             
                attr_reader :swagger_file
         | 
| 12 12 |  | 
| 13 13 | 
             
                def initialize
         | 
| 14 | 
            -
                  @hash = {}
         | 
| 15 14 | 
             
                  @file = 'swagger.json'
         | 
| 16 | 
            -
                  @swagger_file = File.join( | 
| 17 | 
            -
                  @ | 
| 18 | 
            -
             | 
| 15 | 
            +
                  @swagger_file = File.join(Dir.pwd, 'public', @file)
         | 
| 16 | 
            +
                  @temp = FileUtils.mkdir_p(SwaggerDocsGenerator.temporary_folder)
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                # Import documentation file
         | 
| 20 | 
            +
                def import_documentations
         | 
| 21 | 
            +
                  require SwaggerDocsGenerator.file_base
         | 
| 22 | 
            +
                  SwaggerDocsGenerator.file_docs.each { |rb| require rb }
         | 
| 19 23 | 
             
                end
         | 
| 20 24 |  | 
| 21 25 | 
             
                # Open or create a swagger.json file
         | 
| 22 26 | 
             
                def generate_swagger_file
         | 
| 23 27 | 
             
                  delete_file_before
         | 
| 24 | 
            -
                  File.open(@swagger_file, 'a+')  | 
| 28 | 
            +
                  File.open(@swagger_file, 'a+') do |file|
         | 
| 29 | 
            +
                    # file.puts write_in_swagger_file.to_json
         | 
| 30 | 
            +
                    file.puts JSON.pretty_generate write_in_swagger_file
         | 
| 31 | 
            +
                  end
         | 
| 25 32 | 
             
                end
         | 
| 26 33 |  | 
| 27 34 | 
             
                # Delete files temporary
         | 
| 28 35 | 
             
                def delete_temporary_files
         | 
| 29 | 
            -
                  FileUtils. | 
| 36 | 
            +
                  FileUtils.rm_rf(@temp[0]) if SwaggerDocsGenerator.configure.cleanning
         | 
| 30 37 | 
             
                end
         | 
| 31 38 |  | 
| 32 39 | 
             
                def info_swagger_file
         | 
| 33 | 
            -
                   | 
| 40 | 
            +
                  "#{prefix_info} #{@swagger_file}"
         | 
| 34 41 | 
             
                end
         | 
| 35 42 |  | 
| 36 43 | 
             
                def info_swagger_temporary
         | 
| 37 | 
            -
                   | 
| 44 | 
            +
                  "#{prefix_info} #{SwaggerDocsGenerator.temporary_folder}"
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                def info_controller_parser
         | 
| 48 | 
            +
                  klasses = "#{SwaggerDocsGenerator.version_ruby}::BaseDoc".constantize
         | 
| 49 | 
            +
                  klasses.subclasses.each do |controller|
         | 
| 50 | 
            +
                    yield("#{prefix_info} [Controller] #{controller::CONTROLLER}")
         | 
| 51 | 
            +
                  end
         | 
| 38 52 | 
             
                end
         | 
| 39 53 |  | 
| 40 54 | 
             
                private
         | 
| @@ -45,50 +59,19 @@ module SwaggerDocsGenerator | |
| 45 59 | 
             
                  '->'
         | 
| 46 60 | 
             
                end
         | 
| 47 61 |  | 
| 48 | 
            -
                def create_info_text(message)
         | 
| 49 | 
            -
                  "#{prefix_info} #{message}"
         | 
| 50 | 
            -
                end
         | 
| 51 | 
            -
             | 
| 52 | 
            -
                # :reek:UtilityFunction
         | 
| 53 | 
            -
                def path
         | 
| 54 | 
            -
                  File.join(Dir.pwd, '/public')
         | 
| 55 | 
            -
                end
         | 
| 56 | 
            -
             | 
| 57 62 | 
             
                def delete_file_before
         | 
| 58 63 | 
             
                  File.delete(@swagger_file) if File.exist?(@swagger_file)
         | 
| 59 64 | 
             
                end
         | 
| 60 65 |  | 
| 61 | 
            -
                 | 
| 62 | 
            -
                  FileUtils.mkdir_p(@version) unless File.directory?(@version)
         | 
| 63 | 
            -
                end
         | 
| 64 | 
            -
             | 
| 66 | 
            +
                # :reek:UtilityFunction
         | 
| 65 67 | 
             
                def write_in_swagger_file
         | 
| 66 | 
            -
                   | 
| 67 | 
            -
                   | 
| 68 | 
            -
                   | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
                   | 
| 73 | 
            -
                  @hash.merge!(MetadataInfo.new.construct_swagger_file)
         | 
| 74 | 
            -
                end
         | 
| 75 | 
            -
             | 
| 76 | 
            -
                def write_in_swagger_file_controllers
         | 
| 77 | 
            -
                  @hash.merge!(MetadataPath.new.construct_swagger_file)
         | 
| 78 | 
            -
                  @hash.merge!(MetadataTag.new.construct_swagger_file)
         | 
| 79 | 
            -
                end
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                def write_in_swagger_file_models
         | 
| 82 | 
            -
                  @hash.merge!(MetadataDefinition.new.construct_swagger_file)
         | 
| 83 | 
            -
                end
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                def agregate_metadata
         | 
| 86 | 
            -
                  case defined?(Rails) && Rails.env
         | 
| 87 | 
            -
                  when 'production' || 'test'
         | 
| 88 | 
            -
                    write_in_swagger_file.to_json
         | 
| 89 | 
            -
                  else
         | 
| 90 | 
            -
                    JSON.pretty_generate write_in_swagger_file
         | 
| 91 | 
            -
                  end
         | 
| 68 | 
            +
                  # Parse option to this gem
         | 
| 69 | 
            +
                  hash = MetadataConfiguration.new.construct_swagger_file
         | 
| 70 | 
            +
                  hash.merge!(MetadataInfo.new.construct_swagger_file)
         | 
| 71 | 
            +
                  # Parse temporary file (controller - actions)
         | 
| 72 | 
            +
                  hash.merge!(MetadataJsons.new.construct_swagger_file)
         | 
| 73 | 
            +
                  # Parse Model
         | 
| 74 | 
            +
                  hash.merge!(MetadataDefinition.new.construct_swagger_file)
         | 
| 92 75 | 
             
                end
         | 
| 93 76 | 
             
              end
         | 
| 94 77 | 
             
            end
         | 
| @@ -6,40 +6,12 @@ module SwaggerDocsGenerator | |
| 6 6 | 
             
              # @abstract
         | 
| 7 7 | 
             
              #   Abstract class for metadata provide to controlloer in Rails application
         | 
| 8 8 | 
             
              class MetadataController < Metadata
         | 
| 9 | 
            -
                def initialize
         | 
| 10 | 
            -
                  @file_path = File.join(Dir.pwd, 'public',
         | 
| 11 | 
            -
                                         SwaggerDocsGenerator.configure_info.version)
         | 
| 12 | 
            -
                  @conf = SwaggerDocsGenerator.configure.base_controller
         | 
| 13 | 
            -
                  @controllers = case @conf
         | 
| 14 | 
            -
                                 when String then string_controller
         | 
| 15 | 
            -
                                 when Array then array_controller
         | 
| 16 | 
            -
                                 when Class then class_controller
         | 
| 17 | 
            -
                                 end
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
             | 
| 20 9 | 
             
                private
         | 
| 21 10 |  | 
| 22 | 
            -
                attr_accessor :controllers, :file_path
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                # :reek:UtilityFunction
         | 
| 25 | 
            -
                def string_controller
         | 
| 26 | 
            -
                  ApplicationController.subclasses
         | 
| 27 | 
            -
                end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                def array_controller
         | 
| 30 | 
            -
                  array = []
         | 
| 31 | 
            -
                  @conf.map { |controller| array |= search_subclasses(controller) }
         | 
| 32 | 
            -
                  array
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                def class_controller
         | 
| 36 | 
            -
                  search_subclasses(@conf.subclasses)
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
             | 
| 39 11 | 
             
                # :reek:UtilityFunction
         | 
| 40 | 
            -
                def  | 
| 41 | 
            -
                   | 
| 42 | 
            -
             | 
| 12 | 
            +
                def temporary_file(controller)
         | 
| 13 | 
            +
                  File.join(SwaggerDocsGenerator.temporary_folder,
         | 
| 14 | 
            +
                            "#{controller.controller_name}.json")
         | 
| 43 15 | 
             
                end
         | 
| 44 16 | 
             
              end
         | 
| 45 17 | 
             
            end
         | 
| @@ -8,7 +8,7 @@ module SwaggerDocsGenerator | |
| 8 8 | 
             
              # Generate metadata for block definition in swagger file
         | 
| 9 9 | 
             
              #
         | 
| 10 10 | 
             
              # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#definitions-object
         | 
| 11 | 
            -
              class MetadataDefinition <  | 
| 11 | 
            +
              class MetadataDefinition < Metadata
         | 
| 12 12 | 
             
                def initialize
         | 
| 13 13 | 
             
                  super
         | 
| 14 14 | 
             
                  @model = nil
         | 
| @@ -24,20 +24,19 @@ module SwaggerDocsGenerator | |
| 24 24 | 
             
                  find_models.merge!(find_in_controller)
         | 
| 25 25 | 
             
                end
         | 
| 26 26 |  | 
| 27 | 
            -
                # :reek:NilCheck
         | 
| 28 27 | 
             
                def find_models
         | 
| 29 28 | 
             
                  hash = {}
         | 
| 30 | 
            -
                   | 
| 31 | 
            -
                    data = each_controller(controller)
         | 
| 32 | 
            -
                    hash.merge!(data) unless data. | 
| 29 | 
            +
                  all_class_documentation.each do |controller|
         | 
| 30 | 
            +
                    data = each_controller(controller::CONTROLLER)
         | 
| 31 | 
            +
                    hash.merge!(data) unless data.empty?
         | 
| 33 32 | 
             
                  end
         | 
| 34 33 | 
             
                  hash
         | 
| 35 34 | 
             
                end
         | 
| 36 35 |  | 
| 37 36 | 
             
                def find_in_controller
         | 
| 38 37 | 
             
                  hash = {}
         | 
| 39 | 
            -
                   | 
| 40 | 
            -
                    file =  | 
| 38 | 
            +
                  all_class_documentation.each do |controller|
         | 
| 39 | 
            +
                    file = temporary_file(controller::CONTROLLER)
         | 
| 41 40 | 
             
                    hash.merge!(read_file(file)) if File.exist?(file)
         | 
| 42 41 | 
             
                  end
         | 
| 43 42 | 
             
                  hash
         | 
| @@ -49,11 +48,15 @@ module SwaggerDocsGenerator | |
| 49 48 | 
             
                  json.key?('definitions') ? json['definitions'] : {}
         | 
| 50 49 | 
             
                end
         | 
| 51 50 |  | 
| 52 | 
            -
                def each_controller( | 
| 53 | 
            -
                   | 
| 51 | 
            +
                def each_controller(model_name)
         | 
| 52 | 
            +
                  read_model(model_name) || {}
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                def read_model(model_name)
         | 
| 56 | 
            +
                  @model = Model.new(model_name)
         | 
| 54 57 | 
             
                  contruct_hash
         | 
| 55 58 | 
             
                rescue NameError => message
         | 
| 56 | 
            -
                  puts " | 
| 59 | 
            +
                  puts "-> [Model] #{message.name} -- doesn't exist"
         | 
| 57 60 | 
             
                end
         | 
| 58 61 |  | 
| 59 62 | 
             
                def contruct_hash
         | 
| @@ -64,5 +67,11 @@ module SwaggerDocsGenerator | |
| 64 67 | 
             
                    }
         | 
| 65 68 | 
             
                  }
         | 
| 66 69 | 
             
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                # :reek:UtilityFunction
         | 
| 72 | 
            +
                def temporary_file(controller)
         | 
| 73 | 
            +
                  File.join(SwaggerDocsGenerator.temporary_folder,
         | 
| 74 | 
            +
                            "#{controller.controller_name}.json")
         | 
| 75 | 
            +
                end
         | 
| 67 76 | 
             
              end
         | 
| 68 77 | 
             
            end
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SwaggerDocsGenerator
         | 
| 4 | 
            +
              # Parse temporary json files
         | 
| 5 | 
            +
              class MetadataJsons
         | 
| 6 | 
            +
                def initialize
         | 
| 7 | 
            +
                  @paths = { paths: {} }
         | 
| 8 | 
            +
                  @tags_array = []
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def construct_swagger_file
         | 
| 12 | 
            +
                  hash = {}
         | 
| 13 | 
            +
                  files_tmp.each do |file|
         | 
| 14 | 
            +
                    @paths[:paths].merge!(read_part_json(file, 'paths'))
         | 
| 15 | 
            +
                    @tags_array.push read_part_json(file, 'tags')
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                  hash.merge(@paths).merge(tags: @tags_array)
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                private
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                # :reek:UtilityFunction
         | 
| 23 | 
            +
                def files_tmp
         | 
| 24 | 
            +
                  Dir[Rails.root.join(SwaggerDocsGenerator.temporary_folder, '*.json')]
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                # :reek:UtilityFunction
         | 
| 28 | 
            +
                def read_part_json(file, key)
         | 
| 29 | 
            +
                  JSON.parse(File.read(file))[key]
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
            end
         | 
| @@ -24,10 +24,20 @@ module SwaggerDocsGenerator | |
| 24 24 |  | 
| 25 25 | 
             
                private
         | 
| 26 26 |  | 
| 27 | 
            +
                # :reek:UtilityFunction
         | 
| 28 | 
            +
                def base_class_documentation
         | 
| 29 | 
            +
                  "#{SwaggerDocsGenerator.version_ruby}::BaseDoc".constantize
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def all_class_documentation
         | 
| 33 | 
            +
                  base_class_documentation.subclasses
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 27 36 | 
             
                attr_reader :config
         | 
| 28 37 | 
             
              end
         | 
| 29 38 | 
             
            end
         | 
| 30 39 |  | 
| 31 40 | 
             
            require 'swagger_docs_generator/metadata/configuration'
         | 
| 32 41 | 
             
            require 'swagger_docs_generator/metadata/info'
         | 
| 33 | 
            -
            require 'swagger_docs_generator/metadata/ | 
| 42 | 
            +
            require 'swagger_docs_generator/metadata/jsons'
         | 
| 43 | 
            +
            require 'swagger_docs_generator/metadata/definition'
         | 
| @@ -2,12 +2,19 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            require 'swagger_docs_generator/parser/actions/actions'
         | 
| 4 4 |  | 
| 5 | 
            +
            # :reek:UtilityFunction
         | 
| 6 | 
            +
            # :reek:InstanceVariableAssumption
         | 
| 7 | 
            +
            # :reek:TooManyInstanceVariables
         | 
| 8 | 
            +
            # :reek:TooManyStatements
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            # rubocop:disable Metrics/AbcSize
         | 
| 11 | 
            +
            # rubocop:disable Metrics/CyclomaticComplexity
         | 
| 5 12 | 
             
            module SwaggerDocsGenerator
         | 
| 6 13 | 
             
              # # Parse action in controller classe to Rails application. It's adding
         | 
| 7 14 | 
             
              # paths to swagger docs file.
         | 
| 8 15 | 
             
              class ParserAction < Parser
         | 
| 9 16 | 
             
                def initialize(action, &block)
         | 
| 10 | 
            -
                  super(binding.of_callers[1].klass | 
| 17 | 
            +
                  super(binding.of_callers[1].klass)
         | 
| 11 18 | 
             
                  @action = action
         | 
| 12 19 | 
             
                  @parameter = []
         | 
| 13 20 | 
             
                  @response = {}
         | 
| @@ -15,9 +22,8 @@ module SwaggerDocsGenerator | |
| 15 22 | 
             
                end
         | 
| 16 23 |  | 
| 17 24 | 
             
                def adding_path
         | 
| 18 | 
            -
                  json = JSON.parse(File.read( | 
| 19 | 
            -
                  File.open( | 
| 20 | 
            -
                    # json['paths'].merge!(construct_routes(json))
         | 
| 25 | 
            +
                  json = JSON.parse(File.read(temporary_file))
         | 
| 26 | 
            +
                  File.open(temporary_file, 'w') do |file|
         | 
| 21 27 | 
             
                    path_exist(json, construct_routes)
         | 
| 22 28 | 
             
                    file.puts(JSON.pretty_generate(json))
         | 
| 23 29 | 
             
                  end
         | 
| @@ -54,7 +60,7 @@ module SwaggerDocsGenerator | |
| 54 60 | 
             
                  element.merge!(deprecated: @deprecated)     if @deprecated.present?
         | 
| 55 61 | 
             
                  element.merge!(produces: @produce)          if @produce.present?
         | 
| 56 62 | 
             
                  element.merge!(responses: @response)
         | 
| 57 | 
            -
                  element.merge!(tags:  | 
| 63 | 
            +
                  element.merge!(tags: write_tag)
         | 
| 58 64 | 
             
                end
         | 
| 59 65 |  | 
| 60 66 | 
             
                def route
         | 
| @@ -65,8 +71,8 @@ module SwaggerDocsGenerator | |
| 65 71 | 
             
                  { @route => { @verb => construct_path }.merge!(patch: construct_path) }
         | 
| 66 72 | 
             
                end
         | 
| 67 73 |  | 
| 68 | 
            -
                def  | 
| 69 | 
            -
                  [ | 
| 74 | 
            +
                def write_tag
         | 
| 75 | 
            +
                  [@tag_name]
         | 
| 70 76 | 
             
                end
         | 
| 71 77 |  | 
| 72 78 | 
             
                def summary(text)
         | 
| @@ -100,3 +106,5 @@ module SwaggerDocsGenerator | |
| 100 106 | 
             
                end
         | 
| 101 107 | 
             
              end
         | 
| 102 108 | 
             
            end
         | 
| 109 | 
            +
            # rubocop:enable Metrics/AbcSize
         | 
| 110 | 
            +
            # rubocop:enable Metrics/CyclomaticComplexity
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # :reek:InstanceVariableAssumption
         | 
| 4 | 
            +
            # :reek:NilCheck
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module SwaggerDocsGenerator
         | 
| 7 | 
            +
              module Actions
         | 
| 8 | 
            +
                # Write parameter type :body
         | 
| 9 | 
            +
                class Body < Parameter
         | 
| 10 | 
            +
                  def to_hash
         | 
| 11 | 
            +
                    {
         | 
| 12 | 
            +
                      in:               :body,
         | 
| 13 | 
            +
                      name:             @name.nil? ? 'body' : @name,
         | 
| 14 | 
            +
                      description:      @description.nil? ? '' : @description,
         | 
| 15 | 
            +
                      required:         @required.nil? ? true : @required,
         | 
| 16 | 
            +
                      schema: { '$ref': @schema.nil? ? '' : format_name }
         | 
| 17 | 
            +
                    }
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  private
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def schema(text)
         | 
| 23 | 
            +
                    @schema = text
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  def format_name
         | 
| 27 | 
            +
                    "#/definitions/#{@schema.tr(' ', '_').camelize}"
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # :reek:InstanceVariableAssumption
         | 
| 4 | 
            +
            # :reek:NilCheck
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module SwaggerDocsGenerator
         | 
| 7 | 
            +
              module Actions
         | 
| 8 | 
            +
                # Write parameter type :form
         | 
| 9 | 
            +
                class Form < Parameter
         | 
| 10 | 
            +
                  def to_hash
         | 
| 11 | 
            +
                    {
         | 
| 12 | 
            +
                      in:               :form,
         | 
| 13 | 
            +
                      name:             @name.nil? ? 'form' : @name,
         | 
| 14 | 
            +
                      description:      @description.nil? ? '' : @description,
         | 
| 15 | 
            +
                      required:         @required.nil? ? true : @required
         | 
| 16 | 
            +
                    }
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # :reek:InstanceVariableAssumption
         | 
| 4 | 
            +
            # :reek:NilCheck
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module SwaggerDocsGenerator
         | 
| 7 | 
            +
              module Actions
         | 
| 8 | 
            +
                # Write parameter type :header
         | 
| 9 | 
            +
                class Header < Parameter
         | 
| 10 | 
            +
                  def to_hash
         | 
| 11 | 
            +
                    {
         | 
| 12 | 
            +
                      in:               :header,
         | 
| 13 | 
            +
                      name:             @name.nil? ? 'header' : @name,
         | 
| 14 | 
            +
                      description:      @description.nil? ? '' : @description,
         | 
| 15 | 
            +
                      required:         @required.nil? ? true : @required,
         | 
| 16 | 
            +
                      type:             @type.nil? ? '' : @type
         | 
| 17 | 
            +
                    }
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  private
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def type(text)
         | 
| 23 | 
            +
                    @type = text
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # :reek:InstanceVariableAssumption
         | 
| 4 | 
            +
            # :reek:NilCheck
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module SwaggerDocsGenerator
         | 
| 7 | 
            +
              module Actions
         | 
| 8 | 
            +
                # Write parameter type :path
         | 
| 9 | 
            +
                class Path < Parameter
         | 
| 10 | 
            +
                  def to_hash
         | 
| 11 | 
            +
                    {
         | 
| 12 | 
            +
                      in:               :path,
         | 
| 13 | 
            +
                      name:             @name.nil? ? 'path' : @name,
         | 
| 14 | 
            +
                      description:      @description.nil? ? '' : @description,
         | 
| 15 | 
            +
                      required:         @required.nil? ? true : @required,
         | 
| 16 | 
            +
                      type:             @type.nil? ? '' : @type
         | 
| 17 | 
            +
                    }
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  private
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def type(text)
         | 
| 23 | 
            +
                    @type = text
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # :reek:InstanceVariableAssumption
         | 
| 4 | 
            +
            # :reek:NilCheck
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module SwaggerDocsGenerator
         | 
| 7 | 
            +
              module Actions
         | 
| 8 | 
            +
                # Write parameter type :query
         | 
| 9 | 
            +
                class Query < Parameter
         | 
| 10 | 
            +
                  def to_hash
         | 
| 11 | 
            +
                    {
         | 
| 12 | 
            +
                      in:               :query,
         | 
| 13 | 
            +
                      name:             @name.nil? ? 'query' : @name,
         | 
| 14 | 
            +
                      description:      @description.nil? ? '' : @description,
         | 
| 15 | 
            +
                      required:         @required.nil? ? true : @required,
         | 
| 16 | 
            +
                      type:             @type.nil? ? 'array' : @type,
         | 
| 17 | 
            +
                      items: { type: 'string' }
         | 
| 18 | 
            +
                    }
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  private
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def type(text)
         | 
| 24 | 
            +
                    @type = text
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -1,6 +1,11 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            # :reek:UtilityFunction
         | 
| 4 | 
            +
            # :reek:InstanceVariableAssumption
         | 
| 5 | 
            +
            # :reek:TooManyInstanceVariables
         | 
| 6 | 
            +
            # :reek:DuplicateMethodCall
         | 
| 7 | 
            +
            # :reek:TooManyStatements
         | 
| 8 | 
            +
             | 
| 4 9 | 
             
            module SwaggerDocsGenerator
         | 
| 5 10 | 
             
              module Actions
         | 
| 6 11 | 
             
                # # Test :parameters
         | 
| @@ -8,88 +13,57 @@ module SwaggerDocsGenerator | |
| 8 13 | 
             
                # Complete parameters field for action
         | 
| 9 14 | 
             
                class Parameter
         | 
| 10 15 | 
             
                  def initialize(&block)
         | 
| 16 | 
            +
                    @param = nil
         | 
| 11 17 | 
             
                    instance_eval(&block) if block_given?
         | 
| 12 18 | 
             
                  end
         | 
| 13 19 |  | 
| 14 20 | 
             
                  def to_hash
         | 
| 15 | 
            -
                     | 
| 16 | 
            -
                    when :path then path_hash
         | 
| 17 | 
            -
                    when :header then header_hash
         | 
| 18 | 
            -
                    when :query then query_hash
         | 
| 19 | 
            -
                    when :body then body_hash
         | 
| 20 | 
            -
                    when :form then form_hash
         | 
| 21 | 
            -
                    end
         | 
| 21 | 
            +
                    @param.to_hash
         | 
| 22 22 | 
             
                  end
         | 
| 23 23 |  | 
| 24 24 | 
             
                  private
         | 
| 25 25 |  | 
| 26 | 
            -
                  def  | 
| 27 | 
            -
                    @ | 
| 28 | 
            -
                    @name = data[0]
         | 
| 29 | 
            -
                    @description = data[1]
         | 
| 30 | 
            -
                    @type = data[2]
         | 
| 31 | 
            -
                    @required = data[3]
         | 
| 26 | 
            +
                  def name(text)
         | 
| 27 | 
            +
                    @name = text
         | 
| 32 28 | 
             
                  end
         | 
| 33 29 |  | 
| 34 | 
            -
                  def  | 
| 35 | 
            -
                     | 
| 36 | 
            -
                      name: @name,
         | 
| 37 | 
            -
                      in: @in,
         | 
| 38 | 
            -
                      description: @description,
         | 
| 39 | 
            -
                      required: @required,
         | 
| 40 | 
            -
                      type: @type
         | 
| 41 | 
            -
                    }
         | 
| 30 | 
            +
                  def description(text)
         | 
| 31 | 
            +
                    @description = text
         | 
| 42 32 | 
             
                  end
         | 
| 43 33 |  | 
| 44 | 
            -
                  def  | 
| 45 | 
            -
                    @ | 
| 46 | 
            -
                    @name = data[0]
         | 
| 47 | 
            -
                    @description = data[1]
         | 
| 48 | 
            -
                    @type = data[2]
         | 
| 49 | 
            -
                    @required = data[3]
         | 
| 50 | 
            -
                    @enum = data[4]
         | 
| 34 | 
            +
                  def required(text)
         | 
| 35 | 
            +
                    @required = text
         | 
| 51 36 | 
             
                  end
         | 
| 52 37 |  | 
| 53 | 
            -
                  def  | 
| 54 | 
            -
                     | 
| 55 | 
            -
                      name: @name,
         | 
| 56 | 
            -
                      in: @in,
         | 
| 57 | 
            -
                      description: @description,
         | 
| 58 | 
            -
                      required: @required,
         | 
| 59 | 
            -
                      type: @type,
         | 
| 60 | 
            -
                      enum: @enum
         | 
| 61 | 
            -
                    }
         | 
| 38 | 
            +
                  def body(&block)
         | 
| 39 | 
            +
                    @param = Body.new(&block)
         | 
| 62 40 | 
             
                  end
         | 
| 63 41 |  | 
| 64 | 
            -
                  def  | 
| 65 | 
            -
                    @ | 
| 42 | 
            +
                  def form(&block)
         | 
| 43 | 
            +
                    @param = Form.new(&block)
         | 
| 66 44 | 
             
                  end
         | 
| 67 45 |  | 
| 68 | 
            -
                   | 
| 69 | 
            -
             | 
| 70 | 
            -
                  def body(data)
         | 
| 71 | 
            -
                    @in = :body
         | 
| 72 | 
            -
                    @name = data[1]
         | 
| 73 | 
            -
                    @description = data[0]
         | 
| 74 | 
            -
                    @definition = data[1]
         | 
| 46 | 
            +
                  def header(&block)
         | 
| 47 | 
            +
                    @param = Header.new(&block)
         | 
| 75 48 | 
             
                  end
         | 
| 76 49 |  | 
| 77 | 
            -
                  def  | 
| 78 | 
            -
                     | 
| 79 | 
            -
                      name: @name,
         | 
| 80 | 
            -
                      in: @in,
         | 
| 81 | 
            -
                      description: @description,
         | 
| 82 | 
            -
                      required: true,
         | 
| 83 | 
            -
                      schema: { type: :object, items: { '$ref': @definition.tr(' ', '_').camelize } }
         | 
| 84 | 
            -
                    }
         | 
| 50 | 
            +
                  def path(&block)
         | 
| 51 | 
            +
                    @param = Path.new(&block)
         | 
| 85 52 | 
             
                  end
         | 
| 86 53 |  | 
| 87 | 
            -
                  def  | 
| 88 | 
            -
                    @ | 
| 54 | 
            +
                  def query(&block)
         | 
| 55 | 
            +
                    @param = Query.new(&block)
         | 
| 89 56 | 
             
                  end
         | 
| 90 57 |  | 
| 91 | 
            -
                  def  | 
| 58 | 
            +
                  def test_value(value, default)
         | 
| 59 | 
            +
                    value.empty? ? default : value
         | 
| 92 60 | 
             
                  end
         | 
| 93 61 | 
             
                end
         | 
| 94 62 | 
             
              end
         | 
| 95 63 | 
             
            end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            require 'swagger_docs_generator/parser/actions/parameters/body'
         | 
| 66 | 
            +
            require 'swagger_docs_generator/parser/actions/parameters/form'
         | 
| 67 | 
            +
            require 'swagger_docs_generator/parser/actions/parameters/header'
         | 
| 68 | 
            +
            require 'swagger_docs_generator/parser/actions/parameters/path'
         | 
| 69 | 
            +
            require 'swagger_docs_generator/parser/actions/parameters/query'
         |