class DohWeb::FormBuilder
Public Class Methods
new(model, prefix, error_fields = [])
click to toggle source
# File lib/dohweb/form_builder.rb, line 8 def initialize(model, prefix, error_fields = []) @model, @prefix, @error_fields = model, prefix, error_fields end
Public Instance Methods
checkbox(field, options = {})
click to toggle source
# File lib/dohweb/form_builder.rb, line 24 def checkbox(field, options = {}) options[:checked] = 'checked' if model_value(field) options.delete(:value) errorified_html(field, input_tag(groupified_name(field), :checkbox, options)) end
input(field, type, options = {})
click to toggle source
# File lib/dohweb/form_builder.rb, line 12 def input(field, type, options = {}) errorified_html(field, input_tag(groupified_name(field), type, merge_value(field, options))) end
password(field, options = {})
click to toggle source
# File lib/dohweb/form_builder.rb, line 20 def password(field, options = {}) errorified_html(field, input_tag(groupified_name(field), :password, merge_value(field, options))) end
radio(field, value, options = {})
click to toggle source
# File lib/dohweb/form_builder.rb, line 30 def radio(field, value, options = {}) options[:value] = value options[:checked] = 'checked' if model_value(field) == value errorified_html(field, input_tag(groupified_name(field), :radio, options)) end
select(field, items, options = {})
click to toggle source
# File lib/dohweb/form_builder.rb, line 36 def select(field, items, options = {}) errorified_html(field, select_tag(groupified_name(field), items, merge_value(field, options))) end
select_date(field, start_year, end_year, options = {})
click to toggle source
# File lib/dohweb/form_builder.rb, line 40 def select_date(field, start_year, end_year, options = {}) name = groupified_name(field) value = options[:value] || model_value(field) controls = [] controls << select_month("#{name}__month", options.merge(dtvalmap(value, :month))) if options.key?(:skip_day) controls << input("#{field}__day", :hidden, :value => options[:skip_day]) else controls << select_day("#{name}__day", options.merge(dtvalmap(value, :day))) end controls << select_year("#{name}__year", start_year, end_year, options.merge(dtvalmap(value, :year))) errorified_html(field, controls.join("\n")) end
select_datetime(field, start_year, end_year, options = {})
click to toggle source
# File lib/dohweb/form_builder.rb, line 54 def select_datetime(field, start_year, end_year, options = {}) name = groupified_name(field) value = options[:value] || model_value(field) controls = [] controls << select_month("#{name}__month", options.merge(dtvalmap(value, :month))) controls << select_day("#{name}__day", options.merge(dtvalmap(value, :day))) controls << select_year("#{name}__year", start_year, end_year, options.merge(dtvalmap(value, :year))) controls << select_hour("#{name}__hour", options.merge(dtvalmap(value, :hour))) controls << select_minute("#{name}__minute", options.merge(dtvalmap(value, :minute))) errorified_html(field, controls.join("\n")) end
textarea(field, cols, rows, options = {})
click to toggle source
# File lib/dohweb/form_builder.rb, line 66 def textarea(field, cols, rows, options = {}) options[:name] = groupified_name(field) options[:cols] = cols options[:rows] = rows options.delete(:value) errorified_html(field, full_tag(:textarea, model_value(field).to_s, options)) end
textbox(field, options = {})
click to toggle source
# File lib/dohweb/form_builder.rb, line 16 def textbox(field, options = {}) errorified_html(field, input_tag(groupified_name(field), :text, merge_value(field, options))) end
Private Instance Methods
dtvalmap(value, part)
click to toggle source
# File lib/dohweb/form_builder.rb, line 75 def dtvalmap(value, part) if value {:value => value.send(part) } else {} end end
errorified_html(field, html)
click to toggle source
# File lib/dohweb/form_builder.rb, line 91 def errorified_html(field, html) if @error_fields.include?(field.to_s) full_tag('div', html, :class => 'hasError') else html end end
groupified_name(field)
click to toggle source
# File lib/dohweb/form_builder.rb, line 83 def groupified_name(field) if @prefix "#{@prefix}_#{field}" else field end end
merge_value(field, options)
click to toggle source
# File lib/dohweb/form_builder.rb, line 99 def merge_value(field, options) options[:value] ||= model_value(field) options end
model_value(field)
click to toggle source
# File lib/dohweb/form_builder.rb, line 104 def model_value(field) return nil unless @model if field.to_s.end_with?('[]') field = field.to_s.slice(0..-3) end if @model.respond_to?(field) @model.send(field) elsif @model.respond_to?('[]') @model[field] || @model[field.to_s] else raise "unable to access value for model #{@model}, field #{field}" end end