# This is the rendering context object you have access to in text processing... class Comatose::ProcessingContext @@supported_methods = %w(page include) @@registered_drops = {} def initialize( page, locals={} ) @locals = locals.stringify_keys if locals.respond_to? :stringify_keys @page = Comatose::PageWrapper.new(page, @locals) end def page @page end def include(path, locals={}) begin page = Comatose::Page.find_by_path(path) page.to_html( @locals.merge(locals) ) rescue "
Page at #{path} could not be found.
" end end def find_by_path(path) begin page = Comatose::Page.find_by_path(path) Comatose::PageWrapper.new(page, @locals) rescue "Page at #{path} could not be found.
" end end def [](key) if key.to_s.downcase == 'page' @page elsif @locals.has_key? key @locals[key] elsif @@registered_drops.has_key? key @@registered_drops[key] end end def has_key?(key) @@supported_methods.include?(key) or @locals.has_key?(key) or @@registered_drops.has_key?(key) end def to_liquid self end def get_binding binding end def method_missing(method_id, *args) method_name = method_id.to_s if @locals.has_key? method_name @locals[method_name] elsif @@registered_drops.has_key? method_name @@registered_drops[method_name].context = self @@registered_drops[method_name] else "" end end class << self def define( name, &block ) begin d = ComatoseDrop.new d.instance_eval(&block) @@registered_drops[name] = d rescue #puts "Drop '#{name}' was not included: #{$!}" ComatoseController.logger.debug "Drop '#{name}' was not included: #{$!}" end end end end # Wrapper around a Liquid::Drop class ComatoseDrop < Liquid::Drop def before_method(method) begin self.send(method.to_sym) rescue #puts "Error calling #{method}: #{$!}" false end end end # # Some Default Filters/Drops # module IncludeFilter def include(input) begin page = Comatose::Page.find_by_path(input) params = @context['params'] # TODO: Add more of the context into the included page's context... page.to_html( { 'params' => params } ) rescue "Page at #{input} could not be found.#{$!}"
end
end
end
Liquid::Template.register_filter(IncludeFilter)
module TimeagoFilter
class Helpers
extend ActionView::Helpers::DateHelper
end
def time_ago(input)
begin
TimeagoFilter::Helpers.distance_of_time_in_words_to_now( input, true )
rescue
#puts "Oops! -- #{$!}"
input
end
end
end
Liquid::Template.register_filter(TimeagoFilter)