123456789_123456789_123456789_123456789_123456789_

Class: ActionView::Digestor

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
ActionView::PartialDigestor
Inherits: Object
Defined in: actionview/lib/action_view/digestor.rb

Class Attribute Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(options) ⇒ Digestor

[ GitHub ]

  
# File 'actionview/lib/action_view/digestor.rb', line 56

def initialize(options)
  @name, @finder = options.values_at(:name, :finder)
  @options = options.except(:name, :finder)
end

Class Attribute Details

.cache (readonly) Also known as: #cache

[ GitHub ]

  
# File 'actionview/lib/action_view/digestor.rb', line 7

cattr_reader(:cache)

Class Method Details

.digest(options)

Supported options:

[ GitHub ]

  
# File 'actionview/lib/action_view/digestor.rb', line 18

def digest(options)
  options.assert_valid_keys(:name, :finder, :dependencies, :partial)

  cache_key = ([ options[:name], options[:finder].details_key.hash ].compact + Array.wrap(options[:dependencies])).join('.')

  # this is a correctly done double-checked locking idiom
  # (ThreadSafe::Cache's lookups have volatile semantics)
  @@cache[cache_key] || @@digest_monitor.synchronize do
    @@cache.fetch(cache_key) do # re-check under lock
      compute_and_store_digest(cache_key, options)
    end
  end
end

Instance Attribute Details

#cache (readonly)

[ GitHub ]

  
# File 'actionview/lib/action_view/digestor.rb', line 7

cattr_reader(:cache)

#finder (readonly)

[ GitHub ]

  
# File 'actionview/lib/action_view/digestor.rb', line 54

attr_reader :name, :finder, :options

#name (readonly)

[ GitHub ]

  
# File 'actionview/lib/action_view/digestor.rb', line 54

attr_reader :name, :finder, :options

#options (readonly)

[ GitHub ]

  
# File 'actionview/lib/action_view/digestor.rb', line 54

attr_reader :name, :finder, :options

Instance Method Details

#dependencies

[ GitHub ]

  
# File 'actionview/lib/action_view/digestor.rb', line 70

def dependencies
  DependencyTracker.find_dependencies(name, template)
rescue ActionView::MissingTemplate
  logger.try :error, "  '#{name}' file doesn't exist, so no dependencies"
  []
end

#digest

[ GitHub ]

  
# File 'actionview/lib/action_view/digestor.rb', line 61

def digest
  Digest::MD5.hexdigest("#{source}-#{dependency_digest}").tap do |digest|
    logger.try :debug, "  Cache digest for #{template.inspect}: #{digest}"
  end
rescue ActionView::MissingTemplate
  logger.try :error, "  Couldn't find template for digesting: #{name}"
  ''
end

#nested_dependencies

[ GitHub ]

  
# File 'actionview/lib/action_view/digestor.rb', line 77

def nested_dependencies
  dependencies.collect do |dependency|
    dependencies = PartialDigestor.new(name: dependency, finder: finder).nested_dependencies
    dependencies.any? ? { dependency => dependencies } : dependency
  end
end