actionpack 4.2.11.1 → 6.1.3.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (187) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +291 -489
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +9 -9
  5. data/lib/abstract_controller/asset_paths.rb +2 -0
  6. data/lib/abstract_controller/base.rb +81 -51
  7. data/lib/{action_controller → abstract_controller}/caching/fragments.rb +64 -17
  8. data/lib/abstract_controller/caching.rb +66 -0
  9. data/lib/abstract_controller/callbacks.rb +61 -33
  10. data/lib/abstract_controller/collector.rb +9 -13
  11. data/lib/abstract_controller/error.rb +6 -0
  12. data/lib/abstract_controller/helpers.rb +115 -99
  13. data/lib/abstract_controller/logger.rb +2 -0
  14. data/lib/abstract_controller/railties/routes_helpers.rb +21 -3
  15. data/lib/abstract_controller/rendering.rb +48 -47
  16. data/lib/abstract_controller/translation.rb +17 -8
  17. data/lib/abstract_controller/url_for.rb +2 -0
  18. data/lib/abstract_controller.rb +13 -5
  19. data/lib/action_controller/api/api_rendering.rb +16 -0
  20. data/lib/action_controller/api.rb +150 -0
  21. data/lib/action_controller/base.rb +29 -24
  22. data/lib/action_controller/caching.rb +12 -57
  23. data/lib/action_controller/form_builder.rb +50 -0
  24. data/lib/action_controller/log_subscriber.rb +17 -19
  25. data/lib/action_controller/metal/basic_implicit_render.rb +13 -0
  26. data/lib/action_controller/metal/conditional_get.rb +134 -46
  27. data/lib/action_controller/metal/content_security_policy.rb +51 -0
  28. data/lib/action_controller/metal/cookies.rb +6 -4
  29. data/lib/action_controller/metal/data_streaming.rb +30 -50
  30. data/lib/action_controller/metal/default_headers.rb +17 -0
  31. data/lib/action_controller/metal/etag_with_flash.rb +18 -0
  32. data/lib/action_controller/metal/etag_with_template_digest.rb +21 -16
  33. data/lib/action_controller/metal/exceptions.rb +63 -15
  34. data/lib/action_controller/metal/flash.rb +9 -8
  35. data/lib/action_controller/metal/head.rb +26 -21
  36. data/lib/action_controller/metal/helpers.rb +37 -18
  37. data/lib/action_controller/metal/http_authentication.rb +81 -73
  38. data/lib/action_controller/metal/implicit_render.rb +53 -9
  39. data/lib/action_controller/metal/instrumentation.rb +32 -35
  40. data/lib/action_controller/metal/live.rb +102 -120
  41. data/lib/action_controller/metal/logging.rb +20 -0
  42. data/lib/action_controller/metal/mime_responds.rb +49 -47
  43. data/lib/action_controller/metal/parameter_encoding.rb +82 -0
  44. data/lib/action_controller/metal/params_wrapper.rb +83 -66
  45. data/lib/action_controller/metal/permissions_policy.rb +46 -0
  46. data/lib/action_controller/metal/redirecting.rb +53 -32
  47. data/lib/action_controller/metal/renderers.rb +87 -44
  48. data/lib/action_controller/metal/rendering.rb +77 -50
  49. data/lib/action_controller/metal/request_forgery_protection.rb +267 -103
  50. data/lib/action_controller/metal/rescue.rb +10 -17
  51. data/lib/action_controller/metal/streaming.rb +12 -11
  52. data/lib/action_controller/metal/strong_parameters.rb +714 -186
  53. data/lib/action_controller/metal/testing.rb +2 -17
  54. data/lib/action_controller/metal/url_for.rb +19 -10
  55. data/lib/action_controller/metal.rb +104 -87
  56. data/lib/action_controller/railtie.rb +28 -10
  57. data/lib/action_controller/railties/helpers.rb +3 -1
  58. data/lib/action_controller/renderer.rb +141 -0
  59. data/lib/action_controller/template_assertions.rb +11 -0
  60. data/lib/action_controller/test_case.rb +296 -422
  61. data/lib/action_controller.rb +34 -23
  62. data/lib/action_dispatch/http/cache.rb +107 -56
  63. data/lib/action_dispatch/http/content_disposition.rb +45 -0
  64. data/lib/action_dispatch/http/content_security_policy.rb +286 -0
  65. data/lib/action_dispatch/http/filter_parameters.rb +32 -25
  66. data/lib/action_dispatch/http/filter_redirect.rb +10 -12
  67. data/lib/action_dispatch/http/headers.rb +55 -22
  68. data/lib/action_dispatch/http/mime_negotiation.rb +79 -51
  69. data/lib/action_dispatch/http/mime_type.rb +153 -121
  70. data/lib/action_dispatch/http/mime_types.rb +20 -6
  71. data/lib/action_dispatch/http/parameters.rb +90 -40
  72. data/lib/action_dispatch/http/permissions_policy.rb +173 -0
  73. data/lib/action_dispatch/http/rack_cache.rb +2 -0
  74. data/lib/action_dispatch/http/request.rb +226 -121
  75. data/lib/action_dispatch/http/response.rb +248 -113
  76. data/lib/action_dispatch/http/upload.rb +21 -7
  77. data/lib/action_dispatch/http/url.rb +182 -100
  78. data/lib/action_dispatch/journey/formatter.rb +90 -43
  79. data/lib/action_dispatch/journey/gtg/builder.rb +28 -41
  80. data/lib/action_dispatch/journey/gtg/simulator.rb +11 -16
  81. data/lib/action_dispatch/journey/gtg/transition_table.rb +23 -21
  82. data/lib/action_dispatch/journey/nfa/dot.rb +3 -14
  83. data/lib/action_dispatch/journey/nodes/node.rb +29 -15
  84. data/lib/action_dispatch/journey/parser.rb +17 -16
  85. data/lib/action_dispatch/journey/parser.y +4 -3
  86. data/lib/action_dispatch/journey/parser_extras.rb +12 -4
  87. data/lib/action_dispatch/journey/path/pattern.rb +58 -54
  88. data/lib/action_dispatch/journey/route.rb +100 -32
  89. data/lib/action_dispatch/journey/router/utils.rb +29 -18
  90. data/lib/action_dispatch/journey/router.rb +55 -51
  91. data/lib/action_dispatch/journey/routes.rb +17 -17
  92. data/lib/action_dispatch/journey/scanner.rb +26 -17
  93. data/lib/action_dispatch/journey/visitors.rb +98 -54
  94. data/lib/action_dispatch/journey.rb +5 -5
  95. data/lib/action_dispatch/middleware/actionable_exceptions.rb +46 -0
  96. data/lib/action_dispatch/middleware/callbacks.rb +3 -6
  97. data/lib/action_dispatch/middleware/cookies.rb +347 -217
  98. data/lib/action_dispatch/middleware/debug_exceptions.rb +135 -63
  99. data/lib/action_dispatch/middleware/debug_locks.rb +124 -0
  100. data/lib/action_dispatch/middleware/debug_view.rb +66 -0
  101. data/lib/action_dispatch/middleware/exception_wrapper.rb +115 -71
  102. data/lib/action_dispatch/middleware/executor.rb +21 -0
  103. data/lib/action_dispatch/middleware/flash.rb +78 -54
  104. data/lib/action_dispatch/middleware/host_authorization.rb +130 -0
  105. data/lib/action_dispatch/middleware/public_exceptions.rb +32 -27
  106. data/lib/action_dispatch/middleware/reloader.rb +5 -91
  107. data/lib/action_dispatch/middleware/remote_ip.rb +53 -45
  108. data/lib/action_dispatch/middleware/request_id.rb +17 -10
  109. data/lib/action_dispatch/middleware/session/abstract_store.rb +41 -26
  110. data/lib/action_dispatch/middleware/session/cache_store.rb +24 -14
  111. data/lib/action_dispatch/middleware/session/cookie_store.rb +74 -75
  112. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +8 -2
  113. data/lib/action_dispatch/middleware/show_exceptions.rb +28 -23
  114. data/lib/action_dispatch/middleware/ssl.rb +118 -35
  115. data/lib/action_dispatch/middleware/stack.rb +82 -41
  116. data/lib/action_dispatch/middleware/static.rb +156 -89
  117. data/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb +13 -0
  118. data/lib/action_dispatch/middleware/templates/rescues/_actions.text.erb +0 -0
  119. data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +22 -0
  120. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +4 -14
  121. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +1 -1
  122. data/lib/action_dispatch/middleware/templates/rescues/{_source.erb → _source.html.erb} +4 -2
  123. data/lib/action_dispatch/middleware/templates/rescues/_source.text.erb +8 -0
  124. data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +45 -35
  125. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.html.erb +7 -0
  126. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.text.erb +5 -0
  127. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +23 -4
  128. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +1 -1
  129. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +24 -0
  130. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.text.erb +15 -0
  131. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +105 -8
  132. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +19 -0
  133. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.text.erb +3 -0
  134. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +2 -2
  135. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +1 -1
  136. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +3 -3
  137. data/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +1 -1
  138. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +1 -1
  139. data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +4 -4
  140. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +87 -64
  141. data/lib/action_dispatch/railtie.rb +27 -13
  142. data/lib/action_dispatch/request/session.rb +109 -61
  143. data/lib/action_dispatch/request/utils.rb +90 -23
  144. data/lib/action_dispatch/routing/endpoint.rb +9 -2
  145. data/lib/action_dispatch/routing/inspector.rb +141 -102
  146. data/lib/action_dispatch/routing/mapper.rb +811 -473
  147. data/lib/action_dispatch/routing/polymorphic_routes.rb +167 -143
  148. data/lib/action_dispatch/routing/redirection.rb +37 -27
  149. data/lib/action_dispatch/routing/route_set.rb +363 -331
  150. data/lib/action_dispatch/routing/routes_proxy.rb +32 -5
  151. data/lib/action_dispatch/routing/url_for.rb +66 -26
  152. data/lib/action_dispatch/routing.rb +36 -36
  153. data/lib/action_dispatch/system_test_case.rb +190 -0
  154. data/lib/action_dispatch/system_testing/browser.rb +86 -0
  155. data/lib/action_dispatch/system_testing/driver.rb +67 -0
  156. data/lib/action_dispatch/system_testing/server.rb +31 -0
  157. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +138 -0
  158. data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +29 -0
  159. data/lib/action_dispatch/testing/assertion_response.rb +46 -0
  160. data/lib/action_dispatch/testing/assertions/response.rb +44 -22
  161. data/lib/action_dispatch/testing/assertions/routing.rb +47 -31
  162. data/lib/action_dispatch/testing/assertions.rb +6 -4
  163. data/lib/action_dispatch/testing/integration.rb +391 -220
  164. data/lib/action_dispatch/testing/request_encoder.rb +55 -0
  165. data/lib/action_dispatch/testing/test_process.rb +53 -22
  166. data/lib/action_dispatch/testing/test_request.rb +27 -34
  167. data/lib/action_dispatch/testing/test_response.rb +11 -11
  168. data/lib/action_dispatch.rb +35 -21
  169. data/lib/action_pack/gem_version.rb +6 -4
  170. data/lib/action_pack/version.rb +3 -1
  171. data/lib/action_pack.rb +4 -2
  172. metadata +78 -48
  173. data/lib/action_controller/metal/force_ssl.rb +0 -97
  174. data/lib/action_controller/metal/hide_actions.rb +0 -40
  175. data/lib/action_controller/metal/rack_delegation.rb +0 -32
  176. data/lib/action_controller/middleware.rb +0 -39
  177. data/lib/action_controller/model_naming.rb +0 -12
  178. data/lib/action_dispatch/http/parameter_filter.rb +0 -72
  179. data/lib/action_dispatch/journey/backwards.rb +0 -5
  180. data/lib/action_dispatch/journey/nfa/builder.rb +0 -76
  181. data/lib/action_dispatch/journey/nfa/simulator.rb +0 -47
  182. data/lib/action_dispatch/journey/nfa/transition_table.rb +0 -163
  183. data/lib/action_dispatch/journey/router/strexp.rb +0 -27
  184. data/lib/action_dispatch/middleware/params_parser.rb +0 -60
  185. data/lib/action_dispatch/testing/assertions/dom.rb +0 -3
  186. data/lib/action_dispatch/testing/assertions/selector.rb +0 -3
  187. data/lib/action_dispatch/testing/assertions/tag.rb +0 -3
@@ -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,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.')