actionpack 8.0.2.1 → 8.1.0.beta1

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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +251 -141
  3. data/README.rdoc +1 -1
  4. data/lib/abstract_controller/asset_paths.rb +4 -2
  5. data/lib/abstract_controller/base.rb +11 -14
  6. data/lib/abstract_controller/caching.rb +6 -3
  7. data/lib/abstract_controller/collector.rb +1 -1
  8. data/lib/abstract_controller/logger.rb +2 -1
  9. data/lib/action_controller/base.rb +1 -1
  10. data/lib/action_controller/caching.rb +1 -2
  11. data/lib/action_controller/form_builder.rb +1 -1
  12. data/lib/action_controller/log_subscriber.rb +7 -0
  13. data/lib/action_controller/metal/allow_browser.rb +1 -1
  14. data/lib/action_controller/metal/conditional_get.rb +25 -0
  15. data/lib/action_controller/metal/data_streaming.rb +1 -3
  16. data/lib/action_controller/metal/exceptions.rb +5 -0
  17. data/lib/action_controller/metal/flash.rb +1 -4
  18. data/lib/action_controller/metal/head.rb +3 -1
  19. data/lib/action_controller/metal/live.rb +0 -6
  20. data/lib/action_controller/metal/permissions_policy.rb +9 -0
  21. data/lib/action_controller/metal/rate_limiting.rb +22 -7
  22. data/lib/action_controller/metal/redirecting.rb +63 -7
  23. data/lib/action_controller/metal/renderers.rb +27 -6
  24. data/lib/action_controller/metal/rendering.rb +8 -2
  25. data/lib/action_controller/metal/request_forgery_protection.rb +18 -10
  26. data/lib/action_controller/metal/rescue.rb +9 -0
  27. data/lib/action_controller/railtie.rb +2 -6
  28. data/lib/action_controller/renderer.rb +0 -1
  29. data/lib/action_dispatch/constants.rb +6 -0
  30. data/lib/action_dispatch/http/cache.rb +111 -1
  31. data/lib/action_dispatch/http/content_security_policy.rb +13 -1
  32. data/lib/action_dispatch/http/filter_parameters.rb +5 -3
  33. data/lib/action_dispatch/http/mime_negotiation.rb +8 -3
  34. data/lib/action_dispatch/http/mime_types.rb +1 -0
  35. data/lib/action_dispatch/http/param_builder.rb +28 -27
  36. data/lib/action_dispatch/http/parameters.rb +3 -3
  37. data/lib/action_dispatch/http/permissions_policy.rb +4 -0
  38. data/lib/action_dispatch/http/query_parser.rb +12 -10
  39. data/lib/action_dispatch/http/request.rb +10 -5
  40. data/lib/action_dispatch/http/response.rb +65 -17
  41. data/lib/action_dispatch/http/url.rb +101 -5
  42. data/lib/action_dispatch/journey/gtg/simulator.rb +33 -12
  43. data/lib/action_dispatch/journey/gtg/transition_table.rb +29 -39
  44. data/lib/action_dispatch/journey/nodes/node.rb +2 -1
  45. data/lib/action_dispatch/journey/route.rb +45 -31
  46. data/lib/action_dispatch/journey/router/utils.rb +8 -14
  47. data/lib/action_dispatch/journey/router.rb +59 -81
  48. data/lib/action_dispatch/journey/routes.rb +7 -0
  49. data/lib/action_dispatch/journey/visitors.rb +55 -23
  50. data/lib/action_dispatch/journey/visualizer/fsm.js +4 -6
  51. data/lib/action_dispatch/middleware/cookies.rb +4 -2
  52. data/lib/action_dispatch/middleware/debug_exceptions.rb +10 -2
  53. data/lib/action_dispatch/middleware/debug_view.rb +11 -0
  54. data/lib/action_dispatch/middleware/exception_wrapper.rb +14 -8
  55. data/lib/action_dispatch/middleware/executor.rb +12 -2
  56. data/lib/action_dispatch/middleware/public_exceptions.rb +6 -6
  57. data/lib/action_dispatch/middleware/session/cache_store.rb +17 -0
  58. data/lib/action_dispatch/middleware/templates/rescues/_copy_button.html.erb +1 -0
  59. data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +3 -2
  60. data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +9 -5
  61. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.html.erb +1 -0
  62. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +1 -0
  63. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +1 -0
  64. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +50 -0
  65. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +1 -0
  66. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +1 -0
  67. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +1 -0
  68. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +1 -0
  69. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +1 -0
  70. data/lib/action_dispatch/railtie.rb +10 -2
  71. data/lib/action_dispatch/routing/inspector.rb +4 -1
  72. data/lib/action_dispatch/routing/mapper.rb +323 -173
  73. data/lib/action_dispatch/routing/route_set.rb +3 -6
  74. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +2 -2
  75. data/lib/action_dispatch/testing/assertion_response.rb +1 -1
  76. data/lib/action_dispatch/testing/assertions/response.rb +14 -0
  77. data/lib/action_dispatch/testing/assertions/routing.rb +11 -3
  78. data/lib/action_pack/gem_version.rb +3 -3
  79. metadata +11 -10
@@ -29,7 +29,7 @@ module ActionDispatch
29
29
  def from_requirements(requirements)
30
30
  routes.find { |route| route.requirements == requirements }
31
31
  end
32
- # :stopdoc:
32
+ # :enddoc:
33
33
 
34
34
  # Since the router holds references to many parts of the system like engines,
35
35
  # controllers and the application itself, inspecting the route set can actually
@@ -59,8 +59,6 @@ module ActionDispatch
59
59
  private
60
60
  def controller(req)
61
61
  req.controller_class
62
- rescue NameError => e
63
- raise ActionController::RoutingError, e.message, e.backtrace
64
62
  end
65
63
 
66
64
  def dispatch(controller, action, req, res)
@@ -659,14 +657,14 @@ module ActionDispatch
659
657
  if route.segment_keys.include?(:controller)
660
658
  ActionDispatch.deprecator.warn(<<-MSG.squish)
661
659
  Using a dynamic :controller segment in a route is deprecated and
662
- will be removed in Rails 8.1.
660
+ will be removed in Rails 9.0.
663
661
  MSG
664
662
  end
665
663
 
666
664
  if route.segment_keys.include?(:action)
667
665
  ActionDispatch.deprecator.warn(<<-MSG.squish)
668
666
  Using a dynamic :action segment in a route is deprecated and
669
- will be removed in Rails 8.1.
667
+ will be removed in Rails 9.0.
670
668
  MSG
671
669
  end
672
670
 
@@ -953,6 +951,5 @@ module ActionDispatch
953
951
  end
954
952
  end
955
953
  end
956
- # :startdoc:
957
954
  end
958
955
  end
@@ -132,8 +132,8 @@ module ActionDispatch
132
132
  end
133
133
 
134
134
  def display_image(html:, screenshot_output:)
135
- message = +"[Screenshot Image]: #{image_path}\n"
136
- message << +"[Screenshot HTML]: #{html_path}\n" if html
135
+ message = +"[Screenshot Image]: #{image_path} \n"
136
+ message << +"[Screenshot HTML]: #{html_path} \n" if html
137
137
 
138
138
  case screenshot_output || output_type
139
139
  when "artifact"
@@ -38,7 +38,7 @@ module ActionDispatch
38
38
 
39
39
  private
40
40
  def code_from_name(name)
41
- GENERIC_RESPONSE_CODES[name] || Rack::Utils.status_code(name)
41
+ GENERIC_RESPONSE_CODES[name] || ActionDispatch::Response.rack_status_code(name)
42
42
  end
43
43
 
44
44
  def name_from_code(code)
@@ -71,6 +71,20 @@ module ActionDispatch
71
71
  assert_operator redirect_expected, :===, redirect_is, message
72
72
  end
73
73
 
74
+ # Asserts that the given +text+ is present somewhere in the response body.
75
+ #
76
+ # assert_in_body fixture(:name).description
77
+ def assert_in_body(text)
78
+ assert_match(/#{Regexp.escape(text)}/, @response.body)
79
+ end
80
+
81
+ # Asserts that the given +text+ is not present anywhere in the response body.
82
+ #
83
+ # assert_not_in_body fixture(:name).description
84
+ def assert_not_in_body(text)
85
+ assert_no_match(/#{Regexp.escape(text)}/, @response.body)
86
+ end
87
+
74
88
  private
75
89
  # Proxy to to_param if the object will respond to it.
76
90
  def parameterize(value)
@@ -25,7 +25,7 @@ module ActionDispatch
25
25
  old_integration_session = nil
26
26
 
27
27
  setup do
28
- old_routes = app.routes
28
+ old_routes = initialize_lazy_routes(app.routes)
29
29
  old_routes_call_method = old_routes.method(:call)
30
30
  old_integration_session = integration_session
31
31
  create_routes(&block)
@@ -38,7 +38,7 @@ module ActionDispatch
38
38
  end
39
39
 
40
40
  def with_routing(&block)
41
- old_routes = app.routes
41
+ old_routes = initialize_lazy_routes(app.routes)
42
42
  old_routes_call_method = old_routes.method(:call)
43
43
  old_integration_session = integration_session
44
44
  create_routes(&block)
@@ -47,6 +47,14 @@ module ActionDispatch
47
47
  end
48
48
 
49
49
  private
50
+ def initialize_lazy_routes(routes)
51
+ if defined?(Rails::Engine::LazyRouteSet) && routes.is_a?(Rails::Engine::LazyRouteSet)
52
+ routes.tap(&:routes)
53
+ else
54
+ routes
55
+ end
56
+ end
57
+
50
58
  def create_routes
51
59
  app = self.app
52
60
  routes = ActionDispatch::Routing::RouteSet.new
@@ -340,7 +348,7 @@ module ActionDispatch
340
348
  def fail_on(exception_class, message)
341
349
  yield
342
350
  rescue exception_class => e
343
- raise Minitest::Assertion, message || e.message
351
+ flunk(message || e.message)
344
352
  end
345
353
  end
346
354
  end
@@ -10,9 +10,9 @@ module ActionPack
10
10
 
11
11
  module VERSION
12
12
  MAJOR = 8
13
- MINOR = 0
14
- TINY = 2
15
- PRE = "1"
13
+ MINOR = 1
14
+ TINY = 0
15
+ PRE = "beta1"
16
16
 
17
17
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
18
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actionpack
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.2.1
4
+ version: 8.1.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 8.0.2.1
18
+ version: 8.1.0.beta1
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 8.0.2.1
25
+ version: 8.1.0.beta1
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: nokogiri
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -127,28 +127,28 @@ dependencies:
127
127
  requirements:
128
128
  - - '='
129
129
  - !ruby/object:Gem::Version
130
- version: 8.0.2.1
130
+ version: 8.1.0.beta1
131
131
  type: :runtime
132
132
  prerelease: false
133
133
  version_requirements: !ruby/object:Gem::Requirement
134
134
  requirements:
135
135
  - - '='
136
136
  - !ruby/object:Gem::Version
137
- version: 8.0.2.1
137
+ version: 8.1.0.beta1
138
138
  - !ruby/object:Gem::Dependency
139
139
  name: activemodel
140
140
  requirement: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - '='
143
143
  - !ruby/object:Gem::Version
144
- version: 8.0.2.1
144
+ version: 8.1.0.beta1
145
145
  type: :development
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - '='
150
150
  - !ruby/object:Gem::Version
151
- version: 8.0.2.1
151
+ version: 8.1.0.beta1
152
152
  description: Web apps on Rails. Simple, battle-tested conventions for building and
153
153
  testing MVC web applications. Works with any Rack-compatible server.
154
154
  email: david@loudthinking.com
@@ -287,6 +287,7 @@ files:
287
287
  - lib/action_dispatch/middleware/static.rb
288
288
  - lib/action_dispatch/middleware/templates/rescues/_actions.html.erb
289
289
  - lib/action_dispatch/middleware/templates/rescues/_actions.text.erb
290
+ - lib/action_dispatch/middleware/templates/rescues/_copy_button.html.erb
290
291
  - lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb
291
292
  - lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
292
293
  - lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb
@@ -349,10 +350,10 @@ licenses:
349
350
  - MIT
350
351
  metadata:
351
352
  bug_tracker_uri: https://github.com/rails/rails/issues
352
- changelog_uri: https://github.com/rails/rails/blob/v8.0.2.1/actionpack/CHANGELOG.md
353
- documentation_uri: https://api.rubyonrails.org/v8.0.2.1/
353
+ changelog_uri: https://github.com/rails/rails/blob/v8.1.0.beta1/actionpack/CHANGELOG.md
354
+ documentation_uri: https://api.rubyonrails.org/v8.1.0.beta1/
354
355
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
355
- source_code_uri: https://github.com/rails/rails/tree/v8.0.2.1/actionpack
356
+ source_code_uri: https://github.com/rails/rails/tree/v8.1.0.beta1/actionpack
356
357
  rubygems_mfa_required: 'true'
357
358
  rdoc_options: []
358
359
  require_paths: