techthumb-formtastic 1.rails3.sha

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 (58) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.textile +584 -0
  3. data/Rakefile +127 -0
  4. data/generators/form/USAGE +16 -0
  5. data/generators/form/form_generator.rb +120 -0
  6. data/generators/form/templates/view__form.html.erb +5 -0
  7. data/generators/form/templates/view__form.html.haml +4 -0
  8. data/generators/formtastic/formtastic_generator.rb +24 -0
  9. data/generators/formtastic/templates/formtastic.css +131 -0
  10. data/generators/formtastic/templates/formtastic.rb +54 -0
  11. data/generators/formtastic/templates/formtastic_changes.css +14 -0
  12. data/generators/formtastic_stylesheets/formtastic_stylesheets_generator.rb +16 -0
  13. data/init.rb +5 -0
  14. data/lib/formtastic/i18n.rb +35 -0
  15. data/lib/formtastic/layout_helper.rb +10 -0
  16. data/lib/formtastic/railtie.rb +12 -0
  17. data/lib/formtastic/util.rb +36 -0
  18. data/lib/formtastic.rb +1870 -0
  19. data/lib/generators/formtastic/form/form_generator.rb +86 -0
  20. data/lib/generators/formtastic/install/install_generator.rb +24 -0
  21. data/lib/locale/en.yml +8 -0
  22. data/rails/init.rb +2 -0
  23. data/spec/buttons_spec.rb +166 -0
  24. data/spec/commit_button_spec.rb +401 -0
  25. data/spec/custom_builder_spec.rb +98 -0
  26. data/spec/defaults_spec.rb +20 -0
  27. data/spec/error_proc_spec.rb +27 -0
  28. data/spec/errors_spec.rb +105 -0
  29. data/spec/form_helper_spec.rb +142 -0
  30. data/spec/helpers/layout_helper_spec.rb +21 -0
  31. data/spec/i18n_spec.rb +152 -0
  32. data/spec/include_blank_spec.rb +74 -0
  33. data/spec/input_spec.rb +786 -0
  34. data/spec/inputs/boolean_input_spec.rb +104 -0
  35. data/spec/inputs/check_boxes_input_spec.rb +426 -0
  36. data/spec/inputs/country_input_spec.rb +118 -0
  37. data/spec/inputs/date_input_spec.rb +168 -0
  38. data/spec/inputs/datetime_input_spec.rb +310 -0
  39. data/spec/inputs/file_input_spec.rb +34 -0
  40. data/spec/inputs/hidden_input_spec.rb +78 -0
  41. data/spec/inputs/numeric_input_spec.rb +44 -0
  42. data/spec/inputs/password_input_spec.rb +46 -0
  43. data/spec/inputs/radio_input_spec.rb +243 -0
  44. data/spec/inputs/select_input_spec.rb +546 -0
  45. data/spec/inputs/string_input_spec.rb +64 -0
  46. data/spec/inputs/text_input_spec.rb +34 -0
  47. data/spec/inputs/time_input_spec.rb +206 -0
  48. data/spec/inputs/time_zone_input_spec.rb +110 -0
  49. data/spec/inputs_spec.rb +476 -0
  50. data/spec/label_spec.rb +89 -0
  51. data/spec/semantic_errors_spec.rb +98 -0
  52. data/spec/semantic_fields_for_spec.rb +45 -0
  53. data/spec/spec.opts +2 -0
  54. data/spec/spec_helper.rb +289 -0
  55. data/spec/support/custom_macros.rb +494 -0
  56. data/spec/support/output_buffer.rb +4 -0
  57. data/spec/support/test_environment.rb +45 -0
  58. metadata +235 -0
@@ -0,0 +1,206 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'time input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+ end
12
+
13
+ describe "general" do
14
+ before do
15
+ ::I18n.backend.reload!
16
+ output_buffer.replace ''
17
+ end
18
+
19
+ describe "with :ignore_date" do
20
+ before do
21
+ @form = semantic_form_for(@new_post) do |builder|
22
+ concat(builder.input(:publish_at, :as => :time, :ignore_date => true))
23
+ end
24
+ end
25
+
26
+ it 'should not have an input for day, month and year' do
27
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
28
+ output_buffer.should_not have_tag('#post_publish_at_1i')
29
+ output_buffer.should_not have_tag('#post_publish_at_2i')
30
+ output_buffer.should_not have_tag('#post_publish_at_3i')
31
+ end
32
+
33
+ it 'should have an input for hour and minute' do
34
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
35
+ output_buffer.should have_tag('#post_publish_at_4i')
36
+ output_buffer.should have_tag('#post_publish_at_5i')
37
+ end
38
+
39
+ end
40
+
41
+ describe "without seconds" do
42
+ before do
43
+ @form = semantic_form_for(@new_post) do |builder|
44
+ concat(builder.input(:publish_at, :as => :time))
45
+ end
46
+ end
47
+
48
+ it_should_have_input_wrapper_with_class("time")
49
+ it_should_have_input_wrapper_with_id("post_publish_at_input")
50
+ it_should_have_a_nested_fieldset
51
+ it_should_apply_error_logic_for_input_type(:time)
52
+
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?
55
+ output_buffer.should have_tag('form li.time fieldset legend.label label', /Publish at/)
56
+ end
57
+
58
+ it 'should associate the legend label with the first select' do
59
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
60
+ output_buffer.should have_tag('form li.time fieldset legend.label label[@for="post_publish_at_1i"]')
61
+ end
62
+
63
+ it 'should have an ordered list of two items inside the fieldset' do
64
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
65
+ output_buffer.should have_tag('form li.time fieldset ol')
66
+ output_buffer.should have_tag('form li.time fieldset ol li', :count => 2)
67
+ end
68
+
69
+ it 'should have five labels for hour and minute' do
70
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
71
+ output_buffer.should have_tag('form li.time fieldset ol li label', :count => 2)
72
+ output_buffer.should have_tag('form li.time fieldset ol li label', /hour/i)
73
+ output_buffer.should have_tag('form li.time fieldset ol li label', /minute/i)
74
+ end
75
+
76
+ it 'should have two selects for hour and minute' do
77
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
78
+ output_buffer.should have_tag('form li.time fieldset ol li', :count => 2)
79
+ end
80
+ end
81
+
82
+ describe "with seconds" do
83
+ before do
84
+ @form = semantic_form_for(@new_post) do |builder|
85
+ concat(builder.input(:publish_at, :as => :time, :include_seconds => true))
86
+ end
87
+ end
88
+
89
+ it 'should have five labels for hour and minute' do
90
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
91
+ output_buffer.should have_tag('form li.time fieldset ol li label', :count => 3)
92
+ output_buffer.should have_tag('form li.time fieldset ol li label', /hour/i)
93
+ output_buffer.should have_tag('form li.time fieldset ol li label', /minute/i)
94
+ output_buffer.should have_tag('form li.time fieldset ol li label', /second/i)
95
+ end
96
+
97
+ it 'should have three selects for hour, minute and seconds' do
98
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
99
+ output_buffer.should have_tag('form li.time fieldset ol li', :count => 3)
100
+ end
101
+
102
+ it 'should generate a sanitized label and matching ids for attribute' do
103
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
104
+ 4.upto(6) do |i|
105
+ output_buffer.should have_tag("form li fieldset ol li label[@for='post_publish_at_#{i}i']")
106
+ output_buffer.should have_tag("form li fieldset ol li #post_publish_at_#{i}i")
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ describe ':selected option' do
113
+
114
+ describe "when the object has a value" do
115
+ it "should select the object value (ignoring :selected)" do
116
+ output_buffer.replace ''
117
+ @new_post.stub!(:created_at => Time.mktime(2012, 11, 30, 21, 45))
118
+ with_deprecation_silenced do
119
+ @form = semantic_form_for(@new_post) do |builder|
120
+ concat(builder.input(:created_at, :as => :time, :selected => Time.mktime(1999, 12, 31, 22, 59)))
121
+ end
122
+ end
123
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
124
+ output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@selected]", :count => 1)
125
+ output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@value='21'][@selected]", :count => 1)
126
+ end
127
+ end
128
+
129
+ describe 'when the object has no value (nil)' do
130
+ it "should select the :selected if provided as a Time" do
131
+ output_buffer.replace ''
132
+ @new_post.stub!(:created_at => nil)
133
+ with_deprecation_silenced do
134
+ @form = semantic_form_for(@new_post) do |builder|
135
+ concat(builder.input(:created_at, :as => :time, :selected => Time.mktime(1999, 12, 31, 22, 59)))
136
+ end
137
+ end
138
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
139
+ output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@selected]", :count => 1)
140
+ output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@value='22'][@selected]", :count => 1)
141
+ end
142
+
143
+ it "should not select an option if the :selected is provided as nil" do
144
+ output_buffer.replace ''
145
+ @new_post.stub!(:created_at => nil)
146
+ with_deprecation_silenced do
147
+ @form = semantic_form_for(@new_post) do |builder|
148
+ concat(builder.input(:created_at, :as => :time, :selected => nil))
149
+ end
150
+ end
151
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
152
+ output_buffer.should_not have_tag("form li ol li select#post_created_at_4i option[@selected]")
153
+ end
154
+
155
+ it "should select nothing if a :selected is not provided" do
156
+ output_buffer.replace ''
157
+ @new_post.stub!(:created_at => nil)
158
+ form = semantic_form_for(@new_post) do |builder|
159
+ concat(builder.input(:created_at, :as => :time))
160
+ end
161
+ output_buffer.concat(form) if Formtastic::Util.rails3?
162
+ output_buffer.should_not have_tag("form li ol li select option[@selected]")
163
+ end
164
+ end
165
+
166
+ end
167
+
168
+ describe ':labels option' do
169
+ fields = [:hour, :minute, :second]
170
+ fields.each do |field|
171
+ it "should replace the #{field} label with the specified text if :labels[:#{field}] is set" do
172
+ output_buffer.replace ''
173
+ form = semantic_form_for(@new_post) do |builder|
174
+ concat(builder.input(:created_at, :as => :time, :include_seconds => true, :labels => { field => "another #{field} label" }))
175
+ end
176
+ output_buffer.concat(form) if Formtastic::Util.rails3?
177
+ output_buffer.should have_tag('form li.time fieldset ol li label', :count => fields.length)
178
+ fields.each do |f|
179
+ output_buffer.should have_tag('form li.time fieldset ol li label', f == field ? /another #{f} label/i : /#{f}/i)
180
+ end
181
+ end
182
+
183
+ it "should not display the label for the #{field} field when :labels[:#{field}] is blank" do
184
+ output_buffer.replace ''
185
+ form = semantic_form_for(@new_post) do |builder|
186
+ concat(builder.input(:created_at, :as => :time, :include_seconds => true, :labels => { field => "" }))
187
+ end
188
+ output_buffer.concat(form) if Formtastic::Util.rails3?
189
+ output_buffer.should have_tag('form li.time fieldset ol li label', :count => fields.length-1)
190
+ fields.each do |f|
191
+ output_buffer.should have_tag('form li.time fieldset ol li label', /#{f}/i) unless field == f
192
+ end
193
+ end
194
+ end
195
+ end
196
+
197
+ it 'should warn about :selected deprecation' do
198
+ with_deprecation_silenced do
199
+ ::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times
200
+ semantic_form_for(@new_post) do |builder|
201
+ concat(builder.input(:created_at, :as => :time, :selected => Time.mktime(1999)))
202
+ end
203
+ end
204
+ end
205
+
206
+ end
@@ -0,0 +1,110 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'time_zone input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+
12
+ @form = semantic_form_for(@new_post) do |builder|
13
+ concat(builder.input(:time_zone))
14
+ end
15
+ end
16
+
17
+ it_should_have_input_wrapper_with_class("time_zone")
18
+ it_should_have_input_wrapper_with_id("post_time_zone_input")
19
+ it_should_apply_error_logic_for_input_type(:time_zone)
20
+
21
+ it 'should generate a label for the input' do
22
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
23
+ output_buffer.should have_tag('form li label')
24
+ output_buffer.should have_tag('form li label[@for="post_time_zone"]')
25
+ output_buffer.should have_tag('form li label', /Time zone/)
26
+ end
27
+
28
+ it "should generate a select" do
29
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
30
+ output_buffer.should have_tag("form li select")
31
+ output_buffer.should have_tag("form li select#post_time_zone")
32
+ output_buffer.should have_tag("form li select[@name=\"post[time_zone]\"]")
33
+ end
34
+
35
+ it 'should use input_html to style inputs' do
36
+ form = semantic_form_for(@new_post) do |builder|
37
+ concat(builder.input(:time_zone, :input_html => { :class => 'myclass' }))
38
+ end
39
+ output_buffer.concat(form) if Formtastic::Util.rails3?
40
+ output_buffer.should have_tag("form li select.myclass")
41
+ end
42
+
43
+ describe 'when no object is given' do
44
+ before(:each) do
45
+ @form = semantic_form_for(:project, :url => 'http://test.host/') do |builder|
46
+ concat(builder.input(:time_zone, :as => :time_zone))
47
+ end
48
+ end
49
+
50
+ it 'should generate labels' do
51
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
52
+ output_buffer.should have_tag('form li label')
53
+ output_buffer.should have_tag('form li label[@for="project_time_zone"]')
54
+ output_buffer.should have_tag('form li label', /Time zone/)
55
+ end
56
+
57
+ it 'should generate select inputs' do
58
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
59
+ output_buffer.should have_tag("form li select")
60
+ output_buffer.should have_tag("form li select#project_time_zone")
61
+ output_buffer.should have_tag("form li select[@name=\"project[time_zone]\"]")
62
+ end
63
+ end
64
+
65
+ describe 'when :selected is set' do
66
+ before do
67
+ @output_buffer = ''
68
+ end
69
+
70
+ # Note: Not possible to override default selected value for time_zone input
71
+ # without overriding Rails time_zone_select. This Rails helper works "a bit different". =/
72
+ #
73
+ # describe "no selected items" do
74
+ # before do
75
+ # @new_post.stub!(:time_zone).and_return('Stockholm')
76
+ #
77
+ # semantic_form_for(@new_post) do |builder|
78
+ # concat(builder.input(:time_zone, :as => :time_zone, :selected => nil))
79
+ # end
80
+ # end
81
+ #
82
+ # it 'should not have any selected item(s)' do
83
+ # output_buffer.should_not have_tag("form li select option[@selected='selected']")
84
+ # end
85
+ # end
86
+
87
+ describe "single selected item" do
88
+ before do
89
+ # Note: See above...only works for the "attribute is nil" case.
90
+ # @new_post.stub!(:time_zone).and_return('Stockholm')
91
+ @new_post.stub!(:time_zone).and_return(nil)
92
+
93
+ with_deprecation_silenced do
94
+ @form = semantic_form_for(@new_post) do |builder|
95
+ concat(builder.input(:time_zone, :as => :time_zone, :selected => 'Melbourne'))
96
+ end
97
+ end
98
+ end
99
+
100
+ it 'should have a selected item; the specified one' do
101
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
102
+ output_buffer.should have_tag("form li select option[@selected='selected']", :count => 1)
103
+ output_buffer.should have_tag("form li select option[@selected='selected']", /Melbourne/i)
104
+ output_buffer.should have_tag("form li select option[@selected='selected'][@value='Melbourne']")
105
+ end
106
+ end
107
+
108
+ end
109
+
110
+ end