# Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
# All files in this distribution are subject to the terms of the Ruby license.
module Ramaze
module Helper
# = Helper::Partial
#
# Please note that this helper is deprecated in favor of # Helper::Render,
# it has been removed from Innate and remains in Ramaze until 2009.05.
#
# === Example Usage
#
# class MyController
# def index
# end
#
# def list
# plain = request['plain']
# "Hello World from List! Plain List == #{plain}"
# end
# end
#
#
#
#
Partial Render Index
#
# #{render_partial(Rs(:list), 'plain' => true)}
#
#
module Partial
module_function
# Renders a url 'inline'.
#
# +url+ normal URL, like you'd use for redirecting.
# +options+ optional, will be used as request parameters.
#
# Issues a mock request to the given +url+ with +options+ turned into
# query arguments.
def render_partial(url, options = {})
Ramaze.deprecated('Helper::Partial#render_partial', 'Helper::Render#render_full')
uri = URI(url)
query = options # Innate::Current.request.params.merge(options)
uri.query = Rack::Utils.build_query(query)
body = nil
Innate::Mock.session do |session|
cookie = Innate::Current.session.cookie
session.cookie = cookie
body = session.get(uri.to_s, options).body
end
body
end
# Render the template file in view_root of the
# current controller.
#
# TODO:
# * Doesn't work for absolute paths, but there are no specs for that yet.
# * the local variable hack isn't working because innate allocates a new
# binding.
# For now one can simply use instance variables, which I prefer anyway.
#
# the local binding hack:
#
# variables.each do |key, value|
# value = "ObjectSpace._id2ref(#{value.object_id})"
# eval "#{key} = #{value}", action.binding
# end
def render_template(path, variables = {})
Ramaze.deprecated('Helper::Partial#render_template')
path = path.to_s
ext = File.extname(path)
basename = File.basename(path, ext)
action = Innate::Current.action.dup
action.layout = nil
action.view = action.node.find_view(basename, 'html')
action.method = action.node.find_method(basename, action.params)
action.variables = action.variables.merge(variables)
action.sync_variables(action)
return action.call if action.valid?
raise(ArgumentError, "cannot render %p" % path)
end
def render_action(method, *params)
Ramaze.deprecated('Helper::Partial#render_action', 'Helper::Render#render_full')
render_partial(r(method), *params)
end
end
end
end