Sha256: 68cd5c653599d93b4145fd04a795bde2bad2d3cd969f4bcf6e7c1cbc367ba7b5

Contents?: true

Size: 1.79 KB

Versions: 24

Compression:

Stored size: 1.79 KB

Contents

require 'yaml'

module AppMap
  module Swagger
    class Configuration
      DEFAULT_VERSION = '1.0'
      DEFAULT_OUTPUT_DIR = 'swagger'
      DEFAULT_DESCRIPTION = 'Generate Swagger from AppMaps'

      attr_accessor :project_version,
        :output_dir,
        :description
      attr_writer :project_name, :template

      class << self
        def load(config_data)
          Configuration.new.tap do |config|
            config_data.each do |k,v|
              config.send "#{k}=", v
            end
          end
        end
      end

      def initialize
        @project_name = nil
        @project_version = DEFAULT_VERSION
        @output_dir = DEFAULT_OUTPUT_DIR
        @description = DEFAULT_DESCRIPTION
      end

      def project_name
        @project_name || default_project_name
      end

      def template
        @template || default_template
      end

      def default_template
        YAML.load <<~TEMPLATE
          openapi: 3.0.1
          info:
            title: #{project_name}
            version: #{project_version}
          paths:
          components:
          servers:
          - url: http://{defaultHost}
            variables:
              defaultHost:
                default: localhost:3000
          TEMPLATE
      end

      def default_project_name
        # https://www.rubydoc.info/docs/rails/Module#module_parent_name-instance_method
        module_parent_name = ->(cls) { cls.name =~ /::[^:]+\Z/ ? $`.freeze : nil }

        # Lazy-evaluate this so that Rails.application will be defined.
        # If this code runs too early in the lifecycle, Rails.application is nil.
        if defined?(::Rails)
          [module_parent_name.(::Rails.application.class).humanize.titleize, "API"].join(" ")
        else
          "MyProject API"
        end
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
appmap-0.66.1 lib/appmap/swagger/configuration.rb
appmap-0.66.0 lib/appmap/swagger/configuration.rb
appmap-0.65.1 lib/appmap/swagger/configuration.rb
appmap-0.65.0 lib/appmap/swagger/configuration.rb
appmap-0.64.0 lib/appmap/swagger/configuration.rb
appmap-0.63.0 lib/appmap/swagger/configuration.rb
appmap-0.62.1 lib/appmap/swagger/configuration.rb
appmap-0.62.0 lib/appmap/swagger/configuration.rb
appmap-0.61.1 lib/appmap/swagger/configuration.rb
appmap-0.61.0 lib/appmap/swagger/configuration.rb
appmap-0.60.0 lib/appmap/swagger/configuration.rb
appmap-0.59.2 lib/appmap/swagger/configuration.rb
appmap-0.59.1 lib/appmap/swagger/configuration.rb
appmap-0.59.0 lib/appmap/swagger/configuration.rb
appmap-0.58.0 lib/appmap/swagger/configuration.rb
appmap-0.57.1 lib/appmap/swagger/configuration.rb
appmap-0.57.0 lib/appmap/swagger/configuration.rb
appmap-0.56.0 lib/appmap/swagger/configuration.rb
appmap-0.55.0 lib/appmap/swagger/configuration.rb
appmap-0.54.4 lib/appmap/swagger/configuration.rb