From f5ad4bcd0b7ece99321e64447c26a8cd67bcf760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrzej=20Pi=C4=85tyszek?= Date: Tue, 30 May 2017 22:32:32 +0200 Subject: [PATCH] Fix api key default value (#82) * add failing spec * fix adding api_key_default_value to headers * update changelog * bump rubocop to fix rake issue * add geckodriver to fix issues with new selenium-webdriver * fix specs * change gem versions to keep ruby 2.0.0 compatibility --- .rubocop_todo.yml | 2 +- .travis.yml | 7 +++++++ CHANGELOG.md | 4 ++-- .../application/index.html.erb | 20 +++++++++++++++---- grape-swagger-rails.gemspec | 5 +++-- lib/grape-swagger-rails/version.rb | 2 +- lib/tasks/swagger_ui.rake | 4 ++-- spec/features/swagger_spec.rb | 19 ++++++++++++++++-- 8 files changed, 49 insertions(+), 14 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index b8e2cb6..ffccaf9 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2015-08-19 12:23:54 -0400 using RuboCop version 0.33.0. +# on 2015-08-19 12:23:54 -0400 using RuboCop version 0.38.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new diff --git a/.travis.yml b/.travis.yml index 743b400..354dcd8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,15 @@ sudo: false +addons: + firefox: "latest" before_install: - "export DISPLAY=:99.0" - "sh -e /etc/init.d/xvfb start" + - wget https://github.com/mozilla/geckodriver/releases/download/v0.16.1/geckodriver-v0.16.1-linux64.tar.gz + - mkdir geckodriver + - tar -xzf geckodriver-v0.16.1-linux64.tar.gz -C geckodriver + - export PATH=$PATH:$PWD/geckodriver + - gem install bundler language: ruby diff --git a/CHANGELOG.md b/CHANGELOG.md index fffa906..879c9cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ -Next Release -============ +### Next Release * Your contribution here. +* [#82](https://github.com/ruby-grape/grape-swagger-rails/pull/82): Fixed api_key_default_value - [@konto-andrzeja](https://github.com/konto-andrzeja). ### 0.3.0 (September 22, 2016) diff --git a/app/views/grape_swagger_rails/application/index.html.erb b/app/views/grape_swagger_rails/application/index.html.erb index 676471d..4a02612 100644 --- a/app/views/grape_swagger_rails/application/index.html.erb +++ b/app/views/grape_swagger_rails/application/index.html.erb @@ -15,6 +15,12 @@ <%=raw "headers.header_#{index} = new SwaggerClient.ApiKeyAuthorization('#{CGI.escapeHTML(key)}', '#{CGI.escapeHTML(value)}', 'header');" %> <% end %> + <% if GrapeSwaggerRails.options.api_key_default_value.try(:strip).present? && + GrapeSwaggerRails.options.headers['Authorization'].blank? %> + <% headers_count = GrapeSwaggerRails.options.headers.count %> + <%= raw "headers.header_#{headers_count} = getApiKeyAuthorization();" %> + <% end %> + window.swaggerUi = new SwaggerUi({ url: options.app_url + options.url, dom_id: "swagger-ui-container", @@ -28,7 +34,6 @@ console.log(swaggerUi); } $('pre code').each(function(i, e) {hljs.highlightBlock(e)}); - addApiKeyAuthorization(); }, onFailure: function(data) { if('console' in window) { @@ -41,7 +46,7 @@ apisSorter: "alpha" }); - function addApiKeyAuthorization() { + function getApiKeyAuthorization() { var key = $('#input_apiKey')[0].value; if (key && key.trim() != "") { @@ -50,9 +55,16 @@ } else if (options.api_auth == 'bearer') { key = "Bearer " + key } - window.swaggerUi.api.clientAuthorizations.add("key", new SwaggerClient.ApiKeyAuthorization(options.api_key_name, key, options.api_key_type)); + return new SwaggerClient.ApiKeyAuthorization(options.api_key_name, key, options.api_key_type); + } + } + + function addApiKeyAuthorization() { + var apiKeyAuthorization = getApiKeyAuthorization(); + if (apiKeyAuthorization) { + window.swaggerUi.api.clientAuthorizations.add("key", apiKeyAuthorization); } - } + } $('#input_apiKey').change(addApiKeyAuthorization); diff --git a/grape-swagger-rails.gemspec b/grape-swagger-rails.gemspec index f2b53c3..d4e7843 100644 --- a/grape-swagger-rails.gemspec +++ b/grape-swagger-rails.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'railties', '>= 3.2.12' - spec.add_development_dependency 'bundler', '~> 1.3' + spec.add_development_dependency 'bundler', '~> 1.15' spec.add_development_dependency 'rake' spec.add_development_dependency 'git' spec.add_development_dependency 'rspec-rails' @@ -34,7 +34,8 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'sprockets' spec.add_development_dependency 'rack', '~> 1.6' spec.add_development_dependency 'rack-cors' - spec.add_development_dependency 'rubocop', '0.33.0' + spec.add_development_dependency 'rubocop', '0.38.0' spec.add_development_dependency 'mime-types', '< 3.0' spec.add_development_dependency 'rack-no_animations' + spec.add_development_dependency 'nokogiri', '< 1.7.0' end diff --git a/lib/grape-swagger-rails/version.rb b/lib/grape-swagger-rails/version.rb index 275c7c7..8ac6bf5 100644 --- a/lib/grape-swagger-rails/version.rb +++ b/lib/grape-swagger-rails/version.rb @@ -1,3 +1,3 @@ module GrapeSwaggerRails - VERSION = '0.3.0' + VERSION = '0.3.0'.freeze end diff --git a/lib/tasks/swagger_ui.rake b/lib/tasks/swagger_ui.rake index 43067ac..a5917a7 100644 --- a/lib/tasks/swagger_ui.rake +++ b/lib/tasks/swagger_ui.rake @@ -36,7 +36,7 @@ namespace :swagger_ui do 'object-assign-pollyfill.js', 'swagger-oauth.js', 'base64.js' - ] + ].freeze javascript_files = Dir["#{root}/app/assets/javascripts/grape_swagger_rails/*.js"].map { |f| f.split('/').last } - ['application.js'] @@ -61,7 +61,7 @@ namespace :swagger_ui do CSS_FILES = [ 'reset.css', 'screen.css' - ] + ].freeze css_files = Dir["#{root}/app/assets/stylesheets/grape_swagger_rails/*.css"].map { |f| f.split('/').last } - ['application.css'] diff --git a/spec/features/swagger_spec.rb b/spec/features/swagger_spec.rb index 957c2da..ac3d489 100644 --- a/spec/features/swagger_spec.rb +++ b/spec/features/swagger_spec.rb @@ -19,8 +19,8 @@ it 'evaluates config options correctly' do visit '/swagger' - page_options_json = page.evaluate_script("$('html').data('swagger-options')").to_json - expect(page_options_json).to eq(@options.marshal_dump.to_json) + page_options = page.evaluate_script("$('html').data('swagger-options')").symbolize_keys + expect(page_options).to eq(@options.marshal_dump) end context '#headers' do @@ -49,6 +49,21 @@ expect(page).to have_css 'span.hljs-string', text: 'Another Value' end end + context '#api_key_default_value' do + before do + GrapeSwaggerRails.options.api_auth = 'bearer' + GrapeSwaggerRails.options.api_key_name = 'Authorization' + GrapeSwaggerRails.options.api_key_type = 'header' + GrapeSwaggerRails.options.api_key_default_value = 'token' + visit '/swagger' + end + it 'adds an Authorization header' do + headers = page.evaluate_script('swaggerUi.api.clientAuthorizations')['authz'] + last_header = headers.fetch("header_#{headers.length - 1}", {}) + expect(last_header.slice('name', 'value')) + .to eq('name' => 'Authorization', 'value' => 'Bearer token') + end + end context '#api_auth:basic' do before do GrapeSwaggerRails.options.api_auth = 'basic'