formtastic 0.9.10 → 1.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
data/lib/formtastic.rb CHANGED
@@ -536,7 +536,7 @@ module Formtastic #:nodoc:
536
536
  #
537
537
  def strip_formtastic_options(options) #:nodoc:
538
538
  options.except(:value_method, :label_method, :collection, :required, :label,
539
- :as, :hint, :input_html, :label_html, :value_as_class)
539
+ :as, :hint, :input_html, :label_html, :value_as_class, :find_options)
540
540
  end
541
541
 
542
542
  # Determins if the attribute (eg :title) should be considered required or not.
@@ -885,8 +885,13 @@ module Formtastic #:nodoc:
885
885
  li_options = value_as_class ? { :class => [method.to_s.singularize, value.to_s.downcase].join('_') } : {}
886
886
  template.content_tag(:li, Formtastic::Util.html_safe(li_content), li_options)
887
887
  end
888
-
889
- field_set_and_list_wrapping_for_method(method, options, list_item_content)
888
+
889
+ template.content_tag(:fieldset,
890
+ template.content_tag(:legend,
891
+ template.label_tag(nil, localized_string(method, method, :label) || humanized_attribute_name(method), :for => nil), :class => :label
892
+ ) <<
893
+ template.content_tag(:ol, list_item_content)
894
+ )
890
895
  end
891
896
  alias :boolean_radio_input :radio_input
892
897
 
@@ -1152,7 +1157,12 @@ module Formtastic #:nodoc:
1152
1157
  template.content_tag(:li, Formtastic::Util.html_safe(li_content), li_options)
1153
1158
  end
1154
1159
 
1155
- field_set_and_list_wrapping_for_method(method, options, list_item_content)
1160
+ template.content_tag(:fieldset,
1161
+ template.content_tag(:legend,
1162
+ template.label_tag(nil, localized_string(method, method, :label) || humanized_attribute_name(method), :for => nil), :class => :label
1163
+ ) <<
1164
+ template.content_tag(:ol, list_item_content)
1165
+ )
1156
1166
  end
1157
1167
 
1158
1168
  # Outputs a country select input, wrapping around a regular country_select helper.
@@ -1531,7 +1541,8 @@ module Formtastic #:nodoc:
1531
1541
  elsif type == :numeric || column.nil? || column.limit.nil?
1532
1542
  { :size => @@default_text_field_size }
1533
1543
  else
1534
- { :maxlength => column.limit, :size => [column.limit, @@default_text_field_size].min }
1544
+ { :maxlength => column.limit,
1545
+ :size => @@default_text_field_size && [column.limit, @@default_text_field_size].min }
1535
1546
  end
1536
1547
  end
1537
1548
 
@@ -13,7 +13,8 @@ module Formtastic
13
13
  def html_safe(text)
14
14
  return text if text.nil?
15
15
  return text.html_safe if defined?(ActiveSupport::SafeBuffer)
16
- return text.html_safe!
16
+ return text.html_safe! if text.respond_to?(:html_safe!)
17
+ text
17
18
  end
18
19
 
19
20
  def rails_safe_buffer_class
@@ -231,10 +231,29 @@ describe 'check_boxes input' do
231
231
  end
232
232
 
233
233
  end
234
+
235
+ describe "with i18n of the legend label" do
236
+
237
+ before do
238
+ ::I18n.backend.store_translations :en, :formtastic => { :labels => { :post => { :authors => "Translated!" }}}
239
+
240
+ @new_post.stub!(:author_ids).and_return(nil)
241
+ semantic_form_for(@new_post) do |builder|
242
+ concat(builder.input(:authors, :as => :check_boxes))
243
+ end
244
+ end
234
245
 
246
+ after do
247
+ ::I18n.backend.reload!
248
+ end
249
+
250
+ it "should do foo" do
251
+ output_buffer.should have_tag("legend.label label", /Translated/)
252
+ end
253
+
254
+ end
255
+
235
256
  end
236
-
237
-
238
257
 
239
258
  end
240
259
 
@@ -29,7 +29,7 @@ describe 'radio input' do
29
29
  end
30
30
 
31
31
  it 'should not link the label within the legend to any input' do
32
- output_buffer.should_not have_tag('form li fieldset legend label[@for^="post_author_id_"]')
32
+ output_buffer.should_not have_tag('form li fieldset legend label[@for]')
33
33
  end
34
34
 
35
35
  it 'should generate an ordered list with a list item for each choice' do
@@ -76,6 +76,16 @@ describe 'radio input' do
76
76
 
77
77
  output_buffer.should have_tag("form li fieldset ol li label input[@checked='checked']")
78
78
  end
79
+
80
+ it "should not contain invalid HTML attributes" do
81
+
82
+ semantic_form_for(@new_post) do |builder|
83
+ concat(builder.input(:author, :as => :radio))
84
+ end
85
+
86
+ output_buffer.should_not have_tag("form li fieldset ol li input[@find_options]")
87
+ end
88
+
79
89
  end
80
90
 
81
91
  describe 'and no object is given' do
@@ -151,5 +161,26 @@ describe 'radio input' do
151
161
  end
152
162
 
153
163
  end
164
+
165
+ describe "with i18n of the legend label" do
166
+
167
+ before do
168
+ ::I18n.backend.store_translations :en, :formtastic => { :labels => { :post => { :authors => "Translated!" }}}
169
+
170
+ @new_post.stub!(:author_ids).and_return(nil)
171
+ semantic_form_for(@new_post) do |builder|
172
+ concat(builder.input(:authors, :as => :radio))
173
+ end
174
+ end
175
+
176
+ after do
177
+ ::I18n.backend.reload!
178
+ end
179
+
180
+ it "should do foo" do
181
+ output_buffer.should have_tag("legend.label label", /Translated/)
182
+ end
183
+
184
+ end
154
185
 
155
186
  end
@@ -8,26 +8,30 @@ describe 'string input' do
8
8
  before do
9
9
  @output_buffer = ''
10
10
  mock_everything
11
-
12
- semantic_form_for(@new_post) do |builder|
13
- concat(builder.input(:title, :as => :string))
11
+ end
12
+
13
+ describe "when object is provided" do
14
+ before do
15
+ semantic_form_for(@new_post) do |builder|
16
+ concat(builder.input(:title, :as => :string))
17
+ end
14
18
  end
19
+
20
+ it_should_have_input_wrapper_with_class(:string)
21
+ it_should_have_input_wrapper_with_id("post_title_input")
22
+ it_should_have_label_with_text(/Title/)
23
+ it_should_have_label_for("post_title")
24
+ it_should_have_input_with_id("post_title")
25
+ it_should_have_input_with_type(:text)
26
+ it_should_have_input_with_name("post[title]")
27
+ it_should_have_maxlength_matching_column_limit
28
+ it_should_use_default_text_field_size_for_columns_longer_than_default_text_field_size(:string)
29
+ it_should_use_column_size_for_columns_shorter_than_default_text_field_size(:string)
30
+ it_should_use_default_text_field_size_when_method_has_no_database_column(:string)
31
+ it_should_apply_custom_input_attributes_when_input_html_provided(:string)
32
+ it_should_apply_custom_for_to_label_when_input_html_id_provided(:string)
33
+ it_should_apply_error_logic_for_input_type(:string)
15
34
  end
16
-
17
- it_should_have_input_wrapper_with_class(:string)
18
- it_should_have_input_wrapper_with_id("post_title_input")
19
- it_should_have_label_with_text(/Title/)
20
- it_should_have_label_for("post_title")
21
- it_should_have_input_with_id("post_title")
22
- it_should_have_input_with_type(:text)
23
- it_should_have_input_with_name("post[title]")
24
- it_should_have_maxlength_matching_column_limit
25
- it_should_use_default_text_field_size_for_columns_longer_than_default_text_field_size(:string)
26
- it_should_use_column_size_for_columns_shorter_than_default_text_field_size(:string)
27
- it_should_use_default_text_field_size_when_method_has_no_database_column(:string)
28
- it_should_apply_custom_input_attributes_when_input_html_provided(:string)
29
- it_should_apply_custom_for_to_label_when_input_html_id_provided(:string)
30
- it_should_apply_error_logic_for_input_type(:string)
31
35
 
32
36
  describe "when no object is provided" do
33
37
  before do
@@ -43,5 +47,17 @@ describe 'string input' do
43
47
  it_should_have_input_with_name("project[title]")
44
48
  end
45
49
 
50
+ describe "when size is nil" do
51
+ before do
52
+ semantic_form_for(:project, :url => 'http://test.host/') do |builder|
53
+ concat(builder.input(:title, :as => :string, :input_html => {:size => nil}))
54
+ end
55
+ end
56
+
57
+ it "should have no size attribute" do
58
+ output_buffer.should_not have_tag("input[@size]")
59
+ end
60
+ end
61
+
46
62
  end
47
63
 
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formtastic
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ prerelease: true
5
5
  segments:
6
+ - 1
7
+ - 0
6
8
  - 0
7
- - 9
8
- - 10
9
- version: 0.9.10
9
+ - beta
10
+ version: 1.0.0.beta
10
11
  platform: ruby
11
12
  authors:
12
13
  - Justin French
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-05-26 00:00:00 +10:00
18
+ date: 2010-06-07 00:00:00 +10:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -151,11 +152,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
151
152
  version: "0"
152
153
  required_rubygems_version: !ruby/object:Gem::Requirement
153
154
  requirements:
154
- - - ">="
155
+ - - ">"
155
156
  - !ruby/object:Gem::Version
156
157
  segments:
157
- - 0
158
- version: "0"
158
+ - 1
159
+ - 3
160
+ - 1
161
+ version: 1.3.1
159
162
  requirements: []
160
163
 
161
164
  rubyforge_project: