class Rswag::Api::Middleware

Public Class Methods

new(app, config) click to toggle source
# File lib/rswag/api/middleware.rb, line 9
def initialize(app, config)
  @app = app
  @config = config
end

Public Instance Methods

call(env) click to toggle source
# File lib/rswag/api/middleware.rb, line 14
def call(env)
  path = env['PATH_INFO']
  filename = "#{@config.resolve_swagger_root(env)}/#{path}"

  if env['REQUEST_METHOD'] == 'GET' && File.file?(filename)
    swagger = parse_file(filename)
    @config.swagger_filter.call(swagger, env) unless @config.swagger_filter.nil?
    mime = Rack::Mime.mime_type(::File.extname(path), 'text/plain')
    headers = { 'Content-Type' => mime }.merge(@config.swagger_headers || {})
    body = unload_swagger(filename, swagger)

    return [
      '200',
      headers,
      [ body ]
    ]
  end

  return @app.call(env)
end

Private Instance Methods

load_json(filename) click to toggle source
# File lib/rswag/api/middleware.rb, line 49
def load_json(filename)
  JSON.parse(File.read(filename))
end
load_yaml(filename) click to toggle source
# File lib/rswag/api/middleware.rb, line 45
def load_yaml(filename)
  YAML.safe_load(File.read(filename))
end
parse_file(filename) click to toggle source
# File lib/rswag/api/middleware.rb, line 37
def parse_file(filename)
  if /\.ya?ml$/ === filename
    load_yaml(filename)
  else
    load_json(filename)
  end
end
unload_swagger(filename, swagger) click to toggle source
# File lib/rswag/api/middleware.rb, line 53
def unload_swagger(filename, swagger)
  if /\.ya?ml$/ === filename
    YAML.dump(swagger)
  else
    JSON.dump(swagger)
  end
end