actionpack 7.2.3 → 8.0.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.

Potentially problematic release.


This version of actionpack might be problematic. Click here for more details.

Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +83 -187
  3. data/README.rdoc +1 -1
  4. data/lib/abstract_controller/base.rb +12 -1
  5. data/lib/abstract_controller/collector.rb +1 -1
  6. data/lib/abstract_controller/helpers.rb +1 -3
  7. data/lib/action_controller/metal/allow_browser.rb +1 -1
  8. data/lib/action_controller/metal/conditional_get.rb +5 -1
  9. data/lib/action_controller/metal/http_authentication.rb +4 -1
  10. data/lib/action_controller/metal/instrumentation.rb +1 -2
  11. data/lib/action_controller/metal/live.rb +11 -3
  12. data/lib/action_controller/metal/params_wrapper.rb +3 -3
  13. data/lib/action_controller/metal/rate_limiting.rb +13 -4
  14. data/lib/action_controller/metal/redirecting.rb +3 -4
  15. data/lib/action_controller/metal/renderers.rb +2 -1
  16. data/lib/action_controller/metal/rendering.rb +1 -1
  17. data/lib/action_controller/metal/request_forgery_protection.rb +1 -3
  18. data/lib/action_controller/metal/streaming.rb +5 -84
  19. data/lib/action_controller/metal/strong_parameters.rb +277 -73
  20. data/lib/action_controller/railtie.rb +1 -1
  21. data/lib/action_controller/renderer.rb +1 -0
  22. data/lib/action_controller/test_case.rb +2 -0
  23. data/lib/action_dispatch/constants.rb +0 -6
  24. data/lib/action_dispatch/http/cache.rb +27 -10
  25. data/lib/action_dispatch/http/content_security_policy.rb +13 -25
  26. data/lib/action_dispatch/http/filter_parameters.rb +4 -9
  27. data/lib/action_dispatch/http/filter_redirect.rb +2 -9
  28. data/lib/action_dispatch/http/mime_negotiation.rb +3 -8
  29. data/lib/action_dispatch/http/permissions_policy.rb +2 -0
  30. data/lib/action_dispatch/http/request.rb +7 -6
  31. data/lib/action_dispatch/http/response.rb +1 -15
  32. data/lib/action_dispatch/http/url.rb +2 -2
  33. data/lib/action_dispatch/journey/formatter.rb +3 -8
  34. data/lib/action_dispatch/journey/gtg/transition_table.rb +4 -4
  35. data/lib/action_dispatch/journey/parser.rb +99 -196
  36. data/lib/action_dispatch/journey/scanner.rb +40 -42
  37. data/lib/action_dispatch/middleware/cookies.rb +4 -2
  38. data/lib/action_dispatch/middleware/debug_exceptions.rb +17 -6
  39. data/lib/action_dispatch/middleware/exception_wrapper.rb +3 -3
  40. data/lib/action_dispatch/middleware/executor.rb +2 -5
  41. data/lib/action_dispatch/middleware/public_exceptions.rb +1 -5
  42. data/lib/action_dispatch/middleware/request_id.rb +2 -1
  43. data/lib/action_dispatch/middleware/ssl.rb +13 -3
  44. data/lib/action_dispatch/railtie.rb +2 -0
  45. data/lib/action_dispatch/routing/inspector.rb +1 -1
  46. data/lib/action_dispatch/routing/mapper.rb +30 -22
  47. data/lib/action_dispatch/routing/route_set.rb +18 -6
  48. data/lib/action_dispatch/system_testing/browser.rb +12 -21
  49. data/lib/action_dispatch/testing/assertion_response.rb +1 -1
  50. data/lib/action_dispatch/testing/integration.rb +3 -2
  51. data/lib/action_dispatch/testing/request_encoder.rb +9 -9
  52. data/lib/action_dispatch/testing/test_process.rb +2 -1
  53. data/lib/action_dispatch.rb +0 -4
  54. data/lib/action_pack/gem_version.rb +4 -4
  55. metadata +16 -49
  56. data/lib/action_dispatch/journey/parser.y +0 -50
  57. data/lib/action_dispatch/journey/parser_extras.rb +0 -33
@@ -470,7 +470,6 @@ module ActionDispatch
470
470
  # When a pattern points to an internal route, the route's `:action` and
471
471
  # `:controller` should be set in options or hash shorthand. Examples:
472
472
  #
473
- # match 'photos/:id' => 'photos#show', via: :get
474
473
  # match 'photos/:id', to: 'photos#show', via: :get
475
474
  # match 'photos/:id', controller: 'photos', action: 'show', via: :get
476
475
  #
@@ -614,10 +613,6 @@ module ActionDispatch
614
613
  #
615
614
  # mount SomeRackApp, at: "some_route"
616
615
  #
617
- # Alternatively:
618
- #
619
- # mount(SomeRackApp => "some_route")
620
- #
621
616
  # For options, see `match`, as `mount` uses it internally.
622
617
  #
623
618
  # All mounted applications come with routing helpers to access them. These are
@@ -625,7 +620,7 @@ module ActionDispatch
625
620
  # `some_rack_app_path` or `some_rack_app_url`. To customize this helper's name,
626
621
  # use the `:as` option:
627
622
  #
628
- # mount(SomeRackApp => "some_route", as: "exciting")
623
+ # mount(SomeRackApp, at: "some_route", as: "exciting")
629
624
  #
630
625
  # This will generate the `exciting_path` and `exciting_url` helpers which can be
631
626
  # used to navigate to this mounted app.
@@ -773,6 +768,16 @@ module ActionDispatch
773
768
  map_method(:options, args, &block)
774
769
  end
775
770
 
771
+ # Define a route that recognizes HTTP CONNECT (and GET) requests. More
772
+ # specifically this recognizes HTTP/1 protocol upgrade requests and HTTP/2
773
+ # CONNECT requests with the protocol pseudo header. For supported arguments,
774
+ # see [match](rdoc-ref:Base#match)
775
+ #
776
+ # connect 'live', to: 'live#index'
777
+ def connect(*args, &block)
778
+ map_method([:get, :connect], args, &block)
779
+ end
780
+
776
781
  private
777
782
  def map_method(method, args, &block)
778
783
  options = args.extract_options!
@@ -852,7 +857,7 @@ module ActionDispatch
852
857
  #
853
858
  # Takes same options as `Base#match` and `Resources#resources`.
854
859
  #
855
- # # route /posts (without the prefix /admin) to Admin::PostsController
860
+ # # route /posts (without the prefix /admin) to +Admin::PostsController+
856
861
  # scope module: "admin" do
857
862
  # resources :posts
858
863
  # end
@@ -862,7 +867,7 @@ module ActionDispatch
862
867
  # resources :posts
863
868
  # end
864
869
  #
865
- # # prefix the routing helper name: sekret_posts_path instead of posts_path
870
+ # # prefix the routing helper name: +sekret_posts_path+ instead of +posts_path+
866
871
  # scope as: "sekret" do
867
872
  # resources :posts
868
873
  # end
@@ -961,12 +966,12 @@ module ActionDispatch
961
966
  # resources :posts
962
967
  # end
963
968
  #
964
- # # maps to Sekret::PostsController rather than Admin::PostsController
969
+ # # maps to +Sekret::PostsController+ rather than +Admin::PostsController+
965
970
  # namespace :admin, module: "sekret" do
966
971
  # resources :posts
967
972
  # end
968
973
  #
969
- # # generates sekret_posts_path rather than admin_posts_path
974
+ # # generates +sekret_posts_path+ rather than +admin_posts_path+
970
975
  # namespace :admin, as: "sekret" do
971
976
  # resources :posts
972
977
  # end
@@ -1499,7 +1504,7 @@ module ActionDispatch
1499
1504
  #
1500
1505
  # ### Examples
1501
1506
  #
1502
- # # routes call Admin::PostsController
1507
+ # # routes call +Admin::PostsController+
1503
1508
  # resources :posts, module: "admin"
1504
1509
  #
1505
1510
  # # resource actions are at /admin/posts.
@@ -1673,7 +1678,6 @@ module ActionDispatch
1673
1678
  # Matches a URL pattern to one or more routes. For more information, see
1674
1679
  # [match](rdoc-ref:Base#match).
1675
1680
  #
1676
- # match 'path' => 'controller#action', via: :patch
1677
1681
  # match 'path', to: 'controller#action', via: :post
1678
1682
  # match 'path', 'otherpath', on: :member, via: :get
1679
1683
  def match(path, *rest, &block)
@@ -1935,6 +1939,11 @@ module ActionDispatch
1935
1939
  end
1936
1940
 
1937
1941
  def map_match(paths, options)
1942
+ ActionDispatch.deprecator.warn(<<-MSG.squish) if paths.count > 1
1943
+ Mapping a route with multiple paths is deprecated and
1944
+ will be removed in Rails 8.1. Please use multiple method calls instead.
1945
+ MSG
1946
+
1938
1947
  if (on = options[:on]) && !VALID_ON_OPTIONS.include?(on)
1939
1948
  raise ArgumentError, "Unknown scope #{on.inspect} given to :on"
1940
1949
  end
@@ -2025,7 +2034,7 @@ module ActionDispatch
2025
2034
  name_for_action(options.delete(:as), action)
2026
2035
  end
2027
2036
 
2028
- path = Mapping.normalize_path RFC2396_PARSER.escape(path), formatted
2037
+ path = Mapping.normalize_path URI::RFC2396_PARSER.escape(path), formatted
2029
2038
  ast = Journey::Parser.parse path
2030
2039
 
2031
2040
  mapping = Mapping.build(@scope, @set, ast, controller, default_action, to, via, formatted, options_constraints, anchor, options)
@@ -2267,9 +2276,9 @@ module ActionDispatch
2267
2276
 
2268
2277
  attr_reader :parent, :scope_level
2269
2278
 
2270
- def initialize(hash, parent = NULL, scope_level = nil)
2271
- @hash = hash
2279
+ def initialize(hash, parent = ROOT, scope_level = nil)
2272
2280
  @parent = parent
2281
+ @hash = parent ? parent.frame.merge(hash) : hash
2273
2282
  @scope_level = scope_level
2274
2283
  end
2275
2284
 
@@ -2282,7 +2291,7 @@ module ActionDispatch
2282
2291
  end
2283
2292
 
2284
2293
  def root?
2285
- @parent.null?
2294
+ @parent == ROOT
2286
2295
  end
2287
2296
 
2288
2297
  def resources?
@@ -2327,23 +2336,22 @@ module ActionDispatch
2327
2336
  end
2328
2337
 
2329
2338
  def [](key)
2330
- scope = find { |node| node.frame.key? key }
2331
- scope && scope.frame[key]
2339
+ frame[key]
2332
2340
  end
2333
2341
 
2342
+ def frame; @hash; end
2343
+
2334
2344
  include Enumerable
2335
2345
 
2336
2346
  def each
2337
2347
  node = self
2338
- until node.equal? NULL
2348
+ until node.equal? ROOT
2339
2349
  yield node
2340
2350
  node = node.parent
2341
2351
  end
2342
2352
  end
2343
2353
 
2344
- def frame; @hash; end
2345
-
2346
- NULL = Scope.new(nil, nil)
2354
+ ROOT = Scope.new({}, nil)
2347
2355
  end
2348
2356
 
2349
2357
  def initialize(set) # :nodoc:
@@ -351,7 +351,7 @@ module ActionDispatch
351
351
  PATH = ->(options) { ActionDispatch::Http::URL.path_for(options) }
352
352
  UNKNOWN = ->(options) { ActionDispatch::Http::URL.url_for(options) }
353
353
 
354
- attr_accessor :formatter, :set, :named_routes, :default_scope, :router
354
+ attr_accessor :formatter, :set, :named_routes, :router
355
355
  attr_accessor :disable_clear_and_finalize, :resources_path_names
356
356
  attr_accessor :default_url_options, :draw_paths
357
357
  attr_reader :env_key, :polymorphic_mappings
@@ -363,7 +363,7 @@ module ActionDispatch
363
363
  end
364
364
 
365
365
  def self.new_with_config(config)
366
- route_set_config = DEFAULT_CONFIG
366
+ route_set_config = DEFAULT_CONFIG.dup
367
367
 
368
368
  # engines apparently don't have this set
369
369
  if config.respond_to? :relative_url_root
@@ -374,14 +374,18 @@ module ActionDispatch
374
374
  route_set_config.api_only = config.api_only
375
375
  end
376
376
 
377
+ if config.respond_to? :default_scope
378
+ route_set_config.default_scope = config.default_scope
379
+ end
380
+
377
381
  new route_set_config
378
382
  end
379
383
 
380
- Config = Struct.new :relative_url_root, :api_only
384
+ Config = Struct.new :relative_url_root, :api_only, :default_scope
381
385
 
382
- DEFAULT_CONFIG = Config.new(nil, false)
386
+ DEFAULT_CONFIG = Config.new(nil, false, nil)
383
387
 
384
- def initialize(config = DEFAULT_CONFIG)
388
+ def initialize(config = DEFAULT_CONFIG.dup)
385
389
  self.named_routes = NamedRouteCollection.new
386
390
  self.resources_path_names = self.class.default_resources_path_names
387
391
  self.default_url_options = {}
@@ -416,6 +420,14 @@ module ActionDispatch
416
420
  @config.api_only
417
421
  end
418
422
 
423
+ def default_scope
424
+ @config.default_scope
425
+ end
426
+
427
+ def default_scope=(new_default_scope)
428
+ @config.default_scope = new_default_scope
429
+ end
430
+
419
431
  def request_class
420
432
  ActionDispatch::Request
421
433
  end
@@ -917,7 +929,7 @@ module ActionDispatch
917
929
  params.each do |key, value|
918
930
  if value.is_a?(String)
919
931
  value = value.dup.force_encoding(Encoding::BINARY)
920
- params[key] = RFC2396_PARSER.unescape(value)
932
+ params[key] = URI::RFC2396_PARSER.unescape(value)
921
933
  end
922
934
  end
923
935
  req.path_parameters = params
@@ -9,7 +9,6 @@ module ActionDispatch
9
9
 
10
10
  def initialize(name)
11
11
  @name = name
12
- set_default_options
13
12
  end
14
13
 
15
14
  def type
@@ -27,9 +26,9 @@ module ActionDispatch
27
26
  @options ||=
28
27
  case type
29
28
  when :chrome
30
- ::Selenium::WebDriver::Chrome::Options.new
29
+ default_chrome_options
31
30
  when :firefox
32
- ::Selenium::WebDriver::Firefox::Options.new
31
+ default_firefox_options
33
32
  end
34
33
  end
35
34
 
@@ -49,26 +48,18 @@ module ActionDispatch
49
48
  end
50
49
 
51
50
  private
52
- def set_default_options
53
- case name
54
- when :headless_chrome
55
- set_headless_chrome_browser_options
56
- when :headless_firefox
57
- set_headless_firefox_browser_options
58
- end
51
+ def default_chrome_options
52
+ options = ::Selenium::WebDriver::Chrome::Options.new
53
+ options.add_argument("--disable-search-engine-choice-screen")
54
+ options.add_argument("--headless") if name == :headless_chrome
55
+ options.add_argument("--disable-gpu") if Gem.win_platform?
56
+ options
59
57
  end
60
58
 
61
- def set_headless_chrome_browser_options
62
- configure do |capabilities|
63
- capabilities.add_argument("--headless")
64
- capabilities.add_argument("--disable-gpu") if Gem.win_platform?
65
- end
66
- end
67
-
68
- def set_headless_firefox_browser_options
69
- configure do |capabilities|
70
- capabilities.add_argument("-headless")
71
- end
59
+ def default_firefox_options
60
+ options = ::Selenium::WebDriver::Firefox::Options.new
61
+ options.add_argument("-headless") if name == :headless_firefox
62
+ options
72
63
  end
73
64
 
74
65
  def resolve_driver_path(namespace)
@@ -38,7 +38,7 @@ module ActionDispatch
38
38
 
39
39
  private
40
40
  def code_from_name(name)
41
- GENERIC_RESPONSE_CODES[name] || ActionDispatch::Response.rack_status_code(name)
41
+ GENERIC_RESPONSE_CODES[name] || Rack::Utils.status_code(name)
42
42
  end
43
43
 
44
44
  def name_from_code(code)
@@ -594,8 +594,9 @@ module ActionDispatch
594
594
  # end
595
595
  # end
596
596
  #
597
- # See the [request helpers documentation](rdoc-ref:ActionDispatch::Integration::RequestHelpers)
598
- # for help on how to use `get`, etc.
597
+ # See the [request helpers documentation]
598
+ # (rdoc-ref:ActionDispatch::Integration::RequestHelpers) for help
599
+ # on how to use `get`, etc.
599
600
  #
600
601
  # ### Changing the request encoding
601
602
  #
@@ -3,7 +3,6 @@
3
3
  # :markup: markdown
4
4
 
5
5
  require "nokogiri"
6
- require "action_dispatch/http/mime_type"
7
6
 
8
7
  module ActionDispatch
9
8
  class RequestEncoder # :nodoc:
@@ -16,9 +15,9 @@ module ActionDispatch
16
15
 
17
16
  @encoders = { identity: IdentityEncoder.new }
18
17
 
19
- attr_reader :response_parser, :content_type
18
+ attr_reader :response_parser
20
19
 
21
- def initialize(mime_name, param_encoder, response_parser, content_type)
20
+ def initialize(mime_name, param_encoder, response_parser)
22
21
  @mime = Mime[mime_name]
23
22
 
24
23
  unless @mime
@@ -28,7 +27,10 @@ module ActionDispatch
28
27
 
29
28
  @response_parser = response_parser || -> body { body }
30
29
  @param_encoder = param_encoder || :"to_#{@mime.symbol}".to_proc
31
- @content_type = content_type || @mime.to_s
30
+ end
31
+
32
+ def content_type
33
+ @mime.to_s
32
34
  end
33
35
 
34
36
  def accept_header
@@ -48,13 +50,11 @@ module ActionDispatch
48
50
  @encoders[name] || @encoders[:identity]
49
51
  end
50
52
 
51
- def self.register_encoder(mime_name, param_encoder: nil, response_parser: nil, content_type: nil)
52
- @encoders[mime_name] = new(mime_name, param_encoder, response_parser, content_type)
53
+ def self.register_encoder(mime_name, param_encoder: nil, response_parser: nil)
54
+ @encoders[mime_name] = new(mime_name, param_encoder, response_parser)
53
55
  end
54
56
 
55
- register_encoder :html, response_parser: -> body { Rails::Dom::Testing.html_document.parse(body) },
56
- param_encoder: -> param { param },
57
- content_type: Mime[:url_encoded_form].to_s
57
+ register_encoder :html, response_parser: -> body { Rails::Dom::Testing.html_document.parse(body) }
58
58
  register_encoder :json, response_parser: -> body { JSON.parse(body, object_class: ActiveSupport::HashWithIndifferentAccess) }
59
59
  end
60
60
  end
@@ -9,7 +9,8 @@ module ActionDispatch
9
9
  module TestProcess
10
10
  module FixtureFile
11
11
  # Shortcut for
12
- # `Rack::Test::UploadedFile.new(File.join(ActionDispatch::IntegrationTest.file_fixture_path, path), type)`:
12
+ # `Rack::Test::UploadedFile.new(File.join(ActionDispatch::IntegrationTest.file_f
13
+ # ixture_path, path), type)`:
13
14
  #
14
15
  # post :change_avatar, params: { avatar: file_fixture_upload('david.png', 'image/png') }
15
16
  #
@@ -30,7 +30,6 @@ require "active_support/core_ext/module/attribute_accessors"
30
30
 
31
31
  require "action_pack"
32
32
  require "rack"
33
- require "uri"
34
33
  require "action_dispatch/deprecator"
35
34
 
36
35
  module Rack # :nodoc:
@@ -48,9 +47,6 @@ end
48
47
  module ActionDispatch
49
48
  extend ActiveSupport::Autoload
50
49
 
51
- RFC2396_PARSER = defined?(URI::RFC2396_PARSER) ? URI::RFC2396_PARSER : URI::RFC2396_Parser.new
52
- private_constant :RFC2396_PARSER
53
-
54
50
  class MissingController < NameError
55
51
  end
56
52
 
@@ -9,10 +9,10 @@ module ActionPack
9
9
  end
10
10
 
11
11
  module VERSION
12
- MAJOR = 7
13
- MINOR = 2
14
- TINY = 3
15
- PRE = nil
12
+ MAJOR = 8
13
+ MINOR = 0
14
+ TINY = 0
15
+ PRE = "beta1"
16
16
 
17
17
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
18
18
  end
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actionpack
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.2.3
4
+ version: 8.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
+ date: 2024-09-26 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: activesupport
@@ -15,28 +16,14 @@ dependencies:
15
16
  requirements:
16
17
  - - '='
17
18
  - !ruby/object:Gem::Version
18
- version: 7.2.3
19
+ version: 8.0.0.beta1
19
20
  type: :runtime
20
21
  prerelease: false
21
22
  version_requirements: !ruby/object:Gem::Requirement
22
23
  requirements:
23
24
  - - '='
24
25
  - !ruby/object:Gem::Version
25
- version: 7.2.3
26
- - !ruby/object:Gem::Dependency
27
- name: cgi
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: '0'
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- version: '0'
26
+ version: 8.0.0.beta1
40
27
  - !ruby/object:Gem::Dependency
41
28
  name: nokogiri
42
29
  requirement: !ruby/object:Gem::Requirement
@@ -51,20 +38,6 @@ dependencies:
51
38
  - - ">="
52
39
  - !ruby/object:Gem::Version
53
40
  version: 1.8.5
54
- - !ruby/object:Gem::Dependency
55
- name: racc
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: '0'
61
- type: :runtime
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
41
  - !ruby/object:Gem::Dependency
69
42
  name: rack
70
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,9 +45,6 @@ dependencies:
72
45
  - - ">="
73
46
  - !ruby/object:Gem::Version
74
47
  version: 2.2.4
75
- - - "<"
76
- - !ruby/object:Gem::Version
77
- version: '3.3'
78
48
  type: :runtime
79
49
  prerelease: false
80
50
  version_requirements: !ruby/object:Gem::Requirement
@@ -82,9 +52,6 @@ dependencies:
82
52
  - - ">="
83
53
  - !ruby/object:Gem::Version
84
54
  version: 2.2.4
85
- - - "<"
86
- - !ruby/object:Gem::Version
87
- version: '3.3'
88
55
  - !ruby/object:Gem::Dependency
89
56
  name: rack-session
90
57
  requirement: !ruby/object:Gem::Requirement
@@ -161,28 +128,28 @@ dependencies:
161
128
  requirements:
162
129
  - - '='
163
130
  - !ruby/object:Gem::Version
164
- version: 7.2.3
131
+ version: 8.0.0.beta1
165
132
  type: :runtime
166
133
  prerelease: false
167
134
  version_requirements: !ruby/object:Gem::Requirement
168
135
  requirements:
169
136
  - - '='
170
137
  - !ruby/object:Gem::Version
171
- version: 7.2.3
138
+ version: 8.0.0.beta1
172
139
  - !ruby/object:Gem::Dependency
173
140
  name: activemodel
174
141
  requirement: !ruby/object:Gem::Requirement
175
142
  requirements:
176
143
  - - '='
177
144
  - !ruby/object:Gem::Version
178
- version: 7.2.3
145
+ version: 8.0.0.beta1
179
146
  type: :development
180
147
  prerelease: false
181
148
  version_requirements: !ruby/object:Gem::Requirement
182
149
  requirements:
183
150
  - - '='
184
151
  - !ruby/object:Gem::Version
185
- version: 7.2.3
152
+ version: 8.0.0.beta1
186
153
  description: Web apps on Rails. Simple, battle-tested conventions for building and
187
154
  testing MVC web applications. Works with any Rack-compatible server.
188
155
  email: david@loudthinking.com
@@ -281,8 +248,6 @@ files:
281
248
  - lib/action_dispatch/journey/nfa/dot.rb
282
249
  - lib/action_dispatch/journey/nodes/node.rb
283
250
  - lib/action_dispatch/journey/parser.rb
284
- - lib/action_dispatch/journey/parser.y
285
- - lib/action_dispatch/journey/parser_extras.rb
286
251
  - lib/action_dispatch/journey/path/pattern.rb
287
252
  - lib/action_dispatch/journey/route.rb
288
253
  - lib/action_dispatch/journey/router.rb
@@ -382,11 +347,12 @@ licenses:
382
347
  - MIT
383
348
  metadata:
384
349
  bug_tracker_uri: https://github.com/rails/rails/issues
385
- changelog_uri: https://github.com/rails/rails/blob/v7.2.3/actionpack/CHANGELOG.md
386
- documentation_uri: https://api.rubyonrails.org/v7.2.3/
350
+ changelog_uri: https://github.com/rails/rails/blob/v8.0.0.beta1/actionpack/CHANGELOG.md
351
+ documentation_uri: https://api.rubyonrails.org/v8.0.0.beta1/
387
352
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
388
- source_code_uri: https://github.com/rails/rails/tree/v7.2.3/actionpack
353
+ source_code_uri: https://github.com/rails/rails/tree/v8.0.0.beta1/actionpack
389
354
  rubygems_mfa_required: 'true'
355
+ post_install_message:
390
356
  rdoc_options: []
391
357
  require_paths:
392
358
  - lib
@@ -394,7 +360,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
394
360
  requirements:
395
361
  - - ">="
396
362
  - !ruby/object:Gem::Version
397
- version: 3.1.0
363
+ version: 3.2.0
398
364
  required_rubygems_version: !ruby/object:Gem::Requirement
399
365
  requirements:
400
366
  - - ">="
@@ -402,7 +368,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
402
368
  version: '0'
403
369
  requirements:
404
370
  - none
405
- rubygems_version: 3.6.9
371
+ rubygems_version: 3.5.16
372
+ signing_key:
406
373
  specification_version: 4
407
374
  summary: Web-flow and rendering framework putting the VC in MVC (part of Rails).
408
375
  test_files: []
@@ -1,50 +0,0 @@
1
- class ActionDispatch::Journey::Parser
2
- options no_result_var
3
- token SLASH LITERAL SYMBOL LPAREN RPAREN DOT STAR OR
4
-
5
- rule
6
- expressions
7
- : expression expressions { Cat.new(val.first, val.last) }
8
- | expression { val.first }
9
- | or
10
- ;
11
- expression
12
- : terminal
13
- | group
14
- | star
15
- ;
16
- group
17
- : LPAREN expressions RPAREN { Group.new(val[1]) }
18
- ;
19
- or
20
- : expression OR expression { Or.new([val.first, val.last]) }
21
- | expression OR or { Or.new([val.first, val.last]) }
22
- ;
23
- star
24
- : STAR { Star.new(Symbol.new(val.last, Symbol::GREEDY_EXP)) }
25
- ;
26
- terminal
27
- : symbol
28
- | literal
29
- | slash
30
- | dot
31
- ;
32
- slash
33
- : SLASH { Slash.new(val.first) }
34
- ;
35
- symbol
36
- : SYMBOL { Symbol.new(val.first) }
37
- ;
38
- literal
39
- : LITERAL { Literal.new(val.first) }
40
- ;
41
- dot
42
- : DOT { Dot.new(val.first) }
43
- ;
44
-
45
- end
46
-
47
- ---- header
48
- # :stopdoc:
49
-
50
- require "action_dispatch/journey/parser_extras"
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # :markup: markdown
4
-
5
- require "action_dispatch/journey/scanner"
6
- require "action_dispatch/journey/nodes/node"
7
-
8
- module ActionDispatch
9
- # :stopdoc:
10
- module Journey
11
- class Parser < Racc::Parser
12
- include Journey::Nodes
13
-
14
- def self.parse(string)
15
- new.parse string
16
- end
17
-
18
- def initialize
19
- @scanner = Scanner.new
20
- end
21
-
22
- def parse(string)
23
- @scanner.scan_setup(string)
24
- do_parse
25
- end
26
-
27
- def next_token
28
- @scanner.next_token
29
- end
30
- end
31
- end
32
- # :startdoc:
33
- end