Sha256: 2a94d960c7ece2a4954bc83e4a8db2928001b2b20c13d0f76b3e9ac894922d31
Contents?: true
Size: 1.32 KB
Versions: 6
Compression:
Stored size: 1.32 KB
Contents
module Basepack module Renderable extend ActiveSupport::Concern module ClassMethods def render(name = nil, options = {}, &rendering_block) if name.blank? render = "render" content = options[:content] || "content" else render = "render_#{name}" content = options[:content] || "content_for_#{name}" end var = "@#{content}".to_sym render_bang = "#{render}!" define_method content do |&block| # hack - view.capture doesn't work for Haml if not called on block with original binding params = block.parameters if params.present? and params.last[0] == :block instance_variable_set(var, [block, eval("proc {|c, s, a, b| c.(s, *a, &b)}", block.binding)]) else instance_variable_set(var, block) end end define_method render_bang, &rendering_block define_method render do |*args, &block| if cont_block = instance_variable_get(var) if cont_block.is_a? Array view.capture(cont_block[0], self, args, block, &cont_block[1]) else view.capture(self, *args, &cont_block) end else send(render_bang, *args, &block) end end end end end end
Version data entries
6 entries across 6 versions & 1 rubygems