formtastic 2.3.0.rc2 → 2.3.0.rc3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +27 -1
- data/Appraisals +5 -0
- data/CHANGELOG +1 -0
- data/README.textile +19 -26
- data/formtastic.gemspec +4 -3
- data/gemfiles/rails_3.0.gemfile +1 -1
- data/gemfiles/rails_3.1.gemfile +1 -1
- data/gemfiles/rails_3.2.gemfile +1 -1
- data/gemfiles/rails_4.0.4.gemfile +7 -0
- data/gemfiles/rails_4.gemfile +1 -1
- data/lib/formtastic/form_builder.rb +9 -1
- data/lib/formtastic/helpers/form_helper.rb +11 -6
- data/lib/formtastic/helpers/inputs_helper.rb +6 -1
- data/lib/formtastic/inputs/base/collections.rb +1 -1
- data/lib/formtastic/inputs/base/validations.rb +1 -1
- data/lib/formtastic/inputs/boolean_input.rb +4 -14
- data/lib/formtastic/inputs/check_boxes_input.rb +7 -1
- data/lib/formtastic/inputs/radio_input.rb +2 -0
- data/lib/formtastic/util.rb +13 -1
- data/lib/formtastic/version.rb +1 -1
- data/lib/generators/templates/_form.html.slim +2 -2
- data/lib/generators/templates/formtastic.rb +15 -1
- data/spec/actions/generic_action_spec.rb +3 -3
- data/spec/builder/custom_builder_spec.rb +7 -7
- data/spec/builder/semantic_fields_for_spec.rb +8 -8
- data/spec/generators/formtastic/form/form_generator_spec.rb +6 -6
- data/spec/helpers/action_helper_spec.rb +11 -11
- data/spec/helpers/form_helper_spec.rb +22 -11
- data/spec/helpers/input_helper_spec.rb +44 -44
- data/spec/helpers/inputs_helper_spec.rb +64 -31
- data/spec/helpers/semantic_errors_helper_spec.rb +12 -12
- data/spec/i18n_spec.rb +5 -5
- data/spec/inputs/boolean_input_spec.rb +6 -5
- data/spec/inputs/check_boxes_input_spec.rb +27 -9
- data/spec/inputs/country_input_spec.rb +5 -5
- data/spec/inputs/custom_input_spec.rb +1 -1
- data/spec/inputs/date_picker_input_spec.rb +4 -4
- data/spec/inputs/datetime_picker_input_spec.rb +4 -4
- data/spec/inputs/hidden_input_spec.rb +3 -3
- data/spec/inputs/include_blank_spec.rb +2 -2
- data/spec/inputs/number_input_spec.rb +36 -36
- data/spec/inputs/radio_input_spec.rb +23 -5
- data/spec/inputs/range_input_spec.rb +19 -19
- data/spec/inputs/select_input_spec.rb +40 -20
- data/spec/inputs/string_input_spec.rb +2 -2
- data/spec/inputs/time_picker_input_spec.rb +4 -4
- data/spec/localizer_spec.rb +1 -1
- data/spec/spec_helper.rb +203 -188
- data/spec/support/custom_macros.rb +8 -8
- metadata +15 -13
@@ -56,13 +56,13 @@ describe 'Formtastic::FormBuilder#inputs' do
|
|
56
56
|
describe 'when a :for option is provided' do
|
57
57
|
|
58
58
|
before do
|
59
|
-
@new_post.stub
|
60
|
-
@new_post.stub
|
61
|
-
@new_post.stub
|
59
|
+
@new_post.stub(:respond_to?).and_return(true, true)
|
60
|
+
@new_post.stub(:respond_to?).with(:empty?).and_return(false)
|
61
|
+
@new_post.stub(:author).and_return(@bob)
|
62
62
|
end
|
63
63
|
|
64
64
|
it 'should render nested inputs' do
|
65
|
-
@bob.stub
|
65
|
+
@bob.stub(:column_for_attribute).and_return(double('column', :type => :string, :limit => 255))
|
66
66
|
|
67
67
|
concat(semantic_form_for(@new_post) do |builder|
|
68
68
|
inputs = builder.inputs :for => [:author, @bob] do |bob_builder|
|
@@ -75,7 +75,7 @@ describe 'Formtastic::FormBuilder#inputs' do
|
|
75
75
|
end
|
76
76
|
|
77
77
|
it 'should concat rendered nested inputs to the template' do
|
78
|
-
@bob.stub
|
78
|
+
@bob.stub(:column_for_attribute).and_return(double('column', :type => :string, :limit => 255))
|
79
79
|
|
80
80
|
concat(semantic_form_for(@new_post) do |builder|
|
81
81
|
builder.inputs :for => [:author, @bob] do |bob_builder|
|
@@ -104,8 +104,8 @@ describe 'Formtastic::FormBuilder#inputs' do
|
|
104
104
|
|
105
105
|
describe "as a symbol representing a has_many association name" do
|
106
106
|
before do
|
107
|
-
@new_post.stub
|
108
|
-
@new_post.stub
|
107
|
+
@new_post.stub(:authors).and_return([@bob, @fred])
|
108
|
+
@new_post.stub(:authors_attributes=)
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'should nest the inputs with a fieldset, legend and :name input for each item' do
|
@@ -177,7 +177,7 @@ describe 'Formtastic::FormBuilder#inputs' do
|
|
177
177
|
end
|
178
178
|
|
179
179
|
it 'should pass options down to semantic_fields_for' do
|
180
|
-
@bob.stub
|
180
|
+
@bob.stub(:column_for_attribute).and_return(double('column', :type => :string, :limit => 255))
|
181
181
|
|
182
182
|
concat(semantic_form_for(@new_post) do |builder|
|
183
183
|
inputs = builder.inputs :for => [:author, @bob], :for_options => { :index => 10 } do |bob_builder|
|
@@ -341,17 +341,17 @@ describe 'Formtastic::FormBuilder#inputs' do
|
|
341
341
|
describe 'without a block' do
|
342
342
|
|
343
343
|
before do
|
344
|
-
::Post.stub
|
345
|
-
:comments =>
|
344
|
+
::Post.stub(:reflections).and_return({:author => double('reflection', :options => {}, :macro => :belongs_to),
|
345
|
+
:comments => double('reflection', :options => {}, :macro => :has_many) })
|
346
346
|
|
347
|
-
@new_post.stub
|
348
|
-
@new_post.stub
|
349
|
-
@new_post.stub
|
347
|
+
@new_post.stub(:title)
|
348
|
+
@new_post.stub(:body)
|
349
|
+
@new_post.stub(:author_id)
|
350
350
|
|
351
|
-
@new_post.stub
|
352
|
-
@new_post.stub
|
353
|
-
@new_post.stub
|
354
|
-
@new_post.stub
|
351
|
+
@new_post.stub(:column_for_attribute).with(:title).and_return(double('column', :type => :string, :limit => 255))
|
352
|
+
@new_post.stub(:column_for_attribute).with(:body).and_return(double('column', :type => :text))
|
353
|
+
@new_post.stub(:column_for_attribute).with(:created_at).and_return(double('column', :type => :datetime))
|
354
|
+
@new_post.stub(:column_for_attribute).with(:author).and_return(nil)
|
355
355
|
end
|
356
356
|
|
357
357
|
describe 'with no args (quick forms syntax)' do
|
@@ -402,12 +402,12 @@ describe 'Formtastic::FormBuilder#inputs' do
|
|
402
402
|
context "with a polymorphic association" do
|
403
403
|
|
404
404
|
before do
|
405
|
-
@new_post.stub
|
406
|
-
@new_post.class.stub
|
407
|
-
:commentable =>
|
405
|
+
@new_post.stub(:commentable)
|
406
|
+
@new_post.class.stub(:reflections).and_return({
|
407
|
+
:commentable => double('macro_reflection', :options => { :polymorphic => true }, :macro => :belongs_to)
|
408
408
|
})
|
409
|
-
@new_post.stub
|
410
|
-
|
409
|
+
@new_post.stub(:column_for_attribute).with(:commentable).and_return(
|
410
|
+
double('column', :type => :integer)
|
411
411
|
)
|
412
412
|
end
|
413
413
|
|
@@ -447,15 +447,15 @@ describe 'Formtastic::FormBuilder#inputs' do
|
|
447
447
|
context "with a polymorphic association" do
|
448
448
|
|
449
449
|
it 'should raise an error for polymorphic associations (the collection class cannot be guessed)' do
|
450
|
-
@new_post.stub
|
451
|
-
@new_post.class.stub
|
452
|
-
:commentable =>
|
450
|
+
@new_post.stub(:commentable)
|
451
|
+
@new_post.class.stub(:reflections).and_return({
|
452
|
+
:commentable => double('macro_reflection', :options => { :polymorphic => true }, :macro => :belongs_to)
|
453
453
|
})
|
454
|
-
@new_post.stub
|
455
|
-
|
454
|
+
@new_post.stub(:column_for_attribute).with(:commentable).and_return(
|
455
|
+
double('column', :type => :integer)
|
456
456
|
)
|
457
|
-
@new_post.class.stub
|
458
|
-
|
457
|
+
@new_post.class.stub(:reflect_on_association).with(:commentable).and_return(
|
458
|
+
double('reflection', :macro => :belongs_to, :options => { :polymorphic => true })
|
459
459
|
)
|
460
460
|
|
461
461
|
expect {
|
@@ -472,7 +472,7 @@ describe 'Formtastic::FormBuilder#inputs' do
|
|
472
472
|
describe 'when a :for option is provided' do
|
473
473
|
describe 'and an object is given' do
|
474
474
|
it 'should render nested inputs' do
|
475
|
-
@bob.stub
|
475
|
+
@bob.stub(:column_for_attribute).and_return(double('column', :type => :string, :limit => 255))
|
476
476
|
concat(semantic_form_for(@new_post) do |builder|
|
477
477
|
concat(builder.inputs(:login, :for => @bob))
|
478
478
|
end)
|
@@ -516,7 +516,40 @@ describe 'Formtastic::FormBuilder#inputs' do
|
|
516
516
|
output_buffer.should have_tag('form > fieldset#my-id-2.inputs > legend', /^#{@legend_text_using_arg}$/)
|
517
517
|
end
|
518
518
|
end
|
519
|
-
|
519
|
+
|
520
|
+
describe 'when a :except option is provided' do
|
521
|
+
describe 'and an object is given' do
|
522
|
+
it 'should render a form with a fieldset containing only string item' do
|
523
|
+
concat(semantic_form_for(@new_post) do |builder|
|
524
|
+
concat(builder.inputs :except => :body)
|
525
|
+
end)
|
526
|
+
|
527
|
+
output_buffer.should have_tag('form > fieldset.inputs > ol > li', :count => 2)
|
528
|
+
output_buffer.should have_tag('form > fieldset.inputs > ol > li.string')
|
529
|
+
output_buffer.should_not have_tag('form > fieldset.inputs > ol > li.text')
|
530
|
+
end
|
531
|
+
|
532
|
+
it 'should render a form with a fieldset containing only text item' do
|
533
|
+
concat(semantic_form_for(@new_post) do |builder|
|
534
|
+
concat(builder.inputs :except => :title)
|
535
|
+
end)
|
536
|
+
|
537
|
+
output_buffer.should have_tag('form > fieldset.inputs > ol > li', :count => 2)
|
538
|
+
output_buffer.should_not have_tag('form > fieldset.inputs > ol > li.string')
|
539
|
+
output_buffer.should have_tag('form > fieldset.inputs > ol > li.text')
|
540
|
+
end
|
541
|
+
end
|
542
|
+
|
543
|
+
describe 'and no object is given' do
|
544
|
+
it 'should render a form with a fieldset containing two list items' do
|
545
|
+
concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
546
|
+
concat(builder.inputs(:title, :body))
|
547
|
+
end)
|
548
|
+
|
549
|
+
output_buffer.should have_tag('form > fieldset.inputs > ol > li.string', :count => 2)
|
550
|
+
end
|
551
|
+
end
|
552
|
+
end
|
520
553
|
end
|
521
554
|
|
522
555
|
describe 'nesting' do
|
@@ -11,13 +11,13 @@ describe 'Formtastic::FormBuilder#semantic_errors' do
|
|
11
11
|
@title_errors = ['must not be blank', 'must be awesome']
|
12
12
|
@base_errors = ['base error message', 'nasty error']
|
13
13
|
@base_error = 'one base error'
|
14
|
-
@errors =
|
15
|
-
@new_post.stub
|
14
|
+
@errors = double('errors')
|
15
|
+
@new_post.stub(:errors).and_return(@errors)
|
16
16
|
end
|
17
17
|
|
18
18
|
describe 'when there is only one error on base' do
|
19
19
|
before do
|
20
|
-
@errors.stub
|
20
|
+
@errors.stub(:[]).with(errors_matcher(:base)).and_return(@base_error)
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'should render an unordered list' do
|
@@ -29,7 +29,7 @@ describe 'Formtastic::FormBuilder#semantic_errors' do
|
|
29
29
|
|
30
30
|
describe 'when there is more than one error on base' do
|
31
31
|
before do
|
32
|
-
@errors.stub
|
32
|
+
@errors.stub(:[]).with(errors_matcher(:base)).and_return(@base_errors)
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'should render an unordered list' do
|
@@ -44,8 +44,8 @@ describe 'Formtastic::FormBuilder#semantic_errors' do
|
|
44
44
|
|
45
45
|
describe 'when there are errors on title' do
|
46
46
|
before do
|
47
|
-
@errors.stub
|
48
|
-
@errors.stub
|
47
|
+
@errors.stub(:[]).with(errors_matcher(:title)).and_return(@title_errors)
|
48
|
+
@errors.stub(:[]).with(errors_matcher(:base)).and_return([])
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'should render an unordered list' do
|
@@ -58,8 +58,8 @@ describe 'Formtastic::FormBuilder#semantic_errors' do
|
|
58
58
|
|
59
59
|
describe 'when there are errors on title and base' do
|
60
60
|
before do
|
61
|
-
@errors.stub
|
62
|
-
@errors.stub
|
61
|
+
@errors.stub(:[]).with(errors_matcher(:title)).and_return(@title_errors)
|
62
|
+
@errors.stub(:[]).with(errors_matcher(:base)).and_return(@base_error)
|
63
63
|
end
|
64
64
|
|
65
65
|
it 'should render an unordered list' do
|
@@ -73,8 +73,8 @@ describe 'Formtastic::FormBuilder#semantic_errors' do
|
|
73
73
|
|
74
74
|
describe 'when there are no errors' do
|
75
75
|
before do
|
76
|
-
@errors.stub
|
77
|
-
@errors.stub
|
76
|
+
@errors.stub(:[]).with(errors_matcher(:title)).and_return(nil)
|
77
|
+
@errors.stub(:[]).with(errors_matcher(:base)).and_return(nil)
|
78
78
|
end
|
79
79
|
|
80
80
|
it 'should return nil' do
|
@@ -86,7 +86,7 @@ describe 'Formtastic::FormBuilder#semantic_errors' do
|
|
86
86
|
|
87
87
|
describe 'when there is one error on base and options with class is passed' do
|
88
88
|
before do
|
89
|
-
@errors.stub
|
89
|
+
@errors.stub(:[]).with(errors_matcher(:base)).and_return(@base_error)
|
90
90
|
end
|
91
91
|
|
92
92
|
it 'should render an unordered list with given class' do
|
@@ -98,7 +98,7 @@ describe 'Formtastic::FormBuilder#semantic_errors' do
|
|
98
98
|
|
99
99
|
describe 'when :base is passed in as an argument' do
|
100
100
|
before do
|
101
|
-
@errors.stub
|
101
|
+
@errors.stub(:[]).with(errors_matcher(:base)).and_return(@base_error)
|
102
102
|
end
|
103
103
|
|
104
104
|
it 'should ignore :base and only render base errors once' do
|
data/spec/i18n_spec.rb
CHANGED
@@ -6,12 +6,12 @@ describe 'Formtastic::I18n' do
|
|
6
6
|
FORMTASTIC_KEYS = [:required, :yes, :no, :create, :update].freeze
|
7
7
|
|
8
8
|
it "should be defined" do
|
9
|
-
lambda { Formtastic::I18n }.should_not raise_error
|
9
|
+
lambda { Formtastic::I18n }.should_not raise_error
|
10
10
|
end
|
11
11
|
|
12
12
|
describe "default translations" do
|
13
13
|
it "should be defined" do
|
14
|
-
lambda { Formtastic::I18n::DEFAULT_VALUES }.should_not raise_error
|
14
|
+
lambda { Formtastic::I18n::DEFAULT_VALUES }.should_not raise_error
|
15
15
|
Formtastic::I18n::DEFAULT_VALUES.is_a?(::Hash).should == true
|
16
16
|
end
|
17
17
|
|
@@ -98,8 +98,8 @@ describe 'Formtastic::I18n' do
|
|
98
98
|
}
|
99
99
|
}}
|
100
100
|
|
101
|
-
@new_post.stub
|
102
|
-
@new_post.stub
|
101
|
+
@new_post.stub(:title)
|
102
|
+
@new_post.stub(:column_for_attribute).with(:title).and_return(double('column', :type => :string, :limit => 255))
|
103
103
|
end
|
104
104
|
|
105
105
|
after do
|
@@ -108,7 +108,7 @@ describe 'Formtastic::I18n' do
|
|
108
108
|
|
109
109
|
it "lookup scopes should be defined" do
|
110
110
|
with_config :i18n_lookups_by_default, true do
|
111
|
-
lambda { Formtastic::I18n::SCOPES }.should_not raise_error
|
111
|
+
lambda { Formtastic::I18n::SCOPES }.should_not raise_error
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
@@ -98,7 +98,7 @@ describe 'boolean input' do
|
|
98
98
|
end
|
99
99
|
|
100
100
|
it 'should generate a checked input if object.method returns checked value' do
|
101
|
-
@new_post.stub
|
101
|
+
@new_post.stub(:allow_comments).and_return('yes')
|
102
102
|
|
103
103
|
concat(semantic_form_for(@new_post) do |builder|
|
104
104
|
concat(builder.input(:allow_comments, :as => :boolean, :checked_value => 'yes', :unchecked_value => 'no'))
|
@@ -108,7 +108,7 @@ describe 'boolean input' do
|
|
108
108
|
end
|
109
109
|
|
110
110
|
it 'should not generate a checked input if object.method returns unchecked value' do
|
111
|
-
@new_post.stub
|
111
|
+
@new_post.stub(:allow_comments).and_return('no')
|
112
112
|
|
113
113
|
concat(semantic_form_for(@new_post) do |builder|
|
114
114
|
concat(builder.input(:allow_comments, :as => :boolean, :checked_value => 'yes', :unchecked_value => 'no'))
|
@@ -118,7 +118,7 @@ describe 'boolean input' do
|
|
118
118
|
end
|
119
119
|
|
120
120
|
it 'should generate a checked input if object.method returns checked value' do
|
121
|
-
@new_post.stub
|
121
|
+
@new_post.stub(:allow_comments).and_return('yes')
|
122
122
|
|
123
123
|
concat(semantic_form_for(@new_post) do |builder|
|
124
124
|
concat(builder.input(:allow_comments, :as => :boolean, :checked_value => 'yes', :unchecked_value => 'no'))
|
@@ -128,7 +128,7 @@ describe 'boolean input' do
|
|
128
128
|
end
|
129
129
|
|
130
130
|
it 'should not generate a checked input if object.method returns unchecked value' do
|
131
|
-
@new_post.stub
|
131
|
+
@new_post.stub(:allow_comments).and_return('no')
|
132
132
|
|
133
133
|
concat(semantic_form_for(@new_post) do |builder|
|
134
134
|
concat(builder.input(:allow_comments, :as => :boolean, :checked_value => 'yes', :unchecked_value => 'no'))
|
@@ -153,9 +153,10 @@ describe 'boolean input' do
|
|
153
153
|
|
154
154
|
it 'should not pass input_html options down to the label html' do
|
155
155
|
concat(semantic_form_for(@new_post) do |builder|
|
156
|
-
builder.input(:title, :as => :boolean, :input_html => { :tabindex => 2 })
|
156
|
+
builder.input(:title, :as => :boolean, :input_html => { :tabindex => 2, :x => "X" })
|
157
157
|
end)
|
158
158
|
output_buffer.should_not have_tag('label[tabindex]')
|
159
|
+
output_buffer.should_not have_tag('label[x]')
|
159
160
|
end
|
160
161
|
|
161
162
|
context "when required" do
|
@@ -194,7 +194,7 @@ describe 'check_boxes input' do
|
|
194
194
|
|
195
195
|
describe "no disabled items" do
|
196
196
|
before do
|
197
|
-
@new_post.stub
|
197
|
+
@new_post.stub(:author_ids).and_return(nil)
|
198
198
|
|
199
199
|
concat(semantic_form_for(@new_post) do |builder|
|
200
200
|
concat(builder.input(:authors, :as => :check_boxes, :disabled => nil))
|
@@ -208,7 +208,7 @@ describe 'check_boxes input' do
|
|
208
208
|
|
209
209
|
describe "single disabled item" do
|
210
210
|
before do
|
211
|
-
@new_post.stub
|
211
|
+
@new_post.stub(:author_ids).and_return(nil)
|
212
212
|
|
213
213
|
concat(semantic_form_for(@new_post) do |builder|
|
214
214
|
concat(builder.input(:authors, :as => :check_boxes, :disabled => @fred.id))
|
@@ -224,7 +224,7 @@ describe 'check_boxes input' do
|
|
224
224
|
|
225
225
|
describe "multiple disabled items" do
|
226
226
|
before do
|
227
|
-
@new_post.stub
|
227
|
+
@new_post.stub(:author_ids).and_return(nil)
|
228
228
|
|
229
229
|
concat(semantic_form_for(@new_post) do |builder|
|
230
230
|
concat(builder.input(:authors, :as => :check_boxes, :disabled => [@bob.id, @fred.id]))
|
@@ -247,7 +247,7 @@ describe 'check_boxes input' do
|
|
247
247
|
before do
|
248
248
|
::I18n.backend.store_translations :en, :formtastic => { :labels => { :post => { :authors => "Translated!" }}}
|
249
249
|
with_config :i18n_lookups_by_default, true do
|
250
|
-
@new_post.stub
|
250
|
+
@new_post.stub(:author_ids).and_return(nil)
|
251
251
|
concat(semantic_form_for(@new_post) do |builder|
|
252
252
|
concat(builder.input(:authors, :as => :check_boxes))
|
253
253
|
end)
|
@@ -266,7 +266,7 @@ describe 'check_boxes input' do
|
|
266
266
|
|
267
267
|
describe "when :label option is set" do
|
268
268
|
before do
|
269
|
-
@new_post.stub
|
269
|
+
@new_post.stub(:author_ids).and_return(nil)
|
270
270
|
concat(semantic_form_for(@new_post) do |builder|
|
271
271
|
concat(builder.input(:authors, :as => :check_boxes, :label => 'The authors'))
|
272
272
|
end)
|
@@ -280,7 +280,7 @@ describe 'check_boxes input' do
|
|
280
280
|
describe "when :label option is false" do
|
281
281
|
before do
|
282
282
|
@output_buffer = ''
|
283
|
-
@new_post.stub
|
283
|
+
@new_post.stub(:author_ids).and_return(nil)
|
284
284
|
concat(semantic_form_for(@new_post) do |builder|
|
285
285
|
concat(builder.input(:authors, :as => :check_boxes, :label => false))
|
286
286
|
end)
|
@@ -298,7 +298,7 @@ describe 'check_boxes input' do
|
|
298
298
|
|
299
299
|
describe "when :required option is true" do
|
300
300
|
before do
|
301
|
-
@new_post.stub
|
301
|
+
@new_post.stub(:author_ids).and_return(nil)
|
302
302
|
concat(semantic_form_for(@new_post) do |builder|
|
303
303
|
concat(builder.input(:authors, :as => :check_boxes, :required => true))
|
304
304
|
end)
|
@@ -344,9 +344,9 @@ describe 'check_boxes input' do
|
|
344
344
|
end
|
345
345
|
|
346
346
|
it 'to set the right input value' do
|
347
|
-
item =
|
347
|
+
item = double('item')
|
348
348
|
item.should_not_receive(:id)
|
349
|
-
item.stub
|
349
|
+
item.stub(:custom_value).and_return('custom_value')
|
350
350
|
item.should_receive(:custom_value).exactly(3).times
|
351
351
|
@new_post.author.should_receive(:custom_value).exactly(1).times
|
352
352
|
concat(semantic_form_for(@new_post) do |builder|
|
@@ -373,6 +373,24 @@ describe 'check_boxes input' do
|
|
373
373
|
output_buffer.should have_tag("form li fieldset ol li label input[@value='biography'][@checked='checked']")
|
374
374
|
end
|
375
375
|
end
|
376
|
+
|
377
|
+
describe 'when :collection is a set' do
|
378
|
+
before do
|
379
|
+
@output_buffer = ''
|
380
|
+
mock_everything
|
381
|
+
@fred.stub(:roles) { Set.new([:reviewer, :admin]) }
|
382
|
+
|
383
|
+
concat(semantic_form_for(@fred) do |builder|
|
384
|
+
concat(builder.input(:roles, :as => :check_boxes, :collection => [['User', :user], ['Reviewer', :reviewer], ['Administrator', :admin]]))
|
385
|
+
end)
|
386
|
+
end
|
387
|
+
|
388
|
+
it 'should check the correct checkboxes' do
|
389
|
+
output_buffer.should have_tag("form li fieldset ol li label input[@value='user']")
|
390
|
+
output_buffer.should have_tag("form li fieldset ol li label input[@value='admin'][@checked='checked']")
|
391
|
+
output_buffer.should have_tag("form li fieldset ol li label input[@value='reviewer'][@checked='checked']")
|
392
|
+
end
|
393
|
+
end
|
376
394
|
|
377
395
|
describe "when namespace is provided" do
|
378
396
|
|
@@ -26,7 +26,7 @@ describe 'country input' do
|
|
26
26
|
|
27
27
|
before do
|
28
28
|
concat(semantic_form_for(@new_post) do |builder|
|
29
|
-
builder.stub
|
29
|
+
builder.stub(:country_select).and_return(Formtastic::Util.html_safe("<select><option>...</option></select>"))
|
30
30
|
concat(builder.input(:country, :as => :country))
|
31
31
|
end)
|
32
32
|
end
|
@@ -55,7 +55,7 @@ describe 'country input' do
|
|
55
55
|
it "should be passed down to the country_select helper when provided" do
|
56
56
|
priority_countries = ["Foo", "Bah"]
|
57
57
|
semantic_form_for(@new_post) do |builder|
|
58
|
-
builder.stub
|
58
|
+
builder.stub(:country_select).and_return(Formtastic::Util.html_safe("<select><option>...</option></select>"))
|
59
59
|
builder.should_receive(:country_select).with(:country, priority_countries, {}, {:id => "post_country", :required => false, :autofocus => false}).and_return(Formtastic::Util.html_safe("<select><option>...</option></select>"))
|
60
60
|
|
61
61
|
concat(builder.input(:country, :as => :country, :priority_countries => priority_countries))
|
@@ -68,7 +68,7 @@ describe 'country input' do
|
|
68
68
|
priority_countries.should_not be_nil
|
69
69
|
|
70
70
|
semantic_form_for(@new_post) do |builder|
|
71
|
-
builder.stub
|
71
|
+
builder.stub(:country_select).and_return(Formtastic::Util.html_safe("<select><option>...</option></select>"))
|
72
72
|
builder.should_receive(:country_select).with(:country, priority_countries, {}, {:id => "post_country", :required => false, :autofocus => false}).and_return(Formtastic::Util.html_safe("<select><option>...</option></select>"))
|
73
73
|
|
74
74
|
concat(builder.input(:country, :as => :country))
|
@@ -84,7 +84,7 @@ describe 'country input' do
|
|
84
84
|
mock_everything
|
85
85
|
|
86
86
|
concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder|
|
87
|
-
builder.stub
|
87
|
+
builder.stub(:country_select).and_return(Formtastic::Util.html_safe("<select><option>...</option></select>"))
|
88
88
|
builder.should_receive(:country_select).with(:country, [], {}, {:id => "context2_post_country", :required => false, :autofocus => false}).and_return(Formtastic::Util.html_safe("<select><option>...</option></select>"))
|
89
89
|
concat(builder.input(:country, :priority_countries => []))
|
90
90
|
end)
|
@@ -101,7 +101,7 @@ describe 'country input' do
|
|
101
101
|
|
102
102
|
before do
|
103
103
|
concat(semantic_form_for(@new_post) do |builder|
|
104
|
-
builder.stub
|
104
|
+
builder.stub(:country_select).and_return(Formtastic::Util.html_safe("<select><option>...</option></select>"))
|
105
105
|
concat(builder.input(:country))
|
106
106
|
end)
|
107
107
|
end
|