Skip to content

Commit 246481a

Browse files
committed
no need to boot a whole dummy Rails app in testing
We only test a single controller in isolation and we can get away with just initializing a dummy Rails.application object and declaring routes. This gets rid of the runtime dependency to "rails" in the gemspec, which in the long run is bad practice for plugins to declare anyway.
1 parent e3c7de4 commit 246481a

37 files changed

+44
-363
lines changed

api-pagination.gemspec

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ Gem::Specification.new do |s|
1616
s.test_files = Dir['spec/**/*']
1717
s.require_paths = ['lib']
1818

19-
s.add_dependency 'rails', '>= 3.0.0'
20-
21-
s.add_development_dependency 'bundler', '~> 1.3'
19+
s.add_development_dependency 'actionpack'
20+
s.add_development_dependency 'activemodel'
2221
s.add_development_dependency 'rspec-rails'
2322
end

spec/controllers/numbers_controller_spec.rb

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,35 @@
11
require 'spec_helper'
22

3-
describe NumbersController do
3+
Rails.application.routes.draw do
4+
resources :numbers, only: [:index]
5+
end
6+
7+
# quacks like Kaminari
8+
PaginatedSet = Struct.new(:current_page, :total_count) do
9+
def limit_value() 25 end
10+
11+
def total_pages
12+
total_count.zero? ? 1 : (total_count.to_f / limit_value).ceil
13+
end
14+
15+
def first_page?() current_page == 1 end
16+
def last_page?() current_page == total_pages end
17+
end
18+
19+
class NumbersController < ActionController::Base
20+
include Rails.application.routes.url_helpers
21+
22+
after_filter only: [:index] { paginate(:numbers) }
23+
24+
def index
25+
page = params.fetch(:page, 1).to_i
26+
total = params.fetch(:count).to_i
27+
@numbers = PaginatedSet.new(page, total)
28+
render json: @numbers
29+
end
30+
end
31+
32+
describe NumbersController, :type => :controller do
433
describe 'GET #index' do
534
context 'without enough items to give more than one page' do
635
it 'should not paginate' do

spec/dummy/Rakefile

Lines changed: 0 additions & 6 deletions
This file was deleted.

spec/dummy/app/assets/.keep

Whitespace-only changes.

spec/dummy/app/controllers/application_controller.rb

Lines changed: 0 additions & 5 deletions
This file was deleted.

spec/dummy/app/controllers/concerns/.keep

Whitespace-only changes.

spec/dummy/app/controllers/numbers_controller.rb

Lines changed: 0 additions & 20 deletions
This file was deleted.

spec/dummy/app/helpers/application_helper.rb

Lines changed: 0 additions & 2 deletions
This file was deleted.

spec/dummy/app/mailers/.keep

Whitespace-only changes.

spec/dummy/app/models/.keep

Whitespace-only changes.

0 commit comments

Comments
 (0)