class Awestruct::Dependencies

Attributes

content_hash[R]
dependencies[R]
dependents[R]
has_changed_content[R]
has_changed_keys[R]
key_dependencies[R]
key_dependents[R]
key_hash[R]
page[R]

Public Class Methods

new(page) click to toggle source
# File lib/awestruct/dependencies.rb, line 63
def initialize(page)
  @page = page
  @dependencies = Set.new
  @key_dependencies   = Set.new
  @dependents   = Set.new
  @key_dependents   = Set.new
  @content_hash = nil
  @key_hash = nil
  @has_changed_content = false
  @has_changed_keys = false
end
pop_page() click to toggle source
# File lib/awestruct/dependencies.rb, line 40
def self.pop_page
  page = @pages.pop
  $LOG.debug "pop #{page.output_path} #{@pages.empty?}" if $LOG.debug?
end
push_page(page) click to toggle source
# File lib/awestruct/dependencies.rb, line 28
def self.push_page(page)
  $LOG.debug "push #{page.output_path}" if $LOG.debug?
  if ( top_page.nil? )
    $LOG.debug "clearing dependencies" if $LOG.debug?
    page.dependencies.clear
  else
    $LOG.debug "adding page as a dependency to top_page" if $LOG.debug?
    top_page.dependencies.add_dependency( page )
  end
  @pages.push( page )
end
should_track_dependencies() click to toggle source
# File lib/awestruct/dependencies.rb, line 19
def self.should_track_dependencies
  @track_dependencies
end
top_page() click to toggle source
# File lib/awestruct/dependencies.rb, line 23
def self.top_page
  @pages ||= []
  @pages.first
end
track_dependencies=(bol) click to toggle source
# File lib/awestruct/dependencies.rb, line 15
def self.track_dependencies=(bol)
  @track_dependencies = bol
end
track_dependency(dep) click to toggle source
# File lib/awestruct/dependencies.rb, line 46
def self.track_dependency(dep)
  return if top_page.nil?
  return if top_page == dep
  $LOG.debug "dep #{top_page.relative_source_path} - #{dep.relative_source_path}" if $LOG.debug?
  top_page.dependencies.add_dependency(dep)
end
track_key_dependency(dep, key) click to toggle source
# File lib/awestruct/dependencies.rb, line 53
def self.track_key_dependency(dep, key)
  return if !Awestruct::Dependencies.should_track_dependencies
  return if top_page.nil?
  return if top_page == dep
  $LOG.debug "dep key #{top_page.relative_source_path} - #{dep.relative_source_path} -> #{key}" if $LOG.debug?
  $LOG.debug "callers #{Kernel.caller}" if $LOG.debug?
  top_page.dependencies.add_key_dependency(dep)
end

Public Instance Methods

<<(dep) click to toggle source
# File lib/awestruct/dependencies.rb, line 103
def <<(dep)
  add_dependency( dep )
end
add_dependency(dep) click to toggle source
# File lib/awestruct/dependencies.rb, line 107
def add_dependency(dep)
  return if dep.nil?
  return if @page.do_not_track_dependencies
  return if @page.output_path.nil?
  return if dep == @page
  $LOG.debug "adding dependency #{dep.source_path} to #{page.source_path}" if $LOG.debug?
  @dependencies << dep
  dep.dependencies.add_dependent( page )
end
add_dependent(dep) click to toggle source
# File lib/awestruct/dependencies.rb, line 126
def add_dependent(dep)
  return if dep.nil?
  @dependents << dep
end
add_key_dependency(dep) click to toggle source
# File lib/awestruct/dependencies.rb, line 117
def add_key_dependency(dep)
  return if dep.nil?
  return if @page.do_not_track_dependencies
  return if @page.output_path.nil?
  return if dep == @page
  @key_dependencies << dep
  dep.dependencies.add_key_dependent( page )
end
add_key_dependent(dep) click to toggle source
# File lib/awestruct/dependencies.rb, line 131
def add_key_dependent(dep)
  return if dep.nil?
  @key_dependents << dep
end
clear() click to toggle source
# File lib/awestruct/dependencies.rb, line 141
def clear
  @dependencies.clear
  @dependents.each do |d|
    if (d.instance_of? Awestruct::Dependencies)
      d.remove_dependent( page )
    else
      d.dependencies.remove_dependent( page )
    end
  end
end
content_hash=(key) click to toggle source
# File lib/awestruct/dependencies.rb, line 89
def content_hash=(key)
  $LOG.debug "content_hash #{key}" if $LOG.debug?
  if @content_hash.nil?
    @has_changed_content = false
  else
    if key.eql? @content_hash
      @has_changed_content = false
    else
      @has_changed_content = true
    end
  end
  @content_hash = key
end
find_page_by_path(path) click to toggle source
# File lib/awestruct/dependencies.rb, line 196
def find_page_by_path(path)
  page.site.pages_by_relative_source_path[ path ]
end
key_hash=(key) click to toggle source
# File lib/awestruct/dependencies.rb, line 75
def key_hash=(key)
  $LOG.debug "key_hash #{key}" if $LOG.debug?
  if @key_hash.nil?
    @has_changed_keys = false
  else
    if key.eql? @key_hash
      @has_changed_keys = false
    else
      @has_changed_keys = true
    end
  end
  @key_hash = key
end
load!() click to toggle source
# File lib/awestruct/dependencies.rb, line 169
def load!
  return if  page.output_path.nil? || page.output_path == ''
  file = File.join( @page.site.config.dir, '.awestruct', 'dependency-cache', page.output_path )
  $LOG.debug "load #{file}" if $LOG.debug?
  if ( File.exist?( file ) )
    File.open( file, 'r' ) do |file|
      file.each_line do |line|
        type, path = line.split(':')
        path ||= ""
        path.strip!
        if type.eql? 'c' or type.eql? 'k'
          d = find_page_by_path( path )
          unless d.nil?
            add_dependency( d ) if 'c'.eql? type
            add_key_dependency( d ) if 'k'.eql? type
          end
        else
          self.content_hash = path if 'ch'.eql? type
          self.key_hash = path if 'kh'.eql? type
        end
      end
    end
    return true
  end
  false
end
persist!() click to toggle source
# File lib/awestruct/dependencies.rb, line 152
def persist!
  return if  page.output_path.nil? || page.output_path == ''
  file = File.join( @page.site.config.dir.to_s, '.awestruct', 'dependency-cache', page.output_path )
  $LOG.debug "store #{file}" if $LOG.debug?
  FileUtils.mkdir_p( File.dirname( file ) )
  File.open( file, 'w' ) do |file|
    file.puts "ch:#{@content_hash}"
    file.puts "kh:#{@key_hash}"
    @dependencies.collect{|e| e.relative_source_path }.uniq.each do |d|
      file.puts "c:#{d}" unless d.nil?
    end
    @key_dependencies.collect{|e| e.relative_source_path }.uniq.each do |d|
      file.puts "k:#{d}" unless d.nil?
    end
  end
end
remove_dependent(dep) click to toggle source
# File lib/awestruct/dependencies.rb, line 136
def remove_dependent(dep)
  return if dep.nil?
  @dependents.delete( dep )
end