Ensure all RubyTracker RenderParsers are tested
Previously, only the PrismRenderParser or RipperRenderParser would be tested depending on if the Prism gem is available. This meant that PrismRenderParser was being tested on Ruby 3.3 and RipperRenderParser was tested on Ruby < 3.3. Additionally, if someone were to add prism to the rails/rails Gemfile because they wrote a tool that uses it then the RipperRenderParser would end up completely untested. This commit is a small refactor to enable testing both RenderParsers in all Ruby versions so that the prism gem can be added to the Gemfile.
This commit is contained in:
parent
c7551d08fc
commit
0041af4c94
2
Gemfile
2
Gemfile
@ -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
|
||||
|
@ -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)
|
||||
@ -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)
|
||||
|
@ -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
|
||||
@ -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
|
||||
|
@ -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
|
||||
|
@ -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}"]
|
||||
@ -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
|
||||
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user