omg-actionpack 8.0.0.alpha1

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 (187) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +129 -0
  3. data/MIT-LICENSE +21 -0
  4. data/README.rdoc +57 -0
  5. data/lib/abstract_controller/asset_paths.rb +14 -0
  6. data/lib/abstract_controller/base.rb +299 -0
  7. data/lib/abstract_controller/caching/fragments.rb +149 -0
  8. data/lib/abstract_controller/caching.rb +68 -0
  9. data/lib/abstract_controller/callbacks.rb +265 -0
  10. data/lib/abstract_controller/collector.rb +44 -0
  11. data/lib/abstract_controller/deprecator.rb +9 -0
  12. data/lib/abstract_controller/error.rb +8 -0
  13. data/lib/abstract_controller/helpers.rb +243 -0
  14. data/lib/abstract_controller/logger.rb +16 -0
  15. data/lib/abstract_controller/railties/routes_helpers.rb +25 -0
  16. data/lib/abstract_controller/rendering.rb +126 -0
  17. data/lib/abstract_controller/translation.rb +42 -0
  18. data/lib/abstract_controller/url_for.rb +37 -0
  19. data/lib/abstract_controller.rb +36 -0
  20. data/lib/action_controller/api/api_rendering.rb +18 -0
  21. data/lib/action_controller/api.rb +155 -0
  22. data/lib/action_controller/base.rb +332 -0
  23. data/lib/action_controller/caching.rb +49 -0
  24. data/lib/action_controller/deprecator.rb +9 -0
  25. data/lib/action_controller/form_builder.rb +55 -0
  26. data/lib/action_controller/log_subscriber.rb +96 -0
  27. data/lib/action_controller/metal/allow_browser.rb +123 -0
  28. data/lib/action_controller/metal/basic_implicit_render.rb +17 -0
  29. data/lib/action_controller/metal/conditional_get.rb +341 -0
  30. data/lib/action_controller/metal/content_security_policy.rb +86 -0
  31. data/lib/action_controller/metal/cookies.rb +20 -0
  32. data/lib/action_controller/metal/data_streaming.rb +154 -0
  33. data/lib/action_controller/metal/default_headers.rb +21 -0
  34. data/lib/action_controller/metal/etag_with_flash.rb +22 -0
  35. data/lib/action_controller/metal/etag_with_template_digest.rb +59 -0
  36. data/lib/action_controller/metal/exceptions.rb +106 -0
  37. data/lib/action_controller/metal/flash.rb +67 -0
  38. data/lib/action_controller/metal/head.rb +67 -0
  39. data/lib/action_controller/metal/helpers.rb +129 -0
  40. data/lib/action_controller/metal/http_authentication.rb +565 -0
  41. data/lib/action_controller/metal/implicit_render.rb +67 -0
  42. data/lib/action_controller/metal/instrumentation.rb +120 -0
  43. data/lib/action_controller/metal/live.rb +398 -0
  44. data/lib/action_controller/metal/logging.rb +22 -0
  45. data/lib/action_controller/metal/mime_responds.rb +337 -0
  46. data/lib/action_controller/metal/parameter_encoding.rb +84 -0
  47. data/lib/action_controller/metal/params_wrapper.rb +312 -0
  48. data/lib/action_controller/metal/permissions_policy.rb +38 -0
  49. data/lib/action_controller/metal/rate_limiting.rb +62 -0
  50. data/lib/action_controller/metal/redirecting.rb +251 -0
  51. data/lib/action_controller/metal/renderers.rb +181 -0
  52. data/lib/action_controller/metal/rendering.rb +260 -0
  53. data/lib/action_controller/metal/request_forgery_protection.rb +667 -0
  54. data/lib/action_controller/metal/rescue.rb +33 -0
  55. data/lib/action_controller/metal/streaming.rb +183 -0
  56. data/lib/action_controller/metal/strong_parameters.rb +1546 -0
  57. data/lib/action_controller/metal/testing.rb +25 -0
  58. data/lib/action_controller/metal/url_for.rb +65 -0
  59. data/lib/action_controller/metal.rb +339 -0
  60. data/lib/action_controller/railtie.rb +149 -0
  61. data/lib/action_controller/railties/helpers.rb +26 -0
  62. data/lib/action_controller/renderer.rb +161 -0
  63. data/lib/action_controller/template_assertions.rb +13 -0
  64. data/lib/action_controller/test_case.rb +691 -0
  65. data/lib/action_controller.rb +80 -0
  66. data/lib/action_dispatch/constants.rb +34 -0
  67. data/lib/action_dispatch/deprecator.rb +9 -0
  68. data/lib/action_dispatch/http/cache.rb +249 -0
  69. data/lib/action_dispatch/http/content_disposition.rb +47 -0
  70. data/lib/action_dispatch/http/content_security_policy.rb +365 -0
  71. data/lib/action_dispatch/http/filter_parameters.rb +80 -0
  72. data/lib/action_dispatch/http/filter_redirect.rb +50 -0
  73. data/lib/action_dispatch/http/headers.rb +134 -0
  74. data/lib/action_dispatch/http/mime_negotiation.rb +187 -0
  75. data/lib/action_dispatch/http/mime_type.rb +389 -0
  76. data/lib/action_dispatch/http/mime_types.rb +54 -0
  77. data/lib/action_dispatch/http/parameters.rb +119 -0
  78. data/lib/action_dispatch/http/permissions_policy.rb +189 -0
  79. data/lib/action_dispatch/http/rack_cache.rb +67 -0
  80. data/lib/action_dispatch/http/request.rb +498 -0
  81. data/lib/action_dispatch/http/response.rb +556 -0
  82. data/lib/action_dispatch/http/upload.rb +107 -0
  83. data/lib/action_dispatch/http/url.rb +344 -0
  84. data/lib/action_dispatch/journey/formatter.rb +226 -0
  85. data/lib/action_dispatch/journey/gtg/builder.rb +149 -0
  86. data/lib/action_dispatch/journey/gtg/simulator.rb +50 -0
  87. data/lib/action_dispatch/journey/gtg/transition_table.rb +217 -0
  88. data/lib/action_dispatch/journey/nfa/dot.rb +27 -0
  89. data/lib/action_dispatch/journey/nodes/node.rb +208 -0
  90. data/lib/action_dispatch/journey/parser.rb +103 -0
  91. data/lib/action_dispatch/journey/path/pattern.rb +209 -0
  92. data/lib/action_dispatch/journey/route.rb +189 -0
  93. data/lib/action_dispatch/journey/router/utils.rb +105 -0
  94. data/lib/action_dispatch/journey/router.rb +151 -0
  95. data/lib/action_dispatch/journey/routes.rb +82 -0
  96. data/lib/action_dispatch/journey/scanner.rb +70 -0
  97. data/lib/action_dispatch/journey/visitors.rb +267 -0
  98. data/lib/action_dispatch/journey/visualizer/fsm.css +30 -0
  99. data/lib/action_dispatch/journey/visualizer/fsm.js +159 -0
  100. data/lib/action_dispatch/journey/visualizer/index.html.erb +52 -0
  101. data/lib/action_dispatch/journey.rb +7 -0
  102. data/lib/action_dispatch/log_subscriber.rb +25 -0
  103. data/lib/action_dispatch/middleware/actionable_exceptions.rb +46 -0
  104. data/lib/action_dispatch/middleware/assume_ssl.rb +27 -0
  105. data/lib/action_dispatch/middleware/callbacks.rb +38 -0
  106. data/lib/action_dispatch/middleware/cookies.rb +719 -0
  107. data/lib/action_dispatch/middleware/debug_exceptions.rb +206 -0
  108. data/lib/action_dispatch/middleware/debug_locks.rb +129 -0
  109. data/lib/action_dispatch/middleware/debug_view.rb +73 -0
  110. data/lib/action_dispatch/middleware/exception_wrapper.rb +350 -0
  111. data/lib/action_dispatch/middleware/executor.rb +32 -0
  112. data/lib/action_dispatch/middleware/flash.rb +318 -0
  113. data/lib/action_dispatch/middleware/host_authorization.rb +171 -0
  114. data/lib/action_dispatch/middleware/public_exceptions.rb +64 -0
  115. data/lib/action_dispatch/middleware/reloader.rb +16 -0
  116. data/lib/action_dispatch/middleware/remote_ip.rb +199 -0
  117. data/lib/action_dispatch/middleware/request_id.rb +50 -0
  118. data/lib/action_dispatch/middleware/server_timing.rb +78 -0
  119. data/lib/action_dispatch/middleware/session/abstract_store.rb +112 -0
  120. data/lib/action_dispatch/middleware/session/cache_store.rb +66 -0
  121. data/lib/action_dispatch/middleware/session/cookie_store.rb +129 -0
  122. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +34 -0
  123. data/lib/action_dispatch/middleware/show_exceptions.rb +88 -0
  124. data/lib/action_dispatch/middleware/ssl.rb +180 -0
  125. data/lib/action_dispatch/middleware/stack.rb +194 -0
  126. data/lib/action_dispatch/middleware/static.rb +192 -0
  127. data/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb +13 -0
  128. data/lib/action_dispatch/middleware/templates/rescues/_actions.text.erb +0 -0
  129. data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +22 -0
  130. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +17 -0
  131. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +23 -0
  132. data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +36 -0
  133. data/lib/action_dispatch/middleware/templates/rescues/_source.text.erb +8 -0
  134. data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +62 -0
  135. data/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb +9 -0
  136. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.html.erb +12 -0
  137. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.text.erb +9 -0
  138. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +35 -0
  139. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +9 -0
  140. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +24 -0
  141. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.text.erb +16 -0
  142. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +284 -0
  143. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +23 -0
  144. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.text.erb +3 -0
  145. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +11 -0
  146. data/lib/action_dispatch/middleware/templates/rescues/missing_template.text.erb +3 -0
  147. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +32 -0
  148. data/lib/action_dispatch/middleware/templates/rescues/routing_error.text.erb +11 -0
  149. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +20 -0
  150. data/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +7 -0
  151. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +6 -0
  152. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +3 -0
  153. data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +19 -0
  154. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +232 -0
  155. data/lib/action_dispatch/railtie.rb +77 -0
  156. data/lib/action_dispatch/request/session.rb +283 -0
  157. data/lib/action_dispatch/request/utils.rb +109 -0
  158. data/lib/action_dispatch/routing/endpoint.rb +19 -0
  159. data/lib/action_dispatch/routing/inspector.rb +323 -0
  160. data/lib/action_dispatch/routing/mapper.rb +2372 -0
  161. data/lib/action_dispatch/routing/polymorphic_routes.rb +363 -0
  162. data/lib/action_dispatch/routing/redirection.rb +218 -0
  163. data/lib/action_dispatch/routing/route_set.rb +958 -0
  164. data/lib/action_dispatch/routing/routes_proxy.rb +66 -0
  165. data/lib/action_dispatch/routing/url_for.rb +244 -0
  166. data/lib/action_dispatch/routing.rb +262 -0
  167. data/lib/action_dispatch/system_test_case.rb +206 -0
  168. data/lib/action_dispatch/system_testing/browser.rb +75 -0
  169. data/lib/action_dispatch/system_testing/driver.rb +85 -0
  170. data/lib/action_dispatch/system_testing/server.rb +33 -0
  171. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +164 -0
  172. data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +23 -0
  173. data/lib/action_dispatch/testing/assertion_response.rb +48 -0
  174. data/lib/action_dispatch/testing/assertions/response.rb +114 -0
  175. data/lib/action_dispatch/testing/assertions/routing.rb +343 -0
  176. data/lib/action_dispatch/testing/assertions.rb +25 -0
  177. data/lib/action_dispatch/testing/integration.rb +694 -0
  178. data/lib/action_dispatch/testing/request_encoder.rb +60 -0
  179. data/lib/action_dispatch/testing/test_helpers/page_dump_helper.rb +35 -0
  180. data/lib/action_dispatch/testing/test_process.rb +57 -0
  181. data/lib/action_dispatch/testing/test_request.rb +73 -0
  182. data/lib/action_dispatch/testing/test_response.rb +58 -0
  183. data/lib/action_dispatch.rb +147 -0
  184. data/lib/action_pack/gem_version.rb +19 -0
  185. data/lib/action_pack/version.rb +12 -0
  186. data/lib/action_pack.rb +27 -0
  187. metadata +375 -0
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :markup: markdown
4
+
5
+ require "nokogiri"
6
+
7
+ module ActionDispatch
8
+ class RequestEncoder # :nodoc:
9
+ class IdentityEncoder
10
+ def content_type; end
11
+ def accept_header; end
12
+ def encode_params(params); params; end
13
+ def response_parser; -> body { body }; end
14
+ end
15
+
16
+ @encoders = { identity: IdentityEncoder.new }
17
+
18
+ attr_reader :response_parser
19
+
20
+ def initialize(mime_name, param_encoder, response_parser)
21
+ @mime = Mime[mime_name]
22
+
23
+ unless @mime
24
+ raise ArgumentError, "Can't register a request encoder for " \
25
+ "unregistered MIME Type: #{mime_name}. See `Mime::Type.register`."
26
+ end
27
+
28
+ @response_parser = response_parser || -> body { body }
29
+ @param_encoder = param_encoder || :"to_#{@mime.symbol}".to_proc
30
+ end
31
+
32
+ def content_type
33
+ @mime.to_s
34
+ end
35
+
36
+ def accept_header
37
+ @mime.to_s
38
+ end
39
+
40
+ def encode_params(params)
41
+ @param_encoder.call(params) if params
42
+ end
43
+
44
+ def self.parser(content_type)
45
+ type = Mime::Type.lookup(content_type).ref if content_type
46
+ encoder(type).response_parser
47
+ end
48
+
49
+ def self.encoder(name)
50
+ @encoders[name] || @encoders[:identity]
51
+ end
52
+
53
+ def self.register_encoder(mime_name, param_encoder: nil, response_parser: nil)
54
+ @encoders[mime_name] = new(mime_name, param_encoder, response_parser)
55
+ end
56
+
57
+ register_encoder :html, response_parser: -> body { Rails::Dom::Testing.html_document.parse(body) }
58
+ register_encoder :json, response_parser: -> body { JSON.parse(body, object_class: ActiveSupport::HashWithIndifferentAccess) }
59
+ end
60
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionDispatch
4
+ module TestHelpers
5
+ module PageDumpHelper
6
+ class InvalidResponse < StandardError; end
7
+
8
+ # Saves the content of response body to a file and tries to open it in your browser.
9
+ # Launchy must be present in your Gemfile for the page to open automatically.
10
+ def save_and_open_page(path = html_dump_default_path)
11
+ save_page(path).tap { |s_path| open_file(s_path) }
12
+ end
13
+
14
+ private
15
+ def save_page(path = html_dump_default_path)
16
+ raise InvalidResponse.new("Response is a redirection!") if response.redirection?
17
+ path = Pathname.new(path)
18
+ path.dirname.mkpath
19
+ File.write(path, response.body)
20
+ path
21
+ end
22
+
23
+ def open_file(path)
24
+ require "launchy"
25
+ Launchy.open(path)
26
+ rescue LoadError
27
+ warn "File saved to #{path}.\nPlease install the launchy gem to open the file automatically."
28
+ end
29
+
30
+ def html_dump_default_path
31
+ Rails.root.join("tmp/html_dump", "#{method_name}_#{DateTime.current.to_i}.html").to_s
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :markup: markdown
4
+
5
+ require "action_dispatch/middleware/cookies"
6
+ require "action_dispatch/middleware/flash"
7
+
8
+ module ActionDispatch
9
+ module TestProcess
10
+ module FixtureFile
11
+ # Shortcut for
12
+ # `Rack::Test::UploadedFile.new(File.join(ActionDispatch::IntegrationTest.file_f
13
+ # ixture_path, path), type)`:
14
+ #
15
+ # post :change_avatar, params: { avatar: file_fixture_upload('david.png', 'image/png') }
16
+ #
17
+ # Default fixture files location is `test/fixtures/files`.
18
+ #
19
+ # To upload binary files on Windows, pass `:binary` as the last parameter. This
20
+ # will not affect other platforms:
21
+ #
22
+ # post :change_avatar, params: { avatar: file_fixture_upload('david.png', 'image/png', :binary) }
23
+ def file_fixture_upload(path, mime_type = nil, binary = false)
24
+ if self.class.file_fixture_path && !File.exist?(path)
25
+ path = file_fixture(path)
26
+ end
27
+
28
+ Rack::Test::UploadedFile.new(path, mime_type, binary)
29
+ end
30
+ alias_method :fixture_file_upload, :file_fixture_upload
31
+ end
32
+
33
+ include FixtureFile
34
+
35
+ def assigns(key = nil)
36
+ raise NoMethodError,
37
+ 'assigns has been extracted to a gem. To continue using it,
38
+ add `gem "rails-controller-testing"` to your Gemfile.'
39
+ end
40
+
41
+ def session
42
+ @request.session
43
+ end
44
+
45
+ def flash
46
+ @request.flash
47
+ end
48
+
49
+ def cookies
50
+ @cookie_jar ||= Cookies::CookieJar.build(@request, @request.cookies)
51
+ end
52
+
53
+ def redirect_to_url
54
+ @response.redirect_url
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :markup: markdown
4
+
5
+ require "active_support/core_ext/hash/indifferent_access"
6
+ require "rack/utils"
7
+
8
+ module ActionDispatch
9
+ class TestRequest < Request
10
+ DEFAULT_ENV = Rack::MockRequest.env_for("/",
11
+ "HTTP_HOST" => "test.host".b,
12
+ "REMOTE_ADDR" => "0.0.0.0".b,
13
+ "HTTP_USER_AGENT" => "Rails Testing".b,
14
+ )
15
+
16
+ # Create a new test request with default `env` values.
17
+ def self.create(env = {})
18
+ env = Rails.application.env_config.merge(env) if defined?(Rails.application) && Rails.application
19
+ env["rack.request.cookie_hash"] ||= {}.with_indifferent_access
20
+ new(default_env.merge(env))
21
+ end
22
+
23
+ def self.default_env
24
+ DEFAULT_ENV
25
+ end
26
+ private_class_method :default_env
27
+
28
+ def request_method=(method)
29
+ super(method.to_s.upcase)
30
+ end
31
+
32
+ def host=(host)
33
+ set_header("HTTP_HOST", host)
34
+ end
35
+
36
+ def port=(number)
37
+ set_header("SERVER_PORT", number)
38
+ end
39
+
40
+ def request_uri=(uri)
41
+ set_header("REQUEST_URI", uri)
42
+ end
43
+
44
+ def path=(path)
45
+ set_header("PATH_INFO", path)
46
+ end
47
+
48
+ def action=(action_name)
49
+ path_parameters[:action] = action_name.to_s
50
+ end
51
+
52
+ def if_modified_since=(last_modified)
53
+ set_header("HTTP_IF_MODIFIED_SINCE", last_modified)
54
+ end
55
+
56
+ def if_none_match=(etag)
57
+ set_header("HTTP_IF_NONE_MATCH", etag)
58
+ end
59
+
60
+ def remote_addr=(addr)
61
+ set_header("REMOTE_ADDR", addr)
62
+ end
63
+
64
+ def user_agent=(user_agent)
65
+ set_header("HTTP_USER_AGENT", user_agent)
66
+ end
67
+
68
+ def accept=(mime_types)
69
+ delete_header("action_dispatch.request.accepts")
70
+ set_header("HTTP_ACCEPT", Array(mime_types).collect(&:to_s).join(","))
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :markup: markdown
4
+
5
+ require "action_dispatch/testing/request_encoder"
6
+
7
+ module ActionDispatch
8
+ # Integration test methods such as Integration::RequestHelpers#get and
9
+ # Integration::RequestHelpers#post return objects of class TestResponse, which
10
+ # represent the HTTP response results of the requested controller actions.
11
+ #
12
+ # See Response for more information on controller response objects.
13
+ class TestResponse < Response
14
+ def self.from_response(response)
15
+ new response.status, response.headers, response.body
16
+ end
17
+
18
+ # Returns a parsed body depending on the response MIME type. When a parser
19
+ # corresponding to the MIME type is not found, it returns the raw body.
20
+ #
21
+ # #### Examples
22
+ # get "/posts"
23
+ # response.content_type # => "text/html; charset=utf-8"
24
+ # response.parsed_body.class # => Nokogiri::HTML5::Document
25
+ # response.parsed_body.to_html # => "<!DOCTYPE html>\n<html>\n..."
26
+ #
27
+ # assert_pattern { response.parsed_body.at("main") => { content: "Hello, world" } }
28
+ #
29
+ # response.parsed_body.at("main") => {name:, content:}
30
+ # assert_equal "main", name
31
+ # assert_equal "Some main content", content
32
+ #
33
+ # get "/posts.json"
34
+ # response.content_type # => "application/json; charset=utf-8"
35
+ # response.parsed_body.class # => Array
36
+ # response.parsed_body # => [{"id"=>42, "title"=>"Title"},...
37
+ #
38
+ # assert_pattern { response.parsed_body => [{ id: 42 }] }
39
+ #
40
+ # get "/posts/42.json"
41
+ # response.content_type # => "application/json; charset=utf-8"
42
+ # response.parsed_body.class # => ActiveSupport::HashWithIndifferentAccess
43
+ # response.parsed_body # => {"id"=>42, "title"=>"Title"}
44
+ #
45
+ # assert_pattern { response.parsed_body => [{ title: /title/i }] }
46
+ #
47
+ # response.parsed_body => {id:, title:}
48
+ # assert_equal 42, id
49
+ # assert_equal "Title", title
50
+ def parsed_body
51
+ @parsed_body ||= response_parser.call(body)
52
+ end
53
+
54
+ def response_parser
55
+ @response_parser ||= RequestEncoder.parser(media_type)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,147 @@
1
+ # frozen_string_literal: true
2
+
3
+ #--
4
+ # Copyright (c) David Heinemeier Hansson
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+ #++
24
+
25
+ # :markup: markdown
26
+
27
+ require "active_support"
28
+ require "active_support/rails"
29
+ require "active_support/core_ext/module/attribute_accessors"
30
+
31
+ require "action_pack"
32
+ require "rack"
33
+ require "action_dispatch/deprecator"
34
+
35
+ module Rack # :nodoc:
36
+ autoload :Test, "rack/test"
37
+ end
38
+
39
+ # # Action Dispatch
40
+ #
41
+ # Action Dispatch is a module of Action Pack.
42
+ #
43
+ # Action Dispatch parses information about the web request, handles routing as
44
+ # defined by the user, and does advanced processing related to HTTP such as
45
+ # MIME-type negotiation, decoding parameters in POST, PATCH, or PUT bodies,
46
+ # handling HTTP caching logic, cookies and sessions.
47
+ module ActionDispatch
48
+ extend ActiveSupport::Autoload
49
+
50
+ class MissingController < NameError
51
+ end
52
+
53
+ eager_autoload do
54
+ autoload_under "http" do
55
+ autoload :ContentSecurityPolicy
56
+ autoload :PermissionsPolicy
57
+ autoload :Request
58
+ autoload :Response
59
+ end
60
+ end
61
+
62
+ autoload_under "middleware" do
63
+ autoload :AssumeSSL
64
+ autoload :HostAuthorization
65
+ autoload :RequestId
66
+ autoload :Callbacks
67
+ autoload :Cookies
68
+ autoload :ActionableExceptions
69
+ autoload :DebugExceptions
70
+ autoload :DebugLocks
71
+ autoload :DebugView
72
+ autoload :ExceptionWrapper
73
+ autoload :Executor
74
+ autoload :Flash
75
+ autoload :PublicExceptions
76
+ autoload :Reloader
77
+ autoload :RemoteIp
78
+ autoload :ServerTiming
79
+ autoload :ShowExceptions
80
+ autoload :SSL
81
+ autoload :Static
82
+ end
83
+
84
+ autoload :Constants
85
+ autoload :Journey
86
+ autoload :MiddlewareStack, "action_dispatch/middleware/stack"
87
+ autoload :Routing
88
+
89
+ module Http
90
+ extend ActiveSupport::Autoload
91
+
92
+ autoload :Cache
93
+ autoload :Headers
94
+ autoload :MimeNegotiation
95
+ autoload :Parameters
96
+ autoload :UploadedFile, "action_dispatch/http/upload"
97
+ autoload :URL
98
+ end
99
+
100
+ module Session
101
+ autoload :AbstractStore, "action_dispatch/middleware/session/abstract_store"
102
+ autoload :AbstractSecureStore, "action_dispatch/middleware/session/abstract_store"
103
+ autoload :CookieStore, "action_dispatch/middleware/session/cookie_store"
104
+ autoload :MemCacheStore, "action_dispatch/middleware/session/mem_cache_store"
105
+ autoload :CacheStore, "action_dispatch/middleware/session/cache_store"
106
+
107
+ def self.resolve_store(session_store) # :nodoc:
108
+ self.const_get(session_store.to_s.camelize)
109
+ rescue NameError
110
+ raise <<~ERROR
111
+ Unable to resolve session store #{session_store.inspect}.
112
+
113
+ #{session_store.inspect} resolves to ActionDispatch::Session::#{session_store.to_s.camelize},
114
+ but that class is undefined.
115
+
116
+ Is #{session_store.inspect} spelled correctly, and are any necessary gems installed?
117
+ ERROR
118
+ end
119
+ end
120
+
121
+ mattr_accessor :test_app
122
+
123
+ autoload_under "testing" do
124
+ autoload :Assertions
125
+ autoload :Integration
126
+ autoload :IntegrationTest, "action_dispatch/testing/integration"
127
+ autoload :TestProcess
128
+ autoload :TestRequest
129
+ autoload :TestResponse
130
+ autoload :AssertionResponse
131
+ end
132
+
133
+ autoload :SystemTestCase, "action_dispatch/system_test_case"
134
+
135
+ def eager_load!
136
+ super
137
+ Routing.eager_load!
138
+ end
139
+ end
140
+
141
+ autoload :Mime, "action_dispatch/http/mime_type"
142
+
143
+ ActiveSupport.on_load(:action_view) do
144
+ ActionView::Base.default_formats ||= Mime::SET.symbols
145
+ ActionView::Template.mime_types_implementation = Mime
146
+ ActionView::LookupContext::DetailsKey.clear
147
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :markup: markdown
4
+
5
+ module ActionPack
6
+ # Returns the currently loaded version of Action Pack as a `Gem::Version`.
7
+ def self.gem_version
8
+ Gem::Version.new VERSION::STRING
9
+ end
10
+
11
+ module VERSION
12
+ MAJOR = 8
13
+ MINOR = 0
14
+ TINY = 0
15
+ PRE = "alpha1"
16
+
17
+ STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :markup: markdown
4
+
5
+ require_relative "gem_version"
6
+
7
+ module ActionPack
8
+ # Returns the currently loaded version of Action Pack as a `Gem::Version`.
9
+ def self.version
10
+ gem_version
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ #--
4
+ # Copyright (c) David Heinemeier Hansson
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+ #++
24
+
25
+ # :markup: markdown
26
+
27
+ require "action_pack/version"