heartcombo--simple_form/lib/simple_form/form_builder.rb

46 lines
1.2 KiB
Ruby
Raw Normal View History

2009-11-18 23:50:43 +00:00
module SimpleForm
class FormBuilder < ActionView::Helpers::FormBuilder
# Components used by the folder builder.
# By default is [:label, :input, :hint, :error].
2009-12-09 19:41:20 +00:00
cattr_accessor :components, :instance_writer => false
@@components = [
SimpleForm::Components::Label, SimpleForm::Components::Input,
SimpleForm::Components::Hint, SimpleForm::Components::Error
]
2009-12-09 19:41:20 +00:00
2009-12-09 18:55:39 +00:00
# Make the template accessible for components
attr_reader :template
2009-11-19 21:26:16 +00:00
def input(attribute, options={})
input_type = default_input_type(attribute, options)
2009-12-08 13:48:31 +00:00
2009-12-09 19:41:20 +00:00
pieces = self.components.collect do |klass|
next if options[klass.basename] == false
klass.new(self, attribute, input_type, options).generate
end
2009-12-08 13:48:31 +00:00
2009-12-09 19:41:20 +00:00
pieces.compact.join
2009-11-19 21:26:16 +00:00
end
private
def default_input_type(attribute, options)
return options[:as].to_sym if options[:as]
return :select if options[:collection]
2009-12-09 19:41:20 +00:00
column = @object.column_for_attribute(attribute)
input_type = column.type
case input_type
when :timestamp
:datetime
when :string, nil
2009-12-09 19:41:20 +00:00
attribute.to_s =~ /password/ ? :password : :string
else
input_type
end
end
2009-12-08 19:08:36 +00:00
2009-11-18 23:50:43 +00:00
end
end