123456789_123456789_123456789_123456789_123456789_

Class: ActionView::DependencyTracker::RipperTracker

Do not use. This class is for internal use only.
Relationships & Source Files
Inherits: Object
Defined in: actionview/lib/action_view/dependency_tracker/ripper_tracker.rb

Constant Summary

Class Attribute Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(name, template, view_paths = nil) ⇒ RipperTracker

[ GitHub ]

  
# File 'actionview/lib/action_view/dependency_tracker/ripper_tracker.rb', line 20

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

Class Attribute Details

.supports_view_paths?Boolean (readonly)

[ GitHub ]

  
# File 'actionview/lib/action_view/dependency_tracker/ripper_tracker.rb', line 16

def self.supports_view_paths? # :nodoc:
  true
end

Class Method Details

.call(name, template, view_paths = nil)

[ GitHub ]

  
# File 'actionview/lib/action_view/dependency_tracker/ripper_tracker.rb', line 8

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

Instance Attribute Details

#name (readonly, private)

[ GitHub ]

  
# File 'actionview/lib/action_view/dependency_tracker/ripper_tracker.rb', line 25

attr_reader :template, :name, :view_paths

#template (readonly, private)

[ GitHub ]

  
# File 'actionview/lib/action_view/dependency_tracker/ripper_tracker.rb', line 25

attr_reader :template, :name, :view_paths

#view_paths (readonly, private)

[ GitHub ]

  
# File 'actionview/lib/action_view/dependency_tracker/ripper_tracker.rb', line 25

attr_reader :template, :name, :view_paths

Instance Method Details

#dependencies

[ GitHub ]

  
# File 'actionview/lib/action_view/dependency_tracker/ripper_tracker.rb', line 12

def dependencies
  render_dependencies + explicit_dependencies
end

#explicit_dependencies (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/dependency_tracker/ripper_tracker.rb', line 38

def explicit_dependencies
  dependencies = template.source.scan(EXPLICIT_DEPENDENCY).flatten.uniq

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

  (explicits + resolve_directories(wildcards)).uniq
end

#render_dependencies (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/dependency_tracker/ripper_tracker.rb', line 27

def render_dependencies
  return [] unless template.source.include?("render")

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

  RenderParser.new(@name, compiled_source).render_calls.filter_map do |render_call|
    next if render_call.end_with?("/_")
    render_call.gsub(%r|/_|, "/")
  end
end

#resolve_directories(wildcard_dependencies) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/dependency_tracker/ripper_tracker.rb', line 46

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