actionpack 4.2.10 → 7.2.0.rc1

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 (202) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +86 -600
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +13 -14
  5. data/lib/abstract_controller/asset_paths.rb +5 -1
  6. data/lib/abstract_controller/base.rb +166 -136
  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 +126 -57
  10. data/lib/abstract_controller/collector.rb +13 -15
  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 +181 -132
  14. data/lib/abstract_controller/logger.rb +5 -1
  15. data/lib/abstract_controller/railties/routes_helpers.rb +10 -3
  16. data/lib/abstract_controller/rendering.rb +56 -56
  17. data/lib/abstract_controller/translation.rb +29 -15
  18. data/lib/abstract_controller/url_for.rb +15 -11
  19. data/lib/abstract_controller.rb +21 -5
  20. data/lib/action_controller/api/api_rendering.rb +18 -0
  21. data/lib/action_controller/api.rb +154 -0
  22. data/lib/action_controller/base.rb +219 -155
  23. data/lib/action_controller/caching.rb +28 -68
  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 +35 -22
  27. data/lib/action_controller/metal/allow_browser.rb +119 -0
  28. data/lib/action_controller/metal/basic_implicit_render.rb +17 -0
  29. data/lib/action_controller/metal/conditional_get.rb +259 -122
  30. data/lib/action_controller/metal/content_security_policy.rb +86 -0
  31. data/lib/action_controller/metal/cookies.rb +9 -5
  32. data/lib/action_controller/metal/data_streaming.rb +87 -104
  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 +35 -26
  36. data/lib/action_controller/metal/exceptions.rb +71 -24
  37. data/lib/action_controller/metal/flash.rb +26 -19
  38. data/lib/action_controller/metal/head.rb +45 -36
  39. data/lib/action_controller/metal/helpers.rb +80 -64
  40. data/lib/action_controller/metal/http_authentication.rb +297 -244
  41. data/lib/action_controller/metal/implicit_render.rb +57 -9
  42. data/lib/action_controller/metal/instrumentation.rb +76 -64
  43. data/lib/action_controller/metal/live.rb +238 -176
  44. data/lib/action_controller/metal/logging.rb +22 -0
  45. data/lib/action_controller/metal/mime_responds.rb +177 -166
  46. data/lib/action_controller/metal/parameter_encoding.rb +84 -0
  47. data/lib/action_controller/metal/params_wrapper.rb +145 -118
  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 +203 -64
  51. data/lib/action_controller/metal/renderers.rb +108 -65
  52. data/lib/action_controller/metal/rendering.rb +216 -56
  53. data/lib/action_controller/metal/request_forgery_protection.rb +496 -163
  54. data/lib/action_controller/metal/rescue.rb +19 -21
  55. data/lib/action_controller/metal/streaming.rb +179 -138
  56. data/lib/action_controller/metal/strong_parameters.rb +1058 -382
  57. data/lib/action_controller/metal/testing.rb +11 -17
  58. data/lib/action_controller/metal/url_for.rb +37 -21
  59. data/lib/action_controller/metal.rb +236 -138
  60. data/lib/action_controller/railtie.rb +89 -11
  61. data/lib/action_controller/railties/helpers.rb +5 -1
  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 +425 -497
  65. data/lib/action_controller.rb +44 -22
  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 +119 -63
  69. data/lib/action_dispatch/http/content_disposition.rb +47 -0
  70. data/lib/action_dispatch/http/content_security_policy.rb +364 -0
  71. data/lib/action_dispatch/http/filter_parameters.rb +36 -34
  72. data/lib/action_dispatch/http/filter_redirect.rb +24 -12
  73. data/lib/action_dispatch/http/headers.rb +66 -31
  74. data/lib/action_dispatch/http/mime_negotiation.rb +106 -75
  75. data/lib/action_dispatch/http/mime_type.rb +196 -136
  76. data/lib/action_dispatch/http/mime_types.rb +25 -7
  77. data/lib/action_dispatch/http/parameters.rb +97 -45
  78. data/lib/action_dispatch/http/permissions_policy.rb +187 -0
  79. data/lib/action_dispatch/http/rack_cache.rb +6 -0
  80. data/lib/action_dispatch/http/request.rb +299 -170
  81. data/lib/action_dispatch/http/response.rb +311 -160
  82. data/lib/action_dispatch/http/upload.rb +52 -23
  83. data/lib/action_dispatch/http/url.rb +201 -125
  84. data/lib/action_dispatch/journey/formatter.rb +110 -50
  85. data/lib/action_dispatch/journey/gtg/builder.rb +37 -50
  86. data/lib/action_dispatch/journey/gtg/simulator.rb +20 -17
  87. data/lib/action_dispatch/journey/gtg/transition_table.rb +96 -36
  88. data/lib/action_dispatch/journey/nfa/dot.rb +5 -14
  89. data/lib/action_dispatch/journey/nodes/node.rb +100 -20
  90. data/lib/action_dispatch/journey/parser.rb +19 -17
  91. data/lib/action_dispatch/journey/parser.y +4 -3
  92. data/lib/action_dispatch/journey/parser_extras.rb +14 -4
  93. data/lib/action_dispatch/journey/path/pattern.rb +79 -63
  94. data/lib/action_dispatch/journey/route.rb +108 -44
  95. data/lib/action_dispatch/journey/router/utils.rb +41 -29
  96. data/lib/action_dispatch/journey/router.rb +64 -57
  97. data/lib/action_dispatch/journey/routes.rb +23 -21
  98. data/lib/action_dispatch/journey/scanner.rb +28 -17
  99. data/lib/action_dispatch/journey/visitors.rb +100 -54
  100. data/lib/action_dispatch/journey/visualizer/fsm.js +49 -24
  101. data/lib/action_dispatch/journey/visualizer/index.html.erb +1 -1
  102. data/lib/action_dispatch/journey.rb +7 -5
  103. data/lib/action_dispatch/log_subscriber.rb +25 -0
  104. data/lib/action_dispatch/middleware/actionable_exceptions.rb +46 -0
  105. data/lib/action_dispatch/middleware/assume_ssl.rb +27 -0
  106. data/lib/action_dispatch/middleware/callbacks.rb +7 -6
  107. data/lib/action_dispatch/middleware/cookies.rb +471 -328
  108. data/lib/action_dispatch/middleware/debug_exceptions.rb +149 -66
  109. data/lib/action_dispatch/middleware/debug_locks.rb +129 -0
  110. data/lib/action_dispatch/middleware/debug_view.rb +73 -0
  111. data/lib/action_dispatch/middleware/exception_wrapper.rb +275 -73
  112. data/lib/action_dispatch/middleware/executor.rb +32 -0
  113. data/lib/action_dispatch/middleware/flash.rb +143 -101
  114. data/lib/action_dispatch/middleware/host_authorization.rb +171 -0
  115. data/lib/action_dispatch/middleware/public_exceptions.rb +36 -27
  116. data/lib/action_dispatch/middleware/reloader.rb +10 -92
  117. data/lib/action_dispatch/middleware/remote_ip.rb +133 -107
  118. data/lib/action_dispatch/middleware/request_id.rb +29 -15
  119. data/lib/action_dispatch/middleware/server_timing.rb +78 -0
  120. data/lib/action_dispatch/middleware/session/abstract_store.rb +49 -27
  121. data/lib/action_dispatch/middleware/session/cache_store.rb +33 -16
  122. data/lib/action_dispatch/middleware/session/cookie_store.rb +86 -80
  123. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +15 -3
  124. data/lib/action_dispatch/middleware/show_exceptions.rb +66 -36
  125. data/lib/action_dispatch/middleware/ssl.rb +134 -36
  126. data/lib/action_dispatch/middleware/stack.rb +109 -44
  127. data/lib/action_dispatch/middleware/static.rb +159 -90
  128. data/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb +13 -0
  129. data/lib/action_dispatch/middleware/templates/rescues/_actions.text.erb +0 -0
  130. data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +22 -0
  131. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +7 -24
  132. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +1 -1
  133. data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +36 -0
  134. data/lib/action_dispatch/middleware/templates/rescues/_source.text.erb +8 -0
  135. data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +46 -36
  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 +26 -7
  139. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +3 -3
  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 +139 -15
  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 +6 -6
  146. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +7 -7
  147. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +9 -9
  148. data/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +1 -1
  149. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +4 -4
  150. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +1 -1
  151. data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +7 -4
  152. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +125 -93
  153. data/lib/action_dispatch/railtie.rb +44 -16
  154. data/lib/action_dispatch/request/session.rb +159 -69
  155. data/lib/action_dispatch/request/utils.rb +97 -23
  156. data/lib/action_dispatch/routing/endpoint.rb +11 -2
  157. data/lib/action_dispatch/routing/inspector.rb +195 -106
  158. data/lib/action_dispatch/routing/mapper.rb +1338 -955
  159. data/lib/action_dispatch/routing/polymorphic_routes.rb +234 -201
  160. data/lib/action_dispatch/routing/redirection.rb +78 -51
  161. data/lib/action_dispatch/routing/route_set.rb +460 -374
  162. data/lib/action_dispatch/routing/routes_proxy.rb +36 -12
  163. data/lib/action_dispatch/routing/url_for.rb +172 -124
  164. data/lib/action_dispatch/routing.rb +159 -158
  165. data/lib/action_dispatch/system_test_case.rb +206 -0
  166. data/lib/action_dispatch/system_testing/browser.rb +84 -0
  167. data/lib/action_dispatch/system_testing/driver.rb +85 -0
  168. data/lib/action_dispatch/system_testing/server.rb +33 -0
  169. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +164 -0
  170. data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +23 -0
  171. data/lib/action_dispatch/testing/assertion_response.rb +48 -0
  172. data/lib/action_dispatch/testing/assertions/response.rb +71 -39
  173. data/lib/action_dispatch/testing/assertions/routing.rb +228 -103
  174. data/lib/action_dispatch/testing/assertions.rb +9 -6
  175. data/lib/action_dispatch/testing/integration.rb +486 -306
  176. data/lib/action_dispatch/testing/request_encoder.rb +60 -0
  177. data/lib/action_dispatch/testing/test_helpers/page_dump_helper.rb +35 -0
  178. data/lib/action_dispatch/testing/test_process.rb +35 -22
  179. data/lib/action_dispatch/testing/test_request.rb +29 -34
  180. data/lib/action_dispatch/testing/test_response.rb +48 -15
  181. data/lib/action_dispatch.rb +82 -40
  182. data/lib/action_pack/gem_version.rb +8 -4
  183. data/lib/action_pack/version.rb +6 -2
  184. data/lib/action_pack.rb +21 -18
  185. metadata +146 -56
  186. data/lib/action_controller/caching/fragments.rb +0 -103
  187. data/lib/action_controller/metal/force_ssl.rb +0 -97
  188. data/lib/action_controller/metal/hide_actions.rb +0 -40
  189. data/lib/action_controller/metal/rack_delegation.rb +0 -32
  190. data/lib/action_controller/middleware.rb +0 -39
  191. data/lib/action_controller/model_naming.rb +0 -12
  192. data/lib/action_dispatch/http/parameter_filter.rb +0 -72
  193. data/lib/action_dispatch/journey/backwards.rb +0 -5
  194. data/lib/action_dispatch/journey/nfa/builder.rb +0 -76
  195. data/lib/action_dispatch/journey/nfa/simulator.rb +0 -47
  196. data/lib/action_dispatch/journey/nfa/transition_table.rb +0 -163
  197. data/lib/action_dispatch/journey/router/strexp.rb +0 -27
  198. data/lib/action_dispatch/middleware/params_parser.rb +0 -60
  199. data/lib/action_dispatch/middleware/templates/rescues/_source.erb +0 -27
  200. data/lib/action_dispatch/testing/assertions/dom.rb +0 -3
  201. data/lib/action_dispatch/testing/assertions/selector.rb +0 -3
  202. data/lib/action_dispatch/testing/assertions/tag.rb +0 -3
@@ -1,32 +0,0 @@
1
- require 'action_dispatch/http/request'
2
- require 'action_dispatch/http/response'
3
-
4
- module ActionController
5
- module RackDelegation
6
- extend ActiveSupport::Concern
7
-
8
- delegate :headers, :status=, :location=, :content_type=,
9
- :status, :location, :content_type, :response_code, :to => "@_response"
10
-
11
- def dispatch(action, request)
12
- set_response!(request)
13
- super(action, request)
14
- end
15
-
16
- def response_body=(body)
17
- response.body = body if response
18
- super
19
- end
20
-
21
- def reset_session
22
- @_request.reset_session
23
- end
24
-
25
- private
26
-
27
- def set_response!(request)
28
- @_response = ActionDispatch::Response.new
29
- @_response.request = request
30
- end
31
- end
32
- end
@@ -1,39 +0,0 @@
1
- module ActionController
2
- class Middleware < Metal
3
- class ActionMiddleware
4
- def initialize(controller, app)
5
- @controller, @app = controller, app
6
- end
7
-
8
- def call(env)
9
- request = ActionDispatch::Request.new(env)
10
- @controller.build(@app).dispatch(:index, request)
11
- end
12
- end
13
-
14
- class << self
15
- alias build new
16
-
17
- def new(app)
18
- ActionMiddleware.new(self, app)
19
- end
20
- end
21
-
22
- attr_internal :app
23
-
24
- def process(action)
25
- response = super
26
- self.status, self.headers, self.response_body = response if response.is_a?(Array)
27
- response
28
- end
29
-
30
- def initialize(app)
31
- super()
32
- @_app = app
33
- end
34
-
35
- def index
36
- call(env)
37
- end
38
- end
39
- end
@@ -1,12 +0,0 @@
1
- module ActionController
2
- module ModelNaming
3
- # Converts the given object to an ActiveModel compliant one.
4
- def convert_to_model(object)
5
- object.respond_to?(:to_model) ? object.to_model : object
6
- end
7
-
8
- def model_name_from_record_or_class(record_or_class)
9
- convert_to_model(record_or_class).model_name
10
- end
11
- end
12
- end
@@ -1,72 +0,0 @@
1
- module ActionDispatch
2
- module Http
3
- class ParameterFilter
4
- FILTERED = '[FILTERED]'.freeze # :nodoc:
5
-
6
- def initialize(filters = [])
7
- @filters = filters
8
- end
9
-
10
- def filter(params)
11
- compiled_filter.call(params)
12
- end
13
-
14
- private
15
-
16
- def compiled_filter
17
- @compiled_filter ||= CompiledFilter.compile(@filters)
18
- end
19
-
20
- class CompiledFilter # :nodoc:
21
- def self.compile(filters)
22
- return lambda { |params| params.dup } if filters.empty?
23
-
24
- strings, regexps, blocks = [], [], []
25
-
26
- filters.each do |item|
27
- case item
28
- when Proc
29
- blocks << item
30
- when Regexp
31
- regexps << item
32
- else
33
- strings << item.to_s
34
- end
35
- end
36
-
37
- regexps << Regexp.new(strings.join('|'), true) unless strings.empty?
38
- new regexps, blocks
39
- end
40
-
41
- attr_reader :regexps, :blocks
42
-
43
- def initialize(regexps, blocks)
44
- @regexps = regexps
45
- @blocks = blocks
46
- end
47
-
48
- def call(original_params)
49
- filtered_params = {}
50
-
51
- original_params.each do |key, value|
52
- if regexps.any? { |r| key =~ r }
53
- value = FILTERED
54
- elsif value.is_a?(Hash)
55
- value = call(value)
56
- elsif value.is_a?(Array)
57
- value = value.map { |v| v.is_a?(Hash) ? call(v) : v }
58
- elsif blocks.any?
59
- key = key.dup if key.duplicable?
60
- value = value.dup if value.duplicable?
61
- blocks.each { |b| b.call(key, value) }
62
- end
63
-
64
- filtered_params[key] = value
65
- end
66
-
67
- filtered_params
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1,5 +0,0 @@
1
- module Rack # :nodoc:
2
- Mount = ActionDispatch::Journey::Router
3
- Mount::RouteSet = ActionDispatch::Journey::Router
4
- Mount::RegexpWithNamedGroups = ActionDispatch::Journey::Path::Pattern
5
- end
@@ -1,76 +0,0 @@
1
- require 'action_dispatch/journey/nfa/transition_table'
2
- require 'action_dispatch/journey/gtg/transition_table'
3
-
4
- module ActionDispatch
5
- module Journey # :nodoc:
6
- module NFA # :nodoc:
7
- class Visitor < Visitors::Visitor # :nodoc:
8
- def initialize(tt)
9
- @tt = tt
10
- @i = -1
11
- end
12
-
13
- def visit_CAT(node)
14
- left = visit(node.left)
15
- right = visit(node.right)
16
-
17
- @tt.merge(left.last, right.first)
18
-
19
- [left.first, right.last]
20
- end
21
-
22
- def visit_GROUP(node)
23
- from = @i += 1
24
- left = visit(node.left)
25
- to = @i += 1
26
-
27
- @tt.accepting = to
28
-
29
- @tt[from, left.first] = nil
30
- @tt[left.last, to] = nil
31
- @tt[from, to] = nil
32
-
33
- [from, to]
34
- end
35
-
36
- def visit_OR(node)
37
- from = @i += 1
38
- children = node.children.map { |c| visit(c) }
39
- to = @i += 1
40
-
41
- children.each do |child|
42
- @tt[from, child.first] = nil
43
- @tt[child.last, to] = nil
44
- end
45
-
46
- @tt.accepting = to
47
-
48
- [from, to]
49
- end
50
-
51
- def terminal(node)
52
- from_i = @i += 1 # new state
53
- to_i = @i += 1 # new state
54
-
55
- @tt[from_i, to_i] = node
56
- @tt.accepting = to_i
57
- @tt.add_memo(to_i, node.memo)
58
-
59
- [from_i, to_i]
60
- end
61
- end
62
-
63
- class Builder # :nodoc:
64
- def initialize(ast)
65
- @ast = ast
66
- end
67
-
68
- def transition_table
69
- tt = TransitionTable.new
70
- Visitor.new(tt).accept(@ast)
71
- tt
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,47 +0,0 @@
1
- require 'strscan'
2
-
3
- module ActionDispatch
4
- module Journey # :nodoc:
5
- module NFA # :nodoc:
6
- class MatchData # :nodoc:
7
- attr_reader :memos
8
-
9
- def initialize(memos)
10
- @memos = memos
11
- end
12
- end
13
-
14
- class Simulator # :nodoc:
15
- attr_reader :tt
16
-
17
- def initialize(transition_table)
18
- @tt = transition_table
19
- end
20
-
21
- def simulate(string)
22
- input = StringScanner.new(string)
23
- state = tt.eclosure(0)
24
- until input.eos?
25
- sym = input.scan(%r([/.?]|[^/.?]+))
26
-
27
- # FIXME: tt.eclosure is not needed for the GTG
28
- state = tt.eclosure(tt.move(state, sym))
29
- end
30
-
31
- acceptance_states = state.find_all { |s|
32
- tt.accepting?(tt.eclosure(s).sort.last)
33
- }
34
-
35
- return if acceptance_states.empty?
36
-
37
- memos = acceptance_states.flat_map { |x| tt.memo(x) }.compact
38
-
39
- MatchData.new(memos)
40
- end
41
-
42
- alias :=~ :simulate
43
- alias :match :simulate
44
- end
45
- end
46
- end
47
- end
@@ -1,163 +0,0 @@
1
- require 'action_dispatch/journey/nfa/dot'
2
-
3
- module ActionDispatch
4
- module Journey # :nodoc:
5
- module NFA # :nodoc:
6
- class TransitionTable # :nodoc:
7
- include Journey::NFA::Dot
8
-
9
- attr_accessor :accepting
10
- attr_reader :memos
11
-
12
- def initialize
13
- @table = Hash.new { |h,f| h[f] = {} }
14
- @memos = {}
15
- @accepting = nil
16
- @inverted = nil
17
- end
18
-
19
- def accepting?(state)
20
- accepting == state
21
- end
22
-
23
- def accepting_states
24
- [accepting]
25
- end
26
-
27
- def add_memo(idx, memo)
28
- @memos[idx] = memo
29
- end
30
-
31
- def memo(idx)
32
- @memos[idx]
33
- end
34
-
35
- def []=(i, f, s)
36
- @table[f][i] = s
37
- end
38
-
39
- def merge(left, right)
40
- @memos[right] = @memos.delete(left)
41
- @table[right] = @table.delete(left)
42
- end
43
-
44
- def states
45
- (@table.keys + @table.values.flat_map(&:keys)).uniq
46
- end
47
-
48
- # Returns a generalized transition graph with reduced states. The states
49
- # are reduced like a DFA, but the table must be simulated like an NFA.
50
- #
51
- # Edges of the GTG are regular expressions.
52
- def generalized_table
53
- gt = GTG::TransitionTable.new
54
- marked = {}
55
- state_id = Hash.new { |h,k| h[k] = h.length }
56
- alphabet = self.alphabet
57
-
58
- stack = [eclosure(0)]
59
-
60
- until stack.empty?
61
- state = stack.pop
62
- next if marked[state] || state.empty?
63
-
64
- marked[state] = true
65
-
66
- alphabet.each do |alpha|
67
- next_state = eclosure(following_states(state, alpha))
68
- next if next_state.empty?
69
-
70
- gt[state_id[state], state_id[next_state]] = alpha
71
- stack << next_state
72
- end
73
- end
74
-
75
- final_groups = state_id.keys.find_all { |s|
76
- s.sort.last == accepting
77
- }
78
-
79
- final_groups.each do |states|
80
- id = state_id[states]
81
-
82
- gt.add_accepting(id)
83
- save = states.find { |s|
84
- @memos.key?(s) && eclosure(s).sort.last == accepting
85
- }
86
-
87
- gt.add_memo(id, memo(save))
88
- end
89
-
90
- gt
91
- end
92
-
93
- # Returns set of NFA states to which there is a transition on ast symbol
94
- # +a+ from some state +s+ in +t+.
95
- def following_states(t, a)
96
- Array(t).flat_map { |s| inverted[s][a] }.uniq
97
- end
98
-
99
- # Returns set of NFA states to which there is a transition on ast symbol
100
- # +a+ from some state +s+ in +t+.
101
- def move(t, a)
102
- Array(t).map { |s|
103
- inverted[s].keys.compact.find_all { |sym|
104
- sym === a
105
- }.map { |sym| inverted[s][sym] }
106
- }.flatten.uniq
107
- end
108
-
109
- def alphabet
110
- inverted.values.flat_map(&:keys).compact.uniq.sort_by { |x| x.to_s }
111
- end
112
-
113
- # Returns a set of NFA states reachable from some NFA state +s+ in set
114
- # +t+ on nil-transitions alone.
115
- def eclosure(t)
116
- stack = Array(t)
117
- seen = {}
118
- children = []
119
-
120
- until stack.empty?
121
- s = stack.pop
122
- next if seen[s]
123
-
124
- seen[s] = true
125
- children << s
126
-
127
- stack.concat(inverted[s][nil])
128
- end
129
-
130
- children.uniq
131
- end
132
-
133
- def transitions
134
- @table.flat_map { |to, hash|
135
- hash.map { |from, sym| [from, sym, to] }
136
- }
137
- end
138
-
139
- private
140
-
141
- def inverted
142
- return @inverted if @inverted
143
-
144
- @inverted = Hash.new { |h, from|
145
- h[from] = Hash.new { |j, s| j[s] = [] }
146
- }
147
-
148
- @table.each { |to, hash|
149
- hash.each { |from, sym|
150
- if sym
151
- sym = Nodes::Symbol === sym ? sym.regexp : sym.left
152
- end
153
-
154
- @inverted[from][sym] << to
155
- }
156
- }
157
-
158
- @inverted
159
- end
160
- end
161
- end
162
- end
163
- end
@@ -1,27 +0,0 @@
1
- module ActionDispatch
2
- module Journey # :nodoc:
3
- class Router # :nodoc:
4
- class Strexp # :nodoc:
5
- class << self
6
- alias :compile :new
7
- end
8
-
9
- attr_reader :path, :requirements, :separators, :anchor, :ast
10
-
11
- def self.build(path, requirements, separators, anchor = true)
12
- parser = Journey::Parser.new
13
- ast = parser.parse path
14
- new ast, path, requirements, separators, anchor
15
- end
16
-
17
- def initialize(ast, path, requirements, separators, anchor = true)
18
- @ast = ast
19
- @path = path
20
- @requirements = requirements
21
- @separators = separators
22
- @anchor = anchor
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,60 +0,0 @@
1
- require 'active_support/core_ext/hash/conversions'
2
- require 'action_dispatch/http/request'
3
- require 'active_support/core_ext/hash/indifferent_access'
4
-
5
- module ActionDispatch
6
- class ParamsParser
7
- class ParseError < StandardError
8
- attr_reader :original_exception
9
-
10
- def initialize(message, original_exception)
11
- super(message)
12
- @original_exception = original_exception
13
- end
14
- end
15
-
16
- DEFAULT_PARSERS = { Mime::JSON => :json }
17
-
18
- def initialize(app, parsers = {})
19
- @app, @parsers = app, DEFAULT_PARSERS.merge(parsers)
20
- end
21
-
22
- def call(env)
23
- if params = parse_formatted_parameters(env)
24
- env["action_dispatch.request.request_parameters"] = params
25
- end
26
-
27
- @app.call(env)
28
- end
29
-
30
- private
31
- def parse_formatted_parameters(env)
32
- request = Request.new(env)
33
-
34
- return false if request.content_length.zero?
35
-
36
- strategy = @parsers[request.content_mime_type]
37
-
38
- return false unless strategy
39
-
40
- case strategy
41
- when Proc
42
- strategy.call(request.raw_post)
43
- when :json
44
- data = ActiveSupport::JSON.decode(request.raw_post)
45
- data = {:_json => data} unless data.is_a?(Hash)
46
- Request::Utils.deep_munge(data).with_indifferent_access
47
- else
48
- false
49
- end
50
- rescue => e # JSON or Ruby code block errors
51
- logger(env).debug "Error occurred while parsing request parameters.\nContents:\n\n#{request.raw_post}"
52
-
53
- raise ParseError.new(e.message, e)
54
- end
55
-
56
- def logger(env)
57
- env['action_dispatch.logger'] || ActiveSupport::Logger.new($stderr)
58
- end
59
- end
60
- end
@@ -1,27 +0,0 @@
1
- <% @source_extracts.each_with_index do |source_extract, index| %>
2
- <% if source_extract[:code] %>
3
- <div class="source <%="hidden" if @show_source_idx != index%>" id="frame-source-<%=index%>">
4
- <div class="info">
5
- Extracted source (around line <strong>#<%= source_extract[:line_number] %></strong>):
6
- </div>
7
- <div class="data">
8
- <table cellpadding="0" cellspacing="0" class="lines">
9
- <tr>
10
- <td>
11
- <pre class="line_numbers">
12
- <% source_extract[:code].each_key do |line_number| %>
13
- <span><%= line_number -%></span>
14
- <% end %>
15
- </pre>
16
- </td>
17
- <td width="100%">
18
- <pre>
19
- <% source_extract[:code].each do |line, source| -%><div class="line<%= " active" if line == source_extract[:line_number] -%>"><%= source -%></div><% end -%>
20
- </pre>
21
- </td>
22
- </tr>
23
- </table>
24
- </div>
25
- </div>
26
- <% end %>
27
- <% end %>
@@ -1,3 +0,0 @@
1
- require 'active_support/deprecation'
2
-
3
- ActiveSupport::Deprecation.warn("ActionDispatch::Assertions::DomAssertions has been extracted to the rails-dom-testing gem.")
@@ -1,3 +0,0 @@
1
- require 'active_support/deprecation'
2
-
3
- ActiveSupport::Deprecation.warn("ActionDispatch::Assertions::SelectorAssertions has been extracted to the rails-dom-testing gem.")
@@ -1,3 +0,0 @@
1
- require 'active_support/deprecation'
2
-
3
- ActiveSupport::Deprecation.warn('`ActionDispatch::Assertions::TagAssertions` has been extracted to the rails-dom-testing gem.')