From efab9b43a4cf4f8e5cffece3d638f09a20c9e194 Mon Sep 17 00:00:00 2001 From: domaindrivendev Date: Mon, 25 Apr 2016 23:06:15 -0700 Subject: [PATCH] Require 'in' property for path params + rename Adapter to DSL --- .gitignore | 1 + Gemfile | 1 - README.md | 13 +++++++------ .../swagger_rails/install/install_generator.rb | 4 ++-- lib/swagger_rails.rb | 9 ++++----- lib/swagger_rails/rspec/{adapter.rb => dsl.rb} | 2 +- lib/swagger_rails/test_visitor.rb | 7 ++++--- lib/tasks/swagger_rails_tasks.rake | 2 +- spec/dummy/spec/integration/blogs_spec.rb | 2 +- spec/dummy/spec/rails_helper.rb | 4 ++-- .../swagger_rails/install_generator_spec.rb | 10 ++++------ spec/spec_helper.rb | 4 ++-- spec/test_visitor_spec.rb | 2 +- swagger_rails.gemspec | 4 +++- 14 files changed, 33 insertions(+), 32 deletions(-) rename lib/swagger_rails/rspec/{adapter.rb => dsl.rb} (98%) diff --git a/.gitignore b/.gitignore index aa6323a..649d385 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ bower_components/* !bower_components/swagger-ui bower_components/swagger-ui/* !bower_components/swagger-ui/dist +.ruby-version diff --git a/Gemfile b/Gemfile index 670cece..ee0ed2d 100644 --- a/Gemfile +++ b/Gemfile @@ -15,5 +15,4 @@ gemspec gem 'sqlite3' gem 'pry' -gem 'rspec-rails' gem 'generator_spec' diff --git a/README.md b/README.md index 85906d0..f8a6da6 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,10 @@ __NOTE__: It's early days so please be gentle when reporting issues :) As author ```ruby require 'rails_helper' - require 'swagger_rails/rspec/adapter' + require 'swagger_rails/rspec/dsl' describe 'Blogs API' do - extend SwaggerRails::RSpec::Adapter + extend SwaggerRails::RSpec::DSL path '/blogs' do @@ -109,13 +109,14 @@ And then tagging your spec's with the target swagger_doc: ```ruby require 'rails_helper' - require 'swagger_rails/rspec/adapter' + require 'swagger_rails/rspec/dsl' describe 'Blogs API V2', swagger_doc: 'v2/swagger.json' do - extend SwaggerRails::RSpec::Adapter + extend SwaggerRails::RSpec::DSL - path '/blogs' do - ... + path '/blogs' do + ... + end end end ``` diff --git a/lib/generators/swagger_rails/install/install_generator.rb b/lib/generators/swagger_rails/install/install_generator.rb index 8a7329d..1a3b8d9 100644 --- a/lib/generators/swagger_rails/install/install_generator.rb +++ b/lib/generators/swagger_rails/install/install_generator.rb @@ -5,8 +5,8 @@ module SwaggerRails class InstallGenerator < Rails::Generators::Base source_root File.expand_path('../templates', __FILE__) - def add_swagger_json - template('swagger.json', 'config/swagger/v1/swagger.json') + def add_swagger_dir + empty_directory('config/swagger/v1') end def add_initializer diff --git a/lib/swagger_rails.rb b/lib/swagger_rails.rb index 8e82547..ff2ff45 100644 --- a/lib/swagger_rails.rb +++ b/lib/swagger_rails.rb @@ -7,17 +7,16 @@ module SwaggerRails end class << self - attr_accessor :doc_factories - @@doc_factories = {} + @@swagger_docs = {} def swagger_doc(path, &block) - @@doc_factories[path] = block + @@swagger_docs[path] = block end def swagger_docs Hash[ - @@doc_factories.map do |path, factory| - [ path, { swagger: '2.0' }.merge(factory.call) ] + @@swagger_docs.map do |path, factory| + [ path, factory.call.merge(swagger: '2.0') ] end ] end diff --git a/lib/swagger_rails/rspec/adapter.rb b/lib/swagger_rails/rspec/dsl.rb similarity index 98% rename from lib/swagger_rails/rspec/adapter.rb rename to lib/swagger_rails/rspec/dsl.rb index daf99ad..fc6561d 100644 --- a/lib/swagger_rails/rspec/adapter.rb +++ b/lib/swagger_rails/rspec/dsl.rb @@ -2,7 +2,7 @@ require 'swagger_rails/test_visitor' module SwaggerRails module RSpec - module Adapter + module DSL def path(path_template, &block) metadata = { diff --git a/lib/swagger_rails/test_visitor.rb b/lib/swagger_rails/test_visitor.rb index 6fca39b..fed430c 100644 --- a/lib/swagger_rails/test_visitor.rb +++ b/lib/swagger_rails/test_visitor.rb @@ -2,7 +2,6 @@ require 'singleton' module SwaggerRails class TestVisitor - include Singleton def submit_request!(test, metadata) @@ -30,8 +29,10 @@ module SwaggerRails end def build_path(path_template, params_data) + path_params_data = params_data.select { |p| p[:in] == :path } + path_template.dup.tap do |path| - params_data.each do |param_data| + path_params_data.each do |param_data| path.sub!("\{#{param_data[:name]}\}", param_data[:value].to_s) end end @@ -47,7 +48,7 @@ module SwaggerRails def build_headers(params_data, consumes, produces) header_params_data = params_data.select { |p| p[:in] == :header } - headers = Hash[header_params_data.map { |p| [ p[:name].underscore.upcase, p[:value] ] }] + headers = Hash[header_params_data.map { |p| [ p[:name], p[:value] ] }] headers['ACCEPT'] = produces.join(';') if produces.present? headers['CONTENT_TYPE'] = consumes.join(';') if consumes.present? diff --git a/lib/tasks/swagger_rails_tasks.rake b/lib/tasks/swagger_rails_tasks.rake index 95002c9..c9e2f00 100644 --- a/lib/tasks/swagger_rails_tasks.rake +++ b/lib/tasks/swagger_rails_tasks.rake @@ -6,7 +6,7 @@ require 'rspec/core/rake_task' desc 'Generate Swagger JSON files from integration specs' -RSpec::Core::RakeTask.new('swagger_rails:gen') do |t| +RSpec::Core::RakeTask.new('swaggerize') do |t| t.pattern = 'spec/integration/**/*_spec.rb' t.rspec_opts = [ '--format SwaggerRails::RSpec::Formatter', '--dry-run' ] end diff --git a/spec/dummy/spec/integration/blogs_spec.rb b/spec/dummy/spec/integration/blogs_spec.rb index d957668..ebeaab0 100644 --- a/spec/dummy/spec/integration/blogs_spec.rb +++ b/spec/dummy/spec/integration/blogs_spec.rb @@ -1,6 +1,6 @@ require 'rails_helper' -describe 'Blogs API', docs_path: 'blogs/v1/swagger.json' do +describe 'Blogs API', swagger_doc: 'blogs/v1/swagger.json' do path '/blogs' do diff --git a/spec/dummy/spec/rails_helper.rb b/spec/dummy/spec/rails_helper.rb index 6d0f61e..70c46e3 100644 --- a/spec/dummy/spec/rails_helper.rb +++ b/spec/dummy/spec/rails_helper.rb @@ -51,6 +51,6 @@ RSpec.configure do |config| # arbitrary gems may also be filtered via: # config.filter_gems_from_backtrace("gem name") - require 'swagger_rails/rspec/adapter' - config.extend SwaggerRails::RSpec::Adapter + require 'swagger_rails/rspec/dsl' + config.extend SwaggerRails::RSpec::DSL end diff --git a/spec/generators/swagger_rails/install_generator_spec.rb b/spec/generators/swagger_rails/install_generator_spec.rb index 5a1cdff..b667edb 100644 --- a/spec/generators/swagger_rails/install_generator_spec.rb +++ b/spec/generators/swagger_rails/install_generator_spec.rb @@ -13,16 +13,14 @@ describe SwaggerRails::InstallGenerator do run_generator end - it 'creates a default swagger.json file' do - assert_file('config/swagger/v1/swagger.json') + it 'creates a default swagger directory' do + assert_directory('config/swagger/v1') end it 'creates a swagger_rails initializer' do assert_file('config/initializers/swagger_rails.rb') end - it 'wires up the swagger routes' do - pending('not sure how to test this') - this_should_not_get_executed - end + it 'wires up the swagger routes' + # Not sure how to test this end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 1af1101..08a78ee 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -90,6 +90,6 @@ RSpec.configure do |config| Kernel.srand config.seed =end - require 'swagger_rails/rspec/adapter' - config.extend SwaggerRails::RSpec::Adapter + require 'swagger_rails/rspec/dsl' + config.extend SwaggerRails::RSpec::DSL end diff --git a/spec/test_visitor_spec.rb b/spec/test_visitor_spec.rb index 0f09b85..0923ac1 100644 --- a/spec/test_visitor_spec.rb +++ b/spec/test_visitor_spec.rb @@ -89,7 +89,7 @@ module SwaggerRails expect(test).to have_received(:get).with( '/resource', {}, - { 'DATE' => '2000-01-01', 'ACCEPT' => 'application/json' } + { 'Date' => '2000-01-01', 'ACCEPT' => 'application/json' } ) end end diff --git a/swagger_rails.gemspec b/swagger_rails.gemspec index 94c5321..eadc3b8 100644 --- a/swagger_rails.gemspec +++ b/swagger_rails.gemspec @@ -16,5 +16,7 @@ Gem::Specification.new do |s| s.files = Dir["{app,bower_components/swagger-ui/dist,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"] - s.add_dependency("rails", ">= 3.1", "< 5") + s.add_dependency "rails", ">= 3.1", "< 5" + + s.add_development_dependency "rspec-rails" end