Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Defaults passed to simple_form_for should propagate to input_field

  • Loading branch information...
commit 6d42a0d5b2d45c0349ddea988cc87c475f90b815 1 parent 602c634
Matt De Leon authored
Showing with 43 additions and 25 deletions.
  1. +2 −0  lib/simple_form/form_builder.rb
  2. +41 −25 test/form_builder/general_test.rb
View
2  lib/simple_form/form_builder.rb
@@ -134,6 +134,8 @@ def input(attribute_name, options={}, &block)
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
66 test/form_builder/general_test.rb
@@ -306,49 +306,65 @@ def with_custom_form_for(object, *args, &block)
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
- with_concat_form_for @user, :defaults => { :input_html => { :class => 'default_class', :id => 'default_id' } } do |f|
- f.input :name, :input_html => { :id => 'specific_id' }
+ 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 without changing the defaults' do
+ 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|
- concat(f.input :name)
- concat(f.input :credit_limit)
+ f.input :name, :input_html => { :id => 'specific_id' }
end
-
- assert_select "input.string.default_class[name='user[name]']"
- assert_no_select "input.string[name='user[credit_limit]']"
+ assert_select 'input.default_class#specific_id'
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)
+ 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|
+ f.input_field :name, :id => 'specific_id'
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
Please sign in to comment.
Something went wrong with that request. Please try again.