Skip to content

Commit

Permalink
Partials are now reloaded
Browse files Browse the repository at this point in the history
  • Loading branch information
LightGuard committed Apr 8, 2014
1 parent c02efb6 commit 1413055
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 34 deletions.
3 changes: 2 additions & 1 deletion lib/awestruct/cli/auto.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,10 @@ def run()
generate_thread = Thread.new {
begin

# TODO: Have to figure something out for extensions and other files without an output path
# Probably add another method in engin to to do the regen w/o mucking with site.pages and run through things again
page = engine.page_by_output_path(path)
if ( page )

pages = engine.generate_page_and_dependencies( page )

if ( guard )
Expand Down
3 changes: 0 additions & 3 deletions lib/awestruct/dependencies.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,6 @@ def self.push_page(page)
def self.pop_page
page = @pages.pop
$LOG.debug "pop #{page.output_path} #{@pages.empty?}" if $LOG.debug?
if ( @pages.empty? && ! page.nil? )
page.dependencies.persist!
end
end


Expand Down
56 changes: 35 additions & 21 deletions lib/awestruct/engine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -318,11 +318,13 @@ def generate_page(page, generated_path, produce_output=true)

# path - relative to output dir
def page_by_output_path(path)
site.pages.find { |p|
p.source_path.to_s == path
} || site.layouts.find { |p|
p.source_path.to_s == path
}
if (path.include? '_layout')
site.layouts.find { |p| p.source_path.to_s == path }
elsif (path.include? '_partial')
site.partials.find { |p| p.source_path.to_s == path }
else
site.pages.find { |p| p.source_path.to_s == path }
end
end

def generate_page_and_dependencies(page)
Expand All @@ -331,31 +333,33 @@ def generate_page_and_dependencies(page)
return
end

if !page.output_path.nil?
if !page.output_path.nil? && !page.is_partial? && !page.__is_layout
generate_page_internal(page)
end

pages = [ page ]

pages.each do |page|
$LOG.debug "--------------------" if $LOG.debug?
$LOG.debug "Page: #{page.output_path} #{page.relative_source_path} #{page.__is_layout ? 'Layout':''}" if $LOG.debug?
$LOG.debug "Detected change in content (#{page.dependencies.content_hash})" if page.dependencies.has_changed_content if $LOG.debug?
$LOG.debug "!! Detected change in front matter. To fully reflect the change you'll need to restart Awestruct (#{page.dependencies.key_hash})" if page.dependencies.has_changed_keys if $LOG.debug?
$LOG.debug "No changes detected" unless page.dependencies.has_changed_content or page.dependencies.has_changed_keys if $LOG.debug?
$LOG.debug "Dependencies Matrix: (non unique source path)" if $LOG.debug?
$LOG.debug "\t Outgoing dependencies:" if $LOG.debug?
$LOG.debug "\t\t Content -> #{page.dependencies.dependencies.size}" if $LOG.debug?
$LOG.debug "\t\t Key -> #{page.dependencies.key_dependencies.size}" if $LOG.debug?
$LOG.debug "\t Incoming dependencies:" if $LOG.debug?
$LOG.debug "\t\t Content <- #{page.dependencies.dependents.size}" if $LOG.debug?
$LOG.debug "\t\t Key <- #{page.dependencies.key_dependents.size}" if $LOG.debug?
$LOG.debug "--------------------" if $LOG.debug?
pages.each do |p|
if $LOG.debug?
$LOG.debug "--------------------"
$LOG.debug "Page: #{p.output_path} #{p.relative_source_path} #{p.__is_layout ? 'Layout':''}"
$LOG.debug "Detected change in content (#{p.dependencies.content_hash})" if p.dependencies.has_changed_content
$LOG.debug "!! Detected change in front matter. To fully reflect the change you'll need to restart Awestruct (#{p.dependencies.key_hash})" if p.dependencies.has_changed_keys
$LOG.debug "No changes detected" unless p.dependencies.has_changed_content or p.dependencies.has_changed_keys
$LOG.debug "Dependencies Matrix: (non unique source path)"
$LOG.debug "\t Outgoing dependencies:"
$LOG.debug "\t\t Content -> #{p.dependencies.dependencies.size}"
$LOG.debug "\t\t Key -> #{p.dependencies.key_dependencies.size}"
$LOG.debug "\t Incoming dependencies:"
$LOG.debug "\t\t Content <- #{p.dependencies.dependents.size}"
$LOG.debug "\t\t Key <- #{p.dependencies.key_dependents.size}"
$LOG.debug "--------------------"
end
end

regen_pages = Set.new

if page.dependencies.has_changed_content or page.__is_layout
if page.dependencies.has_changed_content || page.__is_layout || page.is_partial?
regen_pages += page.dependencies.dependents
end

Expand All @@ -372,7 +376,17 @@ def generate_page_and_dependencies(page)

$LOG.debug "Starting regeneration of content dependent pages:" if regen_pages.size > 0 && $LOG.debug?

old_site_pages = site.pages
site.pages = regen_pages

@pipeline = Pipeline.new
load_yamls
load_pipeline
execute_pipeline
@site.pages = old_site_pages

regen_pages.each do |p|
puts "Regenerating page #{p.output_path}"
generate_page_internal(p)
pages << p
end
Expand Down
31 changes: 23 additions & 8 deletions lib/awestruct/extensions/partial.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,38 @@ def partial(path, params = {})
end

page = site.engine.load_site_page( filename )

return nil if !page

params.each do |k,v|
page.send( "#{k}=", v )
end if params

page.send("output_page=", self[:page])

begin
page.content
rescue Exception => e
ExceptionHelper.log_error "Error occurred while rendering partial #{filename} contained in #{self[:page].source_path}"
ExceptionHelper.backtrace e
page.partial = true

from_site = site.partials.find {|p| p.source_path == page.source_path}

# Setup dependency tracking
if from_site
from_site.dependencies.add_dependent self[:page]
self[:page].dependencies.add_dependency from_site
Awestruct::Dependencies.track_dependency(from_site)
else
page.dependencies.add_dependent self[:page]
self[:page].dependencies.add_dependency page
Awestruct::Dependencies.track_dependency(page)
site.partials << page

begin
page.content
rescue Exception => e
ExceptionHelper.log_error "Error occurred while rendering partial #{filename} contained in #{self[:page].source_path}"
ExceptionHelper.backtrace e
end
end
end

end
end
end
end

7 changes: 7 additions & 0 deletions lib/awestruct/page.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class Page < Awestruct::AStruct
attr_accessor :site
attr_accessor :handler
attr_reader :dependencies
attr_writer :partial

def initialize(site, handler=nil)
@site = site
Expand Down Expand Up @@ -92,6 +93,8 @@ def stale?
def stale_output?(output_path)
return true if ! File.exist?( output_path )
return true if input_mtime > File.mtime( output_path )
return true if stale?
# TODO: Add stale callback and execute it
false
end

Expand Down Expand Up @@ -177,5 +180,9 @@ def ==(other_page)
self.object_id == other_page.object_id
end

def is_partial?
@partial
end

end
end
4 changes: 3 additions & 1 deletion lib/awestruct/site.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ class Site < Awestruct::AStruct
attr_reader :tmp_dir
attr_reader :timestamp

attr_reader :pages
attr_accessor :pages
attr_reader :layouts
attr_reader :partials

attr_reader :config
attr_reader :engine
Expand All @@ -20,6 +21,7 @@ def initialize(engine, config)
@engine = engine
@pages = []
@layouts = Layouts.new
@partials = []
@config = config
self.encoding = false
@timestamp = Time.now.to_i
Expand Down

0 comments on commit 1413055

Please sign in to comment.