bootstrap_forms 2.0.8 → 2.1.1

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/.gitignore CHANGED
@@ -4,6 +4,5 @@ Gemfile.lock
4
4
  pkg/*
5
5
  .DS_Store
6
6
  .rspec
7
- .rvmrc
8
7
  .project
9
8
  spec/dummy/log
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 1.9.3-p385
data/.travis.yml CHANGED
@@ -1,5 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - ree
3
4
  - 1.8.7
4
5
  - 1.9.2
5
- - 1.9.3
6
+ - 1.9.3
7
+ - 2.0.0
8
+ script: bundle exec rspec --format documentation
data/README.markdown CHANGED
@@ -64,6 +64,12 @@ Just when you thought you were done... Bootstrap Forms includes additional form
64
64
  = f.collection_check_boxes :category_ids, Category.all, :id, :name
65
65
  ```
66
66
 
67
+ You can set the `inline` option to build inline checkboxes:
68
+
69
+ ```haml
70
+ = f.collection_check_boxes :category_ids, Category.all, :id, :name, :inline => true
71
+ ```
72
+
67
73
  ### collection_radio_buttons
68
74
  See description above...
69
75
 
@@ -71,12 +77,32 @@ See description above...
71
77
  = f.collection_radio_buttons :primary_category_id, Category.all, :id, :name
72
78
  ```
73
79
 
80
+ You can set the `inline` option to build inline radios:
81
+
82
+ ```haml
83
+ = f.collection_radio_buttons :primary_category_id, Category.all, :id, :name, :inline => true
84
+ ```
85
+
86
+ ### check_box
87
+
88
+ Also supports `inline` option:
89
+
90
+ ```haml
91
+ = f.check_box :enabled, :inline => true
92
+ ```
93
+
74
94
  ### radio_buttons
75
95
 
76
96
  ```haml
77
97
  = f.radio_buttons :published, { "Published" => true, "Unpublished" => false }
78
98
  ```
79
99
 
100
+ You can set the `:inline` option to build inline radios.
101
+
102
+ ```haml
103
+ = f.radio_buttons :published, { "Published" => true, "Unpublished" => false }, { :inline => true }
104
+ ```
105
+
80
106
  Ruby 1.8 doesn't guarantee hashes are ordered. If you care, pass in nested arrays or `ActiveSupport::OrderedHash`.
81
107
 
82
108
  Uneditable Input
@@ -100,10 +126,10 @@ yields:
100
126
 
101
127
  Submit Tag
102
128
  ----------
103
- Bootstrap Forms also adds a default actions panel when you call `f.submit`:
129
+ Bootstrap Forms also adds a default actions panel when you call `f.actions`:
104
130
 
105
131
  ```haml
106
- = f.submit
132
+ = f.actions
107
133
  ```
108
134
 
109
135
  generates:
@@ -185,9 +211,14 @@ You can add as many options to any form helper tag. If they are interpreted by B
185
211
  </tr>
186
212
  <tr>
187
213
  <th>control_group</th>
188
- <td>Pass false to remove the control group and controls HTML, leaving only the label and input, wrapped in a plain div</td>
214
+ <td>Pass false to remove the control group and controls HTML, leaving only the label and input.</td>
189
215
  <td><tt>= f.text_field :name, :control_group => false</tt></td>
190
216
  </tr>
217
+ <tr>
218
+ <th>:required => false</th>
219
+ <td>Pass false to ignore presence validation checks that add a required attribute on the generated element.</td>
220
+ <td><tt>= f.text_field :name, :required => false</tt></td>
221
+ </tr>
191
222
  </table>
192
223
 
193
224
  Internationalization/Custom Errors
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'bootstrap_forms'
6
- s.version = '2.0.8'
6
+ s.version = '2.1.1'
7
7
  s.author = 'Seth Vargo'
8
8
  s.email = 'sethvargo@gmail.com'
9
9
  s.homepage = 'https://github.com/sethvargo/bootstrap_forms'
@@ -21,4 +21,5 @@ Gem::Specification.new do |s|
21
21
  s.add_development_dependency 'rails', '~> 3.2.0'
22
22
  s.add_development_dependency 'guard-rspec'
23
23
  s.add_development_dependency 'sqlite3'
24
+ s.add_development_dependency 'fuubar'
24
25
  end
@@ -21,19 +21,24 @@ module BootstrapForms
21
21
 
22
22
  %w(collection_select select country_select time_zone_select email_field file_field number_field password_field phone_field range_field search_field telephone_field text_area text_field url_field datetime_select date_select time_select).each do |method_name|
23
23
  define_method(method_name) do |name, *args|
24
+ # Workaround for ree and 1.8.7 since they don't allow block arguments with default values
25
+ args = args.extract_options!
26
+
24
27
  @name = name
25
28
  @field_options = field_options(args)
26
29
  @args = args
27
30
 
28
31
  control_group_div do
29
32
  label_field + input_div do
30
- extras { super(name, *(@args << @field_options.merge(required_attribute))) }
33
+ merged_args = @args.merge(@field_options.merge(required_attribute))
34
+ input_append = (merged_args[:append] || merged_args[:prepend] || merged_args[:append_button]) ? true : nil
35
+ extras(input_append) { super(name, merged_args) }
31
36
  end
32
37
  end
33
38
  end
34
39
  end
35
40
 
36
- def check_box(name, *args)
41
+ def check_box(name, args = {})
37
42
  @name = name
38
43
  @field_options = field_options(args)
39
44
  @args = args
@@ -42,10 +47,13 @@ module BootstrapForms
42
47
  input_div do
43
48
  @field_options.merge!(required_attribute)
44
49
  if @field_options[:label] == false || @field_options[:label] == ''
45
- extras { super(name, *(@args << @field_options)) }
50
+ extras { super(name, @args.merge(@field_options)) }
46
51
  else
47
- label(@name, :class => 'checkbox') do
48
- extras { super(name, *(@args << @field_options)) + (@field_options[:label].blank? ? human_attribute_name : @field_options[:label])}
52
+ klasses = 'checkbox'
53
+ klasses << ' inline' if @field_options.delete(:inline) == true
54
+ @args.delete :inline
55
+ label(@name, :class => klasses) do
56
+ extras { super(name, @args.merge(@field_options)) + (@field_options[:label].blank? ? human_attribute_name : @field_options[:label])}
49
57
  end
50
58
  end
51
59
  end
@@ -57,8 +65,10 @@ module BootstrapForms
57
65
  @field_options = @options.slice(:namespace, :index).merge(opts.merge(required_attribute))
58
66
  control_group_div do
59
67
  label_field + input_div do
68
+ klasses = 'radio'
69
+ klasses << ' inline' if @field_options.delete(:inline) == true
60
70
  values.map do |text, value|
61
- label("#{@name}_#{value}", :class => 'radio') do
71
+ label("#{@name}_#{value}", :class => klasses) do
62
72
  extras { radio_button(name, value, @field_options) + text }
63
73
  end
64
74
  end.join.html_safe
@@ -66,7 +76,7 @@ module BootstrapForms
66
76
  end
67
77
  end
68
78
 
69
- def collection_check_boxes(attribute, records, record_id, record_name, *args)
79
+ def collection_check_boxes(attribute, records, record_id, record_name, args = {})
70
80
  @name = attribute
71
81
  @field_options = field_options(args)
72
82
  @args = args
@@ -88,7 +98,7 @@ module BootstrapForms
88
98
  end
89
99
  end
90
100
 
91
- def collection_radio_buttons(attribute, records, record_id, record_name, *args)
101
+ def collection_radio_buttons(attribute, records, record_id, record_name, args = {})
92
102
  @name = attribute
93
103
  @field_options = field_options(args)
94
104
  @args = args
@@ -110,7 +120,7 @@ module BootstrapForms
110
120
  end
111
121
  end
112
122
 
113
- def uneditable_input(name, *args)
123
+ def uneditable_input(name, args = {})
114
124
  @name = name
115
125
  @field_options = field_options(args)
116
126
  @args = args
@@ -129,28 +139,33 @@ module BootstrapForms
129
139
  end
130
140
  end
131
141
 
132
- def button(name = nil, *args)
142
+ def button(name = nil, args = {})
143
+ name, args = nil, name if name.is_a?(Hash)
133
144
  @name = name
134
145
  @field_options = field_options(args)
135
146
  @args = args
136
147
 
137
- @field_options[:class] ||= 'btn btn-primary'
138
- super(name, *(args << @field_options))
148
+ @field_options[:class] ||= 'btn'
149
+ super(name, args.merge(@field_options))
139
150
  end
140
151
 
141
- def submit(name = nil, *args)
152
+ def submit(name = nil, args = {})
153
+ name, args = nil, name if name.is_a?(Hash)
142
154
  @name = name
143
155
  @field_options = field_options(args)
144
156
  @args = args
145
157
 
146
158
  @field_options[:class] ||= 'btn btn-primary'
147
- super(name, *(args << @field_options))
159
+ super(name, args.merge(@field_options))
148
160
  end
149
161
 
150
- def cancel(*args)
162
+ def cancel(name = nil, args = {})
163
+ name, args = nil, name if name.is_a?(Hash)
164
+ name ||= I18n.t('bootstrap_forms.buttons.cancel')
151
165
  @field_options = field_options(args)
152
166
  @field_options[:class] ||= 'btn cancel'
153
- link_to(I18n.t('bootstrap_forms.buttons.cancel'), (@field_options[:back] || :back), :class => @field_options[:class])
167
+ @field_options[:back] ||= :back
168
+ link_to(name, @field_options[:back], :class => @field_options[:class])
154
169
  end
155
170
 
156
171
  def actions(&block)
@@ -166,9 +181,9 @@ module BootstrapForms
166
181
  private
167
182
  def field_options(args)
168
183
  if @options
169
- @options.slice(:namespace, :index).merge(args.extract_options!)
184
+ @options.slice(:namespace, :index).merge(args)
170
185
  else
171
- args.extract_options!
186
+ args
172
187
  end
173
188
  end
174
189
  end
@@ -19,7 +19,11 @@ module BootstrapForms
19
19
  control_group_options = {}
20
20
  control_group_options[:class] = klasses if !klasses.empty?
21
21
 
22
- content_tag(:div, control_group_options, &block)
22
+ if @field_options[:control_group] == false
23
+ yield
24
+ else
25
+ content_tag(:div, control_group_options, &block)
26
+ end
23
27
  end
24
28
 
25
29
  def error_string
@@ -55,7 +59,9 @@ module BootstrapForms
55
59
  klass = []
56
60
  klass << 'input-prepend' if @field_options[:prepend]
57
61
  klass << 'input-append' if @field_options[:append] || @field_options[:append_button]
58
- content_tag(:div, :class => klass, &block)
62
+ html = content_tag(:div, :class => klass, &block)
63
+ html << extras(false, &block) if @field_options[:help_inline] || @field_options[:help_block] || @field_options[:error] || @field_options[:success] || @field_options[:warning]
64
+ html
59
65
  else
60
66
  yield if block_given?
61
67
  end
@@ -76,12 +82,35 @@ module BootstrapForms
76
82
  end
77
83
 
78
84
  def required_attribute
85
+ return {} if @field_options.present? && @field_options.has_key?(:required) && !@field_options[:required]
86
+
79
87
  if respond_to?(:object) and object.respond_to?(:errors) and object.class.respond_to?('validators_on')
80
- return { :required => true } if object.class.validators_on(@name).any? { |v| v.kind_of? ActiveModel::Validations::PresenceValidator }
88
+ return { :required => true } if object.class.validators_on(@name).any? { |v| v.kind_of?( ActiveModel::Validations::PresenceValidator ) && valid_validator?( v ) }
81
89
  end
82
90
  {}
83
91
  end
84
92
 
93
+ def valid_validator?(validator)
94
+ !conditional_validators?(validator) && action_validator_match?(validator)
95
+ end
96
+
97
+ def conditional_validators?(validator)
98
+ validator.options.include?(:if) || validator.options.include?(:unless)
99
+ end
100
+
101
+ def action_validator_match?(validator)
102
+ return true if !validator.options.include?(:on)
103
+ case validator.options[:on]
104
+ when :save
105
+ true
106
+ when :create
107
+ !object.persisted?
108
+ when :update
109
+ object.persisted?
110
+ end
111
+ end
112
+
113
+
85
114
  %w(help_inline error success warning help_block append append_button prepend).each do |method_name|
86
115
  define_method(method_name) do |*args|
87
116
  return '' unless value = @field_options[method_name.to_sym]
@@ -90,7 +119,7 @@ module BootstrapForms
90
119
  tag_options = {}
91
120
  case method_name
92
121
  when 'help_block'
93
- element = :p
122
+ element = :span
94
123
  tag_options[:class] = 'help-block'
95
124
  when 'append', 'prepend'
96
125
  element = :span
@@ -119,8 +148,15 @@ module BootstrapForms
119
148
  end
120
149
  end
121
150
 
122
- def extras(&block)
123
- [prepend, (yield if block_given?), append, append_button, help_inline, error, success, warning, help_block].join('').html_safe
151
+ def extras(input_append = nil, &block)
152
+ case input_append
153
+ when nil
154
+ [prepend, (yield if block_given?), append, append_button, help_inline, error, success, warning, help_block].join('').html_safe
155
+ when true
156
+ [prepend, (yield if block_given?), append, append_button].join('').html_safe
157
+ when false
158
+ [help_inline, error, success, warning, help_block].join('').html_safe
159
+ end
124
160
  end
125
161
 
126
162
  def objectify_options(options)
@@ -1,5 +1,5 @@
1
1
  class MyCustomFormBuilder < ActionView::Helpers::FormBuilder
2
- def error_messages
3
- '' # return empty string
4
- end
2
+ def error_messages
3
+ '' # return empty string
4
+ end
5
5
  end
@@ -2,4 +2,10 @@ class Project < ActiveRecord::Base
2
2
  has_many :tasks
3
3
  accepts_nested_attributes_for :tasks
4
4
  validates :owner, :presence => true
5
+ validates :if_presence, :presence => true, :if => lambda { true}
6
+ validates :unless_presence, :presence => true, :unless => lambda { true}
7
+ validates :create_presence, :presence => true, :on => :create
8
+ validates :update_presence, :presence => true, :on => :update
9
+ attr_accessor :if_presence, :unless_presence, :create_presence, :update_presence
10
+
5
11
  end
@@ -1,35 +1,35 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'bootstrap_form_for' do
4
- describe 'default_form_builder' do
5
- it 'should be accessible' do
6
- BootstrapForms.should respond_to(:default_form_builder)
7
- end
4
+ describe 'default_form_builder' do
5
+ it 'should be accessible' do
6
+ BootstrapForms.should respond_to(:default_form_builder)
7
+ end
8
8
 
9
- it 'should be the BootstrapForms form_builder by default' do
10
- BootstrapForms.default_form_builder.should == BootstrapForms::FormBuilder
11
- end
9
+ it 'should be the BootstrapForms form_builder by default' do
10
+ BootstrapForms.default_form_builder.should == BootstrapForms::FormBuilder
11
+ end
12
12
 
13
- context 'when set to something else' do
14
- before do
15
- BootstrapForms.default_form_builder = MyCustomFormBuilder
16
- end
13
+ context 'when set to something else' do
14
+ before do
15
+ BootstrapForms.default_form_builder = MyCustomFormBuilder
16
+ end
17
17
 
18
- it 'should be that other thing' do
19
- BootstrapForms.default_form_builder.should == MyCustomFormBuilder
20
- end
18
+ it 'should be that other thing' do
19
+ BootstrapForms.default_form_builder.should == MyCustomFormBuilder
20
+ end
21
21
 
22
- describe 'projects/new.html.erb', :type => :view do
23
- before do
24
- assign :project, Project.new
25
- render :file => 'projects/new.html.erb', :layout => 'layouts/application.html.erb'
26
- end
22
+ describe 'projects/new.html.erb', :type => :view do
23
+ before do
24
+ assign :project, Project.new
25
+ render :file => 'projects/new', :layout => 'layouts/application', :handlers => [:erb]
26
+ end
27
27
 
28
- it 'should render with the other form builder' do
29
- # in other words, it shouldn't be wrapped with the bootstrap stuff
30
- rendered.should_not match /<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name<\/label><div class=\"controls\">.*<\/div><\/div>/
31
- end
32
- end
33
- end
34
- end
28
+ it 'should render with the other form builder' do
29
+ # in other words, it shouldn't be wrapped with the bootstrap stuff
30
+ rendered.should_not match /<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name<\/label><div class=\"controls\">.*<\/div><\/div>/
31
+ end
32
+ end
33
+ end
34
+ end
35
35
  end
@@ -95,6 +95,33 @@ describe 'BootstrapForms::FormBuilder' do
95
95
  it 'adds the required attribute' do
96
96
  @builder.text_field('owner').should match /<input .*required="required"/
97
97
  end
98
+
99
+ it "does not add the required attribute if required: false" do
100
+ @builder.text_field('owner', :required => false).should_not match /<input .*required="required"/
101
+ end
102
+
103
+ it "not require if or unless validators" do
104
+ @builder.text_field('if_presence').should_not match /<input .*required="required"/
105
+ @builder.text_field('unless_presence').should_not match /<input .*required="required"/
106
+ end
107
+
108
+ it "should not be required if presence is on update and model is created" do
109
+ @builder.text_field('update_presence').should_not match /<input .*required="required"/
110
+ end
111
+
112
+ it "should be required if on create and model is new" do
113
+ @builder.text_field('create_presence').should match /<input .*required="required"/
114
+ end
115
+
116
+ it "should be required if presence is on update and model is not new" do
117
+ @project.stub!(:persisted?).and_return(true)
118
+ @builder.text_field('update_presence').should match /<input .*required="required"/
119
+ end
120
+
121
+ it "should not be required if on create and model is not new" do
122
+ @project.stub!(:persisted?).and_return(true)
123
+ @builder.text_field('create_presence').should_not match /<input .*required="required"/
124
+ end
98
125
  end
99
126
 
100
127
  context 'submit' do
@@ -41,6 +41,10 @@ shared_examples 'a bootstrap form' do
41
41
  it 'allows no label with :label => '' ' do
42
42
  @builder.check_box('name', :label => '').should_not match /<\/label>/
43
43
  end
44
+
45
+ it 'adds inline class' do
46
+ @builder.check_box('name', :inline => true).should == "<div class=\"control-group\"><div class=\"controls\"><label class=\"checkbox inline\" for=\"item_name\"><input name=\"item[name]\" type=\"hidden\" value=\"0\" /><input id=\"item_name\" name=\"item[name]\" type=\"checkbox\" value=\"1\" />Name</label></div></div>"
47
+ end
44
48
  end
45
49
 
46
50
  describe 'radio_buttons' do
@@ -75,6 +79,10 @@ shared_examples 'a bootstrap form' do
75
79
  it 'allows no label' do
76
80
  @builder.radio_buttons(:name, @options, {:label => false}).should == "<div class=\"control-group\"><div class=\"controls\"><label class=\"radio\" for=\"item_name_1\"><input id=\"item_name_1\" name=\"item[name]\" type=\"radio\" value=\"1\" />One</label><label class=\"radio\" for=\"item_name_2\"><input id=\"item_name_2\" name=\"item[name]\" type=\"radio\" value=\"2\" />Two</label></div></div>"
77
81
  end
82
+
83
+ it 'adds inline class' do
84
+ @builder.radio_buttons(:name, @options, {:inline => true}).should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><label class=\"radio inline\" for=\"item_name_1\"><input id=\"item_name_1\" name=\"item[name]\" type=\"radio\" value=\"1\" />One</label><label class=\"radio inline\" for=\"item_name_2\"><input id=\"item_name_2\" name=\"item[name]\" type=\"radio\" value=\"2\" />Two</label></div></div>"
85
+ end
78
86
  end
79
87
 
80
88
  (%w{email file number password range search text url }.map{|field| ["#{field}_field",field]} + [['telephone_field', 'tel'], ['phone_field', 'tel']]).each do |field, type|
@@ -116,13 +124,17 @@ shared_examples 'a bootstrap form' do
116
124
  end
117
125
 
118
126
  it 'adds help block' do
119
- @builder.text_field(:name, :help_block => 'help me!').should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><p class=\"help-block\">help me!</p></div></div>"
127
+ @builder.text_field(:name, :help_block => 'help me!').should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><span class=\"help-block\">help me!</span></div></div>"
120
128
  end
121
129
 
122
130
  it 'adds error message and class' do
123
131
  @builder.text_field(:name, :error => 'This is an error!').should == "<div class=\"control-group error\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><span class=\"help-inline\">This is an error!</span></div></div>"
124
132
  end
125
133
 
134
+ it 'adds error message, class and appended text' do
135
+ @builder.text_field(:name, :error => 'This is an error!', :append => 'test').should == "<div class=\"control-group error\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><div class=\"input-append\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><span class=\"add-on\">test</span></div><span class=\"help-inline\">This is an error!</span></div></div>"
136
+ end
137
+
126
138
  it 'adds success message and class' do
127
139
  @builder.text_field(:name, :success => 'This checked out OK').should == "<div class=\"control-group success\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><span class=\"help-inline\">This checked out OK</span></div></div>"
128
140
  end
@@ -143,6 +155,14 @@ shared_examples 'a bootstrap form' do
143
155
  @builder.text_field(:name, :append => '@', :prepend => '#').should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><div class=\"input-prepend input-append\"><span class=\"add-on\">\#</span><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><span class=\"add-on\">@</span></div></div></div>"
144
156
  end
145
157
 
158
+ it 'prepends, appends and adds inline help' do
159
+ @builder.text_field(:name, :append => '@', :prepend => '#', :help_inline => 'some help').should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><div class=\"input-prepend input-append\"><span class=\"add-on\">\#</span><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><span class=\"add-on\">@</span></div><span class=\"help-inline\">some help</span></div></div>"
160
+ end
161
+
162
+ it 'prepends, appends and adds block help' do
163
+ @builder.text_field(:name, :append => '@', :prepend => '#', :help_block => 'some help').should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><div class=\"input-prepend input-append\"><span class=\"add-on\">\#</span><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><span class=\"add-on\">@</span></div><span class=\"help-block\">some help</span></div></div>"
164
+ end
165
+
146
166
  it 'appends button with default values' do
147
167
  @builder.text_field(:name, :append_button => { :label => 'button label' }).should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><div class=\"input-append\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><button class=\"btn\" type=\"button\">button label</button></div></div></div>"
148
168
  end
@@ -160,10 +180,10 @@ shared_examples 'a bootstrap form' do
160
180
  end
161
181
 
162
182
  it "does not add control group" do
163
- @builder.text_field(:name, :control_group => false).should == "<div><label for=\"item_name\">Name</label><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /></div>"
183
+ @builder.text_field(:name, :control_group => false).should == "<label for=\"item_name\">Name</label><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" />"
164
184
  end
165
185
 
166
- it "does not add control group attribute to html if :control_group is true" do
186
+ it "adds control group attribute to html if :control_group is true" do
167
187
  @builder.text_field(:name, :control_group => true).should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /></div></div>"
168
188
  end
169
189
  end
@@ -202,8 +222,8 @@ shared_examples 'a bootstrap form' do
202
222
  end
203
223
 
204
224
  context 'button' do
205
- it 'adds btn primary class if no class is defined' do
206
- @builder.button.should match /class=\"btn btn-primary\"/
225
+ it 'adds btn class if no class is defined' do
226
+ @builder.button.should match /class=\"btn\"/
207
227
  end
208
228
 
209
229
  it 'allows for custom classes' do
@@ -221,6 +241,12 @@ shared_examples 'a bootstrap form' do
221
241
  @builder.should_receive(:link_to).with(I18n.t('bootstrap_forms.buttons.cancel'), :back, :class => 'btn btn-large my-cancel').and_return("")
222
242
  @builder.cancel(:class => 'btn btn-large my-cancel')
223
243
  end
244
+
245
+ it 'creates a link with a custom name when defined' do
246
+ name = 'Back'
247
+ @builder.should_receive(:link_to).with(name, :back, :class => 'btn cancel').and_return("")
248
+ @builder.cancel(name)
249
+ end
224
250
  end
225
251
  end # actions
226
252
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootstrap_forms
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.8
4
+ version: 2.1.1
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-12-02 00:00:00.000000000 Z
12
+ date: 2013-03-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec-rails
@@ -107,6 +107,22 @@ dependencies:
107
107
  - - ! '>='
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: fuubar
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
110
126
  description: Bootstrap Forms makes Twitter's Bootstrap on Rails easy to use by creating
111
127
  helpful form builders that minimize markup in your views.
112
128
  email: sethvargo@gmail.com
@@ -116,6 +132,7 @@ extra_rdoc_files: []
116
132
  files:
117
133
  - .gitignore
118
134
  - .rspec
135
+ - .ruby-version
119
136
  - .travis.yml
120
137
  - Gemfile
121
138
  - Guardfile
@@ -196,7 +213,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
196
213
  version: '0'
197
214
  segments:
198
215
  - 0
199
- hash: -810555499159365620
216
+ hash: -1030141123140574531
200
217
  required_rubygems_version: !ruby/object:Gem::Requirement
201
218
  none: false
202
219
  requirements:
@@ -205,10 +222,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
222
  version: '0'
206
223
  segments:
207
224
  - 0
208
- hash: -810555499159365620
225
+ hash: -1030141123140574531
209
226
  requirements: []
210
227
  rubyforge_project:
211
- rubygems_version: 1.8.24
228
+ rubygems_version: 1.8.23
212
229
  signing_key:
213
230
  specification_version: 3
214
231
  summary: Bootstrap Forms makes Twitter's Bootstrap on Rails easy!