Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/jbuilder/jbuilder_dependency_tracker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ class Jbuilder::DependencyTracker
(['"])([^'"]+)\1 # quoted value
/x

def self.supports_view_paths?
true
end

def self.call(name, template, view_paths = nil)
new(name, template, view_paths).dependencies
end
Expand Down
3 changes: 3 additions & 0 deletions lib/jbuilder/railtie.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ class Railtie < ::Rails::Railtie
initializer :jbuilder do
ActiveSupport.on_load :action_view do
ActionView::Template.register_template_handler :jbuilder, JbuilderHandler

require 'action_view/dependency_tracker'
require 'jbuilder/jbuilder_dependency_tracker'
ActionView::DependencyTracker.register_tracker :jbuilder, Jbuilder::DependencyTracker
end

module ::ActionController
Expand Down
35 changes: 35 additions & 0 deletions test/jbuilder_dependency_tracker_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,22 @@ def initialize(source, handler = :jbuilder)
end
end

FakeResolvedPath = Struct.new(:prefix, :virtual_path) do
def to_s
virtual_path
end
end

class FakeViewPath
def initialize(*template_paths)
@template_paths = template_paths
end

def all_template_paths
@template_paths
end
end


class JbuilderDependencyTrackerTest < ActiveSupport::TestCase
def make_tracker(name, source)
Expand Down Expand Up @@ -68,4 +84,23 @@ def track_dependencies(source)

assert_equal %w[path/to/partial], dependencies
end

test 'is registered as the dependency tracker for the :jbuilder handler' do
handler = ActionView::Template.handler_for_extension(:jbuilder)
template = FakeTemplate.new("json.partial! 'path/to/partial'", handler)

dependencies = ActionView::DependencyTracker.find_dependencies('jbuilder_template', template, [])

assert_equal %w[path/to/partial], dependencies
end

test 'receives the view paths so wildcard dependencies resolve' do
handler = ActionView::Template.handler_for_extension(:jbuilder)
template = FakeTemplate.new('# Template Dependency: comments/*', handler)
view_paths = [ FakeViewPath.new(FakeResolvedPath.new('comments', 'comments/_comment')) ]

dependencies = ActionView::DependencyTracker.find_dependencies('jbuilder_template', template, view_paths)

assert_equal %w[comments/_comment], dependencies
end
end