module Swagalicious::ExampleHelpers
Public Instance Methods
app()
click to toggle source
# File lib/swagalicious/example_helpers.rb, line 22 def app @app ||= Rack::Builder.parse_file("config.ru").first end
client()
click to toggle source
# File lib/swagalicious/example_helpers.rb, line 26 def client @client ||= Faraday.new do |b| b.adapter Faraday::Adapter::Rack, app end end
submit_request(metadata, mocked: false, mock_name: nil)
click to toggle source
# File lib/swagalicious/example_helpers.rb, line 32 def submit_request(metadata, mocked: false, mock_name: nil) request = RequestFactory.new.build_request(metadata, self) response = if mocked file_name = File.basename(mock_name || URI.parse(request[:path]).path) MockResponse.new(file_name) else client.public_send(request[:verb]) do |req| req.url request[:path].gsub("//", "/") req.headers = request[:headers] req.body = request[:payload] end end body = response.body body = "{}" if body.empty? @body = Oj.load(body, symbol_keys: true) metadata[:paths] ||= [] metadata[:paths] << request[:path] metadata[:response][:requestBody] ||= {} metadata[:response][:examples] ||= {} mime_types = metadata[:response][:produces] || ["application/json"] full_title = metadata[:swagger_example_name] || "#{metadata[:operation][:summary]}: #{metadata[:description]}" mime_types.each do |mime_type| if request[:payload] metadata[:response][:requestBody][:content] ||= {} metadata[:response][:requestBody][:content][mime_type] ||= {} metadata[:response][:requestBody][:content][mime_type][:examples] ||= {} metadata[:response][:requestBody][:content][mime_type][:examples][full_title] ||= {} metadata[:response][:requestBody][:content][mime_type][:examples][full_title][:value] = Oj.load(request[:payload]).dup end metadata[:response][:examples][mime_type] ||= {} metadata[:response][:examples][mime_type][full_title] = @body end # Validates response matches the proper schema Swagalicious::ResponseValidator.new.validate!(metadata, response) response end