bh 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +4 -0
  4. data/README.md +77 -31
  5. data/bh.gemspec +1 -0
  6. data/gemfiles/Gemfile.rails-3.x +1 -0
  7. data/gemfiles/Gemfile.rails-4.x +1 -0
  8. data/lib/bh/form_builders/form_builder.rb +41 -0
  9. data/lib/bh/helpers/alert_helper.rb +2 -5
  10. data/lib/bh/helpers/base_helper.rb +17 -0
  11. data/lib/bh/helpers/form/base_helper.rb +112 -0
  12. data/lib/bh/helpers/form/check_box_helper.rb +35 -0
  13. data/lib/bh/helpers/form/field_helper.rb +15 -0
  14. data/lib/bh/helpers/form/fields_for_helper.rb +17 -0
  15. data/lib/bh/helpers/form/fieldset_helper.rb +16 -0
  16. data/lib/bh/helpers/form/legend_helper.rb +17 -0
  17. data/lib/bh/helpers/form/radio_button_helper.rb +19 -0
  18. data/lib/bh/helpers/form/select_helper.rb +16 -0
  19. data/lib/bh/helpers/form/static_control_helper.rb +43 -0
  20. data/lib/bh/helpers/form/submit_helper.rb +23 -0
  21. data/lib/bh/helpers/form_for_helper.rb +30 -0
  22. data/lib/bh/helpers/glyphicon_helper.rb +5 -5
  23. data/lib/bh/helpers/modal_helper.rb +2 -3
  24. data/lib/bh/helpers/panel_helper.rb +5 -5
  25. data/lib/bh/helpers/panel_row_helper.rb +1 -5
  26. data/lib/bh/railtie.rb +2 -0
  27. data/lib/bh/version.rb +1 -1
  28. data/spec/helpers/form/check_box_helper_spec.rb +95 -0
  29. data/spec/helpers/form/field_helper_spec.rb +102 -0
  30. data/spec/helpers/form/fields_for_helper_spec.rb +35 -0
  31. data/spec/helpers/form/fieldset_helper_spec.rb +32 -0
  32. data/spec/helpers/form/legend_helper_spec.rb +35 -0
  33. data/spec/helpers/form/radio_button_helper_spec.rb +67 -0
  34. data/spec/helpers/form/select_helper_spec.rb +71 -0
  35. data/spec/helpers/form/static_control_helper_spec.rb +67 -0
  36. data/spec/helpers/form/submit_helper_spec.rb +30 -0
  37. data/spec/helpers/form_for_helper_spec.rb +43 -0
  38. data/spec/helpers/panel_helper_spec.rb +6 -0
  39. data/spec/spec_helper.rb +29 -1
  40. metadata +49 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 236887d8267590a9cfaf81696e3b3565e8aa7e0e
4
- data.tar.gz: fdf3d185fc9586b453ef27daa4907a48732bc37b
3
+ metadata.gz: ad17bacb7ffb22fb404857bfce7a63c26b7e182d
4
+ data.tar.gz: 844812324781c1cd1af6b0fc2baf7d4f7f2dd354
5
5
  SHA512:
6
- metadata.gz: fd2c01c95a5821d9e1d3f45493a9c0bb29e76eceeb6f508b9e650ca6a567793354c6540eca6277aa36dc4592e3687aeb8746babb42ce54911078df368abad771
7
- data.tar.gz: 13f142de14c3ddd20dbba55af3c270a57e49cd23d2379579ea336c63e90e63559656d101df64dffe60f7b7ef9e0a9614fb99ef4c2bac902ad6e3ef374b0bbe53
6
+ metadata.gz: 1eaa5367a5d7ba4796cb7711a3940f22e1ef1001ce6b430ac1c10cea804edd5c6a19c63a4d0ef4b69cd2f86b9b26ac0460f4dab64ec681199dc01495caa9d8b1
7
+ data.tar.gz: f4ddda3cd0aa3e7ccd51b4d04dbd1b9ec7450615024927ad7d5af1e0d5ad3c2db3a572ec5243b02a2c048537591224ab748b89afe6bbc1cbdc91409e8961ffab
data/.gitignore CHANGED
@@ -19,4 +19,5 @@ tmp
19
19
  *.so
20
20
  *.o
21
21
  *.a
22
+ spec/dummy
22
23
  mkmf.log
@@ -6,6 +6,10 @@ For more information about changelogs, check
6
6
  [Keep a Changelog](http://keepachangelog.com) and
7
7
  [Vandamme](http://tech-angels.github.io/vandamme).
8
8
 
9
+ ## 0.0.5 - 2014-08-22
10
+
11
+ * [FEATURE] Add `form_for` and form helpers for every type of field
12
+
9
13
  ## 0.0.4 - 2014-08-17
10
14
 
11
15
  * [FEATURE] Add `modal`
data/README.md CHANGED
@@ -33,7 +33,7 @@ repetitive, and prone to errors.
33
33
  Bh offers a solution to this problem by means of a set of helper methods.
34
34
  The example above can be rewritten with just one line of code:
35
35
 
36
- ```erb
36
+ ```rhtml
37
37
  <%= alert_box 'You accepted the Terms of service.', dismissible: true %>
38
38
  ```
39
39
 
@@ -46,14 +46,14 @@ How to install
46
46
 
47
47
  Bh is meant to be included in Rails apps by adding this line to the Gemfile:
48
48
 
49
- gem 'bh', '~> 0.0.4'
49
+ gem 'bh', '~> 0.0.5'
50
50
 
51
51
  Since the gem follows [Semantic Versioning](http://semver.org),
52
52
  indicating the full version in your Gemfile (~> *major*.*minor*.*patch*)
53
53
  guarantees that your project won’t occur in any error when you `bundle update`
54
54
  and a new version of Bh is released.
55
55
 
56
- Adding 'bh' to your Gemfile is all you need!
56
+ Adding `bh` to your Gemfile is all you need!
57
57
  From now on, you will be able to use any of the following Bh helpers in your Rails views.
58
58
 
59
59
  AlertHelper
@@ -66,11 +66,11 @@ Here are some examples.
66
66
  Basic alerts
67
67
  ------------
68
68
 
69
- ```erb
69
+ ```rhtml
70
70
  <%= alert_box 'You accepted the Terms of service.' %>
71
71
  ```
72
72
 
73
- will generate the HTML to render an "info" alert:
73
+ will generate the HTML to render an *info* alert:
74
74
 
75
75
  ```html
76
76
  <div class="alert alert-info" role="alert">You accepted the Terms of service.</div>
@@ -81,11 +81,11 @@ will generate the HTML to render an "info" alert:
81
81
  Dismissible alerts
82
82
  ------------------
83
83
 
84
- ```erb
84
+ ```rhtml
85
85
  <%= alert_box 'You accepted the Terms of service.', dismissible: true %>
86
86
  ```
87
87
 
88
- will generate the HTML to render an alert with an '×' to close it:
88
+ will generate the HTML to render an alert with an `×` to close it:
89
89
 
90
90
  ```html
91
91
  <div class="alert alert-info" role="alert">
@@ -101,11 +101,11 @@ will generate the HTML to render an alert with an '×' to close it:
101
101
  Contextual alerts
102
102
  -----------------
103
103
 
104
- ```erb
104
+ ```rhtml
105
105
  <%= alert_box 'You accepted the Terms of service.', context: :success %>
106
106
  ```
107
107
 
108
- will generate the HTML to render a "success" alert (green background):
108
+ will generate the HTML to render a *success* alert (green background):
109
109
 
110
110
  ```html
111
111
  <div class="alert alert-success" role="alert">You accepted the Terms of service.</div>
@@ -122,11 +122,11 @@ Since a common use of alert boxes in Rails applications is to display
122
122
  [flash messages](http://api.rubyonrails.org/classes/ActionDispatch/Flash/FlashHash.html),
123
123
  the `alert_box` helper accepts the priority of the flash message as an option.
124
124
 
125
- ```erb
125
+ ```rhtml
126
126
  <%= alert_box 'You accepted the Terms of service.', priority: :notice %>
127
127
  ```
128
128
 
129
- will generate the HTML to render a dismissible "success" alert (green background):
129
+ will generate the HTML to render a dismissible *success* alert (green background):
130
130
 
131
131
  ```html
132
132
  <div class="alert alert-success" role="alert">
@@ -144,13 +144,13 @@ Available priorities are `:alert`, `:notice`.
144
144
  Complex alerts
145
145
  --------------
146
146
 
147
- ```erb
147
+ ```rhtml
148
148
  <%= alert_box context: :success, dismissible: true do %>
149
149
  <strong>Thanks!</strong> You accepted the <%= link_to 'Terms of service', '/terms' %>.
150
150
  <% end %>
151
151
  ```
152
152
 
153
- will generate the HTML to render a dismissible "success" alert that includes
153
+ will generate the HTML to render a dismissible *success* alert that includes
154
154
  highlighted text and appropriately styled links:
155
155
 
156
156
  ```html
@@ -177,7 +177,7 @@ Here are some examples.
177
177
  Load the latest Bootstrap assets
178
178
  --------------------------------
179
179
 
180
- ```erb
180
+ ```rhtml
181
181
  <%= stylesheet_link_tag bootstrap_css, bootstrap_theme_css, :application %>
182
182
  <%= javascript_include_tag bootstrap_js, :application %>
183
183
  ```
@@ -197,7 +197,7 @@ Theme CSS and Bootstrap JS from MaxCDN, before your application assets:
197
197
  Load a specific version of a Bootstrap asset
198
198
  --------------------------------------------
199
199
 
200
- ```erb
200
+ ```rhtml
201
201
  <%= stylesheet_link_tag bootstrap_css(version: '3.1.0', minified: false, scheme: :http) %>
202
202
  ```
203
203
 
@@ -219,7 +219,7 @@ Here are some examples.
219
219
  Display the "zoom in" icon
220
220
  --------------------------
221
221
 
222
- ```erb
222
+ ```rhtml
223
223
  <%= glyphicon :ok, title: 'Approved' %>
224
224
  ```
225
225
 
@@ -231,6 +231,7 @@ will generate the HTML to render an "ok" icon with the "Approved" title:
231
231
 
232
232
  ![glyphicon](https://cloud.githubusercontent.com/assets/7408595/3941608/64219c82-2537-11e4-8e86-27d4a62b1c06.png)
233
233
 
234
+ Available glyphicons are listed in [Boostrap documentation](http://getbootstrap.com/components/#glyphicons).
234
235
 
235
236
  PanelHelper
236
237
  ===========
@@ -243,7 +244,7 @@ Here are some examples.
243
244
  Basic panel
244
245
  -----------
245
246
 
246
- ```erb
247
+ ```rhtml
247
248
  <%= panel body: 'You accepted the Terms of service.' %>
248
249
  ```
249
250
 
@@ -259,7 +260,7 @@ will generate the HTML to render a basic panel:
259
260
  Panel with heading
260
261
  ------------------
261
262
 
262
- ```erb
263
+ ```rhtml
263
264
  <%= panel body: 'You accepted the Terms of service.', heading: 'Congratulations' %>
264
265
  ```
265
266
 
@@ -277,7 +278,7 @@ will generate the HTML to render a panel with a heading:
277
278
  Panel with title
278
279
  ------------------
279
280
 
280
- ```erb
281
+ ```rhtml
281
282
  <%= panel body: 'You accepted the Terms of service.', title: 'Congratulations' %>
282
283
  ```
283
284
 
@@ -297,11 +298,11 @@ will generate the HTML to render a panel with a title:
297
298
  Contextual panel
298
299
  -----------------
299
300
 
300
- ```erb
301
+ ```rhtml
301
302
  <%= panel body: 'You accepted the Terms of service.', title: 'Congratulations', context: :success %>
302
303
  ```
303
304
 
304
- will generate the HTML to render a "success" panel (green background):
305
+ will generate the HTML to render a *success* panel (green background):
305
306
 
306
307
  ```html
307
308
  <div class="panel panel-success">
@@ -320,23 +321,23 @@ Available contexts are `:default` (default), `:primary`, `:success`, `:info`,
320
321
  Complex panels
321
322
  --------------
322
323
 
323
- ```erb
324
- <%= panel do %>
324
+ ```rhtml
325
+ <%= panel tag: :aside do %>
325
326
  <div class='panel-body'>You accepted the Terms of service. <%= glyphicon :ok %></div>
326
327
  <div class='panel-footer'><h4>Thanks</h4></div>
327
328
  <% end %>
328
329
  ```
329
330
 
330
- will generate the HTML to render a panel with HTML body and footer:
331
+ will generate the HTML to render an aside panel with HTML body and footer:
331
332
 
332
333
  ```html
333
- <div class="panel panel-default">
334
+ <aside class="panel panel-default">
334
335
  <div class="panel-body">
335
336
  You accepted the Terms of service.
336
337
  <span class="glyphicon glyphicon-ok"></span>
337
338
  </div>
338
339
  <div class="panel-footer"><h4>Thanks</h4></div>
339
- </div>
340
+ </aside>
340
341
  ```
341
342
 
342
343
  ![panel-complex](https://cloud.githubusercontent.com/assets/7408595/3941819/da569586-2543-11e4-8640-3f0a72077aca.png)
@@ -353,7 +354,7 @@ Here are some examples.
353
354
  Basic row of panels
354
355
  -------------------
355
356
 
356
- ```erb
357
+ ```rhtml
357
358
  <%= panel_row column_class: 'col-sm-4' do %>
358
359
  <%= panel body: 'Panel #1' %>
359
360
  <%= panel body: 'Panel #2' %>
@@ -382,7 +383,7 @@ will generate the HTML to render a row of three basic panels:
382
383
  Complex row of panels
383
384
  ---------------------
384
385
 
385
- ```erb
386
+ ```rhtml
386
387
  <%= panel_row column_class: 'col-sm-4' do %>
387
388
  <%= panel title: 'User', context: :info do %>
388
389
  <div class='panel-body'><%= glyphicon :user %> John Smith</div>
@@ -428,7 +429,7 @@ Here are some examples.
428
429
  Basic modal
429
430
  -----------
430
431
 
431
- ```erb
432
+ ```rhtml
432
433
  <%= modal title: 'Terms of service', body: 'Do what you want!' %>
433
434
  ```
434
435
 
@@ -458,14 +459,14 @@ will generate the HTML to render a button that toggles a model when clicked:
458
459
  Complex modal
459
460
  -------------
460
461
 
461
- ```erb
462
+ ```rhtml
462
463
  <%= modal title: 'Terms of service', size: :small, button: {caption: 'Continue', size: :large, context: :info} do %>
463
464
  Please accept the Terms of service.
464
465
  <div class="modal-footer"><button type="button" class="btn btn-primary">Accept</button></div>
465
466
  <% end %>
466
467
  ```
467
468
 
468
- will generate the HTML to render a large, "info" button (blue background) with
469
+ will generate the HTML to render a large, *info* button (blue background) with
469
470
  the caption "Continue" that toggles a small modal with a title and HTML content:
470
471
 
471
472
  ```html
@@ -490,6 +491,51 @@ the caption "Continue" that toggles a small modal with a title and HTML content:
490
491
 
491
492
  ![modal-complex](https://cloud.githubusercontent.com/assets/7408595/3943922/b47620a8-25d8-11e4-9e0c-803d8a104bff.png)
492
493
 
494
+ FormForHelper
495
+ =============
496
+
497
+ To include [Boostrap forms](http://getbootstrap.com/css/#forms)
498
+ in your Rails views, you can use the
499
+ [form_for](http://rubydoc.info/github/Fullscreen/bh/master/Bh/FormForHelper)
500
+ helper.
501
+
502
+ By default, Bh does not override the `form_for` method provided by [ActionView](http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for).
503
+ To apply Bootstrap classes and attributes, you **must** set the `:layout` option to
504
+
505
+ * `:basic`, in order to get a [Basic form](http://getbootstrap.com/css/#forms-example)
506
+ * `:horizontal`, in order to get a [Horizontal form](http://getbootstrap.com/css/#forms-horizontal)
507
+ * `:inline`, in order to get an [Inline form](http://getbootstrap.com/css/#forms-inline)
508
+
509
+ Here is how a form with a text field and a submit button looks like with each layout:
510
+
511
+ ```rhtml
512
+ <%= form_for @user, layout: :basic do |f| %>
513
+ <%= f.text_field :name %>
514
+ <%= f.submit %>
515
+ <% end %>
516
+ ```
517
+
518
+ ![form-for-basic](https://cloud.githubusercontent.com/assets/7408595/4015592/30611478-2a2c-11e4-8e62-b60e2151ff12.png)
519
+
520
+
521
+ ```rhtml
522
+ <%= form_for @user, layout: :horizontal do |f| %>
523
+ <%= f.text_field :name %>
524
+ <%= f.submit %>
525
+ <% end %>
526
+ ```
527
+
528
+ ![form-for-horizontal](https://cloud.githubusercontent.com/assets/7408595/4015593/30620ba8-2a2c-11e4-90c9-8340b5ddc113.png)
529
+
530
+ ```rhtml
531
+ <%= form_for @user, layout: :inline do |f| %>
532
+ <%= f.text_field :name %>
533
+ <%= f.submit %>
534
+ <% end %>
535
+ ```
536
+
537
+ ![form-for-inline](https://cloud.githubusercontent.com/assets/7408595/4015591/30609b74-2a2c-11e4-989e-e509d72ed224.png)
538
+
493
539
 
494
540
  How to release new versions
495
541
  ===========================
data/bh.gemspec CHANGED
@@ -30,4 +30,5 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency 'rake' #, '~> 10.0'
31
31
  spec.add_development_dependency 'yard' #, '~> 0.8.0'
32
32
  spec.add_development_dependency 'coveralls' #, '~> 0.7.0'
33
+ spec.add_development_dependency 'activemodel'
33
34
  end
@@ -2,4 +2,5 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'activesupport', '~> 3.0'
4
4
  gem 'actionpack', '~> 3.0'
5
+ gem 'activemodel', '~> 3.0'
5
6
  gemspec path: '../'
@@ -2,4 +2,5 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'activesupport', '~> 4.0'
4
4
  gem 'actionpack', '~> 4.0'
5
+ gem 'activemodel', '~> 4.0'
5
6
  gemspec path: '../'
@@ -0,0 +1,41 @@
1
+ require 'bh/helpers/form/check_box_helper'
2
+ require 'bh/helpers/form/field_helper'
3
+ require 'bh/helpers/form/fieldset_helper'
4
+ require 'bh/helpers/form/fields_for_helper'
5
+ require 'bh/helpers/form/legend_helper'
6
+ require 'bh/helpers/form/radio_button_helper'
7
+ require 'bh/helpers/form/select_helper'
8
+ require 'bh/helpers/form/static_control_helper'
9
+ require 'bh/helpers/form/submit_helper'
10
+
11
+ module Bh
12
+ class FormBuilder < ActionView::Helpers::FormBuilder
13
+ include Form::CheckBoxHelper
14
+ include Form::FieldHelper
15
+ include Form::FieldsetHelper
16
+ include Form::FieldsForHelper
17
+ include Form::LegendHelper
18
+ include Form::RadioButtonHelper
19
+ include Form::SelectHelper
20
+ include Form::StaticControlHelper
21
+ include Form::SubmitHelper
22
+
23
+ # @note: field_helpers are returned as symbols in ActionView 4 and as
24
+ # strings in ActionView 3
25
+ def self.textual_field_helpers
26
+ non_textual_field_helpers = %w(label hidden_field range_field check_box
27
+ radio_button select submit fields_for label)
28
+ field_helpers.map(&:to_s) - non_textual_field_helpers
29
+ end
30
+
31
+ # Use the same template for all the textual field helpers such as
32
+ # email_field, password_field, etc.
33
+ # Exclude the ones that should not have additional styles.
34
+ # Do not show error icons on number_field not to cover the sliders.
35
+ textual_field_helpers.each do |field_type|
36
+ define_method field_type do |method, options = {}|
37
+ field(method, field_type, options) { super method, options }
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,11 +1,8 @@
1
- require 'action_view'
1
+ require 'bh/helpers/base_helper'
2
2
 
3
3
  module Bh
4
4
  module AlertHelper
5
- include ActionView::Helpers::TagHelper # for content_tag
6
- include ActionView::Context # for capture
7
- include ActionView::Helpers::OutputSafetyHelper # for safe_join
8
-
5
+ include BaseHelper
9
6
  # Returns an HTML block tag that follows the Bootstrap documentation
10
7
  # on how to display *alert boxes*.
11
8
  # Alert boxes provide contextual feedback messages for typical user
@@ -0,0 +1,17 @@
1
+ require 'action_view'
2
+
3
+ module Bh
4
+ module BaseHelper
5
+ include ActionView::Helpers::TagHelper # for content_tag
6
+ include ActionView::Context # for capture
7
+ include ActionView::Helpers::OutputSafetyHelper # for safe_join
8
+ include ActionView::Helpers::RenderingHelper # for render
9
+
10
+ private
11
+
12
+ def append_class!(hash, new_class)
13
+ existing_class = hash[:class]
14
+ hash[:class] = [existing_class, new_class].compact.join ' '
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,112 @@
1
+ require 'bh/helpers/glyphicon_helper'
2
+
3
+ module Bh
4
+ module Form
5
+ module BaseHelper
6
+ include GlyphiconHelper # for glyphicon
7
+
8
+ private
9
+
10
+ def base_field(method, field_type, options = {}, &block)
11
+ errors = (object.errors.get method if object) || {}
12
+ label = label_for method, errors, options
13
+ field = field_container(options) do
14
+ field_tags errors, field_type, &block
15
+ end
16
+ label_and_field = safe_join [label, field].compact
17
+ label_and_field_container label_and_field, field_type, errors
18
+ end
19
+
20
+
21
+ def field_container(options = {}, &block)
22
+ if horizontal_form?
23
+ klass = [('col-sm-offset-3' if options[:offset]), 'col-sm-9']
24
+ content_tag :div, class: klass.compact.join(' '), &block
25
+ else
26
+ yield
27
+ end
28
+ end
29
+
30
+ def field_tags(errors, field_type, &block)
31
+ tags = [@template.capture(&block)]
32
+ tags << error_icon_tag if errors.any? && show_error_icon?(field_type)
33
+ tags << error_help_tag(errors) if errors.any? && show_error_help?
34
+ safe_join tags
35
+ end
36
+
37
+ def label_and_field_container(label_and_field, field_type, errors = {})
38
+ klass = ['form-group']
39
+ if errors.any?
40
+ klass << 'has-error'
41
+ klass << 'has-feedback' if show_error_icon?(field_type)
42
+ end
43
+ content_tag :div, label_and_field, class: klass.join(' ')
44
+ end
45
+
46
+
47
+ def show_error_icon?(field_type)
48
+ hide = [:checkbox, :number_field, :radio_button, :select, :legend].include? field_type
49
+ @options.fetch(:errors, {}).fetch(:icons, true) && !hide
50
+ end
51
+
52
+
53
+ def error_icon_tag
54
+ glyphicon :remove, class: 'form-control-feedback'
55
+ end
56
+
57
+ def error_help_tag(errors)
58
+ klass = ['help-block', 'text-left']
59
+ klass << 'sr-only' if inline_form?
60
+ content_tag :span, errors.to_sentence, class: klass.join(' ')
61
+ end
62
+
63
+ def label_for(method, errors, options)
64
+ if options.delete(:use_label) { true }
65
+ args = [method, options.delete(:label), label_options(errors)]
66
+ label *args.compact
67
+ end
68
+ end
69
+
70
+ def label_options(errors = {})
71
+ klass = []
72
+ klass << 'sr-only' if inline_form?
73
+ klass << 'col-sm-3' if horizontal_form?
74
+ klass << 'control-label' if horizontal_form?
75
+ klass << 'control-label' if basic_form? && errors.any?
76
+ {class: klass.join(' ')} if klass.any?
77
+ end
78
+
79
+ # Rails adds <div class='field_with_errors'> which messes up
80
+ # Bootstrap inline form unless the label is inserted within
81
+ # the div itself.
82
+ def label_and_field(container_class, method, options = {}, &block)
83
+ label_and_field = @template.capture(&block)
84
+ label = options.delete(:label)
85
+ if index = label_and_field =~ %r{</div>$}
86
+ label_and_field.insert index, " #{label}"
87
+ else
88
+ label_and_field.concat " #{label}"
89
+ end
90
+ content_tag :div, class: container_class do
91
+ content_tag :label, label_and_field
92
+ end
93
+ end
94
+
95
+ def show_error_help?
96
+ @options.fetch(:errors, {}).fetch(:messages, :inline).to_s == 'inline'
97
+ end
98
+
99
+ def inline_form?
100
+ @options[:layout].to_s == 'inline'
101
+ end
102
+
103
+ def horizontal_form?
104
+ @options[:layout].to_s == 'horizontal'
105
+ end
106
+
107
+ def basic_form?
108
+ !inline_form? && !horizontal_form?
109
+ end
110
+ end
111
+ end
112
+ end