twitter_bootstrap-helpers 0.0.1 → 0.0.2

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/README.md CHANGED
@@ -3,19 +3,34 @@
3
3
  ## Installation
4
4
 
5
5
  Add to your gem file and call `bundle` to install it.
6
-
7
6
  ```ruby
8
7
  gem twitter_bootstrap-helpers install
9
8
  ```
10
9
 
10
+ Adding to rails
11
+ ```ruby
12
+ gem 'twitter_bootstrap-helpers'
13
+ ```
14
+
11
15
  ## Usage
12
16
 
13
- To use `TwitterBootstrap::FormBuilder` as in your form pass it as the builder option.
17
+ Basic usage with form helper
18
+ ```erb
19
+ <%= bootstrap_form_for @post do |f| %>
20
+ <%= f.text_field_control :title %>
21
+ <%= f.text_area_control :body %>
22
+ <%= f.checkbox_control :published %>
23
+ <%= f.form_actions %>
24
+ <% end %>
25
+ ```
14
26
 
15
- ```ruby
16
- <%= form_for @post, builder: TwitterBootstrap::FormBuilder do |f| %>
17
- <%= f.text_field_control :subject %>
27
+ To use form builder directly
28
+ ```erb
29
+ <%= form_for @post, builder: TwitterBootstrap::Helpers::FormBuilder,
30
+ html:{class: 'form-horizontal'} do |f| %>
31
+ <%= f.text_field_control :title %>
18
32
  <%= f.text_area_control :body %>
19
- <%= f.date_select_control :publish_on %>
33
+ <%= f.checkbox_control :published %>
34
+ <%= f.form_actions %>
20
35
  <% end %>
21
36
  ```
@@ -22,25 +22,88 @@ module TwitterBootstrap
22
22
  end
23
23
  end
24
24
 
25
+ # Submit button
26
+ # <input class="btn btn-primary" name="commit" type="submit" value="Create Post" />
25
27
  def submit(value=nil, options={})
26
28
  options[:class] = 'btn btn-primary' unless options.has_key? :class
27
29
  super value, options
28
30
  end
31
+
32
+ # Cancel button
33
+ #
34
+ # Creates a cancel link that will link to the index path of the
35
+ # current object by default a cancel url can also be passed as
36
+ # a param.
37
+ #
38
+ # <a href="/posts" class="btn">Cancel</a>
39
+ def cancel(url=nil)
40
+ url = @template.polymorphic_path(@object.class) if url.nil?
41
+ @template.link_to :Cancel, url, class: 'btn'
42
+ end
43
+
44
+ # Check box control
45
+ # <div class="control-group">
46
+ # <div class="controls">
47
+ # <label class="checkbox inline-form" for="input_id">
48
+ # <input type="checkbox" id="input_id" value="1" />
49
+ # Text Input
50
+ # </label>
51
+ # </div>
52
+ # </div>
53
+ def checkbox_control(attr, text=nil, *args)
54
+ options = args.extract_options!
55
+ options = { class: 'control-group' }
56
+ options[:class] += ' error' if @object.errors[attr].any?
57
+ text = attr.to_s.humanize if text.nil?
58
+ @template.content_tag :div, options do
59
+ @template.concat controls(attr) {
60
+ @template.concat label(attr, text, class: 'checkbox inline'){
61
+ @template.concat check_box(attr)
62
+ @template.concat text
63
+ }
64
+ }
65
+ end
66
+ end
67
+
68
+ # Form actions
69
+ # <div class="form-actions">
70
+ # <input input="submit" value="Create Post" />
71
+ # <a href="/posts" class="btn">Cancel</a>
72
+ # </div>
73
+ def form_actions(options={})
74
+ @template.content_tag :div, class: 'form-actions' do
75
+ @template.concat submit
76
+ @template.concat " " # Add space so submit and cancel buttons don't collide
77
+ @template.concat cancel(options[:cancel_url])
78
+ end
79
+ end
29
80
 
30
- # Control Group Example
81
+ # Field Control Group Example
82
+ #
83
+ # Pass an input field name to create a standard control group
84
+ #
31
85
  # <div class="control-group">
32
86
  # <label class="control-label" for="input_id">Text Input</label>
33
87
  # <div class="controls">
34
88
  # <input type="input_type" class="input-xlarge" id="input_id" />
35
89
  # </div>
36
90
  # </div>
37
-
38
91
  def field_control_group(type, attr, *args)
39
92
  control_group attr do
40
93
  @template.concat send(type, attr, *args)
41
94
  end
42
95
  end
43
96
 
97
+ # Control Group
98
+ #
99
+ # Yield block within control group
100
+ #
101
+ # <div class="control-group">
102
+ # <label class="control-label" for="input_id">Text Input</label>
103
+ # <div class="controls">
104
+ # <%= yield %>
105
+ # </div>
106
+ # </div>
44
107
  def control_group(attr, text = nil, &block )
45
108
  options = { class: 'control-group' }
46
109
  options[:class] += ' error' if @object.errors[attr].any?
@@ -50,6 +113,13 @@ module TwitterBootstrap
50
113
  end
51
114
  end
52
115
 
116
+ # Control Group
117
+ #
118
+ # Yield block within control group
119
+ #
120
+ # <div class="controls">
121
+ # <%= yield %>
122
+ # </div>
53
123
  def controls(attr, &block)
54
124
  @template.content_tag :div, class: 'controls' do
55
125
  yield
@@ -57,6 +127,8 @@ module TwitterBootstrap
57
127
  end
58
128
  end
59
129
 
130
+ # Display inline error
131
+ # <span class="help-inline">can't be blank.</span>
60
132
  def errors_on(attr)
61
133
  if @object.errors[attr].any?
62
134
  @template.content_tag(:span,
@@ -1,5 +1,5 @@
1
1
  module TwitterBootstrap
2
2
  module Helpers
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -1,6 +1,6 @@
1
1
  <%= bootstrap_form_for @post do |f| %>
2
2
  <%= f.text_field_control :title %>
3
- <div class="actions">
4
- <%= f.submit %>
5
- </div>
3
+ <%= f.text_area_control :body %>
4
+ <%= f.checkbox_control :published %>
5
+ <%= f.form_actions %>
6
6
  <% end %>
@@ -25,6 +25,19 @@ class TwitterBootstrap::HelpersTest < ActionView::TestCase
25
25
  </div>')
26
26
  end
27
27
 
28
+ test "checkbox_control" do
29
+ assert_equal @builder.checkbox_control(:published),
30
+ r('<div class="control-group">
31
+ <div class="controls">
32
+ <label class="checkbox inline" for="post_published">
33
+ <input name="post[published]" type="hidden" value="0" />
34
+ <input id="post_published" name="post[published]" type="checkbox" value="1" />
35
+ Published
36
+ </label>
37
+ </div>
38
+ </div>')
39
+ end
40
+
28
41
  test "field_control_group" do
29
42
  assert_equal @builder.field_control_group(:text_field,:title),
30
43
  r('<div class="control-group">
@@ -39,6 +52,26 @@ class TwitterBootstrap::HelpersTest < ActionView::TestCase
39
52
  assert_equal @builder.submit, '<input class="btn btn-primary" name="commit" type="submit" value="Create Post" />'
40
53
  end
41
54
 
55
+ test "cancel" do
56
+ assert_equal @builder.cancel, '<a href="/posts" class="btn">Cancel</a>'
57
+ end
58
+
59
+ test "form_actions" do
60
+ assert_equal @builder.form_actions,
61
+ r('<div class="form-actions">
62
+ <input class="btn btn-primary" name="commit" type="submit" value="Create Post" />
63
+ <a href="/posts" class="btn">Cancel</a>
64
+ </div>')
65
+ end
66
+
67
+ test "form_actions with custom cancel button" do
68
+ assert_equal @builder.form_actions(cancel_url:'/'),
69
+ r('<div class="form-actions">
70
+ <input class="btn btn-primary" name="commit" type="submit" value="Create Post" />
71
+ <a href="/" class="btn">Cancel</a>
72
+ </div>')
73
+ end
74
+
42
75
  test "input fields should have class input-xlarge" do
43
76
  assert_equal @builder.text_field_control(:title),
44
77
  r('<div class="control-group">
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter_bootstrap-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-30 00:00:00.000000000 Z
12
+ date: 2012-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails