diff --git a/README.md b/README.md index 1899d06..21d62ad 100644 --- a/README.md +++ b/README.md @@ -18,18 +18,18 @@ And then execute: spec/requests/items_spec.rb: require 'spec_helper' - describe ItemsController, request_path: '/items' do - describe_request :index, request_path: '/', method: 'GET' do + describe ItemsController do + describe_request :index, request_path: '/items', method: 'GET' do it 'lists items' do - perform_example_request # same as "get '/items/'" + get '/items' # ... end end # another style: - describe_request 'GET /:id' do + describe_request 'GET /items/:id' do it 'shows item' do - perform_example_request id: Item.first.id + get "/items/#{Item.first.id}" # ... end end @@ -37,10 +37,11 @@ spec/requests/items_spec.rb: By default, pending routes will not be output in common spec pass. To show them you should run: - $ RAILS_ENV=test rake spec:requests:with_coverage + $ RAILS_ENV=test bundle exec rake spec:requests:with_coverage ## TODO +0. Make "auto marking" with get/post/put/etc... methods 1. Make untested routes to be marked as pending specs 2. Gem tests :) 3. ????? diff --git a/lib/rspec-routes_coverage.rb b/lib/rspec-routes_coverage.rb index 570dd42..a638e4a 100644 --- a/lib/rspec-routes_coverage.rb +++ b/lib/rspec-routes_coverage.rb @@ -1,6 +1,5 @@ require 'rspec/rails' require 'rspec-routes_coverage/dsl' -require 'rspec-routes_coverage/helpers' module RSpec module RoutesCoverage @@ -23,14 +22,13 @@ def self.remove_pending_route(verb, path) end def self.pending_routes? - initialize_routes! if ENV['WITH_ROUTES_COVERAGE'] && !@initialized - self.pending_routes.length > 0 + initialize_routes! if ENV['WITH_ROUTES_COVERAGE'] && !self.pending_routes + ENV['WITH_ROUTES_COVERAGE'] && self.pending_routes.length > 0 end def self.initialize_routes! ::Rails.application.reload_routes! self.pending_routes = ::Rails.application.routes.routes.routes.clone - @initialized = true end end end diff --git a/lib/rspec-routes_coverage/dsl.rb b/lib/rspec-routes_coverage/dsl.rb index eb2ad0c..58a11c8 100644 --- a/lib/rspec-routes_coverage/dsl.rb +++ b/lib/rspec-routes_coverage/dsl.rb @@ -2,19 +2,15 @@ module RSpec module RoutesCoverage module DSL def describe_request(*args, &block) - unless args.last.is_a?(Hash) && args.last[:method] && args.last[:request_path] - verb, path = args[0].split ' ' - opts = { method: verb, request_path: path } - if args.last.is_a? Hash - args.last.merge! opts - else - args << opts - end + verb, path = if args.last.is_a?(Hash) && args.last[:method] && args.last[:request_path] + [args.last[:method], args.last[:request_path]] + else + args[args[1].is_a?(String) ? 1 : 0].split ' ' end describe *args do before :all do - RSpec::RoutesCoverage.remove_pending_route get_example_request_verb, get_example_request_path + RSpec::RoutesCoverage.remove_pending_route verb, path end if RSpec::RoutesCoverage.pending_routes? instance_eval(&block) if block diff --git a/lib/rspec-routes_coverage/helpers.rb b/lib/rspec-routes_coverage/helpers.rb deleted file mode 100644 index 3c17b5d..0000000 --- a/lib/rspec-routes_coverage/helpers.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'rspec/rails' -module RSpec - module RoutesCoverage - module Helpers - def perform_example_request(params=nil, headers=nil) - path = get_example_request_path - if params.is_a? Hash - params.each do |key, val| - path.gsub(":#{key}", val.to_s) if path.match ":#{key}" - end - end - self.send get_example_request_verb.downcase, path, params, headers - end - - def get_example_request_path - self.class.ancestors.reduce('') do |path, klass| - if klass.respond_to?(:metadata) && klass.metadata.is_a?(RSpec::Core::Metadata) && klass.metadata[:request_path] - klass.metadata[:request_path] + path - else - path - end - end - end - - def get_example_request_verb - self.class.metadata[:method] - end - end - end -end - -RSpec.configure do |config| - config.include RSpec::RoutesCoverage::Helpers -end \ No newline at end of file diff --git a/rspec-routes_coverage.gemspec b/rspec-routes_coverage.gemspec index 60f1443..825ed23 100644 --- a/rspec-routes_coverage.gemspec +++ b/rspec-routes_coverage.gemspec @@ -4,8 +4,8 @@ require File.expand_path('../lib/rspec-routes_coverage/version', __FILE__) Gem::Specification.new do |gem| gem.authors = ["Andrew Shaydurov"] gem.email = ["a.shaydurov@roundlake.ru"] - gem.description = %q{TODO: Write a gem description} - gem.summary = %q{TODO: Write a gem summary} + gem.description = %q{This gem allows to specify and track the coverage of tested API requests according to app's routes.} + gem.summary = %q{This gem allows to specify and track the coverage of tested API requests according to app's routes.} gem.homepage = "" gem.files = `git ls-files`.split($\)