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