focused_controller 1.2.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 77bb894756850c9467c74064dc48aa1aba860eb3
4
- data.tar.gz: 40b2a2f999435a7fc7d36a6d5cacbde80ad0e238
3
+ metadata.gz: 4520f2d723515817447f6298824b627fd5cd610d
4
+ data.tar.gz: 5396abeb1c3bd9c627f67ce079bfb9113a660572
5
5
  SHA512:
6
- metadata.gz: 48f77a5556e2577a08ef8dc8b79c9266efb538611f2a958820e3608f9f90182fa481da5208de5e287fdefa65c96277853f8460daaff07c7a1ccd42d21ca708e9
7
- data.tar.gz: 6a821c1669cc5b67ee2ba8452f84ebdc49eac722a2ea46b387c696e6f91373ee55fd3a26e1a876b5fe3b17b1b1c6bc89480b9e320228710b20f66c7abf10d72f
6
+ metadata.gz: 59ea160ee59f7fe685cc2f97db55f14c7625f061ccbe9dfe0da5626affce78e65cd6a519234f2161c182d0c86a8b014a035af9d0bc1d60a391dab55247e8e606
7
+ data.tar.gz: 48429585b521b53d891064926918333a4c8a8a35bf9414e6b0ac758fd496d9cb4db1e8156e4e8cbad52d70592d36cf73b832e6c0c30d3fe99483fb59857247a4
data/.travis.yml CHANGED
@@ -1,11 +1,12 @@
1
1
  language: ruby
2
+
2
3
  rvm:
4
+ - 2.2.3
3
5
  - 2.1.2
4
6
  - 2.0.0
5
- - 1.9.3
6
- - jruby-19mode
7
+
7
8
  gemfile:
9
+ - gemfiles/rails_4_2.gemfile
8
10
  - gemfiles/rails_4_1.gemfile
9
- - gemfiles/rails_4_0.gemfile
10
- - gemfiles/rails_3_2.gemfile
11
- - gemfiles/rails_3_1.gemfile
11
+
12
+ sudo: false
data/Appraisals CHANGED
@@ -1,16 +1,7 @@
1
- appraise 'rails-4-1' do
2
- gem 'rails', '~> 4.1.0'
3
- gem 'minitest', '~> 5.1.0'
4
- end
5
-
6
- appraise 'rails-4-0' do
7
- gem 'rails', '~> 4.0.0'
1
+ appraise 'rails-4-2' do
2
+ gem 'rails', '~> 4.2.0'
8
3
  end
9
4
 
10
- appraise 'rails-3-2' do
11
- gem 'rails', '~> 3.2.0'
12
- end
13
-
14
- appraise 'rails-3-1' do
15
- gem 'rails', '~> 3.1.0'
5
+ appraise 'rails-4-1' do
6
+ gem 'rails', '~> 4.1.0'
16
7
  end
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 2.0.0 ##
2
+
3
+ * Rails 3.X and 4.0 no longer supported
4
+ * Ruby 1.9 no longer officially supported (it may still work)
5
+ * Isolated unit tests (via `stub_url`) no longer supported. Use the
6
+ Spring preloader to keep your app warm instead.
7
+ * Rails 4.2 support added
8
+
1
9
  ## Version 1.2.1 ##
2
10
 
3
11
  * Fix gemspec
data/README.md CHANGED
@@ -241,34 +241,6 @@ describe UsersController do
241
241
  end
242
242
  ```
243
243
 
244
- ## Isolated unit tests ##
245
-
246
- It is possible to completely decouple your focused controller tests from the
247
- Rails application. This means you don't have to pay the penalty of starting up
248
- Rails every time you want to run a test. This is an advanced feature and your
249
- mileage may vary. The benefit this brings will depend on how coupled your
250
- controllers/tests are to other dependencies.
251
-
252
- Your `config/routes.rb` file is a dependency. When you use a URL helper
253
- you are depending on that file. As this is a common dependency, Focused
254
- Controller provides a way to stub out URL helpers:
255
-
256
- ``` ruby
257
- module UsersController
258
- class CreateTest < ActiveSupport::TestCase
259
- include FocusedController::TestHelper
260
- stub_url :user
261
-
262
- # ...
263
- end
264
- end
265
- ```
266
-
267
- The `stub_url` declaration will make the `user_path` and `user_url`
268
- methods in your test and your controller return stub objects. These can
269
- be compared, so `user_path(user1) == user_path(user1)`, but
270
- `user_path(user1) != user_path(user2)`.
271
-
272
244
  ## More examples ##
273
245
 
274
246
  The [acceptance
@@ -18,13 +18,13 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_dependency 'actionpack', '>= 3.0', '< 4.2'
21
+ s.add_dependency 'actionpack', '~> 4.1', '< 4.3'
22
22
 
23
23
  s.add_development_dependency 'minitest'
24
- s.add_development_dependency 'capybara', '~> 2.1'
24
+ s.add_development_dependency 'capybara', '~> 2.5'
25
25
  s.add_development_dependency 'capybara_minitest_spec', '~> 1.0'
26
- s.add_development_dependency 'poltergeist', '~> 1.3'
27
- s.add_development_dependency 'rspec', '~> 2.8'
28
- s.add_development_dependency 'rspec-rails', '~> 2.8'
26
+ s.add_development_dependency 'poltergeist', '~> 1.6'
27
+ s.add_development_dependency 'rspec', '~> 3.0'
28
+ s.add_development_dependency 'rspec-rails', '~> 3.0'
29
29
  s.add_development_dependency 'appraisal', '~> 1.0'
30
30
  end
@@ -3,6 +3,5 @@
3
3
  source "http://rubygems.org"
4
4
 
5
5
  gem "rails", "~> 4.1.0"
6
- gem "minitest", "~> 5.1.0"
7
6
 
8
7
  gemspec :path => "../"
@@ -2,6 +2,6 @@
2
2
 
3
3
  source "http://rubygems.org"
4
4
 
5
- gem "rails", "~> 3.1.0"
5
+ gem "rails", "~> 4.2.0"
6
6
 
7
- gemspec :path=>"../"
7
+ gemspec :path => "../"
@@ -13,13 +13,10 @@ module FocusedController
13
13
  options = @options.dup
14
14
 
15
15
  if to = to_option
16
- options[:to] = FocusedController::Route.new(to)
17
-
18
- # This causes rails to spit out a bit of extra useful information in the case
19
- # of a routing error. The :action option is also necessary for the routing to
20
- # work on Rails <= 3.1.
21
16
  options[:action] = FocusedController.action_name
22
17
  options[:controller] = to.underscore
18
+
19
+ options.delete :to
23
20
  end
24
21
 
25
22
  options
@@ -34,21 +31,19 @@ module FocusedController
34
31
  else
35
32
  @options[:to]
36
33
  end
34
+ elsif @options[:controller]
35
+ @options[:controller]
37
36
  elsif @options[:action] && @scope[:controller]
38
37
  stringify_controller_and_action(@scope[:controller], @options[:action])
39
38
  end
40
39
  end
41
40
 
42
41
  def stringify_controller_and_action(controller, action)
43
- name = ''
44
- name << @scope[:module].camelize << '::' if @scope[:module]
45
- name << controller.camelize << 'Controller::'
46
- name << action.to_s.camelize
47
- name
42
+ "#{controller.to_s.underscore}_controller/#{action.to_s.underscore}"
48
43
  end
49
44
  end
50
45
 
51
- class ActionDispatch::Routing::Mapper
46
+ module RoutingExtensions
52
47
  def focused_controller_routes(&block)
53
48
  prev, @scope[:focused_controller_routes] = @scope[:focused_controller_routes], true
54
49
  yield
@@ -56,16 +51,47 @@ module FocusedController
56
51
  @scope[:focused_controller_routes] = false
57
52
  end
58
53
 
59
- class Mapping
60
- def initialize_with_focused_controller(set, scope, path, options)
61
- if scope[:focused_controller_routes]
62
- options = FocusedController::RouteMapper.new(scope, options).options
63
- end
54
+ def focused_controller_enabled?
55
+ @scope[:focused_controller_routes]
56
+ end
64
57
 
65
- initialize_without_focused_controller(set, scope, path, options)
58
+ def add_route(action, options)
59
+ if focused_controller_enabled?
60
+ super(
61
+ action,
62
+ FocusedController::RouteMapper.new(
63
+ @scope,
64
+ { action: action }.merge(options)
65
+ ).options
66
+ )
67
+ else
68
+ super
66
69
  end
70
+ end
71
+ end
72
+
73
+ module RouteDispatcherExtensions
74
+ private
67
75
 
68
- alias_method_chain :initialize, :focused_controller
76
+ FOCUSED_CONTROLLER = "_controller/"
77
+
78
+ def controller_reference(controller_param)
79
+ if controller_param.include?(FOCUSED_CONTROLLER)
80
+ const_name = @controller_class_names[controller_param] ||= controller_param.camelize
81
+ ActiveSupport::Dependencies.constantize(const_name)
82
+ else
83
+ super
84
+ end
69
85
  end
70
86
  end
71
87
  end
88
+
89
+ module ActionDispatch::Routing
90
+ class Mapper
91
+ include FocusedController::RoutingExtensions
92
+ end
93
+
94
+ class RouteSet::Dispatcher
95
+ prepend FocusedController::RouteDispatcherExtensions
96
+ end
97
+ end
@@ -1,15 +1,6 @@
1
1
  require 'focused_controller/test_helper'
2
2
  require 'focused_controller/rspec_controller_class'
3
-
4
- begin
5
- # Requiring specific files rather than just 'rspec/rails' because I don't
6
- # want to force the configuration that 'rspec/rails' adds on people if they
7
- # haven't specifically chosen to receive it.
8
- require 'rails/version' unless defined?(Rails)
9
- require 'rspec/rails/matchers'
10
- require 'rspec/rails/adapters'
11
- rescue LoadError
12
- end
3
+ require 'rspec/rails'
13
4
 
14
5
  module FocusedController
15
6
  module RSpecHelper
@@ -18,27 +9,16 @@ module FocusedController
18
9
  # This must get included higher in the ancestor chain than
19
10
  # this module so that inheritance works as desired
20
11
  include FocusedController::TestHelper
21
- extend ClassMethods
12
+ extend FocusedController::RSpecControllerClass
13
+
14
+ include RSpec::Rails::RailsExampleGroup
15
+ include RSpec::Rails::Matchers::RedirectTo
16
+ include RSpec::Rails::Matchers::RenderTemplate
17
+
22
18
  subject { controller }
23
19
  end
24
20
 
25
21
  super
26
22
  end
27
-
28
- if defined?(RSpec::Rails)
29
- include RSpec::Rails::SetupAndTeardownAdapter
30
- include RSpec::Rails::TestUnitAssertionAdapter
31
- include RSpec::Rails::Matchers
32
- include RSpec::Rails::Matchers::RedirectTo
33
- include RSpec::Rails::Matchers::RenderTemplate
34
- end
35
-
36
- module ClassMethods
37
- include FocusedController::RSpecControllerClass
38
-
39
- def stub_url(*helper_names)
40
- before { stub_url(*helper_names) }
41
- end
42
- end
43
23
  end
44
24
  end
@@ -11,14 +11,6 @@ module FocusedController
11
11
  _process_options(options)
12
12
  @_render_options = options
13
13
  end
14
-
15
- def url_for(options = nil)
16
- if options.is_a?(StubbedURL)
17
- options
18
- else
19
- super
20
- end
21
- end
22
14
  end
23
15
 
24
16
  class TestRequest < ActionDispatch::TestRequest
@@ -39,35 +31,6 @@ module FocusedController
39
31
  class TestResponse < ActionDispatch::TestResponse
40
32
  end
41
33
 
42
- class StubbedURL
43
- attr_reader :helper_name, :args
44
-
45
- def initialize(helper_name, args)
46
- @helper_name = helper_name.to_s
47
- @args = args
48
- end
49
-
50
- def ==(other)
51
- other.is_a?(self.class) &&
52
- helper_name == other.helper_name &&
53
- args == other.args
54
- end
55
-
56
- # Deals with _compute_redirect_to_location in action_controller/metal/redirecting
57
- # (I don't feel proud about this...)
58
- def gsub(*)
59
- self
60
- end
61
-
62
- def delete(*)
63
- self
64
- end
65
-
66
- def to_s
67
- "#{helper_name}(#{args.each(&:to_s).join(', ')})"
68
- end
69
- end
70
-
71
34
  module TestHelper
72
35
  extend ActiveSupport::Concern
73
36
  include ActionDispatch::Assertions::ResponseAssertions
@@ -87,13 +50,11 @@ module FocusedController
87
50
 
88
51
  def include_routes
89
52
  if controller_class.respond_to?(:_routes) && controller_class._routes
90
- include controller_class._routes.named_routes.module
53
+ if mod = controller_class._routes.url_helpers
54
+ include mod
55
+ end
91
56
  end
92
57
  end
93
-
94
- def stub_url(*names)
95
- setup { stub_url(*names) }
96
- end
97
58
  end
98
59
 
99
60
  def controller
@@ -144,8 +105,12 @@ module FocusedController
144
105
  controller.url_for(*args)
145
106
  end
146
107
 
108
+ def _routes_included?
109
+ defined?(@_routes_included) && @_routes_included
110
+ end
111
+
147
112
  def respond_to?(*args)
148
- unless defined?(@_routes_included) && @_routes_included
113
+ unless _routes_included?
149
114
  self.class.include_routes
150
115
  @_routes_included = true
151
116
  end
@@ -154,29 +119,13 @@ module FocusedController
154
119
  end
155
120
 
156
121
  def method_missing(method_name, *args, &block)
157
- if respond_to?(method_name)
122
+ if !_routes_included? && respond_to?(method_name)
158
123
  send(method_name, *args, &block)
159
124
  else
160
125
  super
161
126
  end
162
127
  end
163
128
 
164
- def stub_url(*names)
165
- [self, controller].each do |host|
166
- host.singleton_class.class_eval do
167
- names.each do |name|
168
- define_method("#{name}_url") do |*args|
169
- StubbedURL.new("#{name}_url", args)
170
- end
171
-
172
- define_method("#{name}_path") do |*args|
173
- StubbedURL.new("#{name}_path", args)
174
- end
175
- end
176
- end
177
- end
178
- end
179
-
180
129
  def optimize_routes_generation?(*)
181
130
  false
182
131
  end
@@ -1,3 +1,3 @@
1
1
  module FocusedController
2
- VERSION = "1.2.1"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -1,4 +1,3 @@
1
1
  require 'focused_controller/version'
2
- require 'focused_controller/route'
3
2
  require 'focused_controller/mixin'
4
3
  require 'focused_controller/route_mapper'
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative '../helper'
2
2
  require 'capybara'
3
3
  require 'capybara_minitest_spec'
4
4
  require 'capybara/poltergeist'
@@ -94,7 +94,7 @@ describe 'acceptance test' do
94
94
 
95
95
  yield
96
96
 
97
- Process.kill('KILL', out.pid)
97
+ Process.kill('QUIT', File.read("tmp/pids/server.pid").to_i)
98
98
  end
99
99
  end
100
100
  end
@@ -103,7 +103,7 @@ describe 'acceptance test' do
103
103
  run_without_bundle_exec "bundle check >/dev/null || bundle update >/dev/null"
104
104
  end
105
105
 
106
- let(:s) { Capybara::Session.new(:poltergeist, nil) }
106
+ let(:s) { Capybara::Session.new(:poltergeist) }
107
107
 
108
108
  it 'does basic CRUD actions successfully' do
109
109
  start_server do
@@ -144,10 +144,6 @@ describe 'acceptance test' do
144
144
  run_command "ruby -Itest test/unit/controllers/posts_controller_test.rb"
145
145
  end
146
146
 
147
- it 'runs an isolated unit test' do
148
- run_command "ruby -Itest test/unit/controllers/posts_controller_isolated_test.rb"
149
- end
150
-
151
147
  it 'runs a functional spec' do
152
148
  run_command "rspec spec/controllers/posts_controller_spec.rb"
153
149
  end
@@ -155,8 +151,4 @@ describe 'acceptance test' do
155
151
  it 'runs a unit spec' do
156
152
  run_command "rspec spec/unit/controllers/posts_controller_spec.rb"
157
153
  end
158
-
159
- it 'runs an isolated unit spec' do
160
- run_command "rspec spec/unit/controllers/posts_controller_isolated_spec.rb"
161
- end
162
154
  end
data/test/app/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'rails', ENV['RAILS_VERSION'] || '~> 4.0.0'
3
+ gem 'rails', ENV['RAILS_VERSION']
4
4
  gem 'focused_controller', :path => '../..'
5
5
  gem 'rspec', '~> 2.14.1'
6
6
  gem 'rspec-rails'
@@ -9,6 +9,7 @@ module App
9
9
  class Application < Rails::Application
10
10
  # Configure the default encoding used in templates for Ruby 1.9.
11
11
  config.encoding = "utf-8"
12
+ config.active_support.test_order = :sorted
12
13
  end
13
14
  end
14
15
  I18n.enforce_available_locales = false
@@ -8,7 +8,13 @@ App::Application.configure do
8
8
  config.cache_classes = true
9
9
 
10
10
  # Configure static asset server for tests with Cache-Control for performance
11
- config.serve_static_assets = true
11
+ if config.respond_to?(:serve_static_files)
12
+ config.serve_static_files = true
13
+ else
14
+ # Remove when we drop Rails 4.1
15
+ config.serve_static_assets = true
16
+ end
17
+
12
18
  config.static_cache_control = "public, max-age=3600"
13
19
 
14
20
  # Show full error reports and disable caching
@@ -4,4 +4,4 @@
4
4
  # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5
5
 
6
6
  # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7
- # Rails.backtrace_cleaner.remove_silencers!
7
+ Rails.backtrace_cleaner.remove_silencers!
@@ -0,0 +1,3 @@
1
+ development:
2
+ secret_token: "123"
3
+ secret_key_base: "123"
data/test/helper.rb CHANGED
@@ -1,20 +1,38 @@
1
- require 'bundler/setup'
2
- gem 'minitest'
3
- require 'active_support'
4
- require 'minitest/autorun'
5
- require 'test/unit/testcase'
6
- require 'active_support/test_case'
7
- require 'minitest/spec'
8
- require 'minitest/autorun'
9
- require 'focused_controller'
10
- require 'pathname'
11
- require 'ostruct'
12
- require 'rspec/core'
13
- require 'rails/version'
1
+ require "bundler/setup"
2
+
3
+ require "rails/all"
4
+ require "active_support/all"
5
+ require "yaml"
6
+
7
+ require "focused_controller"
8
+
9
+ # Remove conditional when we drop Rails 4.1
10
+ if ActiveSupport.respond_to?(:test_order)
11
+ ActiveSupport.test_order = :random
12
+ end
13
+
14
+ require "active_support/test_case"
15
+
16
+ require "minitest/autorun"
17
+ require "minitest/spec"
18
+
19
+ module Kernel
20
+ alias minitest_describe describe
21
+ end
22
+
23
+ # Require rspec, but avoid using its 'describe'
24
+ require "rspec/core"
25
+ RSpec.configure do |config|
26
+ config.expose_dsl_globally = false
27
+ end
28
+ [singleton_class, Module].each do |mod|
29
+ mod.class_eval { alias describe minitest_describe }
30
+ end
14
31
 
15
32
  TEST_ROOT = File.expand_path('..', __FILE__)
16
33
 
17
- # Don't want to actually use RSpec to run our tests
18
- module RSpec::Core::DSL
19
- remove_method :describe
34
+ class RailsApplication < Rails::Application
35
+ config.root = TEST_ROOT + "/app"
36
+ config.secret_key_base = "123"
37
+ config.secret_token = "123"
20
38
  end
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative '../helper'
2
2
  require 'focused_controller/functional_test_helper'
3
3
  require 'action_controller'
4
4
 
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative '../helper'
2
2
  require 'action_controller'
3
3
 
4
4
  module FocusedController
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative '../helper'
2
2
 
3
3
  # RouteSet is missing some requires
4
4
  require 'active_support/core_ext/uri'
@@ -12,16 +12,13 @@ module FocusedController
12
12
  method = (environment[:method] || "GET").to_s.upcase
13
13
  env = Rack::MockRequest.env_for(path, {:method => method})
14
14
  req = route_set.request_class.new(env)
15
-
16
- if route_set.respond_to?(:router)
17
- router = route_set.router # Rails 3.2+
18
- else
19
- router = route_set.set # Rails 3.0, 3.1
20
- end
15
+ router = route_set.router
21
16
 
22
17
  router.recognize(req) do |route, matches, params|
23
18
  return route
24
19
  end
20
+
21
+ raise ArgumentError, "'#{path}' not recognized"
25
22
  end
26
23
 
27
24
  it 'creates routes that map to focused controllers' do
@@ -32,12 +29,16 @@ module FocusedController
32
29
 
33
30
  resources :comments do
34
31
  resources :replies
32
+
33
+ get 'a/:foo' => 'PostsController::Index', on: :collection
34
+ get 'b/:foo', action: :index, on: :collection
35
35
  end
36
36
 
37
37
  resource :account
38
38
 
39
39
  namespace :admin do
40
40
  resources :comments
41
+ get 'foo' => 'FooController::Show'
41
42
  end
42
43
  end
43
44
  end
@@ -50,12 +51,14 @@ module FocusedController
50
51
  [:put, '/comments/4'] => 'CommentsController::Update',
51
52
  [:get, '/account'] => 'AccountsController::Show',
52
53
  [:get, '/comments/4/replies'] => 'RepliesController::Index',
53
- [:get, '/admin/comments'] => 'Admin::CommentsController::Index'
54
+ [:get, '/admin/comments'] => 'Admin::CommentsController::Index',
55
+ [:get, '/comments/a/omg'] => 'PostsController::Index',
56
+ [:get, '/comments/b/omg'] => 'CommentsController::Index',
57
+ [:get, '/admin/foo'] => 'Admin::FooController::Show',
54
58
  }
55
59
 
56
60
  mappings.each do |(method, path), controller|
57
61
  route = recognize(path, :method => method)
58
- route.app.name.must_equal controller
59
62
  route.defaults[:action].must_equal FocusedController.action_name
60
63
  route.defaults[:controller].must_equal controller.underscore
61
64
  end
@@ -70,7 +73,13 @@ module FocusedController
70
73
  get 'posts' => app
71
74
  end
72
75
  end
73
- recognize('/posts').app.must_equal app
76
+ route = recognize('/posts')
77
+ app = route.app
78
+
79
+ # Remove this when we drop Rails 4.1
80
+ app = app.app if app.respond_to?(:app)
81
+
82
+ app.must_equal app
74
83
  end
75
84
 
76
85
  it "generates a route with url_for" do
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative '../helper'
2
2
  require 'focused_controller/rspec_functional_helper'
3
3
 
4
4
  module FocusedController
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative '../helper'
2
2
  require 'action_controller'
3
3
  require 'focused_controller/rspec_helper'
4
4
 
@@ -21,13 +21,13 @@ module FocusedController
21
21
  end
22
22
  end
23
23
 
24
- index_spec = RSpec::Core::ExampleGroup.describe FakePostsController::Index do
24
+ index_spec = RSpec.describe FakePostsController::Index do
25
25
  include FocusedController::RSpecHelper
26
26
  end
27
27
 
28
28
  show_spec = nil
29
29
  inner_show_spec = nil
30
- RSpec::Core::ExampleGroup.describe FakePostsController do
30
+ RSpec.describe FakePostsController do
31
31
  show_spec = describe FakePostsController::Show do
32
32
  include FocusedController::RSpecHelper
33
33
 
@@ -36,7 +36,7 @@ module FocusedController
36
36
  end
37
37
  end
38
38
 
39
- edit_spec = RSpec::Core::ExampleGroup.describe "the edit action" do
39
+ edit_spec = RSpec.describe "the edit action" do
40
40
  include FocusedController::RSpecHelper
41
41
  self.controller_class = FakePostsController::Edit
42
42
  end
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative '../helper'
2
2
  require 'focused_controller/test_helper'
3
3
  require 'action_controller'
4
4
 
@@ -23,13 +23,11 @@ module FocusedController
23
23
 
24
24
  def self._routes
25
25
  OpenStruct.new(
26
- :named_routes => OpenStruct.new(
27
- :module => Module.new do
28
- def foo_path
29
- '/foo'
30
- end
26
+ :url_helpers => Module.new do
27
+ def foo_path
28
+ '/foo'
31
29
  end
32
- )
30
+ end
33
31
  )
34
32
  end
35
33
  end
@@ -37,13 +35,11 @@ module FocusedController
37
35
  class Show < Action
38
36
  def self._routes
39
37
  OpenStruct.new(
40
- :named_routes => OpenStruct.new(
41
- :module => Module.new do
42
- def bar_path
43
- '/bar'
44
- end
38
+ :url_helpers => Module.new do
39
+ def bar_path
40
+ '/bar'
45
41
  end
46
- )
42
+ end
47
43
  )
48
44
  end
49
45
  end
@@ -178,38 +174,6 @@ module FocusedController
178
174
 
179
175
  subject.cookies[:foo].must_equal 'omg'
180
176
  end
181
-
182
- describe 'url stubbing' do
183
- before do
184
- subject.stub_url :foo, :bar
185
- end
186
-
187
- it 'handles equality' do
188
- foo, bar = Object.new, Object.new
189
- StubbedURL.new(:foo_path, [foo]).must_equal StubbedURL.new(:foo_path, [foo])
190
- StubbedURL.new(:foo_path, [foo, bar]).wont_equal StubbedURL.new(:foo_path, [foo])
191
- StubbedURL.new(:foo_path, [bar]).wont_equal StubbedURL.new(:foo_path, [foo])
192
- StubbedURL.new(:bar_path, [foo]).wont_equal StubbedURL.new(:foo_path, [foo])
193
- end
194
-
195
- it 'has a to_s' do
196
- StubbedURL.new(:foo_path, ['omg', 'lol']).to_s.must_equal "foo_path(omg, lol)"
197
- end
198
-
199
- it 'creates a stub method on the test and controller instances' do
200
- foo = Object.new
201
- subject.foo_path(foo).must_equal StubbedURL.new(:foo_path, [foo])
202
- subject.controller.foo_path(foo).must_equal StubbedURL.new(:foo_path, [foo])
203
- subject.foo_url(foo).must_equal StubbedURL.new(:foo_url, [foo])
204
- subject.controller.foo_url(foo).must_equal StubbedURL.new(:foo_url, [foo])
205
- end
206
-
207
- it 'works with a controller' do
208
- foo = Object.new
209
- subject.controller.redirect_to StubbedURL.new(:foo_path, [foo])
210
- must_succeed { subject.assert_redirected_to StubbedURL.new(:foo_path, [foo]) }
211
- end
212
- end
213
177
  end
214
178
  end
215
179
  end
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: focused_controller
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Leighton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-26 00:00:00.000000000 Z
11
+ date: 2015-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '4.1'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '4.2'
22
+ version: '4.3'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ">="
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '3.0'
29
+ version: '4.1'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '4.2'
32
+ version: '4.3'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: minitest
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '2.1'
53
+ version: '2.5'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '2.1'
60
+ version: '2.5'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: capybara_minitest_spec
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -78,42 +78,42 @@ dependencies:
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '1.3'
81
+ version: '1.6'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '1.3'
88
+ version: '1.6'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rspec
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '2.8'
95
+ version: '3.0'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '2.8'
102
+ version: '3.0'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rspec-rails
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '2.8'
109
+ version: '3.0'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '2.8'
116
+ version: '3.0'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: appraisal
119
119
  requirement: !ruby/object:Gem::Requirement
@@ -144,15 +144,12 @@ files:
144
144
  - README.md
145
145
  - Rakefile
146
146
  - focused_controller.gemspec
147
- - gemfiles/rails_3_1.gemfile
148
- - gemfiles/rails_3_2.gemfile
149
- - gemfiles/rails_4_0.gemfile
150
147
  - gemfiles/rails_4_1.gemfile
148
+ - gemfiles/rails_4_2.gemfile
151
149
  - lib/focused_controller.rb
152
150
  - lib/focused_controller/action_name.rb
153
151
  - lib/focused_controller/functional_test_helper.rb
154
152
  - lib/focused_controller/mixin.rb
155
- - lib/focused_controller/route.rb
156
153
  - lib/focused_controller/route_mapper.rb
157
154
  - lib/focused_controller/rspec_controller_class.rb
158
155
  - lib/focused_controller/rspec_functional_helper.rb
@@ -190,6 +187,7 @@ files:
190
187
  - test/app/config/initializers/session_store.rb
191
188
  - test/app/config/locales/en.yml
192
189
  - test/app/config/routes.rb
190
+ - test/app/config/secrets.yml
193
191
  - test/app/db/seeds.rb
194
192
  - test/app/doc/README_FOR_APP
195
193
  - test/app/lib/assets/.gitkeep
@@ -207,14 +205,11 @@ files:
207
205
  - test/app/spec/controllers/posts_controller_spec.rb
208
206
  - test/app/spec/isolated_spec_helper.rb
209
207
  - test/app/spec/spec_helper.rb
210
- - test/app/spec/unit/controllers/posts_controller_isolated_spec.rb
211
208
  - test/app/spec/unit/controllers/posts_controller_spec.rb
212
209
  - test/app/test/functional/.gitkeep
213
210
  - test/app/test/functional/posts_controller_test.rb
214
- - test/app/test/isolated_test_helper.rb
215
211
  - test/app/test/test_helper.rb
216
212
  - test/app/test/unit/.gitkeep
217
- - test/app/test/unit/controllers/posts_controller_isolated_test.rb
218
213
  - test/app/test/unit/controllers/posts_controller_test.rb
219
214
  - test/app/vendor/assets/javascripts/.gitkeep
220
215
  - test/app/vendor/assets/stylesheets/.gitkeep
@@ -223,7 +218,6 @@ files:
223
218
  - test/unit/functional_test_helper_test.rb
224
219
  - test/unit/mixin_test.rb
225
220
  - test/unit/route_mapper_test.rb
226
- - test/unit/route_test.rb
227
221
  - test/unit/rspec_functional_helper.rb
228
222
  - test/unit/rspec_helper_test.rb
229
223
  - test/unit/test_helper_test.rb
@@ -246,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
246
240
  version: '0'
247
241
  requirements: []
248
242
  rubyforge_project: focused_controller
249
- rubygems_version: 2.2.2
243
+ rubygems_version: 2.4.5
250
244
  signing_key:
251
245
  specification_version: 4
252
246
  summary: Write Rails controllers with one class per action
@@ -282,6 +276,7 @@ test_files:
282
276
  - test/app/config/initializers/session_store.rb
283
277
  - test/app/config/locales/en.yml
284
278
  - test/app/config/routes.rb
279
+ - test/app/config/secrets.yml
285
280
  - test/app/db/seeds.rb
286
281
  - test/app/doc/README_FOR_APP
287
282
  - test/app/lib/assets/.gitkeep
@@ -299,14 +294,11 @@ test_files:
299
294
  - test/app/spec/controllers/posts_controller_spec.rb
300
295
  - test/app/spec/isolated_spec_helper.rb
301
296
  - test/app/spec/spec_helper.rb
302
- - test/app/spec/unit/controllers/posts_controller_isolated_spec.rb
303
297
  - test/app/spec/unit/controllers/posts_controller_spec.rb
304
298
  - test/app/test/functional/.gitkeep
305
299
  - test/app/test/functional/posts_controller_test.rb
306
- - test/app/test/isolated_test_helper.rb
307
300
  - test/app/test/test_helper.rb
308
301
  - test/app/test/unit/.gitkeep
309
- - test/app/test/unit/controllers/posts_controller_isolated_test.rb
310
302
  - test/app/test/unit/controllers/posts_controller_test.rb
311
303
  - test/app/vendor/assets/javascripts/.gitkeep
312
304
  - test/app/vendor/assets/stylesheets/.gitkeep
@@ -315,7 +307,6 @@ test_files:
315
307
  - test/unit/functional_test_helper_test.rb
316
308
  - test/unit/mixin_test.rb
317
309
  - test/unit/route_mapper_test.rb
318
- - test/unit/route_test.rb
319
310
  - test/unit/rspec_functional_helper.rb
320
311
  - test/unit/rspec_helper_test.rb
321
312
  - test/unit/test_helper_test.rb
@@ -1,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "http://rubygems.org"
4
-
5
- gem "rails", "~> 3.2.0"
6
-
7
- gemspec :path=>"../"
@@ -1,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "http://rubygems.org"
4
-
5
- gem "rails", "~> 4.0.0"
6
-
7
- gemspec :path=>"../"
@@ -1,17 +0,0 @@
1
- require "action_dispatch/routing"
2
-
3
- module FocusedController
4
- class Route < ActionDispatch::Routing::RouteSet::Dispatcher
5
- attr_reader :name
6
-
7
- def initialize(name)
8
- @name = name
9
- end
10
-
11
- def call(env)
12
- name.constantize.call(env)
13
- end
14
-
15
- alias to_s name
16
- end
17
- end
@@ -1,68 +0,0 @@
1
- require 'isolated_spec_helper'
2
- require APP_ROOT + '/controllers/application_controller'
3
- require APP_ROOT + '/controllers/posts_controller'
4
- require APP_ROOT + '/models/post'
5
-
6
- describe PostsController do
7
- include FocusedController::RSpecHelper
8
- stub_url :post, :posts
9
-
10
- before do
11
- @post = Post.create(:title => 'Hello', :body => 'Omg')
12
- end
13
-
14
- describe PostsController::Index do
15
- it "should get index" do
16
- subject.call
17
- response.should be_success
18
- subject.posts.should_not be(:nil)
19
- end
20
- end
21
-
22
- describe PostsController::New do
23
- it "should get new" do
24
- subject.call
25
- response.should be_success
26
- end
27
- end
28
-
29
- describe PostsController::Create do
30
- it "should create post" do
31
- subject.params = { :post => @post.attributes }
32
- expect { subject.call }.to change(Post, :count).by(1)
33
- response.should redirect_to(post_url(subject.post))
34
- end
35
- end
36
-
37
- describe PostsController::Show do
38
- it "should show post" do
39
- subject.params = { :id => @post.id }
40
- subject.call
41
- response.should be_success
42
- end
43
- end
44
-
45
- describe PostsController::Edit do
46
- it "should get edit" do
47
- subject.params = { :id => @post.id }
48
- subject.call
49
- response.should be_success
50
- end
51
- end
52
-
53
- describe PostsController::Update do
54
- it "should update post" do
55
- subject.params = { :id => @post.id }
56
- subject.call
57
- response.should redirect_to(post_url(subject.post))
58
- end
59
- end
60
-
61
- describe PostsController::Destroy do
62
- it "should destroy post" do
63
- subject.params = { :id => @post.id }
64
- expect { subject.call }.to change(Post, :count).by(-1)
65
- response.should redirect_to(posts_url)
66
- end
67
- end
68
- end
@@ -1,6 +0,0 @@
1
- require 'bundler/setup'
2
- require 'active_support/test_case'
3
- require 'focused_controller/test_helper'
4
-
5
- APP_ROOT = File.expand_path('../../app', __FILE__)
6
- POSTS = []
@@ -1,78 +0,0 @@
1
- require 'isolated_test_helper'
2
- require APP_ROOT + '/controllers/application_controller'
3
- require APP_ROOT + '/controllers/posts_controller'
4
- require APP_ROOT + '/models/post'
5
-
6
- module PostsController
7
- class TestCase < ActiveSupport::TestCase
8
- include FocusedController::TestHelper
9
- stub_url :post, :posts
10
-
11
- setup do
12
- @post = Post.create(:title => 'Hello', :body => 'Omg')
13
- end
14
- end
15
-
16
- class IndexTest < TestCase
17
- test "should get index" do
18
- controller.call
19
- assert_response :success
20
- assert_not_nil controller.posts
21
- end
22
- end
23
-
24
- class NewTest < TestCase
25
- test "should get new" do
26
- controller.call
27
- assert_response :success
28
- end
29
- end
30
-
31
- class CreateTest < TestCase
32
- test "should create post" do
33
- controller.params = { :post => @post.attributes }
34
-
35
- assert_difference('Post.count') do
36
- controller.call
37
- end
38
-
39
- assert_redirected_to post_url(controller.post)
40
- end
41
- end
42
-
43
- class ShowTest < TestCase
44
- test "should show post" do
45
- controller.params = { :id => @post.id }
46
- controller.call
47
- assert_response :success
48
- end
49
- end
50
-
51
- class EditTest < TestCase
52
- test "should get edit" do
53
- controller.params = { :id => @post.id }
54
- controller.call
55
- assert_response :success
56
- end
57
- end
58
-
59
- class UpdateTest < TestCase
60
- test "should update post" do
61
- controller.params = { :id => @post.id }
62
- controller.call
63
- assert_redirected_to post_url(controller.post)
64
- end
65
- end
66
-
67
- class DestroyTest < TestCase
68
- test "should destroy post" do
69
- controller.params = { :id => @post.id }
70
-
71
- assert_difference('Post.count', -1) do
72
- controller.call
73
- end
74
-
75
- assert_redirected_to posts_url
76
- end
77
- end
78
- end
@@ -1,39 +0,0 @@
1
- require 'helper'
2
-
3
- module FocusedController
4
- module Test
5
- end
6
-
7
- describe Route do
8
- let(:controller) { Object.new }
9
- subject { Route.new('FocusedController::Test::RouteTestController') }
10
-
11
- before do
12
- Test.const_set(:RouteTestController, controller)
13
- end
14
-
15
- after do
16
- Test.send(:remove_const, :RouteTestController)
17
- end
18
-
19
- describe '#call' do
20
- it 'constantizes the name and invokes #call on the constant' do
21
- env, resp = Object.new, Object.new
22
-
23
- # Not using MiniTest::Mock for this because it caused problems
24
- # with Rubinius
25
- controller.singleton_class.send :define_method, :call do |call_env|
26
- resp if call_env == env
27
- end
28
-
29
- subject.call(env).must_equal resp
30
- end
31
- end
32
-
33
- describe '#to_s' do
34
- it "returns the the name" do
35
- subject.to_s.must_equal 'FocusedController::Test::RouteTestController'
36
- end
37
- end
38
- end
39
- end