rename to rswag plus major refactor - almost a rewrite

This commit is contained in:
richie
2016-10-11 18:31:12 -07:00
parent f8d993356f
commit c558098c39
453 changed files with 52410 additions and 35793 deletions

View File

@@ -0,0 +1,8 @@
Description:
Adds rswag-api initializer for configuration
Example:
rails generate rswag:api:install
This will create:
config/initializers/rswag-api.rb

View File

@@ -0,0 +1,18 @@
require 'rails/generators'
module Rswag
module Api
class InstallGenerator < Rails::Generators::Base
source_root File.expand_path('../templates', __FILE__)
def add_initializer
template('rswag-api.rb', 'config/initializers/rswag-api.rb')
end
def add_routes
route("mount Rswag::Api::Engine => '/api-docs'")
end
end
end
end

View File

@@ -0,0 +1,14 @@
Rswag::Api.configure do |c|
# Specify a root folder where Swagger JSON files are located
# This is used by the Swagger middleware to serve requests for API descriptions
# NOTE: If you're using rswag-specs to generate Swagger, you'll need to ensure
# that it's configured to generate files in the same folder
c.swagger_root = Rails.root.to_s + '/swagger'
# Inject a lamda function to alter the returned Swagger prior to serialization
# The function will have access to the rack env for the current request
# For example, you could leverage this to dynamically assign the "host" property
#
#c.swagger_filter = lambda { |swagger, env| swagger['host'] = env['HTTP_HOST'] }
end

View File

@@ -0,0 +1,15 @@
require 'rswag/api/version'
require 'rswag/api/configuration'
require 'rswag/api/engine'
module Rswag
module Api
def self.configure
yield(config)
end
def self.config
@config ||= Configuration.new
end
end
end

View File

@@ -0,0 +1,12 @@
module Rswag
module Api
class Configuration
attr_accessor :swagger_root, :swagger_filter
def resolve_swagger_root(env)
path_params = env['action_dispatch.request.path_parameters'] || {}
path_params[:swagger_root] || swagger_root
end
end
end
end

View File

@@ -0,0 +1,13 @@
require 'rswag/api/middleware'
module Rswag
module Api
class Engine < ::Rails::Engine
isolate_namespace Rswag::Api
initializer 'rswag-api.initialize' do |app|
middleware.use Rswag::Api::Middleware, Rswag::Api.config
end
end
end
end

View File

@@ -0,0 +1,37 @@
require 'json'
module Rswag
module Api
class Middleware
def initialize(app, config)
@app = app
@config = config
end
def call(env)
path = env['PATH_INFO']
filename = "#{@config.resolve_swagger_root(env)}/#{path}"
if env['REQUEST_METHOD'] == 'GET' && File.file?(filename)
swagger = load_json(filename)
@config.swagger_filter.call(swagger, env) unless @config.swagger_filter.nil?
return [
'200',
{ 'Content-Type' => 'application/json' },
[ JSON.dump(swagger) ]
]
end
return @app.call(env)
end
private
def load_json(filename)
JSON.parse(File.read(filename))
end
end
end
end

View File

@@ -0,0 +1,5 @@
module Rswag
module Api
VERSION = '1.0.0'
end
end