Sha256: d8cb9f13264a24fc712b80b8527a4fca07d829862f047bb728ab06ed79554b62
Contents?: true
Size: 1.88 KB
Versions: 3
Compression:
Stored size: 1.88 KB
Contents
module Trestle class Form class Renderer include ::ActionView::Context include ::ActionView::Helpers::CaptureHelper # Whitelisted helpers will concatenate their result to the output buffer when called. WHITELISTED_HELPERS = [:row, :col, :render, :tab, :toolbar, :table, :divider, :h1, :h2, :h3, :h4, :h5, :h6, :panel, :well] # Raw block helpers will pass their block argument directly to the method # without wrapping it in a new output buffer. RAW_BLOCK_HELPERS = [:table] # The #select and #display methods are defined on Kernel. Undefine them so # that they can be delegated to the form builder or template by method_missing. undef_method :select, :display delegate :concat, to: :output_buffer def initialize(template, form=nil) @template = template @form = form || @template.form end def render_form(*args, &block) capture { instance_exec(*args, &block).to_s } end def fields_for(*args, &block) result = @form.fields_for(*args) do |f| renderer = self.class.new(@template, f) renderer.render_form(f, &block) end concat(result) end def method_missing(name, *args, &block) target = @form.respond_to?(name) ? @form : @template if block_given? && !RAW_BLOCK_HELPERS.include?(name) result = target.send(name, *args) do |*blockargs| render_form(*blockargs, &block) end else result = target.send(name, *args, &block) end if target == @form || WHITELISTED_HELPERS.include?(name) concat(result) else result end end def respond_to_missing?(name, include_all=false) @form.respond_to?(name, include_all) || @template.respond_to?(name, include_all) || super end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
trestle-0.8.9 | lib/trestle/form/renderer.rb |
trestle-0.8.8 | lib/trestle/form/renderer.rb |
trestle-0.8.7 | lib/trestle/form/renderer.rb |