Merge remote-tracking branch 'origin/master' into rails_4

Conflicts:
	Gemfile
	Gemfile.lock
	gemfiles/Gemfile-rails.3.0.x
	gemfiles/Gemfile-rails.3.1.x
This commit is contained in:
Rafael Mendonça França 2012-12-26 23:40:01 -03:00
commit db7676bc38
3 changed files with 46 additions and 26 deletions

View File

@ -12,6 +12,8 @@
* Generates additional wrapper class based on object + attribute name.
([@lucasmazza](https://github/lucasmazza))
Closes [#576](https://github.com/plataformatec/simple_form/issues/576).
* Allow `input_field` to work with `:defaults` options.
([@smidwap](https://github.com/smidwap))
### bug fix
* Do not lookup for hints if it was explicitly given false.

View File

@ -134,6 +134,8 @@ module SimpleForm
def input_field(attribute_name, options={})
options = options.dup
options[:input_html] = options.except(:as, :collection, :label_method, :value_method)
options = @defaults.deep_dup.deep_merge(options) if @defaults
SimpleForm::Wrappers::Root.new([:input], :wrapper => false).render find_input(attribute_name, options)
end

View File

@ -306,49 +306,65 @@ class FormBuilderTest < ActionView::TestCase
end
# DEFAULT OPTIONS
test 'builder should receive a default argument and pass it to the inputs' do
with_concat_form_for @user, :defaults => { :input_html => { :class => 'default_class' } } do |f|
f.input :name
[:input, :input_field].each do |method|
test "builder should receive a default argument and pass it to the inputs when calling '#{method}'" do
with_concat_form_for @user, :defaults => { :input_html => { :class => 'default_class' } } do |f|
f.send(method, :name)
end
assert_select 'input.default_class'
end
test "builder should receive a default argument and pass it to the inputs without changing the defaults when calling '#{method}'" do
with_concat_form_for @user, :defaults => { :input_html => { :class => 'default_class', :id => 'default_id' } } do |f|
concat(f.send(method, :name))
concat(f.send(method, :credit_limit))
end
assert_select "input.string.default_class[name='user[name]']"
assert_no_select "input.string[name='user[credit_limit]']"
end
test "builder should receive a default argument and pass it to the inputs and nested form when calling '#{method}'" do
@user.company = Company.new(1, 'Empresa')
with_concat_form_for @user, :defaults => { :input_html => { :class => 'default_class' } } do |f|
concat(f.send(method, :name))
concat(f.simple_fields_for(:company) do |company_form|
concat(company_form.send(method, :name))
end)
end
assert_select "input.string.default_class[name='user[name]']"
assert_select "input.string.default_class[name='user[company_attributes][name]']"
end
assert_select 'input.default_class'
end
test 'builder should receive a default argument and pass it to the inputs, respecting the specific options' do
test "builder should receive a default argument and pass it to the inputs when calling 'input', respecting the specific options" do
with_concat_form_for @user, :defaults => { :input_html => { :class => 'default_class' } } do |f|
f.input :name, :input_html => { :id => 'specific_id' }
end
assert_select 'input.default_class#specific_id'
end
test 'builder should receive a default argument and pass it to the inputs, overwriting the defaults with specific options' do
test "builder should receive a default argument and pass it to the inputs when calling 'input_field', respecting the specific options" do
with_concat_form_for @user, :defaults => { :input_html => { :class => 'default_class' } } do |f|
f.input_field :name, :id => 'specific_id'
end
assert_select 'input.default_class#specific_id'
end
test "builder should receive a default argument and pass it to the inputs when calling 'input', overwriting the defaults with specific options" do
with_concat_form_for @user, :defaults => { :input_html => { :class => 'default_class', :id => 'default_id' } } do |f|
f.input :name, :input_html => { :id => 'specific_id' }
end
assert_select 'input.default_class#specific_id'
end
test 'builder should receive a default argument and pass it to the inputs without changing the defaults' do
test "builder should receive a default argument and pass it to the inputs when calling 'input_field', overwriting the defaults with specific options" do
with_concat_form_for @user, :defaults => { :input_html => { :class => 'default_class', :id => 'default_id' } } do |f|
concat(f.input :name)
concat(f.input :credit_limit)
f.input_field :name, :id => 'specific_id'
end
assert_select "input.string.default_class[name='user[name]']"
assert_no_select "input.string[name='user[credit_limit]']"
end
test 'builder should receive a default argument and pass it to the inputs and nested form' do
@user.company = Company.new(1, 'Empresa')
with_concat_form_for @user, :defaults => { :input_html => { :class => 'default_class' } } do |f|
concat(f.input :name)
concat(f.simple_fields_for(:company) do |company_form|
concat(company_form.input :name)
end)
end
assert_select "input.string.default_class[name='user[name]']"
assert_select "input.string.default_class[name='user[company_attributes][name]']"
assert_select 'input.default_class#specific_id'
end
# WITHOUT OBJECT