Sha256: 74f68d94eacdce0be09f093826bfc58f194594cef6871d3d46941515822f557d

Contents?: true

Size: 1.75 KB

Versions: 1

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true

require 'swagger_docs_generator/parser/model'

module SwaggerDocsGenerator
  # # Metadata generated
  #
  # Generate metadata for block definition in swagger file
  #
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#definitions-object
  class MetadataDefinition < Metadata
    def initialize
      super
      @model = nil
    end

    def construct_swagger_file
      { definitions: search_definition }
    end

    private

    def search_definition
      find_models.merge!(find_in_controller)
    end

    def find_models
      hash = {}
      all_class_documentation.each do |controller|
        data = each_controller(controller::CONTROLLER)
        hash.merge!(data) unless data.empty?
      end
      hash
    end

    def find_in_controller
      hash = {}
      all_class_documentation.each do |controller|
        file = temporary_file(controller::CONTROLLER)
        hash.merge!(read_file(file)) if File.exist?(file)
      end
      hash
    end

    # :reek:UtilityFunction
    def read_file(file)
      json = JSON.parse(File.read(file))
      json.key?('definitions') ? json['definitions'] : {}
    end

    def each_controller(model_name)
      read_model(model_name) || {}
    end

    def read_model(model_name)
      @model = Model.new(model_name)
      contruct_hash
    rescue NameError => message
      puts "-> [Model] #{message.name} -- doesn't exist"
    end

    def contruct_hash
      {
        @model.name => {
          type: 'object',
          properties: @model.attribute_properties
        }
      }
    end

    # :reek:UtilityFunction
    def temporary_file(controller)
      File.join(SwaggerDocsGenerator.temporary_folder,
                "#{controller.controller_name}.json")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
swagger_docs_generator-0.3.0.pre.18 lib/swagger_docs_generator/metadata/definition.rb