rspec-rails 4.0.0.beta3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/Capybara.md +5 -54
  4. data/Changelog.md +70 -12
  5. data/README.md +4 -5
  6. data/lib/generators/rspec/controller/controller_generator.rb +13 -5
  7. data/lib/generators/rspec/controller/templates/request_spec.rb +14 -0
  8. data/lib/generators/rspec/controller/templates/routing_spec.rb +1 -1
  9. data/lib/generators/rspec/feature/feature_generator.rb +2 -2
  10. data/lib/generators/rspec/{generators → generator}/generator_generator.rb +2 -2
  11. data/lib/generators/rspec/{generators → generator}/templates/generator_spec.rb +0 -0
  12. data/lib/generators/rspec/helper/helper_generator.rb +1 -1
  13. data/lib/generators/rspec/install/install_generator.rb +4 -4
  14. data/lib/generators/rspec/install/templates/spec/rails_helper.rb +17 -16
  15. data/lib/generators/rspec/integration/integration_generator.rb +3 -3
  16. data/lib/generators/rspec/mailer/mailer_generator.rb +1 -1
  17. data/lib/generators/rspec/model/model_generator.rb +4 -4
  18. data/lib/generators/rspec/scaffold/scaffold_generator.rb +26 -18
  19. data/lib/generators/rspec/scaffold/templates/api_controller_spec.rb +0 -36
  20. data/lib/generators/rspec/scaffold/templates/api_request_spec.rb +131 -0
  21. data/lib/generators/rspec/scaffold/templates/controller_spec.rb +10 -10
  22. data/lib/generators/rspec/scaffold/templates/edit_spec.rb +1 -1
  23. data/lib/generators/rspec/scaffold/templates/index_spec.rb +2 -2
  24. data/lib/generators/rspec/scaffold/templates/new_spec.rb +1 -1
  25. data/lib/generators/rspec/scaffold/templates/request_spec.rb +133 -0
  26. data/lib/generators/rspec/scaffold/templates/routing_spec.rb +8 -10
  27. data/lib/generators/rspec/scaffold/templates/show_spec.rb +1 -1
  28. data/lib/generators/rspec/system/system_generator.rb +1 -1
  29. data/lib/generators/rspec/view/view_generator.rb +2 -2
  30. data/lib/generators/rspec.rb +0 -6
  31. data/lib/rspec/rails/adapters.rb +10 -76
  32. data/lib/rspec/rails/configuration.rb +35 -35
  33. data/lib/rspec/rails/example/channel_example_group.rb +2 -2
  34. data/lib/rspec/rails/example/controller_example_group.rb +4 -4
  35. data/lib/rspec/rails/example/feature_example_group.rb +6 -26
  36. data/lib/rspec/rails/example/helper_example_group.rb +2 -10
  37. data/lib/rspec/rails/example/rails_example_group.rb +1 -1
  38. data/lib/rspec/rails/example/system_example_group.rb +10 -4
  39. data/lib/rspec/rails/example/view_example_group.rb +38 -48
  40. data/lib/rspec/rails/extensions/active_record/proxy.rb +1 -9
  41. data/lib/rspec/rails/feature_check.rb +1 -28
  42. data/lib/rspec/rails/fixture_file_upload_support.rb +1 -1
  43. data/lib/rspec/rails/fixture_support.rb +37 -31
  44. data/lib/rspec/rails/matchers/action_cable/have_broadcasted_to.rb +3 -3
  45. data/lib/rspec/rails/matchers/action_cable.rb +1 -1
  46. data/lib/rspec/rails/matchers/active_job.rb +126 -16
  47. data/lib/rspec/rails/matchers/base_matcher.rb +4 -10
  48. data/lib/rspec/rails/matchers/have_enqueued_mail.rb +6 -3
  49. data/lib/rspec/rails/matchers/have_http_status.rb +7 -7
  50. data/lib/rspec/rails/matchers/routing_matchers.rb +11 -11
  51. data/lib/rspec/rails/tasks/rspec.rake +7 -17
  52. data/lib/rspec/rails/vendor/capybara.rb +10 -15
  53. data/lib/rspec/rails/version.rb +1 -1
  54. data/lib/rspec/rails/view_path_builder.rb +1 -1
  55. data/lib/rspec/rails/view_rendering.rb +3 -3
  56. data/lib/rspec-rails.rb +6 -9
  57. data.tar.gz.sig +0 -0
  58. metadata +30 -29
  59. metadata.gz.sig +0 -0
  60. data/lib/generators/rspec/observer/observer_generator.rb +0 -13
  61. data/lib/generators/rspec/observer/templates/observer_spec.rb +0 -7
@@ -19,68 +19,15 @@ module RSpec
19
19
  end
20
20
  private_class_method :disable_testunit_autorun
21
21
 
22
- if ::Rails::VERSION::STRING >= '4.1.0'
23
- if defined?(Kernel.gem)
24
- gem 'minitest'
25
- else
26
- require 'minitest'
27
- end
28
- require 'minitest/assertions'
29
- # Constant aliased to either Minitest or TestUnit, depending on what is
30
- # loaded.
31
- Assertions = Minitest::Assertions
32
- elsif RUBY_VERSION >= '2.2.0'
33
- # Minitest / TestUnit has been removed from ruby core. However, we are
34
- # on an old Rails version and must load the appropriate gem
35
- if ::Rails::VERSION::STRING >= '4.0.0'
36
- # ActiveSupport 4.0.x has the minitest '~> 4.2' gem as a dependency
37
- # This gem has no `lib/minitest.rb` file.
38
- gem 'minitest' if defined?(Kernel.gem)
39
- require 'minitest/unit'
40
- Assertions = MiniTest::Assertions
41
- elsif ::Rails::VERSION::STRING >= '3.2.21'
42
- # TODO: Change the above check to >= '3.2.22' once it's released
43
- begin
44
- # Test::Unit "helpfully" sets up autoload for its `AutoRunner`.
45
- # While we do not reference it directly, when we load the `TestCase`
46
- # classes from AS (ActiveSupport), AS kindly references `AutoRunner`
47
- # for everyone.
48
- #
49
- # To handle this we need to pre-emptively load 'test/unit' and make
50
- # sure the version installed has `AutoRunner` (the 3.x line does to
51
- # date). If so, we turn the auto runner off.
52
- require 'test/unit'
53
- require 'test/unit/assertions'
54
- disable_testunit_autorun
55
- rescue LoadError => e
56
- raise LoadError, <<-ERR.squish, e.backtrace
57
- Ruby 2.2+ has removed test/unit from the core library. Rails
58
- requires this as a dependency. Please add test-unit gem to your
59
- Gemfile: `gem 'test-unit', '~> 3.0'` (#{e.message})"
60
- ERR
61
- end
62
- Assertions = Test::Unit::Assertions
63
- else
64
- abort <<-MSG.squish
65
- Ruby 2.2+ is not supported on Rails #{::Rails::VERSION::STRING}.
66
- Check the Rails release notes for the appropriate update with
67
- support.
68
- MSG
69
- end
22
+ if defined?(Kernel.gem)
23
+ gem 'minitest'
70
24
  else
71
- begin
72
- require 'test/unit/assertions'
73
- rescue LoadError
74
- # work around for Rubinius not having a std std-lib
75
- require 'rubysl-test-unit' if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
76
- require 'test/unit/assertions'
77
- end
78
- # Turn off test unit's auto runner for those using the gem
79
- disable_testunit_autorun
80
- # Constant aliased to either Minitest or TestUnit, depending on what is
81
- # loaded.
82
- Assertions = Test::Unit::Assertions
25
+ require 'minitest'
83
26
  end
27
+ require 'minitest/assertions'
28
+ # Constant aliased to either Minitest or TestUnit, depending on what is
29
+ # loaded.
30
+ Assertions = Minitest::Assertions
84
31
 
85
32
  # @private
86
33
  class AssertionDelegator < Module
@@ -199,12 +146,11 @@ module RSpec
199
146
  # examples without exposing non-assertion methods in Test::Unit or
200
147
  # Minitest.
201
148
  def assertion_method_names
202
- methods = ::RSpec::Rails::Assertions.
203
- public_instance_methods.
204
- select do |m|
149
+ ::RSpec::Rails::Assertions
150
+ .public_instance_methods
151
+ .select do |m|
205
152
  m.to_s =~ /^(assert|flunk|refute)/
206
153
  end
207
- methods + test_unit_specific_methods
208
154
  end
209
155
 
210
156
  def define_assertion_delegators
@@ -214,18 +160,6 @@ module RSpec
214
160
  end
215
161
  end
216
162
  end
217
-
218
- # Starting on Rails 4, Minitest is the default testing framework so no
219
- # need to add TestUnit specific methods.
220
- if ::Rails::VERSION::STRING >= '4.0.0'
221
- def test_unit_specific_methods
222
- []
223
- end
224
- else
225
- def test_unit_specific_methods
226
- [:build_message]
227
- end
228
- end
229
163
  end
230
164
 
231
165
  class AssertionDelegator
@@ -25,46 +25,46 @@ module RSpec
25
25
  #
26
26
  # @api private
27
27
  DIRECTORY_MAPPINGS = {
28
- :channel => %w[spec channels],
29
- :controller => %w[spec controllers],
30
- :helper => %w[spec helpers],
31
- :job => %w[spec jobs],
32
- :mailer => %w[spec mailers],
33
- :model => %w[spec models],
34
- :request => %w[spec (requests|integration|api)],
35
- :routing => %w[spec routing],
36
- :view => %w[spec views],
37
- :feature => %w[spec features],
38
- :system => %w[spec system],
39
- :mailbox => %w[spec mailboxes]
28
+ channel: %w[spec channels],
29
+ controller: %w[spec controllers],
30
+ helper: %w[spec helpers],
31
+ job: %w[spec jobs],
32
+ mailer: %w[spec mailers],
33
+ model: %w[spec models],
34
+ request: %w[spec (requests|integration|api)],
35
+ routing: %w[spec routing],
36
+ view: %w[spec views],
37
+ feature: %w[spec features],
38
+ system: %w[spec system],
39
+ mailbox: %w[spec mailboxes]
40
40
  }
41
41
 
42
42
  # Sets up the different example group modules for the different spec types
43
43
  #
44
44
  # @api private
45
45
  def self.add_test_type_configurations(config)
46
- config.include RSpec::Rails::ControllerExampleGroup, :type => :controller
47
- config.include RSpec::Rails::HelperExampleGroup, :type => :helper
48
- config.include RSpec::Rails::ModelExampleGroup, :type => :model
49
- config.include RSpec::Rails::RequestExampleGroup, :type => :request
50
- config.include RSpec::Rails::RoutingExampleGroup, :type => :routing
51
- config.include RSpec::Rails::ViewExampleGroup, :type => :view
52
- config.include RSpec::Rails::FeatureExampleGroup, :type => :feature
46
+ config.include RSpec::Rails::ControllerExampleGroup, type: :controller
47
+ config.include RSpec::Rails::HelperExampleGroup, type: :helper
48
+ config.include RSpec::Rails::ModelExampleGroup, type: :model
49
+ config.include RSpec::Rails::RequestExampleGroup, type: :request
50
+ config.include RSpec::Rails::RoutingExampleGroup, type: :routing
51
+ config.include RSpec::Rails::ViewExampleGroup, type: :view
52
+ config.include RSpec::Rails::FeatureExampleGroup, type: :feature
53
53
  config.include RSpec::Rails::Matchers
54
- config.include RSpec::Rails::SystemExampleGroup, :type => :system
54
+ config.include RSpec::Rails::SystemExampleGroup, type: :system
55
55
  end
56
56
 
57
57
  # @private
58
- # rubocop:disable Metrics/MethodLength
59
- def self.initialize_configuration(config)
58
+ def self.initialize_configuration(config) # rubocop:disable Metrics/MethodLength
60
59
  config.backtrace_exclusion_patterns << /vendor\//
61
60
  config.backtrace_exclusion_patterns << %r{lib/rspec/rails}
62
61
 
63
62
  # controller settings
64
- config.add_setting :infer_base_class_for_anonymous_controllers, :default => true
63
+ config.add_setting :infer_base_class_for_anonymous_controllers, default: true
65
64
 
66
65
  # fixture support
67
- config.add_setting :use_transactional_fixtures, :alias_with => :use_transactional_examples
66
+ config.add_setting :use_active_record, default: true
67
+ config.add_setting :use_transactional_fixtures, alias_with: :use_transactional_examples
68
68
  config.add_setting :use_instantiated_fixtures
69
69
  config.add_setting :global_fixtures
70
70
  config.add_setting :fixture_path
@@ -80,7 +80,7 @@ module RSpec
80
80
  config.include RSpec::Rails::FixtureSupport
81
81
 
82
82
  if ::Rails::VERSION::STRING > '5'
83
- config.add_setting :file_fixture_path, :default => 'spec/fixtures/files'
83
+ config.add_setting :file_fixture_path, default: 'spec/fixtures/files'
84
84
  config.include RSpec::Rails::FileFixtureSupport
85
85
  end
86
86
 
@@ -93,7 +93,7 @@ module RSpec
93
93
  # as a getter. This makes it easier for rspec-rails users because we use
94
94
  # `render_views` directly in example groups, so this aligns the two APIs,
95
95
  # but requires this workaround:
96
- config.add_setting :rendering_views, :default => false
96
+ config.add_setting :rendering_views, default: false
97
97
 
98
98
  config.instance_exec do
99
99
  def render_views=(val)
@@ -111,7 +111,7 @@ module RSpec
111
111
  def infer_spec_type_from_file_location!
112
112
  DIRECTORY_MAPPINGS.each do |type, dir_parts|
113
113
  escaped_path = Regexp.compile(dir_parts.join('[\\\/]') + '[\\\/]')
114
- define_derived_metadata(:file_path => escaped_path) do |metadata|
114
+ define_derived_metadata(file_path: escaped_path) do |metadata|
115
115
  metadata[:type] ||= type
116
116
  end
117
117
  end
@@ -129,29 +129,29 @@ module RSpec
129
129
 
130
130
  if defined?(::Rails::Controller::Testing)
131
131
  [:controller, :view, :request].each do |type|
132
- config.include ::Rails::Controller::Testing::TestProcess, :type => type
133
- config.include ::Rails::Controller::Testing::TemplateAssertions, :type => type
134
- config.include ::Rails::Controller::Testing::Integration, :type => type
132
+ config.include ::Rails::Controller::Testing::TestProcess, type: type
133
+ config.include ::Rails::Controller::Testing::TemplateAssertions, type: type
134
+ config.include ::Rails::Controller::Testing::Integration, type: type
135
135
  end
136
136
  end
137
137
 
138
138
  if RSpec::Rails::FeatureCheck.has_action_mailer?
139
- config.include RSpec::Rails::MailerExampleGroup, :type => :mailer
139
+ config.include RSpec::Rails::MailerExampleGroup, type: :mailer
140
+ config.after { ActionMailer::Base.deliveries.clear }
140
141
  end
141
142
 
142
143
  if RSpec::Rails::FeatureCheck.has_active_job?
143
- config.include RSpec::Rails::JobExampleGroup, :type => :job
144
+ config.include RSpec::Rails::JobExampleGroup, type: :job
144
145
  end
145
146
 
146
147
  if RSpec::Rails::FeatureCheck.has_action_cable_testing?
147
- config.include RSpec::Rails::ChannelExampleGroup, :type => :channel
148
+ config.include RSpec::Rails::ChannelExampleGroup, type: :channel
148
149
  end
149
150
 
150
151
  if RSpec::Rails::FeatureCheck.has_action_mailbox?
151
- config.include RSpec::Rails::MailboxExampleGroup, :type => :mailbox
152
+ config.include RSpec::Rails::MailboxExampleGroup, type: :mailbox
152
153
  end
153
154
  end
154
- # rubocop:enable Metrics/MethodLength
155
155
 
156
156
  initialize_configuration RSpec.configuration
157
157
  end
@@ -34,7 +34,7 @@ if RSpec::Rails::FeatureCheck.has_action_cable_testing?
34
34
  next if klass <= ::ActionCable::Channel::Base
35
35
 
36
36
  raise "Described class is not a channel class.\n" \
37
- "Specify the channel class in the `describe` statement "\
37
+ "Specify the channel class in the `describe` statement " \
38
38
  "or set it manually using `tests MyChannelClass`"
39
39
  end
40
40
  end
@@ -45,7 +45,7 @@ if RSpec::Rails::FeatureCheck.has_action_cable_testing?
45
45
  next if klass <= ::ActionCable::Connection::Base
46
46
 
47
47
  raise "Described class is not a connection class.\n" \
48
- "Specify the connection class in the `describe` statement "\
48
+ "Specify the connection class in the `describe` statement " \
49
49
  "or set it manually using `tests MyConnectionClass`"
50
50
  end
51
51
  end
@@ -94,9 +94,9 @@ module RSpec
94
94
  self.routes = ActionDispatch::Routing::RouteSet.new.tap do |r|
95
95
  r.draw do
96
96
  resources resource_name,
97
- :as => resource_as,
98
- :module => resource_module,
99
- :path => resource_path
97
+ as: resource_as,
98
+ module: resource_module,
99
+ path: resource_path
100
100
  end
101
101
  end
102
102
  end
@@ -159,7 +159,7 @@ module RSpec
159
159
  #
160
160
  # expect do
161
161
  # bypass_rescue
162
- # get :show, :id => profile.id + 1
162
+ # get :show, id: profile.id + 1
163
163
  # end.to raise_error(/403 Forbidden/)
164
164
  # end
165
165
  # end
@@ -37,37 +37,17 @@ end
37
37
 
38
38
  unless RSpec.respond_to?(:feature)
39
39
  opts = {
40
- :capybara_feature => true,
41
- :type => :feature,
42
- :skip => <<-EOT.squish
43
- Feature specs require the Capybara (https://github.com/jnicklas/capybara)
44
- gem, version 2.2.0 or later. We recommend version 2.4.0 or later to avoid
45
- some deprecation warnings and have support for
46
- `config.expose_dsl_globally = false`.
40
+ capybara_feature: true,
41
+ type: :feature,
42
+ skip: <<-EOT.squish
43
+ Feature specs require the Capybara (https://github.com/teamcapybara/capybara)
44
+ gem, version 2.13.0 or later.
47
45
  EOT
48
46
  }
49
47
 
50
- # Capybara's monkey patching causes us to have to jump through some hoops
51
- top_level = self
52
- main_feature = nil
53
- if defined?(Capybara) && ::Capybara::VERSION.to_f < 2.4
54
- # Capybara 2.2 and 2.3 do not use `alias_example_xyz`
55
- opts[:skip] = <<-EOT.squish
56
- Capybara < 2.4.0 does not support RSpec's namespace or
57
- `config.expose_dsl_globally = false`. Upgrade to Capybara >= 2.4.0.
58
- EOT
59
- main_feature = top_level.method(:feature) if top_level.respond_to?(:feature)
60
- end
61
-
62
48
  RSpec.configure do |c|
63
- main_feature = nil unless c.expose_dsl_globally?
64
49
  c.alias_example_group_to :feature, opts
65
50
  c.alias_example_to :scenario
66
- c.alias_example_to :xscenario, :skip => 'Temporarily skipped with xscenario'
51
+ c.alias_example_to :xscenario, skip: 'Temporarily skipped with xscenario'
67
52
  end
68
-
69
- # Due to load order issues and `config.expose_dsl_globally?` defaulting to
70
- # `true` we need to put Capybara's monkey patch method back. Otherwise,
71
- # app upgrades have a high likelyhood of having all feature specs skipped.
72
- top_level.define_singleton_method(:feature, &main_feature) if main_feature
73
53
  end
@@ -12,16 +12,8 @@ module RSpec
12
12
 
13
13
  # @private
14
14
  module ClassMethods
15
- if ::Rails::VERSION::MAJOR > 3
16
- def determine_constant_from_test_name(_ignore)
17
- described_class if yield(described_class)
18
- end
19
- else
20
- def determine_default_helper_class(_ignore)
21
- return unless Module === described_class && !(Class === described_class)
22
-
23
- described_class
24
- end
15
+ def determine_constant_from_test_name(_ignore)
16
+ described_class if yield(described_class)
25
17
  end
26
18
  end
27
19
 
@@ -9,7 +9,7 @@ module RSpec
9
9
  module RailsExampleGroup
10
10
  extend ActiveSupport::Concern
11
11
  include RSpec::Rails::SetupAndTeardownAdapter
12
- include RSpec::Rails::MinitestLifecycleAdapter if ::Rails::VERSION::STRING >= '4'
12
+ include RSpec::Rails::MinitestLifecycleAdapter
13
13
  include RSpec::Rails::MinitestAssertionAdapter
14
14
  include RSpec::Rails::FixtureSupport
15
15
  end
@@ -50,6 +50,10 @@ module RSpec
50
50
  end
51
51
 
52
52
  included do |other|
53
+ ActiveSupport.on_load(:action_dispatch_system_test_case) do
54
+ ActionDispatch::SystemTesting::Server.silence_puma = true
55
+ end
56
+
53
57
  begin
54
58
  require 'capybara'
55
59
  require 'action_dispatch/system_test_case'
@@ -71,7 +75,6 @@ module RSpec
71
75
  original_after_teardown =
72
76
  ::ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown.instance_method(:after_teardown)
73
77
 
74
- other.include ActionDispatch::IntegrationTest::Behavior
75
78
  other.include ::ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown
76
79
  other.include ::ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper
77
80
  other.include BlowAwayTeardownHooks
@@ -85,6 +88,12 @@ module RSpec
85
88
  def initialize(*args, &blk)
86
89
  super(*args, &blk)
87
90
  @driver = nil
91
+
92
+ self.class.before do
93
+ # A user may have already set the driver, so only default if driver
94
+ # is not set
95
+ driven_by(:selenium) unless @driver
96
+ end
88
97
  end
89
98
 
90
99
  def driven_by(*args, &blk)
@@ -92,9 +101,6 @@ module RSpec
92
101
  end
93
102
 
94
103
  before do
95
- # A user may have already set the driver, so only default if driver
96
- # is not set
97
- driven_by(:selenium) unless @driver
98
104
  @routes = ::Rails.application.routes
99
105
  end
100
106
 
@@ -43,16 +43,13 @@ module RSpec
43
43
 
44
44
  included do
45
45
  include ::Rails.application.routes.url_helpers
46
-
47
- if ::Rails.application.routes.respond_to?(:mounted_helpers)
48
- include ::Rails.application.routes.mounted_helpers
49
- end
46
+ include ::Rails.application.routes.mounted_helpers
50
47
  end
51
48
 
52
49
  # @overload render
53
- # @overload render({:partial => path_to_file})
54
- # @overload render({:partial => path_to_file}, {... locals ...})
55
- # @overload render({:partial => path_to_file}, {... locals ...}) do ... end
50
+ # @overload render({partial: path_to_file})
51
+ # @overload render({partial: path_to_file}, {... locals ...})
52
+ # @overload render({partial: path_to_file}, {... locals ...}) do ... end
56
53
  #
57
54
  # Delegates to ActionView::Base#render, so see documentation on that
58
55
  # for more info.
@@ -62,7 +59,7 @@ module RSpec
62
59
  #
63
60
  # describe "widgets/new.html.erb" do
64
61
  # it "shows all the widgets" do
65
- # render # => view.render(:file => "widgets/new.html.erb")
62
+ # render # => view.render(file: "widgets/new.html.erb")
66
63
  # # ...
67
64
  # end
68
65
  # end
@@ -105,7 +102,7 @@ module RSpec
105
102
 
106
103
  # @deprecated Use `view` instead.
107
104
  def template
108
- RSpec.deprecate("template", :replacement => "view")
105
+ RSpec.deprecate("template", replacement: "view")
109
106
  view
110
107
  end
111
108
 
@@ -128,41 +125,37 @@ module RSpec
128
125
  private
129
126
 
130
127
  def _default_render_options
131
- if ::Rails::VERSION::STRING >= '3.2'
132
- formats = if ActionView::Template::Types.respond_to?(:symbols)
133
- ActionView::Template::Types.symbols
134
- else
135
- [:html, :text, :js, :css, :xml, :json].map(&:to_s)
136
- end.map { |x| Regexp.escape(x) }.join("|")
137
-
138
- handlers = ActionView::Template::Handlers.extensions.map { |x| Regexp.escape(x) }.join("|")
139
- locales = "[a-z]{2}(?:-[A-Z]{2})?"
140
- variants = "[^.]*"
141
- path_regex = %r{
142
- \A
143
- (?<template>.*?)
144
- (?:\.(?<locale>#{locales}))??
145
- (?:\.(?<format>#{formats}))??
146
- (?:\+(?<variant>#{variants}))??
147
- (?:\.(?<handler>#{handlers}))?
148
- \z
149
- }x
150
-
151
- # This regex should always find a match.
152
- # Worst case, everything will be nil, and :template will just be
153
- # the original string.
154
- match = path_regex.match(_default_file_to_render)
155
-
156
- render_options = { :template => match[:template] }
157
- render_options[:handlers] = [match[:handler]] if match[:handler]
158
- render_options[:formats] = [match[:format].to_sym] if match[:format]
159
- render_options[:locales] = [match[:locale]] if match[:locale]
160
- render_options[:variants] = [match[:variant]] if match[:variant]
161
-
162
- render_options
163
- else
164
- { :template => _default_file_to_render }
165
- end
128
+ formats = if ActionView::Template::Types.respond_to?(:symbols)
129
+ ActionView::Template::Types.symbols
130
+ else
131
+ [:html, :text, :js, :css, :xml, :json].map(&:to_s)
132
+ end.map { |x| Regexp.escape(x) }.join("|")
133
+
134
+ handlers = ActionView::Template::Handlers.extensions.map { |x| Regexp.escape(x) }.join("|")
135
+ locales = "[a-z]{2}(?:-[A-Z]{2})?"
136
+ variants = "[^.]*"
137
+ path_regex = %r{
138
+ \A
139
+ (?<template>.*?)
140
+ (?:\.(?<locale>#{locales}))??
141
+ (?:\.(?<format>#{formats}))??
142
+ (?:\+(?<variant>#{variants}))??
143
+ (?:\.(?<handler>#{handlers}))?
144
+ \z
145
+ }x
146
+
147
+ # This regex should always find a match.
148
+ # Worst case, everything will be nil, and :template will just be
149
+ # the original string.
150
+ match = path_regex.match(_default_file_to_render)
151
+
152
+ render_options = {template: match[:template]}
153
+ render_options[:handlers] = [match[:handler]] if match[:handler]
154
+ render_options[:formats] = [match[:format].to_sym] if match[:format]
155
+ render_options[:locales] = [match[:locale]] if match[:locale]
156
+ render_options[:variants] = [match[:variant]] if match[:variant]
157
+
158
+ render_options
166
159
  end
167
160
 
168
161
  def _path_parts
@@ -192,10 +185,7 @@ module RSpec
192
185
 
193
186
  before do
194
187
  _include_controller_helpers
195
- if view.lookup_context.respond_to?(:prefixes)
196
- # rails 3.1
197
- view.lookup_context.prefixes << _controller_path
198
- end
188
+ view.lookup_context.prefixes << _controller_path
199
189
 
200
190
  controller.controller_path = _controller_path
201
191
 
@@ -2,15 +2,7 @@ RSpec.configure do |rspec|
2
2
  # Delay this in order to give users a chance to configure `expect_with`...
3
3
  rspec.before(:suite) do
4
4
  if defined?(RSpec::Matchers) && RSpec::Matchers.configuration.syntax.include?(:should) && defined?(ActiveRecord::Associations)
5
- # In Rails 3.0, it was AssociationProxy.
6
- # In 3.1+, it's CollectionProxy.
7
- const_name = [:CollectionProxy, :AssociationProxy].find do |const|
8
- ActiveRecord::Associations.const_defined?(const)
9
- end
10
-
11
- proxy_class = ActiveRecord::Associations.const_get(const_name)
12
-
13
- RSpec::Matchers.configuration.add_should_and_should_not_to proxy_class
5
+ RSpec::Matchers.configuration.add_should_and_should_not_to ActiveRecord::Associations::CollectionProxy
14
6
  end
15
7
  end
16
8
  end
@@ -3,16 +3,6 @@ module RSpec
3
3
  # @private
4
4
  module FeatureCheck
5
5
  module_function
6
- def can_check_pending_migrations?
7
- has_active_record_migration? &&
8
- ::ActiveRecord::Migration.respond_to?(:check_pending!)
9
- end
10
-
11
- def can_maintain_test_schema?
12
- has_active_record_migration? &&
13
- ::ActiveRecord::Migration.respond_to?(:maintain_test_schema!)
14
- end
15
-
16
6
  def has_active_job?
17
7
  defined?(::ActiveJob)
18
8
  end
@@ -37,11 +27,6 @@ module RSpec
37
27
  defined?(::ActionCable) && ActionCable::VERSION::MAJOR >= 6
38
28
  end
39
29
 
40
- def has_action_mailer_show_preview?
41
- has_action_mailer_preview? &&
42
- ::ActionMailer::Base.respond_to?(:show_previews=)
43
- end
44
-
45
30
  def has_action_mailer_parameterized?
46
31
  has_action_mailer? && defined?(::ActionMailer::Parameterized)
47
32
  end
@@ -54,20 +39,8 @@ module RSpec
54
39
  defined?(::ActionMailbox)
55
40
  end
56
41
 
57
- def has_1_9_hash_syntax?
58
- ::Rails::VERSION::STRING > '4.0'
59
- end
60
-
61
- def has_file_fixture?
62
- ::Rails::VERSION::STRING > '5.0'
63
- end
64
-
65
42
  def type_metatag(type)
66
- if has_1_9_hash_syntax?
67
- "type: :#{type}"
68
- else
69
- ":type => :#{type}"
70
- end
43
+ "type: :#{type}"
71
44
  end
72
45
  end
73
46
  end
@@ -2,7 +2,7 @@ module RSpec
2
2
  module Rails
3
3
  # @private
4
4
  module FixtureFileUploadSupport
5
- delegate :fixture_file_upload, :to => :rails_fixture_file_wrapper
5
+ delegate :fixture_file_upload, to: :rails_fixture_file_wrapper
6
6
 
7
7
  private
8
8