def select(label, name, values, options = {})
id = id_for(name)
multiple, size = options.values_at(:multiple, :size)
args = {:id => id}
args[:multiple] = 'multiple' if multiple
args[:size] = (size || multiple || 1).to_i
args[:name] = multiple ? "#{name}[]" : name
has_selected, selected = options.key?(:selected), options[:selected]
@g.p do
label_for(id, label, name)
@g.select args do
values.each do |value, o_name|
o_name ||= value
o_args = {:value => value}
o_args[:selected] = 'selected' if has_selected && value == selected
@g.option(o_args){ o_name }
end
end
end
end