Sha256: e0fa3c9b938e0ac7307b684a678e3405e202a1faaf318d49541d725ce6d444b5

Contents?: true

Size: 1.46 KB

Versions: 7

Compression:

Stored size: 1.46 KB

Contents

class SofaGallery::FormBuilder < ActionView::Helpers::FormBuilder
  
  helpers = field_helpers -
    %w(hidden_field fields_for) +
    %w(select)
    
  helpers.each do |name|
    class_eval %Q^
      def #{name}(field, *args)
        options = args.extract_options!
        args << options
        return super if options.delete(:disable_builder)
        default_field('#{name}', field, options){ super }
      end
    ^
  end
  
  def default_field(type, field, options = {}, &block)
    errors = if object.respond_to?(:errors) && object.errors[field].present?
      "<div class='errors'>#{[object.errors[field]].flatten.first}</div>"
    end
    if desc = options.delete(:desc)
      desc = "<div class='desc'>#{desc}</div>"
    end
    %(
      <div class='form_element #{type}_element #{'errors' if errors}'>
        <div class='label'>#{label_for(field, options)}</div>
        <div class='value'>#{yield}</div>
        #{desc}
        #{errors}
      </div>
    ).html_safe
  end
  
  def label_for(field, options)
    label = options.delete(:label) || field.to_s.titleize.capitalize
    "<label for=\"#{object_name}_#{field}\">#{label}</label>".html_safe
  end
  
  def simple_field(label = nil, content = nil, options = {}, &block)
    content ||= @template.capture(&block) if block_given?
    %(
      <div class='form_element #{options.delete(:class)}'>
        <div class='label'>#{label}</div>
        <div class='value'>#{content}</div>
      </div>
    ).html_safe
  end
  
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
sofa_gallery-0.0.6 lib/sofa_gallery/form_builder.rb
sofa_gallery-0.0.5 lib/sofa_gallery/form_builder.rb
sofa_gallery-0.0.4 lib/sofa_gallery/form_builder.rb
sofa_gallery-0.0.3 lib/sofa_gallery/form_builder.rb
sofa_gallery-0.0.2 lib/sofa_gallery/form_builder.rb
sofa_gallery-0.0.1 lib/sofa_gallery/form_builder.rb
sofa_gallery-0.0.0 lib/sofa_gallery/form_builder.rb