From 29c9f7cae266daa6d87c3a43fdd831ffcc373d46 Mon Sep 17 00:00:00 2001 From: Ben Lewis Date: Wed, 6 Feb 2019 11:43:02 +0000 Subject: [PATCH 1/3] Allow parsing of yml swagger files in rswag-api --- rswag-api/lib/rswag/api/middleware.rb | 15 ++++++++++++++- .../rswag/api/fixtures/swagger/v1/swagger.yml | 5 +++++ rswag-api/spec/rswag/api/middleware_spec.rb | 15 +++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 rswag-api/spec/rswag/api/fixtures/swagger/v1/swagger.yml diff --git a/rswag-api/lib/rswag/api/middleware.rb b/rswag-api/lib/rswag/api/middleware.rb index 118c987..c1a4fbb 100644 --- a/rswag-api/lib/rswag/api/middleware.rb +++ b/rswag-api/lib/rswag/api/middleware.rb @@ -1,4 +1,5 @@ require 'json' +require 'yaml' module Rswag module Api @@ -14,7 +15,7 @@ module Rswag filename = "#{@config.resolve_swagger_root(env)}/#{path}" if env['REQUEST_METHOD'] == 'GET' && File.file?(filename) - swagger = load_json(filename) + swagger = parse_file(filename) @config.swagger_filter.call(swagger, env) unless @config.swagger_filter.nil? return [ @@ -29,6 +30,18 @@ module Rswag private + def parse_file(filename) + if /\.yml$/ === filename + load_yaml(filename) + else + load_json(filename) + end + end + + def load_yaml(filename) + YAML.safe_load(File.read(filename)) + end + def load_json(filename) JSON.parse(File.read(filename)) end diff --git a/rswag-api/spec/rswag/api/fixtures/swagger/v1/swagger.yml b/rswag-api/spec/rswag/api/fixtures/swagger/v1/swagger.yml new file mode 100644 index 0000000..0757e2a --- /dev/null +++ b/rswag-api/spec/rswag/api/fixtures/swagger/v1/swagger.yml @@ -0,0 +1,5 @@ +swagger: '2.0' +info: + title: API V1 + version: v1 +paths: {} diff --git a/rswag-api/spec/rswag/api/middleware_spec.rb b/rswag-api/spec/rswag/api/middleware_spec.rb index aaa148b..f784f25 100644 --- a/rswag-api/spec/rswag/api/middleware_spec.rb +++ b/rswag-api/spec/rswag/api/middleware_spec.rb @@ -76,6 +76,21 @@ module Rswag expect(response[2].join).to include('"host":"tempuri.org"') end end + + context 'when a path maps to a yaml swagger file' do + let(:env) { env_defaults.merge('PATH_INFO' => 'v1/swagger.yml') } + + it 'returns a 200 status' do + expect(response.length).to eql(3) + expect(response.first).to eql('200') + end + + it 'returns contents of the swagger file' do + expect(response.length).to eql(3) + expect(response[1]).to include( 'Content-Type' => 'application/json') + expect(response[2].join).to include('"title":"API V1"') + end + end end end end From 51b47f32e836433031585d1dee1536e38cb425ae Mon Sep 17 00:00:00 2001 From: Ben Lewis Date: Wed, 6 Feb 2019 12:15:01 +0000 Subject: [PATCH 2/3] version compatibility --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index bbd3d73..1abf797 100644 --- a/Gemfile +++ b/Gemfile @@ -13,7 +13,7 @@ when '4', '5' gem 'responders' end -gem 'sqlite3' +gem 'sqlite3', '~> 1.3.6' gem 'rswag-api', path: './rswag-api' gem 'rswag-ui', path: './rswag-ui' From 9eb2d3ddec74fced2a2bff47dd652112a5480b35 Mon Sep 17 00:00:00 2001 From: Ben Lewis Date: Tue, 12 Feb 2019 10:47:15 +0000 Subject: [PATCH 3/3] Allow ".yaml" and ".yml" filename endings for yaml --- rswag-api/lib/rswag/api/middleware.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rswag-api/lib/rswag/api/middleware.rb b/rswag-api/lib/rswag/api/middleware.rb index c1a4fbb..7256794 100644 --- a/rswag-api/lib/rswag/api/middleware.rb +++ b/rswag-api/lib/rswag/api/middleware.rb @@ -31,7 +31,7 @@ module Rswag private def parse_file(filename) - if /\.yml$/ === filename + if /\.ya?ml$/ === filename load_yaml(filename) else load_json(filename)