Skip to content

Commit 68eade8

Browse files
authored
Merge pull request rails#50869 from skipkayhil/hm-test-all-ruby-trackers
Ensure all RubyTracker RenderParsers are tested
2 parents bd66fc8 + 0041af4 commit 68eade8

File tree

5 files changed

+34
-12
lines changed

5 files changed

+34
-12
lines changed

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ gem "json", ">= 2.0.0", "!=2.7.0"
3636
# Workaround until Ruby ships with cgi version 0.3.6 or higher.
3737
gem "cgi", ">= 0.3.6", require: false
3838

39+
gem "prism"
40+
3941
group :lint do
4042
gem "syntax_tree", "6.1.1", require: false
4143
end

Gemfile.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,7 @@ GEM
370370
path_expander (1.1.1)
371371
pg (1.5.4)
372372
prettier_print (1.2.1)
373+
prism (0.19.0)
373374
propshaft (0.8.0)
374375
actionpack (>= 7.0.0)
375376
activesupport (>= 7.0.0)
@@ -618,6 +619,7 @@ DEPENDENCIES
618619
mysql2 (~> 0.5)
619620
nokogiri (>= 1.8.1, != 1.11.0)
620621
pg (~> 1.3)
622+
prism
621623
propshaft (>= 0.1.7)
622624
puma (>= 5.0.3)
623625
queue_classic (>= 4.0.0)

actionview/lib/action_view/dependency_tracker/ruby_tracker.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ def self.supports_view_paths? # :nodoc:
1717
true
1818
end
1919

20-
def initialize(name, template, view_paths = nil)
20+
def initialize(name, template, view_paths = nil, parser_class: RenderParser::Default)
2121
@name, @template, @view_paths = name, template, view_paths
22+
@parser_class = parser_class
2223
end
2324

2425
private
@@ -29,7 +30,7 @@ def render_dependencies
2930

3031
compiled_source = template.handler.call(template, template.source)
3132

32-
RenderParser.new(@name, compiled_source).render_calls.filter_map do |render_call|
33+
@parser_class.new(@name, compiled_source).render_calls.filter_map do |render_call|
3334
next if render_call.end_with?("/_")
3435
render_call.gsub(%r|/_|, "/")
3536
end

actionview/lib/action_view/render_parser.rb

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,10 @@ def partial_to_virtual_path(render_type, partial_path)
3131
rescue LoadError
3232
require "ripper"
3333
require_relative "render_parser/ripper_render_parser"
34-
Parser = RipperRenderParser
34+
Default = RipperRenderParser
3535
else
3636
require_relative "render_parser/prism_render_parser"
37-
Parser = PrismRenderParser
38-
end
39-
40-
def self.new(name, code)
41-
Parser.new(name, code)
37+
Default = PrismRenderParser
4238
end
4339
end
4440
end

actionview/test/template/dependency_tracker_test.rb

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
require "abstract_unit"
44
require "action_view/dependency_tracker"
55

6+
require "action_view/render_parser/prism_render_parser"
7+
8+
require "ripper"
9+
require "action_view/render_parser/ripper_render_parser"
10+
611
class NeckbeardTracker
712
def self.call(name, template)
813
["foo/#{name}"]
@@ -228,11 +233,9 @@ def make_tracker(name, template)
228233
end
229234
end
230235

231-
class RubyTrackerTest < Minitest::Test
232-
include SharedTrackerTests
233-
236+
module RubyTrackerTests
234237
def make_tracker(name, template)
235-
ActionView::DependencyTracker::RubyTracker.new(name, template)
238+
ActionView::DependencyTracker::RubyTracker.new(name, template, parser_class: parser_class)
236239
end
237240

238241
def test_dependencies_skip_unknown_options
@@ -262,3 +265,21 @@ def test_dependencies_skip_commented_out_renders
262265
assert_equal [], tracker.dependencies
263266
end
264267
end
268+
269+
class RipperRubyTrackerTest < Minitest::Test
270+
include SharedTrackerTests
271+
include RubyTrackerTests
272+
273+
def parser_class
274+
ActionView::RenderParser::RipperRenderParser
275+
end
276+
end
277+
278+
class PrismRubyTrackerTest < Minitest::Test
279+
include SharedTrackerTests
280+
include RubyTrackerTests
281+
282+
def parser_class
283+
ActionView::RenderParser::PrismRenderParser
284+
end
285+
end

0 commit comments

Comments
 (0)