class SignedForm::Digestor

Attributes

view_paths[RW]

Public Class Methods

new(template) click to toggle source
# File lib/signed_form/digestor.rb, line 7
def initialize(template)
  @view_paths = Set.new
  @views  = Set.new
  self << template
end

Public Instance Methods

<<(template) click to toggle source
# File lib/signed_form/digestor.rb, line 13
def <<(template)
  virtual_path = get_virtual_path(template)
  raise Errors::UnableToDigest, "Unable to get virtual path from template" unless virtual_path

  @views << virtual_path
  @view_paths += template.view_paths.map(&:to_s)
  @digest = nil
rescue NoMethodError
  raise Errors::UnableToDigest, "Unable get view paths from template"
end
digest()
Alias for: to_s
marshal_dump() click to toggle source
# File lib/signed_form/digestor.rb, line 24
def marshal_dump
  [@views.to_a, to_s]
end
marshal_load(input) click to toggle source
# File lib/signed_form/digestor.rb, line 28
def marshal_load(input)
  @views, @digest = input
  @view_paths = []
  @digest.taint
end
refresh() click to toggle source
# File lib/signed_form/digestor.rb, line 39
def refresh
  @digest = nil
end
to_s() click to toggle source
# File lib/signed_form/digestor.rb, line 34
def to_s
  @digest ||= SignedForm.digest_store.fetch(@views.sort.join(':')) { hash_files(glob_files) }
end
Also aliased as: digest

Private Instance Methods

get_virtual_path(template) click to toggle source
# File lib/signed_form/digestor.rb, line 63
def get_virtual_path(template)
  template.respond_to?(:virtual_path) ? template.virtual_path : template.instance_variable_get(:@virtual_path)
end
glob_files() click to toggle source
# File lib/signed_form/digestor.rb, line 45
def glob_files
  globbed_files = []
  view_paths.each do |path|
    @views.each { |view| globbed_files += Dir["#{path}/#{view}.*"] }
  end
  globbed_files
end
hash_files(files) click to toggle source
# File lib/signed_form/digestor.rb, line 53
def hash_files(files)
  raise Errors::UnableToDigest, "No files to digest" if files.empty?

  md5 = Digest::MD5.new
  files.sort.each do |entry|
    File.open(entry) { |f| md5 << f.read }
  end
  md5.to_s
end