class Nanoc::Core::Executor
Public Class Methods
new(rep, compilation_context, dependency_tracker)
click to toggle source
# File lib/nanoc/core/executor.rb, line 6 def initialize(rep, compilation_context, dependency_tracker) @rep = rep @compilation_context = compilation_context @dependency_tracker = dependency_tracker end
Public Instance Methods
assigns()
click to toggle source
# File lib/nanoc/core/executor.rb, line 83 def assigns view_context.assigns_for(@rep, site: @compilation_context.site) end
filter(filter_name, filter_args = {})
click to toggle source
# File lib/nanoc/core/executor.rb, line 12 def filter(filter_name, filter_args = {}) filter = filter_for_filtering(filter_name) begin Nanoc::Core::NotificationCenter.post(:filtering_started, @rep, filter_name) # Run filter last = @compilation_context.compiled_content_store.get_current(@rep) source = last.binary? ? last.filename : last.string filter_args.freeze result = filter.setup_and_run(source, filter_args) last = if filter.class.to_binary? Nanoc::Core::BinaryContent.new(filter.output_filename).tap(&:freeze) else Nanoc::Core::TextualContent.new(result).tap(&:freeze) end # Store @compilation_context.compiled_content_store.set_current(@rep, last) ensure Nanoc::Core::NotificationCenter.post(:filtering_ended, @rep, filter_name) end end
filter_for_filtering(filter_name)
click to toggle source
# File lib/nanoc/core/executor.rb, line 105 def filter_for_filtering(filter_name) klass = Nanoc::Core::Filter.named!(filter_name) last = @compilation_context.compiled_content_store.get_current(@rep) if klass.from_binary? && !last.binary? raise Nanoc::Core::Errors::CannotUseBinaryFilter.new(@rep, klass) elsif !klass.from_binary? && last.binary? raise Nanoc::Core::Errors::CannotUseTextualFilter.new(@rep, klass) end klass.new(assigns) end
find_layout(arg)
click to toggle source
# File lib/nanoc/core/executor.rb, line 91 def find_layout(arg) req_id = arg.__nanoc_cleaned_identifier layout = layouts[req_id] return layout if layout if use_globs? pat = Nanoc::Core::Pattern.from(arg) layout = layouts.find { |l| pat.match?(l.identifier) } return layout if layout end raise Nanoc::Core::Errors::UnknownLayout.new(arg) end
layout(layout_identifier, extra_filter_args = nil)
click to toggle source
# File lib/nanoc/core/executor.rb, line 37 def layout(layout_identifier, extra_filter_args = nil) layout = find_layout(layout_identifier) filter_name_and_args = @compilation_context.filter_name_and_args_for_layout(layout) filter_name = filter_name_and_args.name if filter_name.nil? raise Nanoc::Core::Errors::CannotDetermineFilter.new(layout_identifier) end filter_args = filter_name_and_args.args filter_args = filter_args.merge(extra_filter_args || {}) filter_args.freeze # Check whether item can be laid out last = @compilation_context.compiled_content_store.get_current(@rep) raise Nanoc::Core::Errors::CannotLayoutBinaryItem.new(@rep) if last.binary? # Create filter klass = Nanoc::Core::Filter.named!(filter_name) layout_view = Nanoc::Core::LayoutView.new(layout, view_context) filter = klass.new(assigns.merge(layout: layout_view)) # Visit @dependency_tracker.bounce(layout, raw_content: true) begin Nanoc::Core::NotificationCenter.post(:filtering_started, @rep, filter_name) # Layout content = layout.content arg = content.binary? ? content.filename : content.string res = filter.setup_and_run(arg, filter_args) # Store last = Nanoc::Core::TextualContent.new(res).tap(&:freeze) @compilation_context.compiled_content_store.set_current(@rep, last) ensure Nanoc::Core::NotificationCenter.post(:filtering_ended, @rep, filter_name) end end
layouts()
click to toggle source
# File lib/nanoc/core/executor.rb, line 87 def layouts @compilation_context.site.layouts end
snapshot(snapshot_name)
click to toggle source
# File lib/nanoc/core/executor.rb, line 77 def snapshot(snapshot_name) last = @compilation_context.compiled_content_store.get_current(@rep) @compilation_context.compiled_content_store.set(@rep, snapshot_name, last) Nanoc::Core::NotificationCenter.post(:snapshot_created, @rep, snapshot_name) end
use_globs?()
click to toggle source
# File lib/nanoc/core/executor.rb, line 118 def use_globs? @compilation_context.site.config[:string_pattern_type] == 'glob' end
view_context()
click to toggle source
# File lib/nanoc/core/executor.rb, line 122 def view_context @_view_context ||= Nanoc::Core::ViewContextForCompilation.new( reps: @compilation_context.reps, items: @compilation_context.site.items, dependency_tracker: @dependency_tracker, compilation_context: @compilation_context, compiled_content_store: @compilation_context.compiled_content_store, ) end