Skip to content

Commit

Permalink
Merge pull request rails#50869 from skipkayhil/hm-test-all-ruby-trackers
Browse files Browse the repository at this point in the history
Ensure all RubyTracker RenderParsers are tested
  • Loading branch information
rafaelfranca authored Jan 26, 2024
2 parents bd66fc8 + 0041af4 commit 68eade8
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 12 deletions.
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ gem "json", ">= 2.0.0", "!=2.7.0"
# Workaround until Ruby ships with cgi version 0.3.6 or higher.
gem "cgi", ">= 0.3.6", require: false

gem "prism"

group :lint do
gem "syntax_tree", "6.1.1", require: false
end
Expand Down
2 changes: 2 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,7 @@ GEM
path_expander (1.1.1)
pg (1.5.4)
prettier_print (1.2.1)
prism (0.19.0)
propshaft (0.8.0)
actionpack (>= 7.0.0)
activesupport (>= 7.0.0)
Expand Down Expand Up @@ -618,6 +619,7 @@ DEPENDENCIES
mysql2 (~> 0.5)
nokogiri (>= 1.8.1, != 1.11.0)
pg (~> 1.3)
prism
propshaft (>= 0.1.7)
puma (>= 5.0.3)
queue_classic (>= 4.0.0)
Expand Down
5 changes: 3 additions & 2 deletions actionview/lib/action_view/dependency_tracker/ruby_tracker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ def self.supports_view_paths? # :nodoc:
true
end

def initialize(name, template, view_paths = nil)
def initialize(name, template, view_paths = nil, parser_class: RenderParser::Default)
@name, @template, @view_paths = name, template, view_paths
@parser_class = parser_class
end

private
Expand All @@ -29,7 +30,7 @@ def render_dependencies

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

RenderParser.new(@name, compiled_source).render_calls.filter_map do |render_call|
@parser_class.new(@name, compiled_source).render_calls.filter_map do |render_call|
next if render_call.end_with?("/_")
render_call.gsub(%r|/_|, "/")
end
Expand Down
8 changes: 2 additions & 6 deletions actionview/lib/action_view/render_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,10 @@ def partial_to_virtual_path(render_type, partial_path)
rescue LoadError
require "ripper"
require_relative "render_parser/ripper_render_parser"
Parser = RipperRenderParser
Default = RipperRenderParser
else
require_relative "render_parser/prism_render_parser"
Parser = PrismRenderParser
end

def self.new(name, code)
Parser.new(name, code)
Default = PrismRenderParser
end
end
end
29 changes: 25 additions & 4 deletions actionview/test/template/dependency_tracker_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
require "abstract_unit"
require "action_view/dependency_tracker"

require "action_view/render_parser/prism_render_parser"

require "ripper"
require "action_view/render_parser/ripper_render_parser"

class NeckbeardTracker
def self.call(name, template)
["foo/#{name}"]
Expand Down Expand Up @@ -228,11 +233,9 @@ def make_tracker(name, template)
end
end

class RubyTrackerTest < Minitest::Test
include SharedTrackerTests

module RubyTrackerTests
def make_tracker(name, template)
ActionView::DependencyTracker::RubyTracker.new(name, template)
ActionView::DependencyTracker::RubyTracker.new(name, template, parser_class: parser_class)
end

def test_dependencies_skip_unknown_options
Expand Down Expand Up @@ -262,3 +265,21 @@ def test_dependencies_skip_commented_out_renders
assert_equal [], tracker.dependencies
end
end

class RipperRubyTrackerTest < Minitest::Test
include SharedTrackerTests
include RubyTrackerTests

def parser_class
ActionView::RenderParser::RipperRenderParser
end
end

class PrismRubyTrackerTest < Minitest::Test
include SharedTrackerTests
include RubyTrackerTests

def parser_class
ActionView::RenderParser::PrismRenderParser
end
end

0 comments on commit 68eade8

Please sign in to comment.