module Markaby
# Markaby helpers for Rails.
module ActionControllerHelpers
# Returns a string of HTML built from the attached +block+. Any +options+ are
# passed into the render method.
#
# Use this method in your controllers to output Markaby directly from inside.
def render_markaby(options = {}, &block)
render options.merge({ :text => Builder.new({}, self, &block).to_s })
end
end
class ActionViewTemplateHandler
def initialize(action_view)
@action_view = action_view
end
def render(template, local_assigns = {})
Template.new(template).render(@action_view.assigns.merge(local_assigns), @action_view)
end
end
class Builder
# Emulate ERB to satisfy helpers like form_for.
def _erbout; self end
# Content_for will store the given block in an instance variable for later use
# in another template or in the layout.
#
# The name of the instance variable is content_for_ to stay consistent
# with @content_for_layout which is used by ActionView's layouts.
#
# Example:
#
# content_for("header") do
# h1 "Half Shark and Half Lion"
# end
#
# If used several times, the variable will contain all the parts concatenated.
def content_for(name, &block)
@helpers.assigns["content_for_#{name}"] =
eval("@content_for_#{name} = (@content_for_#{name} || '') + capture(&block)")
end
end
end