mirror of
https://github.com/ditkrg/rswag.git
synced 2026-01-25 15:22:56 +00:00
rename to rswag plus major refactor - almost a rewrite
This commit is contained in:
8
rswag-api/lib/generators/rswag/api/install/USAGE
Normal file
8
rswag-api/lib/generators/rswag/api/install/USAGE
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
15
rswag-api/lib/rswag/api.rb
Normal file
15
rswag-api/lib/rswag/api.rb
Normal 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
|
||||
12
rswag-api/lib/rswag/api/configuration.rb
Normal file
12
rswag-api/lib/rswag/api/configuration.rb
Normal 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
|
||||
13
rswag-api/lib/rswag/api/engine.rb
Normal file
13
rswag-api/lib/rswag/api/engine.rb
Normal 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
|
||||
37
rswag-api/lib/rswag/api/middleware.rb
Normal file
37
rswag-api/lib/rswag/api/middleware.rb
Normal 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
|
||||
5
rswag-api/lib/rswag/api/version.rb
Normal file
5
rswag-api/lib/rswag/api/version.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
module Rswag
|
||||
module Api
|
||||
VERSION = '1.0.0'
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user