formtastic 1.0.1 → 1.1.0.beta

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.
Files changed (48) hide show
  1. data/README.textile +2 -2
  2. data/Rakefile +33 -8
  3. data/generators/formtastic/templates/formtastic.css +3 -18
  4. data/init.rb +5 -0
  5. data/lib/formtastic.rb +180 -82
  6. data/lib/formtastic/i18n.rb +8 -9
  7. data/lib/formtastic/layout_helper.rb +0 -1
  8. data/lib/formtastic/railtie.rb +12 -0
  9. data/lib/formtastic/util.rb +7 -0
  10. data/lib/generators/formtastic/form/form_generator.rb +86 -0
  11. data/lib/generators/formtastic/install/install_generator.rb +24 -0
  12. data/rails/init.rb +1 -6
  13. data/spec/buttons_spec.rb +25 -8
  14. data/spec/commit_button_spec.rb +67 -29
  15. data/spec/custom_builder_spec.rb +40 -4
  16. data/spec/defaults_spec.rb +1 -1
  17. data/spec/error_proc_spec.rb +1 -1
  18. data/spec/errors_spec.rb +3 -2
  19. data/spec/form_helper_spec.rb +33 -17
  20. data/spec/helpers/layout_helper_spec.rb +21 -0
  21. data/spec/i18n_spec.rb +13 -9
  22. data/spec/include_blank_spec.rb +9 -5
  23. data/spec/input_spec.rb +188 -48
  24. data/spec/inputs/boolean_input_spec.rb +14 -7
  25. data/spec/inputs/check_boxes_input_spec.rb +150 -20
  26. data/spec/inputs/country_input_spec.rb +9 -5
  27. data/spec/inputs/date_input_spec.rb +21 -9
  28. data/spec/inputs/datetime_input_spec.rb +33 -14
  29. data/spec/inputs/file_input_spec.rb +4 -3
  30. data/spec/inputs/hidden_input_spec.rb +11 -4
  31. data/spec/inputs/numeric_input_spec.rb +3 -3
  32. data/spec/inputs/password_input_spec.rb +3 -3
  33. data/spec/inputs/radio_input_spec.rb +29 -10
  34. data/spec/inputs/select_input_spec.rb +66 -26
  35. data/spec/inputs/string_input_spec.rb +5 -4
  36. data/spec/inputs/text_input_spec.rb +4 -3
  37. data/spec/inputs/time_input_spec.rb +26 -10
  38. data/spec/inputs/time_zone_input_spec.rb +11 -5
  39. data/spec/inputs_spec.rb +103 -39
  40. data/spec/label_spec.rb +5 -3
  41. data/spec/semantic_errors_spec.rb +7 -7
  42. data/spec/semantic_fields_for_spec.rb +5 -4
  43. data/spec/spec_helper.rb +86 -38
  44. data/spec/{custom_macros.rb → support/custom_macros.rb} +69 -35
  45. data/spec/support/output_buffer.rb +4 -0
  46. data/spec/support/test_environment.rb +45 -0
  47. metadata +26 -28
  48. data/spec/layout_helper_spec.rb +0 -29
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
- require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'spec_helper'
3
3
 
4
4
  describe 'string input' do
5
5
 
@@ -12,7 +12,7 @@ describe 'string input' do
12
12
 
13
13
  describe "when object is provided" do
14
14
  before do
15
- semantic_form_for(@new_post) do |builder|
15
+ @form = semantic_form_for(@new_post) do |builder|
16
16
  concat(builder.input(:title, :as => :string))
17
17
  end
18
18
  end
@@ -35,7 +35,7 @@ describe 'string input' do
35
35
 
36
36
  describe "when no object is provided" do
37
37
  before do
38
- semantic_form_for(:project, :url => 'http://test.host/') do |builder|
38
+ @form = semantic_form_for(:project, :url => 'http://test.host/') do |builder|
39
39
  concat(builder.input(:title, :as => :string))
40
40
  end
41
41
  end
@@ -49,12 +49,13 @@ describe 'string input' do
49
49
 
50
50
  describe "when size is nil" do
51
51
  before do
52
- semantic_form_for(:project, :url => 'http://test.host/') do |builder|
52
+ @form = semantic_form_for(:project, :url => 'http://test.host/') do |builder|
53
53
  concat(builder.input(:title, :as => :string, :input_html => {:size => nil}))
54
54
  end
55
55
  end
56
56
 
57
57
  it "should have no size attribute" do
58
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
58
59
  output_buffer.should_not have_tag("input[@size]")
59
60
  end
60
61
  end
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
- require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'spec_helper'
3
3
 
4
4
  describe 'text input' do
5
5
 
@@ -9,7 +9,7 @@ describe 'text input' do
9
9
  @output_buffer = ''
10
10
  mock_everything
11
11
 
12
- semantic_form_for(@new_post) do |builder|
12
+ @form = semantic_form_for(@new_post) do |builder|
13
13
  concat(builder.input(:body, :as => :text))
14
14
  end
15
15
  end
@@ -23,9 +23,10 @@ describe 'text input' do
23
23
  it_should_apply_error_logic_for_input_type(:numeric)
24
24
 
25
25
  it 'should use input_html to style inputs' do
26
- semantic_form_for(@new_post) do |builder|
26
+ form = semantic_form_for(@new_post) do |builder|
27
27
  concat(builder.input(:title, :as => :text, :input_html => { :class => 'myclass' }))
28
28
  end
29
+ output_buffer.concat(form) if Formtastic::Util.rails3?
29
30
  output_buffer.should have_tag("form li textarea.myclass")
30
31
  end
31
32
 
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
- require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'spec_helper'
3
3
 
4
4
  describe 'time input' do
5
5
 
@@ -18,18 +18,20 @@ describe 'time input' do
18
18
 
19
19
  describe "with :ignore_date" do
20
20
  before do
21
- semantic_form_for(@new_post) do |builder|
21
+ @form = semantic_form_for(@new_post) do |builder|
22
22
  concat(builder.input(:publish_at, :as => :time, :ignore_date => true))
23
23
  end
24
24
  end
25
25
 
26
26
  it 'should not have an input for day, month and year' do
27
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
27
28
  output_buffer.should_not have_tag('#post_publish_at_1i')
28
29
  output_buffer.should_not have_tag('#post_publish_at_2i')
29
30
  output_buffer.should_not have_tag('#post_publish_at_3i')
30
31
  end
31
32
 
32
33
  it 'should have an input for hour and minute' do
34
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
33
35
  output_buffer.should have_tag('#post_publish_at_4i')
34
36
  output_buffer.should have_tag('#post_publish_at_5i')
35
37
  end
@@ -38,7 +40,7 @@ describe 'time input' do
38
40
 
39
41
  describe "without seconds" do
40
42
  before do
41
- semantic_form_for(@new_post) do |builder|
43
+ @form = semantic_form_for(@new_post) do |builder|
42
44
  concat(builder.input(:publish_at, :as => :time))
43
45
  end
44
46
  end
@@ -49,37 +51,43 @@ describe 'time input' do
49
51
  it_should_apply_error_logic_for_input_type(:time)
50
52
 
51
53
  it 'should have a legend and label with the label text inside the fieldset' do
54
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
52
55
  output_buffer.should have_tag('form li.time fieldset legend.label label', /Publish at/)
53
56
  end
54
57
 
55
58
  it 'should associate the legend label with the first select' do
59
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
56
60
  output_buffer.should have_tag('form li.time fieldset legend.label label[@for="post_publish_at_1i"]')
57
61
  end
58
62
 
59
63
  it 'should have an ordered list of two items inside the fieldset' do
64
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
60
65
  output_buffer.should have_tag('form li.time fieldset ol')
61
66
  output_buffer.should have_tag('form li.time fieldset ol li', :count => 2)
62
67
  end
63
68
 
64
69
  it 'should have five labels for hour and minute' do
70
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
65
71
  output_buffer.should have_tag('form li.time fieldset ol li label', :count => 2)
66
72
  output_buffer.should have_tag('form li.time fieldset ol li label', /hour/i)
67
73
  output_buffer.should have_tag('form li.time fieldset ol li label', /minute/i)
68
74
  end
69
75
 
70
76
  it 'should have two selects for hour and minute' do
77
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
71
78
  output_buffer.should have_tag('form li.time fieldset ol li', :count => 2)
72
79
  end
73
80
  end
74
81
 
75
82
  describe "with seconds" do
76
83
  before do
77
- semantic_form_for(@new_post) do |builder|
84
+ @form = semantic_form_for(@new_post) do |builder|
78
85
  concat(builder.input(:publish_at, :as => :time, :include_seconds => true))
79
86
  end
80
87
  end
81
88
 
82
89
  it 'should have five labels for hour and minute' do
90
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
83
91
  output_buffer.should have_tag('form li.time fieldset ol li label', :count => 3)
84
92
  output_buffer.should have_tag('form li.time fieldset ol li label', /hour/i)
85
93
  output_buffer.should have_tag('form li.time fieldset ol li label', /minute/i)
@@ -87,10 +95,12 @@ describe 'time input' do
87
95
  end
88
96
 
89
97
  it 'should have three selects for hour, minute and seconds' do
98
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
90
99
  output_buffer.should have_tag('form li.time fieldset ol li', :count => 3)
91
100
  end
92
101
 
93
102
  it 'should generate a sanitized label and matching ids for attribute' do
103
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
94
104
  4.upto(6) do |i|
95
105
  output_buffer.should have_tag("form li fieldset ol li label[@for='post_publish_at_#{i}i']")
96
106
  output_buffer.should have_tag("form li fieldset ol li #post_publish_at_#{i}i")
@@ -106,10 +116,11 @@ describe 'time input' do
106
116
  output_buffer.replace ''
107
117
  @new_post.stub!(:created_at => Time.mktime(2012, 11, 30, 21, 45))
108
118
  with_deprecation_silenced do
109
- semantic_form_for(@new_post) do |builder|
119
+ @form = semantic_form_for(@new_post) do |builder|
110
120
  concat(builder.input(:created_at, :as => :time, :selected => Time.mktime(1999, 12, 31, 22, 59)))
111
121
  end
112
122
  end
123
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
113
124
  output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@selected]", :count => 1)
114
125
  output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@value='21'][@selected]", :count => 1)
115
126
  end
@@ -120,10 +131,11 @@ describe 'time input' do
120
131
  output_buffer.replace ''
121
132
  @new_post.stub!(:created_at => nil)
122
133
  with_deprecation_silenced do
123
- semantic_form_for(@new_post) do |builder|
134
+ @form = semantic_form_for(@new_post) do |builder|
124
135
  concat(builder.input(:created_at, :as => :time, :selected => Time.mktime(1999, 12, 31, 22, 59)))
125
136
  end
126
137
  end
138
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
127
139
  output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@selected]", :count => 1)
128
140
  output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@value='22'][@selected]", :count => 1)
129
141
  end
@@ -132,19 +144,21 @@ describe 'time input' do
132
144
  output_buffer.replace ''
133
145
  @new_post.stub!(:created_at => nil)
134
146
  with_deprecation_silenced do
135
- semantic_form_for(@new_post) do |builder|
147
+ @form = semantic_form_for(@new_post) do |builder|
136
148
  concat(builder.input(:created_at, :as => :time, :selected => nil))
137
149
  end
138
150
  end
151
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
139
152
  output_buffer.should_not have_tag("form li ol li select#post_created_at_4i option[@selected]")
140
153
  end
141
154
 
142
155
  it "should select nothing if a :selected is not provided" do
143
156
  output_buffer.replace ''
144
157
  @new_post.stub!(:created_at => nil)
145
- semantic_form_for(@new_post) do |builder|
158
+ form = semantic_form_for(@new_post) do |builder|
146
159
  concat(builder.input(:created_at, :as => :time))
147
160
  end
161
+ output_buffer.concat(form) if Formtastic::Util.rails3?
148
162
  output_buffer.should_not have_tag("form li ol li select option[@selected]")
149
163
  end
150
164
  end
@@ -156,9 +170,10 @@ describe 'time input' do
156
170
  fields.each do |field|
157
171
  it "should replace the #{field} label with the specified text if :labels[:#{field}] is set" do
158
172
  output_buffer.replace ''
159
- semantic_form_for(@new_post) do |builder|
173
+ form = semantic_form_for(@new_post) do |builder|
160
174
  concat(builder.input(:created_at, :as => :time, :include_seconds => true, :labels => { field => "another #{field} label" }))
161
175
  end
176
+ output_buffer.concat(form) if Formtastic::Util.rails3?
162
177
  output_buffer.should have_tag('form li.time fieldset ol li label', :count => fields.length)
163
178
  fields.each do |f|
164
179
  output_buffer.should have_tag('form li.time fieldset ol li label', f == field ? /another #{f} label/i : /#{f}/i)
@@ -167,9 +182,10 @@ describe 'time input' do
167
182
 
168
183
  it "should not display the label for the #{field} field when :labels[:#{field}] is blank" do
169
184
  output_buffer.replace ''
170
- semantic_form_for(@new_post) do |builder|
185
+ form = semantic_form_for(@new_post) do |builder|
171
186
  concat(builder.input(:created_at, :as => :time, :include_seconds => true, :labels => { field => "" }))
172
187
  end
188
+ output_buffer.concat(form) if Formtastic::Util.rails3?
173
189
  output_buffer.should have_tag('form li.time fieldset ol li label', :count => fields.length-1)
174
190
  fields.each do |f|
175
191
  output_buffer.should have_tag('form li.time fieldset ol li label', /#{f}/i) unless field == f
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
- require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'spec_helper'
3
3
 
4
4
  describe 'time_zone input' do
5
5
 
@@ -9,7 +9,7 @@ describe 'time_zone input' do
9
9
  @output_buffer = ''
10
10
  mock_everything
11
11
 
12
- semantic_form_for(@new_post) do |builder|
12
+ @form = semantic_form_for(@new_post) do |builder|
13
13
  concat(builder.input(:time_zone))
14
14
  end
15
15
  end
@@ -19,38 +19,43 @@ describe 'time_zone input' do
19
19
  it_should_apply_error_logic_for_input_type(:time_zone)
20
20
 
21
21
  it 'should generate a label for the input' do
22
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
22
23
  output_buffer.should have_tag('form li label')
23
24
  output_buffer.should have_tag('form li label[@for="post_time_zone"]')
24
25
  output_buffer.should have_tag('form li label', /Time zone/)
25
26
  end
26
27
 
27
28
  it "should generate a select" do
29
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
28
30
  output_buffer.should have_tag("form li select")
29
31
  output_buffer.should have_tag("form li select#post_time_zone")
30
32
  output_buffer.should have_tag("form li select[@name=\"post[time_zone]\"]")
31
33
  end
32
34
 
33
35
  it 'should use input_html to style inputs' do
34
- semantic_form_for(@new_post) do |builder|
36
+ form = semantic_form_for(@new_post) do |builder|
35
37
  concat(builder.input(:time_zone, :input_html => { :class => 'myclass' }))
36
38
  end
39
+ output_buffer.concat(form) if Formtastic::Util.rails3?
37
40
  output_buffer.should have_tag("form li select.myclass")
38
41
  end
39
42
 
40
43
  describe 'when no object is given' do
41
44
  before(:each) do
42
- semantic_form_for(:project, :url => 'http://test.host/') do |builder|
45
+ @form = semantic_form_for(:project, :url => 'http://test.host/') do |builder|
43
46
  concat(builder.input(:time_zone, :as => :time_zone))
44
47
  end
45
48
  end
46
49
 
47
50
  it 'should generate labels' do
51
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
48
52
  output_buffer.should have_tag('form li label')
49
53
  output_buffer.should have_tag('form li label[@for="project_time_zone"]')
50
54
  output_buffer.should have_tag('form li label', /Time zone/)
51
55
  end
52
56
 
53
57
  it 'should generate select inputs' do
58
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
54
59
  output_buffer.should have_tag("form li select")
55
60
  output_buffer.should have_tag("form li select#project_time_zone")
56
61
  output_buffer.should have_tag("form li select[@name=\"project[time_zone]\"]")
@@ -86,13 +91,14 @@ describe 'time_zone input' do
86
91
  @new_post.stub!(:time_zone).and_return(nil)
87
92
 
88
93
  with_deprecation_silenced do
89
- semantic_form_for(@new_post) do |builder|
94
+ @form = semantic_form_for(@new_post) do |builder|
90
95
  concat(builder.input(:time_zone, :as => :time_zone, :selected => 'Melbourne'))
91
96
  end
92
97
  end
93
98
  end
94
99
 
95
100
  it 'should have a selected item; the specified one' do
101
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
96
102
  output_buffer.should have_tag("form li select option[@selected='selected']", :count => 1)
97
103
  output_buffer.should have_tag("form li select option[@selected='selected']", /Melbourne/i)
98
104
  output_buffer.should have_tag("form li select option[@selected='selected'][@value='Melbourne']")
data/spec/inputs_spec.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
- require File.dirname(__FILE__) + '/spec_helper'
2
+ require 'spec_helper'
3
3
 
4
4
  describe 'SemanticFormBuilder#inputs' do
5
5
 
@@ -15,7 +15,7 @@ describe 'SemanticFormBuilder#inputs' do
15
15
  describe 'when no options are provided' do
16
16
  before do
17
17
  output_buffer.replace 'before_builder' # clear the output buffer and sets before_builder
18
- semantic_form_for(@new_post) do |builder|
18
+ @form = semantic_form_for(@new_post) do |builder|
19
19
  @inputs_output = builder.inputs do
20
20
  concat('hello')
21
21
  end
@@ -23,33 +23,39 @@ describe 'SemanticFormBuilder#inputs' do
23
23
  end
24
24
 
25
25
  it 'should output just the content wrapped in inputs, not the whole template' do
26
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
26
27
  output_buffer.should =~ /before_builder/
27
28
  @inputs_output.should_not =~ /before_builder/
28
29
  end
29
30
 
30
31
  it 'should render a fieldset inside the form, with a class of "inputs"' do
32
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
31
33
  output_buffer.should have_tag("form fieldset.inputs")
32
34
  end
33
35
 
34
36
  it 'should render an ol inside the fieldset' do
37
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
35
38
  output_buffer.should have_tag("form fieldset.inputs ol")
36
39
  end
37
40
 
38
41
  it 'should render the contents of the block inside the ol' do
42
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
39
43
  output_buffer.should have_tag("form fieldset.inputs ol", /hello/)
40
44
  end
41
45
 
42
46
  it 'should not render a legend inside the fieldset' do
47
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
43
48
  output_buffer.should_not have_tag("form fieldset.inputs legend")
44
49
  end
45
50
 
46
51
  it 'should render a fieldset even if no object is given' do
47
- semantic_form_for(:project, :url => 'http://test.host/') do |builder|
52
+ form = semantic_form_for(:project, :url => 'http://test.host/') do |builder|
48
53
  @inputs_output = builder.inputs do
49
54
  concat('bye')
50
55
  end
51
56
  end
52
57
 
58
+ output_buffer.concat(form) if Formtastic::Util.rails3?
53
59
  output_buffer.should have_tag("form fieldset.inputs ol", /bye/)
54
60
  end
55
61
  end
@@ -64,25 +70,45 @@ describe 'SemanticFormBuilder#inputs' do
64
70
  it 'should render nested inputs' do
65
71
  @bob.stub!(:column_for_attribute).and_return(mock('column', :type => :string, :limit => 255))
66
72
 
67
- semantic_form_for(@new_post) do |builder|
73
+ form = semantic_form_for(@new_post) do |builder|
74
+ inputs = builder.inputs :for => [:author, @bob] do |bob_builder|
75
+ concat(bob_builder.input(:login))
76
+ end
77
+ concat(inputs)
78
+ end
79
+
80
+ output_buffer.concat(form) if Formtastic::Util.rails3?
81
+ output_buffer.should have_tag("form fieldset.inputs #post_author_attributes_login")
82
+ output_buffer.should_not have_tag("form fieldset.inputs #author_login")
83
+
84
+ end
85
+
86
+ it 'should concat rendered nested inputs to the template under rails3' do
87
+ @bob.stub!(:column_for_attribute).and_return(mock('column', :type => :string, :limit => 255))
88
+ ::Formtastic::Util.stub!(:rails3?).and_return(true)
89
+
90
+ form = semantic_form_for(@new_post) do |builder|
68
91
  builder.inputs :for => [:author, @bob] do |bob_builder|
69
92
  concat(bob_builder.input(:login))
70
93
  end
71
94
  end
72
95
 
96
+ output_buffer.concat(form) if Formtastic::Util.rails3?
73
97
  output_buffer.should have_tag("form fieldset.inputs #post_author_attributes_login")
74
98
  output_buffer.should_not have_tag("form fieldset.inputs #author_login")
75
99
 
76
100
  end
77
-
101
+
78
102
  describe "as a symbol representing the association name" do
79
103
 
80
104
  it 'should nest the inputs with an _attributes suffix on the association name' do
81
- semantic_form_for(@new_post) do |post|
82
- post.inputs :for => :author do |author|
105
+ form = semantic_form_for(@new_post) do |post|
106
+ inputs = post.inputs :for => :author do |author|
83
107
  concat(author.input(:login))
84
108
  end
109
+ concat(inputs)
85
110
  end
111
+ output_buffer.concat(form) if Formtastic::Util.rails3?
86
112
  output_buffer.should have_tag("form input[@name='post[author_attributes][login]']")
87
113
  end
88
114
 
@@ -95,12 +121,13 @@ describe 'SemanticFormBuilder#inputs' do
95
121
  end
96
122
 
97
123
  it 'should nest the inputs with a name input for each item' do
98
- semantic_form_for(@new_post) do |post|
124
+ form = semantic_form_for(@new_post) do |post|
99
125
  post.inputs :for => :authors do |author|
100
126
  concat(author.input(:login))
101
127
  end
102
128
  end
103
129
 
130
+ output_buffer.concat(form) if Formtastic::Util.rails3?
104
131
  output_buffer.should have_tag("form input[@name='post[authors_attributes][0][login]']")
105
132
  output_buffer.should have_tag("form input[@name='post[authors_attributes][1][login]']")
106
133
  end
@@ -109,11 +136,13 @@ describe 'SemanticFormBuilder#inputs' do
109
136
  describe 'as an array containing the a symbole for the association name and the associated object' do
110
137
 
111
138
  it 'should nest the inputs with an _attributes suffix on the association name' do
112
- semantic_form_for(@new_post) do |post|
113
- post.inputs :for => [:author, @new_post.author] do |author|
139
+ form = semantic_form_for(@new_post) do |post|
140
+ inputs = post.inputs :for => [:author, @new_post.author] do |author|
114
141
  concat(author.input(:login))
115
142
  end
143
+ concat(inputs)
116
144
  end
145
+ output_buffer.concat(form) if Formtastic::Util.rails3?
117
146
  output_buffer.should have_tag("form input[@name='post[author_attributes][login]']")
118
147
  end
119
148
 
@@ -122,11 +151,13 @@ describe 'SemanticFormBuilder#inputs' do
122
151
  describe 'as an associated object' do
123
152
 
124
153
  it 'should not nest the inputs with an _attributes suffix' do
125
- semantic_form_for(@new_post) do |post|
126
- post.inputs :for => @new_post.author do |author|
154
+ form = semantic_form_for(@new_post) do |post|
155
+ inputs = post.inputs :for => @new_post.author do |author|
127
156
  concat(author.input(:login))
128
157
  end
158
+ concat(inputs)
129
159
  end
160
+ output_buffer.concat(form) if Formtastic::Util.rails3?
130
161
  output_buffer.should have_tag("form input[@name='post[author][login]']")
131
162
  end
132
163
 
@@ -146,44 +177,52 @@ describe 'SemanticFormBuilder#inputs' do
146
177
  it 'should pass options down to semantic_fields_for' do
147
178
  @bob.stub!(:column_for_attribute).and_return(mock('column', :type => :string, :limit => 255))
148
179
 
149
- semantic_form_for(@new_post) do |builder|
150
- builder.inputs :for => [:author, @bob], :for_options => { :index => 10 } do |bob_builder|
180
+ form = semantic_form_for(@new_post) do |builder|
181
+ inputs = builder.inputs :for => [:author, @bob], :for_options => { :index => 10 } do |bob_builder|
151
182
  concat(bob_builder.input(:login))
152
183
  end
184
+ concat(inputs)
153
185
  end
154
186
 
187
+ output_buffer.concat(form) if Formtastic::Util.rails3?
155
188
  output_buffer.should have_tag('form fieldset ol li #post_author_attributes_10_login')
156
189
  end
157
190
 
158
191
  it 'should not add builder as a fieldset attribute tag' do
159
- semantic_form_for(@new_post) do |builder|
160
- builder.inputs :for => [:author, @bob], :for_options => { :index => 10 } do |bob_builder|
192
+ form = semantic_form_for(@new_post) do |builder|
193
+ inputs = builder.inputs :for => [:author, @bob], :for_options => { :index => 10 } do |bob_builder|
161
194
  concat('input')
162
195
  end
196
+ concat(inputs)
163
197
  end
164
198
 
199
+ output_buffer.concat(form) if Formtastic::Util.rails3?
165
200
  output_buffer.should_not have_tag('fieldset[@builder="Formtastic::SemanticFormHelper"]')
166
201
  end
167
202
 
168
203
  it 'should send parent_builder as an option to allow child index interpolation' do
169
- semantic_form_for(@new_post) do |builder|
204
+ form = semantic_form_for(@new_post) do |builder|
170
205
  builder.instance_variable_set('@nested_child_index', 0)
171
- builder.inputs :for => [:author, @bob], :name => 'Author #%i' do |bob_builder|
206
+ inputs = builder.inputs :for => [:author, @bob], :name => 'Author #%i' do |bob_builder|
172
207
  concat('input')
173
208
  end
209
+ concat(inputs)
174
210
  end
175
211
 
212
+ output_buffer.concat(form) if Formtastic::Util.rails3?
176
213
  output_buffer.should have_tag('fieldset legend', 'Author #1')
177
214
  end
178
215
 
179
216
  it 'should also provide child index interpolation when nested child index is a hash' do
180
- semantic_form_for(@new_post) do |builder|
217
+ form = semantic_form_for(@new_post) do |builder|
181
218
  builder.instance_variable_set('@nested_child_index', :author => 10)
182
- builder.inputs :for => [:author, @bob], :name => 'Author #%i' do |bob_builder|
219
+ inputs = builder.inputs :for => [:author, @bob], :name => 'Author #%i' do |bob_builder|
183
220
  concat('input')
184
221
  end
222
+ concat(inputs)
185
223
  end
186
224
 
225
+ output_buffer.concat(form) if Formtastic::Util.rails3?
187
226
  output_buffer.should have_tag('fieldset legend', 'Author #11')
188
227
  end
189
228
  end
@@ -195,19 +234,24 @@ describe 'SemanticFormBuilder#inputs' do
195
234
  @legend_text_using_name = "Advanced options 2"
196
235
  @legend_text_using_title = "Advanced options 3"
197
236
  @nested_forms_legend_text = "This is a nested form title"
198
- semantic_form_for(@new_post) do |builder|
199
- builder.inputs @legend_text do
237
+ @form = semantic_form_for(@new_post) do |builder|
238
+ inputs = builder.inputs @legend_text do
200
239
  end
201
- builder.inputs :name => @legend_text_using_name do
240
+ concat(inputs)
241
+ inputs = builder.inputs :name => @legend_text_using_name do
202
242
  end
203
- builder.inputs :title => @legend_text_using_title do
243
+ concat(inputs)
244
+ inputs = builder.inputs :title => @legend_text_using_title do
204
245
  end
205
- builder.inputs @nested_forms_legend_text, :for => :authors do |nf|
246
+ concat(inputs)
247
+ inputs = builder.inputs @nested_forms_legend_text, :for => :authors do |nf|
206
248
  end
249
+ concat(inputs)
207
250
  end
208
251
  end
209
252
 
210
253
  it 'should render a fieldset with a legend inside the form' do
254
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
211
255
  output_buffer.should have_tag("form fieldset legend", /^#{@legend_text}$/)
212
256
  output_buffer.should have_tag("form fieldset legend", /^#{@legend_text_using_name}$/)
213
257
  output_buffer.should have_tag("form fieldset legend", /^#{@legend_text_using_title}$/)
@@ -231,19 +275,24 @@ describe 'SemanticFormBuilder#inputs' do
231
275
  }
232
276
  }
233
277
  }
234
- semantic_form_for(@new_post) do |builder|
235
- builder.inputs :advanced_options do
278
+ @form = semantic_form_for(@new_post) do |builder|
279
+ inputs = builder.inputs :advanced_options do
236
280
  end
237
- builder.inputs :name => :advanced_options_using_name do
281
+ concat(inputs)
282
+ inputs =builder.inputs :name => :advanced_options_using_name do
238
283
  end
239
- builder.inputs :title => :advanced_options_using_title do
284
+ concat(inputs)
285
+ inputs = builder.inputs :title => :advanced_options_using_title do
240
286
  end
241
- builder.inputs :nested_forms_title, :for => :authors do |nf|
287
+ concat(inputs)
288
+ inputs = builder.inputs :nested_forms_title, :for => :authors do |nf|
242
289
  end
290
+ concat(inputs)
243
291
  end
244
292
  end
245
293
 
246
294
  it 'should render a fieldset with a localized legend inside the form' do
295
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
247
296
  output_buffer.should have_tag("form fieldset legend", /^#{@localized_legend_text}$/)
248
297
  output_buffer.should have_tag("form fieldset legend", /^#{@localized_legend_text_using_name}$/)
249
298
  output_buffer.should have_tag("form fieldset legend", /^#{@localized_legend_text_using_title}$/)
@@ -257,13 +306,14 @@ describe 'SemanticFormBuilder#inputs' do
257
306
  @id_option = 'advanced'
258
307
  @class_option = 'wide'
259
308
 
260
- semantic_form_for(@new_post) do |builder|
309
+ @form = semantic_form_for(@new_post) do |builder|
261
310
  builder.inputs :id => @id_option, :class => @class_option do
262
311
  end
263
312
  end
264
313
  end
265
314
 
266
315
  it 'should pass the options into the fieldset tag as attributes' do
316
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
267
317
  output_buffer.should have_tag("form fieldset##{@id_option}")
268
318
  output_buffer.should have_tag("form fieldset.#{@class_option}")
269
319
  end
@@ -290,46 +340,55 @@ describe 'SemanticFormBuilder#inputs' do
290
340
 
291
341
  describe 'with no args' do
292
342
  before do
293
- semantic_form_for(@new_post) do |builder|
343
+ @form = semantic_form_for(@new_post) do |builder|
294
344
  concat(builder.inputs)
295
345
  end
296
346
  end
297
347
 
298
348
  it 'should render a form' do
349
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
299
350
  output_buffer.should have_tag('form')
300
351
  end
301
352
 
302
353
  it 'should render a fieldset inside the form' do
354
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
303
355
  output_buffer.should have_tag('form > fieldset.inputs')
304
356
  end
305
357
 
306
358
  it 'should not render a legend in the fieldset' do
359
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
307
360
  output_buffer.should_not have_tag('form > fieldset.inputs > legend')
308
361
  end
309
362
 
310
363
  it 'should render an ol in the fieldset' do
364
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
311
365
  output_buffer.should have_tag('form > fieldset.inputs > ol')
312
366
  end
313
367
 
314
368
  it 'should render a list item in the ol for each column and reflection' do
315
369
  # Remove the :has_many macro and :created_at column
316
370
  count = ::Post.content_columns.size + ::Post.reflections.size - 2
371
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
317
372
  output_buffer.should have_tag('form > fieldset.inputs > ol > li', :count => count)
318
373
  end
319
374
 
320
375
  it 'should render a string list item for title' do
376
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
321
377
  output_buffer.should have_tag('form > fieldset.inputs > ol > li.string')
322
378
  end
323
379
 
324
380
  it 'should render a text list item for body' do
381
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
325
382
  output_buffer.should have_tag('form > fieldset.inputs > ol > li.text')
326
383
  end
327
384
 
328
385
  it 'should render a select list item for author_id' do
386
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
329
387
  output_buffer.should have_tag('form > fieldset.inputs > ol > li.select', :count => 1)
330
388
  end
331
389
 
332
390
  it 'should not render timestamps inputs by default' do
391
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
333
392
  output_buffer.should_not have_tag('form > fieldset.inputs > ol > li.datetime')
334
393
  end
335
394
  end
@@ -337,10 +396,11 @@ describe 'SemanticFormBuilder#inputs' do
337
396
  describe 'with column names as args' do
338
397
  describe 'and an object is given' do
339
398
  it 'should render a form with a fieldset containing two list items' do
340
- semantic_form_for(@new_post) do |builder|
399
+ form = semantic_form_for(@new_post) do |builder|
341
400
  concat(builder.inputs(:title, :body))
342
401
  end
343
402
 
403
+ output_buffer.concat(form) if Formtastic::Util.rails3?
344
404
  output_buffer.should have_tag('form > fieldset.inputs > ol > li', :count => 2)
345
405
  output_buffer.should have_tag('form > fieldset.inputs > ol > li.string')
346
406
  output_buffer.should have_tag('form > fieldset.inputs > ol > li.text')
@@ -349,10 +409,11 @@ describe 'SemanticFormBuilder#inputs' do
349
409
 
350
410
  describe 'and no object is given' do
351
411
  it 'should render a form with a fieldset containing two list items' do
352
- semantic_form_for(:project, :url => 'http://test.host') do |builder|
412
+ form = semantic_form_for(:project, :url => 'http://test.host') do |builder|
353
413
  concat(builder.inputs(:title, :body))
354
414
  end
355
415
 
416
+ output_buffer.concat(form) if Formtastic::Util.rails3?
356
417
  output_buffer.should have_tag('form > fieldset.inputs > ol > li.string', :count => 2)
357
418
  end
358
419
  end
@@ -362,11 +423,11 @@ describe 'SemanticFormBuilder#inputs' do
362
423
  describe 'and an object is given' do
363
424
  it 'should render nested inputs' do
364
425
  @bob.stub!(:column_for_attribute).and_return(mock('column', :type => :string, :limit => 255))
365
-
366
- semantic_form_for(@new_post) do |builder|
426
+ form = semantic_form_for(@new_post) do |builder|
367
427
  concat(builder.inputs(:login, :for => @bob))
368
428
  end
369
429
 
430
+ output_buffer.concat(form) if Formtastic::Util.rails3?
370
431
  output_buffer.should have_tag("form fieldset.inputs #post_author_login")
371
432
  output_buffer.should_not have_tag("form fieldset.inputs #author_login")
372
433
  end
@@ -374,10 +435,10 @@ describe 'SemanticFormBuilder#inputs' do
374
435
 
375
436
  describe 'and no object is given' do
376
437
  it 'should render nested inputs' do
377
- semantic_form_for(:project, :url => 'http://test.host/') do |builder|
438
+ form = semantic_form_for(:project, :url => 'http://test.host/') do |builder|
378
439
  concat(builder.inputs(:login, :for => @bob))
379
440
  end
380
-
441
+ output_buffer.concat(form) if Formtastic::Util.rails3?
381
442
  output_buffer.should have_tag("form fieldset.inputs #project_author_login")
382
443
  output_buffer.should_not have_tag("form fieldset.inputs #project_login")
383
444
  end
@@ -386,7 +447,7 @@ describe 'SemanticFormBuilder#inputs' do
386
447
 
387
448
  describe 'with column names and an options hash as args' do
388
449
  before do
389
- semantic_form_for(@new_post) do |builder|
450
+ @form = semantic_form_for(@new_post) do |builder|
390
451
  @legend_text_using_option = "Legendary Legend Text"
391
452
  @legend_text_using_arg = "Legendary Legend Text 2"
392
453
  concat(builder.inputs(:title, :body, :name => @legend_text_using_option, :id => "my-id"))
@@ -395,14 +456,17 @@ describe 'SemanticFormBuilder#inputs' do
395
456
  end
396
457
 
397
458
  it 'should render a form with a fieldset containing two list items' do
459
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
398
460
  output_buffer.should have_tag('form > fieldset.inputs > ol > li', :count => 4)
399
461
  end
400
462
 
401
463
  it 'should pass the options down to the fieldset' do
464
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
402
465
  output_buffer.should have_tag('form > fieldset#my-id.inputs')
403
466
  end
404
467
 
405
468
  it 'should use the special :name option as a text for the legend tag' do
469
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
406
470
  output_buffer.should have_tag('form > fieldset#my-id.inputs > legend', /^#{@legend_text_using_option}$/)
407
471
  output_buffer.should have_tag('form > fieldset#my-id-2.inputs > legend', /^#{@legend_text_using_arg}$/)
408
472
  end