class Jbuilder::DependencyTracker

Constants

DIRECT_RENDERS

Matches:

json.partial! "messages/message"
json.partial!('messages/message')
EXPLICIT_DEPENDENCY
INDIRECT_RENDERS

Matches:

json.partial! partial: "comments/comment"
json.comments @post.comments, partial: "comments/comment", as: :comment
json.array! @posts, partial: "posts/post", as: :post
= render partial: "account"

Attributes

name[R]
template[R]

Public Class Methods

call(name, template, view_paths = nil) click to toggle source
# File lib/jbuilder/jbuilder_dependency_tracker.rb, line 26
def self.call(name, template, view_paths = nil)
  new(name, template, view_paths).dependencies
end
new(name, template, view_paths = nil) click to toggle source
# File lib/jbuilder/jbuilder_dependency_tracker.rb, line 30
def initialize(name, template, view_paths = nil)
  @name, @template, @view_paths = name, template, view_paths
end

Public Instance Methods

dependencies() click to toggle source
# File lib/jbuilder/jbuilder_dependency_tracker.rb, line 34
def dependencies
  direct_dependencies + indirect_dependencies + explicit_dependencies
end

Private Instance Methods

direct_dependencies() click to toggle source
# File lib/jbuilder/jbuilder_dependency_tracker.rb, line 42
def direct_dependencies
  source.scan(DIRECT_RENDERS).map(&:second)
end
explicit_dependencies() click to toggle source
# File lib/jbuilder/jbuilder_dependency_tracker.rb, line 50
def explicit_dependencies
  dependencies = source.scan(EXPLICIT_DEPENDENCY).flatten.uniq

  wildcards, explicits = dependencies.partition { |dependency| dependency.end_with?("/*") }

  (explicits + resolve_directories(wildcards)).uniq
end
indirect_dependencies() click to toggle source
# File lib/jbuilder/jbuilder_dependency_tracker.rb, line 46
def indirect_dependencies
  source.scan(INDIRECT_RENDERS).map(&:second)
end
resolve_directories(wildcard_dependencies) click to toggle source
# File lib/jbuilder/jbuilder_dependency_tracker.rb, line 58
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
source() click to toggle source
# File lib/jbuilder/jbuilder_dependency_tracker.rb, line 70
def source
  template.source
end