merb_helpers 0.9.6 → 0.9.7

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/Rakefile CHANGED
@@ -18,7 +18,7 @@ GEM_EMAIL = "ykatz@engineyard.com"
18
18
 
19
19
  GEM_NAME = "merb_helpers"
20
20
  PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
21
- GEM_VERSION = (Merb::MORE_VERSION rescue "0.9.6") + PKG_BUILD
21
+ GEM_VERSION = (Merb::MORE_VERSION rescue "0.9.7") + PKG_BUILD
22
22
 
23
23
  RELEASE_NAME = "REL #{GEM_VERSION}"
24
24
 
@@ -36,7 +36,7 @@ spec = Gem::Specification.new do |s|
36
36
  s.author = GEM_AUTHOR
37
37
  s.email = GEM_EMAIL
38
38
  s.homepage = PROJECT_URL
39
- s.add_dependency('merb-core', '>= 0.9.6')
39
+ s.add_dependency('merb-core', '>= 0.9.7')
40
40
  s.require_path = 'lib'
41
41
  s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,specs}/**/*")
42
42
  end
@@ -14,19 +14,117 @@ module Merb::Helpers::Form::Builder
14
14
  @origin.concat(@origin.capture(&blk), blk.binding)
15
15
  end
16
16
 
17
+ def form(attrs = {}, &blk)
18
+ captured = @origin.capture(&blk)
19
+ fake_method_tag = process_form_attrs(attrs)
20
+ tag(:form, fake_method_tag + captured, attrs)
21
+ end
22
+
17
23
  def fieldset(attrs, &blk)
18
24
  legend = (l_attr = attrs.delete(:legend)) ? tag(:legend, l_attr) : ""
19
25
  tag(:fieldset, legend + @origin.capture(&blk), attrs)
20
26
  # @origin.concat(contents, blk.binding)
21
27
  end
22
28
 
23
- def form(attrs = {}, &blk)
24
- captured = @origin.capture(&blk)
25
- fake_method_tag = process_form_attrs(attrs)
29
+ %w(text password hidden file).each do |kind|
30
+ self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
31
+ def bound_#{kind}_field(method, attrs = {})
32
+ name = control_name(method)
33
+ update_bound_controls(method, attrs, "#{kind}")
34
+ unbound_#{kind}_field({:name => name, :value => @obj.send(method)}.merge(attrs))
35
+ end
26
36
 
27
- tag(:form, fake_method_tag + captured, attrs)
37
+ def unbound_#{kind}_field(attrs)
38
+ update_unbound_controls(attrs, "#{kind}")
39
+ self_closing_tag(:input, {:type => "#{kind}"}.merge(attrs))
40
+ end
41
+ RUBY
42
+ end
43
+
44
+ def bound_check_box(method, attrs = {})
45
+ name = control_name(method)
46
+ update_bound_controls(method, attrs, "checkbox")
47
+ unbound_check_box({:name => name}.merge(attrs))
48
+ end
49
+
50
+ def unbound_check_box(attrs)
51
+ update_unbound_controls(attrs, "checkbox")
52
+ if attrs.delete(:boolean)
53
+ on, off = attrs.delete(:on), attrs.delete(:off)
54
+ unbound_hidden_field(:name => attrs[:name], :value => off) <<
55
+ self_closing_tag(:input, {:type => "checkbox", :value => on}.merge(attrs))
56
+ else
57
+ self_closing_tag(:input, {:type => "checkbox"}.merge(attrs))
58
+ end
28
59
  end
29
60
 
61
+ def bound_radio_button(method, attrs = {})
62
+ name = control_name(method)
63
+ update_bound_controls(method, attrs, "radio")
64
+ unbound_radio_button({:name => name, :value => @obj.send(method)}.merge(attrs))
65
+ end
66
+
67
+ def unbound_radio_button(attrs)
68
+ update_unbound_controls(attrs, "radio")
69
+ self_closing_tag(:input, {:type => "radio"}.merge(attrs))
70
+ end
71
+
72
+ def bound_radio_group(method, arr)
73
+ val = @obj.send(method)
74
+ arr.map do |attrs|
75
+ attrs = {:value => attrs} unless attrs.is_a?(Hash)
76
+ attrs[:checked] ||= (val == attrs[:value])
77
+ radio_group_item(method, attrs)
78
+ end.join
79
+ end
80
+
81
+ def unbound_radio_group(arr, attrs = {})
82
+ arr.map do |ind_attrs|
83
+ ind_attrs = {:value => ind_attrs} unless ind_attrs.is_a?(Hash)
84
+ joined = attrs.merge(ind_attrs)
85
+ joined.merge!(:label => joined[:label] || joined[:value])
86
+ unbound_radio_button(joined)
87
+ end.join
88
+ end
89
+
90
+ def bound_select(method, attrs = {})
91
+ name = control_name(method)
92
+ update_bound_controls(method, attrs, "select")
93
+ unbound_select({:name => name}.merge(attrs))
94
+ end
95
+
96
+ def unbound_select(attrs = {})
97
+ update_unbound_controls(attrs, "select")
98
+ attrs[:name] << "[]" if attrs[:multiple] && !(attrs[:name] =~ /\[\]$/)
99
+ tag(:select, options_for(attrs), attrs)
100
+ end
101
+
102
+ def bound_text_area(method, attrs = {})
103
+ name = "#{@name}[#{method}]"
104
+ update_bound_controls(method, attrs, "text_area")
105
+ unbound_text_area(@obj.send(method), {:name => name}.merge(attrs))
106
+ end
107
+
108
+ def unbound_text_area(contents, attrs)
109
+ update_unbound_controls(attrs, "text_area")
110
+ tag(:textarea, contents, attrs)
111
+ end
112
+
113
+ def button(contents, attrs)
114
+ update_unbound_controls(attrs, "button")
115
+ tag(:button, contents, attrs)
116
+ end
117
+
118
+ def submit(value, attrs)
119
+ attrs[:type] ||= "submit"
120
+ attrs[:name] ||= "submit"
121
+ attrs[:value] ||= value
122
+ update_unbound_controls(attrs, "submit")
123
+ self_closing_tag(:input, attrs)
124
+ end
125
+
126
+ private
127
+
30
128
  def process_form_attrs(attrs)
31
129
  method = attrs[:method]
32
130
 
@@ -46,10 +144,6 @@ module Merb::Helpers::Form::Builder
46
144
  self_closing_tag(:input, :type => "hidden", :name => "_method", :value => method)
47
145
  end
48
146
 
49
- def add_css_class(attrs, new_class)
50
- attrs[:class] = attrs[:class] ? "#{attrs[:class]} #{new_class}" : new_class
51
- end
52
-
53
147
  def update_bound_controls(method, attrs, type)
54
148
  case type
55
149
  when "checkbox"
@@ -59,12 +153,6 @@ module Merb::Helpers::Form::Builder
59
153
  end
60
154
  end
61
155
 
62
- def update_bound_select(method, attrs)
63
- attrs[:value_method] ||= method
64
- attrs[:text_method] ||= attrs[:value_method] || :to_s
65
- attrs[:selected] ||= @obj.send(attrs[:value_method])
66
- end
67
-
68
156
  def update_bound_check_box(method, attrs)
69
157
  raise ArgumentError, ":value can't be used with a bound_check_box" if attrs.has_key?(:value)
70
158
 
@@ -74,6 +162,12 @@ module Merb::Helpers::Form::Builder
74
162
  attrs[:checked] = attrs.key?(:on) ? val == attrs[:on] : considered_true?(val)
75
163
  end
76
164
 
165
+ def update_bound_select(method, attrs)
166
+ attrs[:value_method] ||= method
167
+ attrs[:text_method] ||= attrs[:value_method] || :to_s
168
+ attrs[:selected] ||= @obj.send(attrs[:value_method])
169
+ end
170
+
77
171
  def update_unbound_controls(attrs, type)
78
172
  case type
79
173
  when "checkbox"
@@ -104,109 +198,6 @@ module Merb::Helpers::Form::Builder
104
198
  attrs[:checked] = "checked" if attrs.delete(:checked)
105
199
  end
106
200
 
107
- def bound_check_box(method, attrs = {})
108
- name = control_name(method)
109
- update_bound_controls(method, attrs, "checkbox")
110
- unbound_check_box({:name => name}.merge(attrs))
111
- end
112
-
113
- def unbound_check_box(attrs)
114
- update_unbound_controls(attrs, "checkbox")
115
- if attrs.delete(:boolean)
116
- on, off = attrs.delete(:on), attrs.delete(:off)
117
- unbound_hidden_field(:name => attrs[:name], :value => off) <<
118
- self_closing_tag(:input, {:type => "checkbox", :value => on}.merge(attrs))
119
- else
120
- self_closing_tag(:input, {:type => "checkbox"}.merge(attrs))
121
- end
122
- end
123
-
124
- %w(text password hidden file).each do |kind|
125
- self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
126
- def unbound_#{kind}_field(attrs)
127
- update_unbound_controls(attrs, "#{kind}")
128
- self_closing_tag(:input, {:type => "#{kind}"}.merge(attrs))
129
- end
130
-
131
- def bound_#{kind}_field(method, attrs = {})
132
- name = control_name(method)
133
- update_bound_controls(method, attrs, "#{kind}")
134
- unbound_#{kind}_field({:name => name, :value => @obj.send(method)}.merge(attrs))
135
- end
136
- RUBY
137
- end
138
-
139
- def bound_radio_button(method, attrs = {})
140
- name = control_name(method)
141
- update_bound_controls(method, attrs, "radio")
142
- unbound_radio_button({:name => name, :value => @obj.send(method)}.merge(attrs))
143
- end
144
-
145
- def unbound_radio_button(attrs)
146
- update_unbound_controls(attrs, "radio")
147
- self_closing_tag(:input, {:type => "radio"}.merge(attrs))
148
- end
149
-
150
- def button(contents, attrs)
151
- update_unbound_controls(attrs, "button")
152
- tag(:button, contents, attrs)
153
- end
154
-
155
- def submit(value, attrs)
156
- attrs[:type] ||= "submit"
157
- attrs[:name] ||= "submit"
158
- attrs[:value] ||= value
159
- update_unbound_controls(attrs, "submit")
160
- self_closing_tag(:input, attrs)
161
- end
162
-
163
- def bound_select(method, attrs = {})
164
- name = control_name(method)
165
- update_bound_controls(method, attrs, "select")
166
- unbound_select({:name => name}.merge(attrs))
167
- end
168
-
169
- def unbound_select(attrs = {})
170
- update_unbound_controls(attrs, "select")
171
- attrs[:name] << "[]" if attrs[:multiple] && !(attrs[:name] =~ /\[\]$/)
172
- tag(:select, options_for(attrs), attrs)
173
- end
174
-
175
- def bound_radio_group(method, arr)
176
- val = @obj.send(method)
177
- arr.map do |attrs|
178
- attrs = {:value => attrs} unless attrs.is_a?(Hash)
179
- attrs[:checked] ||= (val == attrs[:value])
180
- radio_group_item(method, attrs)
181
- end.join
182
- end
183
-
184
- def unbound_radio_group(arr, attrs = {})
185
- arr.map do |ind_attrs|
186
- ind_attrs = {:value => ind_attrs} unless ind_attrs.is_a?(Hash)
187
- joined = attrs.merge(ind_attrs)
188
- joined.merge!(:label => joined[:label] || joined[:value])
189
- unbound_radio_button(joined)
190
- end.join
191
- end
192
-
193
- def unbound_text_area(contents, attrs)
194
- update_unbound_controls(attrs, "text_area")
195
- tag(:textarea, contents, attrs)
196
- end
197
-
198
- def bound_text_area(method, attrs = {})
199
- name = "#{@name}[#{method}]"
200
- update_bound_controls(method, attrs, "text_area")
201
- unbound_text_area(@obj.send(method), {:name => name}.merge(attrs))
202
- end
203
-
204
- private
205
-
206
- def control_name(method)
207
- "#{@name}[#{method}]"
208
- end
209
-
210
201
  # Accepts a collection (hash, array, enumerable, your type) and returns a string of option tags.
211
202
  # Given a collection where the elements respond to first and last (such as a two-element array),
212
203
  # the "lasts" serve as option values and the "firsts" as option text. Hashes are turned into
@@ -258,7 +249,11 @@ module Merb::Helpers::Form::Builder
258
249
  value = item.is_a?(String) ? item : item.send(value_meth)
259
250
 
260
251
  option_attrs = {:value => value}
261
- option_attrs.merge!(:selected => "selected") if value == sel
252
+ if sel.is_a?(Array)
253
+ option_attrs.merge!(:selected => "selected") if value.in? sel
254
+ else
255
+ option_attrs.merge!(:selected => "selected") if value == sel
256
+ end
262
257
  tag(:option, text, option_attrs)
263
258
  end).join
264
259
  end
@@ -271,22 +266,17 @@ module Merb::Helpers::Form::Builder
271
266
  def considered_true?(value)
272
267
  value && value != "0" && value != 0
273
268
  end
274
- end
275
269
 
276
- class Form < Base
277
- def update_bound_controls(method, attrs, type)
278
- attrs.merge!(:id => "#{@name}_#{method}") unless attrs[:id]
279
- super
270
+ def control_name(method)
271
+ "#{@name}[#{method}]"
280
272
  end
281
273
 
282
- def update_unbound_controls(attrs, type)
283
- case type
284
- when "text", "radio", "password", "hidden", "checkbox", "file"
285
- add_css_class(attrs, type)
286
- end
287
- super
274
+ def add_css_class(attrs, new_class)
275
+ attrs[:class] = attrs[:class] ? "#{attrs[:class]} #{new_class}" : new_class
288
276
  end
277
+ end
289
278
 
279
+ class Form < Base
290
280
  def label(contents, attrs = {})
291
281
  if contents.is_a?(Hash)
292
282
  attrs = contents
@@ -308,11 +298,22 @@ module Merb::Helpers::Form::Builder
308
298
  RUBY
309
299
  end
310
300
 
311
- def button(contents, attrs = {})
312
- label(attrs) + super
301
+ def unbound_check_box(attrs = {})
302
+ label_text = label(attrs)
303
+ super + label_text
313
304
  end
314
305
 
315
- def submit(value, attrs = {})
306
+ def unbound_hidden_field(attrs = {})
307
+ attrs.delete(:label)
308
+ super
309
+ end
310
+
311
+ def unbound_radio_button(attrs = {})
312
+ label_text = label(attrs)
313
+ super + label_text
314
+ end
315
+
316
+ def unbound_select(attrs = {})
316
317
  label(attrs) + super
317
318
  end
318
319
 
@@ -320,18 +321,27 @@ module Merb::Helpers::Form::Builder
320
321
  label(attrs) + super
321
322
  end
322
323
 
323
- def unbound_select(attrs = {})
324
+ def button(contents, attrs = {})
324
325
  label(attrs) + super
325
326
  end
326
327
 
327
- def unbound_check_box(attrs = {})
328
- label_text = label(attrs)
329
- super + label_text
328
+ def submit(value, attrs = {})
329
+ label(attrs) + super
330
330
  end
331
331
 
332
- def unbound_radio_button(attrs = {})
333
- label_text = label(attrs)
334
- super + label_text
332
+ private
333
+
334
+ def update_bound_controls(method, attrs, type)
335
+ attrs.merge!(:id => "#{@name}_#{method}") unless attrs[:id]
336
+ super
337
+ end
338
+
339
+ def update_unbound_controls(attrs, type)
340
+ case type
341
+ when "text", "radio", "password", "hidden", "checkbox", "file"
342
+ add_css_class(attrs, type)
343
+ end
344
+ super
335
345
  end
336
346
 
337
347
  def radio_group_item(method, attrs)
@@ -342,21 +352,9 @@ module Merb::Helpers::Form::Builder
342
352
  attrs.merge!(:label => attrs[:label] || attrs[:value])
343
353
  super
344
354
  end
345
-
346
- def unbound_hidden_field(attrs = {})
347
- attrs.delete(:label)
348
- super
349
- end
350
355
  end
351
356
 
352
357
  module Errorifier
353
- def update_bound_controls(method, attrs, type)
354
- if @obj.errors.on(method.to_sym)
355
- add_css_class(attrs, "error")
356
- end
357
- super
358
- end
359
-
360
358
  def error_messages_for(obj, error_class, build_li, header, before)
361
359
  obj ||= @obj
362
360
  return "" unless obj.respond_to?(:errors)
@@ -371,6 +369,15 @@ module Merb::Helpers::Form::Builder
371
369
  errors.each {|err| markup << (build_li % (sequel ? err : err.join(" ")))}
372
370
  markup << %Q{</ul></div>}
373
371
  end
372
+
373
+ private
374
+
375
+ def update_bound_controls(method, attrs, type)
376
+ if @obj.errors.on(method.to_sym)
377
+ add_css_class(attrs, "error")
378
+ end
379
+ super
380
+ end
374
381
  end
375
382
 
376
383
  class FormWithErrors < Form
@@ -378,6 +385,8 @@ module Merb::Helpers::Form::Builder
378
385
  end
379
386
 
380
387
  module Resourceful
388
+ private
389
+
381
390
  def process_form_attrs(attrs)
382
391
  attrs[:action] ||= @origin.url(@name, @obj) if @origin
383
392
  super
@@ -3,8 +3,9 @@
3
3
  module Merb::Helpers::Form
4
4
 
5
5
  def _singleton_form_context
6
+ self._default_builder = Merb::Helpers::Form::Builder::ResourcefulFormWithErrors unless self._default_builder
6
7
  @_singleton_form_context ||=
7
- self._form_class.new(nil, nil, self)
8
+ self._default_builder.new(nil, nil, self)
8
9
  end
9
10
 
10
11
  def form_contexts
@@ -22,7 +23,7 @@ module Merb::Helpers::Form
22
23
  ivar, name = name, name.class.to_s.snake_case
23
24
  end
24
25
  builder ||= current_form_context.class if current_form_context
25
- (builder || self._form_class).new(ivar, name, self)
26
+ (builder || self._default_builder).new(ivar, name, self)
26
27
  end
27
28
 
28
29
  def with_form_context(name, builder)
@@ -149,22 +150,31 @@ module Merb::Helpers::Form
149
150
  end
150
151
  end
151
152
 
152
- # Provides a generic HTML label.
153
+ # Provides a generic HTML checkbox input tag.
154
+ # There are two ways this tag can be generated, based on the
155
+ # option :boolean. If not set to true, a "magic" input is generated.
156
+ # Otherwise, an input is created that can be easily used for passing
157
+ # an array of values to the application.
153
158
  #
154
159
  # ==== Parameters
155
- # attrs<Hash>:: HTML attributes
160
+ # method<Symbol>:: Resource attribute
161
+ # attrs<Hash>:: HTML attributes and options
156
162
  #
157
163
  # ==== Returns
158
164
  # String:: HTML
159
165
  #
160
166
  # ==== Example
161
- # <%= label "Full Name", :for => "name" %>
162
- # => <label for="name">Full Name</label>
163
- def label(*args)
164
- current_form_context.label(*args)
165
- end
167
+ # <%= check_box :name => "is_activated", :value => "1" %>
168
+ # <%= check_box :name => "choices[]", :boolean => false, :value => "dog" %>
169
+ # <%= check_box :name => "choices[]", :boolean => false, :value => "cat" %>
170
+ # <%= check_box :name => "choices[]", :boolean => false, :value => "weasle" %>
171
+ #
172
+ # Used with a model:
173
+ #
174
+ # <%= check_box :is_activated, :label => "Activated?" %>
175
+ def check_box; end
166
176
 
167
- # Provides a HTML text input tag
177
+ # Provides a HTML file input
168
178
  #
169
179
  # ==== Parameters
170
180
  # name<Symbol>:: Model or Resource
@@ -174,17 +184,14 @@ module Merb::Helpers::Form
174
184
  # String:: HTML
175
185
  #
176
186
  # ==== Example
177
- # <%= text_field :name => :fav_color, :label => "Your Favorite Color" %>
178
- # # => <label for="fav_color">Your Favorite Color</label><input type="text" id="fav_color" name="fav_color" />
187
+ # <%= file_field :name => "file", :label => "File" %>
179
188
  #
180
189
  # Used with a model:
181
190
  #
182
- # <%= form_for @person do %>
183
- # <%= text_field :first_name, :label => "First Name" %>
184
- # <% end =%>
185
- def text_field; end
191
+ # <%= file_field :file, :label => "Choose a file" %>
192
+ def file_field; end
186
193
 
187
- # Provides a HTML password input.
194
+ # Provides a HTML hidden input field
188
195
  #
189
196
  # ==== Parameters
190
197
  # name<Symbol>:: Model or Resource
@@ -194,33 +201,30 @@ module Merb::Helpers::Form
194
201
  # String:: HTML
195
202
  #
196
203
  # ==== Example
197
- # <%= password_field :name => :password, :label => "Password" %>
198
- # # => <label for="password">Password</label><input type="password" id="password" name="password" />
204
+ # <%= hidden_field :name => "secret", :value => "some secret value" %>
199
205
  #
200
206
  # Used with a model:
201
207
  #
202
- # <%= password_field :password, :label => 'New Password' %>
203
- def password_field; end
208
+ # <%= hidden_field :identifier %>
209
+ # # => <input type="hidden" id="person_identifier" name="person[identifier]" value="#{@person.identifier}" />
210
+ def hidden_field; end
204
211
 
205
- # Provides a HTML hidden input field
212
+ # Provides a generic HTML label.
206
213
  #
207
214
  # ==== Parameters
208
- # name<Symbol>:: Model or Resource
209
215
  # attrs<Hash>:: HTML attributes
210
216
  #
211
217
  # ==== Returns
212
218
  # String:: HTML
213
219
  #
214
220
  # ==== Example
215
- # <%= hidden_field :name => "secret", :value => "some secret value" %>
216
- #
217
- # Used with a model:
218
- #
219
- # <%= hidden_field :identifier %>
220
- # # => <input type="hidden" id="person_identifier" name="person[identifier]" value="#{@person.identifier}" />
221
- def hidden_field; end
221
+ # <%= label "Full Name", :for => "name" %>
222
+ # => <label for="name">Full Name</label>
223
+ def label(*args)
224
+ current_form_context.label(*args)
225
+ end
222
226
 
223
- # Provides a HTML file input
227
+ # Provides a HTML password input.
224
228
  #
225
229
  # ==== Parameters
226
230
  # name<Symbol>:: Model or Resource
@@ -230,29 +234,52 @@ module Merb::Helpers::Form
230
234
  # String:: HTML
231
235
  #
232
236
  # ==== Example
233
- # <%= file_field :name => "file", :label => "File" %>
237
+ # <%= password_field :name => :password, :label => "Password" %>
238
+ # # => <label for="password">Password</label><input type="password" id="password" name="password" />
234
239
  #
235
240
  # Used with a model:
236
241
  #
237
- # <%= file_field :file, :label => "Choose a file" %>
238
- def file_field; end
242
+ # <%= password_field :password, :label => 'New Password' %>
243
+ def password_field; end
239
244
 
240
- # Provides a HTML textarea tag
245
+ # Provides a HTML radio input tag
241
246
  #
242
247
  # ==== Parameters
243
- # contents<String>:: Contents of the text area
244
- # attrs<Hash>:: HTML attributes
248
+ # method<Symbol>:: Resource attribute
249
+ # attrs<Hash>:: HTML attributes and options
245
250
  #
246
251
  # ==== Returns
247
252
  # String:: HTML
248
253
  #
249
254
  # ==== Example
250
- # <%= text_area "my comments", :name => "comments" %>
255
+ # <%= radio_button :name => "radio_options", :value => "1", :label => "One" %>
256
+ # <%= radio_button :name => "radio_options", :value => "2", :label => "Two" %>
257
+ # <%= radio_button :name => "radio_options", :value => "3", :label => "Three", :checked => true %>
251
258
  #
252
259
  # Used with a model:
253
260
  #
254
- # <%= text_area :comments %>
255
- def text_area; end
261
+ # <%= form_for @person do %>
262
+ # <%= radio_button :first_name %>
263
+ # <% end =%>
264
+ def radio_button; end
265
+
266
+ # Provides a radio group based on a resource attribute.
267
+ # This is generally used within a resource block such as +form_for+.
268
+ #
269
+ # ==== Parameters
270
+ # method<Symbol>:: Resource attribute
271
+ # arr<Array>:: Choices
272
+ #
273
+ # ==== Returns
274
+ # String:: HTML
275
+ #
276
+ # ==== Examples
277
+ # <%# the labels are the options %>
278
+ # <%= radio_group :my_choice, [5,6,7] %>
279
+ #
280
+ # <%# custom labels %>
281
+ # <%= radio_group :my_choice, [{:value => 5, :label => "five"}] %>
282
+ def radio_group; end
256
283
 
257
284
  # Provides a HTML select
258
285
  #
@@ -275,68 +302,42 @@ module Merb::Helpers::Form
275
302
  # <%= select :name, :collection => %w(one two three) %>
276
303
  def select; end
277
304
 
278
- # Provides a generic HTML checkbox input tag.
279
- # There are two ways this tag can be generated, based on the
280
- # option :boolean. If not set to true, a "magic" input is generated.
281
- # Otherwise, an input is created that can be easily used for passing
282
- # an array of values to the application.
305
+ # Provides a HTML textarea tag
283
306
  #
284
307
  # ==== Parameters
285
- # method<Symbol>:: Resource attribute
286
- # attrs<Hash>:: HTML attributes and options
308
+ # contents<String>:: Contents of the text area
309
+ # attrs<Hash>:: HTML attributes
287
310
  #
288
311
  # ==== Returns
289
312
  # String:: HTML
290
313
  #
291
314
  # ==== Example
292
- # <%= check_box :name => "is_activated", :value => "1" %>
293
- # <%= check_box :name => "choices[]", :boolean => false, :value => "dog" %>
294
- # <%= check_box :name => "choices[]", :boolean => false, :value => "cat" %>
295
- # <%= check_box :name => "choices[]", :boolean => false, :value => "weasle" %>
315
+ # <%= text_area "my comments", :name => "comments" %>
296
316
  #
297
317
  # Used with a model:
298
318
  #
299
- # <%= check_box :is_activated, :label => "Activated?" %>
300
- def check_box; end
319
+ # <%= text_area :comments %>
320
+ def text_area; end
301
321
 
302
- # Provides a HTML radio input tag
322
+ # Provides a HTML text input tag
303
323
  #
304
324
  # ==== Parameters
305
- # method<Symbol>:: Resource attribute
306
- # attrs<Hash>:: HTML attributes and options
325
+ # name<Symbol>:: Model or Resource
326
+ # attrs<Hash>:: HTML attributes
307
327
  #
308
328
  # ==== Returns
309
329
  # String:: HTML
310
330
  #
311
331
  # ==== Example
312
- # <%= radio_button :name => "radio_options", :value => "1", :label => "One" %>
313
- # <%= radio_button :name => "radio_options", :value => "2", :label => "Two" %>
314
- # <%= radio_button :name => "radio_options", :value => "3", :label => "Three", :checked => true %>
332
+ # <%= text_field :name => :fav_color, :label => "Your Favorite Color" %>
333
+ # # => <label for="fav_color">Your Favorite Color</label><input type="text" id="fav_color" name="fav_color" />
315
334
  #
316
335
  # Used with a model:
317
336
  #
318
337
  # <%= form_for @person do %>
319
- # <%= radio_button :first_name %>
338
+ # <%= text_field :first_name, :label => "First Name" %>
320
339
  # <% end =%>
321
- def radio_button; end
322
-
323
- # Provides a radio group based on a resource attribute.
324
- # This is generally used within a resource block such as +form_for+.
325
- #
326
- # ==== Parameters
327
- # method<Symbol>:: Resource attribute
328
- # arr<Array>:: Choices
329
- #
330
- # ==== Returns
331
- # String:: HTML
332
- #
333
- # ==== Examples
334
- # <%# the labels are the options %>
335
- # <%= radio_group :my_choice, [5,6,7] %>
336
- #
337
- # <%# custom labels %>
338
- # <%= radio_group :my_choice, [{:value => 5, :label => "five"}] %>
339
- def radio_group; end
340
+ def text_field; end
340
341
 
341
342
  # @todo radio_group helper still needs to be implemented
342
343
  %w(text_field password_field hidden_field file_field
@@ -2,13 +2,23 @@ load File.dirname(__FILE__) / "form" / "helpers.rb"
2
2
  load File.dirname(__FILE__) / "form" / "builder.rb"
3
3
 
4
4
  class Merb::Controller
5
- class_inheritable_accessor :_form_class
5
+ class_inheritable_accessor :_default_builder
6
+ include Merb::Helpers::Form
7
+ end
8
+
9
+ class Merb::PartController
10
+ class_inheritable_accessor :_default_builder
6
11
  include Merb::Helpers::Form
7
12
  end
8
13
 
9
14
  Merb::BootLoader.after_app_loads do
10
15
  class Merb::Controller
11
- self._form_class =
12
- Object.full_const_get(Merb::Plugins.config[:helpers][:form_class]) rescue Merb::Helpers::Form::Builder::ResourcefulFormWithErrors
16
+ self._default_builder =
17
+ Object.full_const_get(Merb::Plugins.config[:helpers][:default_builder]) rescue Merb::Helpers::Form::Builder::ResourcefulFormWithErrors
18
+ end
19
+
20
+ class Merb::PartController
21
+ self._default_builder =
22
+ Object.full_const_get(Merb::Plugins.config[:helpers][:default_builder]) rescue Merb::Helpers::Form::Builder::ResourcefulFormWithErrors
13
23
  end
14
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merb_helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yehuda Katz
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-08 00:00:00 +03:00
12
+ date: 2008-09-14 00:00:00 +03:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.9.6
23
+ version: 0.9.7
24
24
  version:
25
25
  description: Helper support for merb (similar to the Rails form helpers)
26
26
  email: ykatz@engineyard.com