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