class Jbuilder::DependencyTracker

def self.call(name, template, view_paths = nil)

def self.call(name, template, view_paths = nil)
  new(name, template, view_paths).dependencies
end

def dependencies

def dependencies
  direct_dependencies + indirect_dependencies + explicit_dependencies
end

def direct_dependencies

def direct_dependencies
  source.scan(DIRECT_RENDERS).map(&:second)
end

def explicit_dependencies

def explicit_dependencies
  dependencies = source.scan(EXPLICIT_DEPENDENCY).flatten.uniq
  wildcards, explicits = dependencies.partition { |dependency| dependency.end_with?("/*") }
  (explicits + resolve_directories(wildcards)).uniq
end

def indirect_dependencies

def indirect_dependencies
  source.scan(INDIRECT_RENDERS).map(&:second)
end

def initialize(name, template, view_paths = nil)

def initialize(name, template, view_paths = nil)
  @name, @template, @view_paths = name, template, view_paths
end

def resolve_directories(wildcard_dependencies)

def resolve_directories(wildcard_dependencies)
  return [] unless @view_paths
  return [] if wildcard_dependencies.empty?
  # Remove trailing "/*"
  prefixes = wildcard_dependencies.map { |query| query[0..-3] }
  @view_paths.flat_map(&:all_template_paths).uniq.filter_map { |path|
    path.to_s if prefixes.include?(path.prefix)
  }.sort
end

def source

def source
  template.source
end