bootstraps_bootstraps 2.0.0 → 2.0.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
@@ -1,2 +1,2 @@
1
1
  *.swp
2
- bootstraps_bootstraps-0.0.1.gem
2
+ *.gem
@@ -34,9 +34,13 @@ module BootstrapsBootstraps
34
34
  @form_mode = :horizontal if options[:horizontal] || detect_html_class(options, 'form-horizontal')
35
35
  @form_mode = :search if options[:search] || detect_html_class(options, 'form-search')
36
36
  @form_mode = :inline if options[:inline] || detect_html_class(options, 'form-inline')
37
+
38
+ @action_wrapped = options[:action_wrapped]
37
39
  end
38
40
 
39
- %w[text_field text_area password_field number_field telephone_field url_field email_field range_field collection_select].each do |method_name|
41
+
42
+ #the main method constructor which takes care of most of the use cases
43
+ %w[text_field text_area password_field number_field telephone_field url_field email_field range_field file_field].each do |method_name|
40
44
  define_method(method_name) do |name, *args|
41
45
  options = args.extract_options!
42
46
 
@@ -45,17 +49,17 @@ module BootstrapsBootstraps
45
49
  return super(name, *(args.push(options)))
46
50
  end
47
51
 
48
- errors = object.errors[name].any? ? 'error' : ''
49
- error_msg = object.errors[name].any? ? content_tag(:span, object.errors[name].join(","), class: 'help-inline') : ''
52
+ errors, error_msg = render_errors name
50
53
 
51
- help_text = options[:help_text].blank? ? '' : content_tag(:span,options[:help_text], class: 'help-block')
54
+ label_options = options
55
+ label_options[:class] = options[:label_class] unless options[:label_class].nil?
56
+ label = options[:label] == false ? ''.html_safe : field_label(name, label_options)
52
57
 
53
- label = options[:label] == false ? ''.html_safe : field_label(name, options.except(:class))
54
-
55
- options[:class] = [options[:class]] unless options[:class].kind_of?(Array)
56
- options[:class].push 'xxlarge' if options[:large] || method_name == 'text_area'
58
+ guarantee_html_class options
59
+ options[:class].push 'input-xlarge' if options[:large] || method_name == 'text_area'
57
60
  options[:class].push 'inline' if @form_mode == :inline
58
61
 
62
+ options.delete :label
59
63
  args.push(options).unshift(name)
60
64
 
61
65
  field = super(*args) + ' ' + error_msg
@@ -73,46 +77,96 @@ module BootstrapsBootstraps
73
77
  end
74
78
  end
75
79
 
76
- #TODO update for bootstrap 2
77
- def check_box(name, *args)
80
+ def check_box method, options = {}, checked_value = 1, unchecked_value = 0
78
81
  if options[:vanilla]
79
- return super *args
80
- end
81
-
82
- options = args.extract_options!
83
- if options.has_key? :class
84
- unless options[:class].kind_of? Array
85
- options[:class] = [options[:class]]
86
- end
87
- else
88
- options[:class] = []
82
+ return super
89
83
  end
90
84
 
91
- options[:class].push :checkbox
85
+ guarantee_html_class options, :checkbox
86
+ options[:class].push 'inline' if @form_mode == :inline
92
87
 
93
88
  text = options[:label] || ''
94
89
  options.delete :label
95
90
 
96
- args = args.push options
91
+ field_label(method, options) do
92
+ super(method,options,checked_value,unchecked_value) + text
93
+ end
94
+ end
97
95
 
98
- field_label(name, *args) do
99
- super(name, *args) + text
96
+ def collection_select method, collection, value_method, text_method, options = {}, html_options = {}
97
+ #abort and just let the rails formbuilder do its thing
98
+ if options[:vanilla]
99
+ return super
100
100
  end
101
+
102
+ errors, error_msg = render_errors method
103
+
104
+ label = options[:label] == false ? ''.html_safe : field_label(method, html_options)
105
+
106
+ guarantee_html_class options
107
+ options[:class].push 'input-xlarge' if options[:large]
108
+ options[:class].push 'inline' if @form_mode == :inline
109
+
110
+ options.delete :label
111
+
112
+ field = super(method,collection,value_method,text_method,options,html_options) + ' ' + error_msg
113
+
114
+ #wrap it in div.controls
115
+ field = div_with_class(['controls',errors], :content => field) if @form_mode == :horizontal
116
+
117
+ #tack on the label
118
+ field = label + field unless @form_mode == :inline
119
+
120
+ #wrap it in div.control-group
121
+ field = div_with_class(['control-group',errors], :content => field) if @form_mode == :horizontal
122
+
123
+ field
101
124
  end
102
125
 
103
- def submit *args
104
- options = args.extract_options!
105
- args = args.push options
126
+ def date_select method, options = {}, html_options = {}
127
+ field = super
106
128
 
107
- if options[:vanilla]
108
- super *args
109
- else
110
- content_tag :div, class: 'form-actions' do
111
- super *args
112
- end
129
+ return field if options[:vanilla]
130
+
131
+ errors, error_msg = render_errors method
132
+
133
+ #hmm, apparently TODO
134
+ help_text options
135
+
136
+ label = options[:label] == false ? ''.html_safe : field_label(method, options.except(:class))
137
+
138
+ guarantee_html_class html_options, 'inline'
139
+
140
+ field += ' '.html_safe + error_msg
141
+ field = div_with_class(['controls',errors], :content => field) if @form_mode == :horizontal
142
+ field = label + field
143
+ field = div_with_class(['control-group',errors], :content => field) if @form_mode == :horizontal
144
+ field
145
+ end
146
+
147
+ def radio_button method, value, options = {}
148
+ guarantee_html_class options, 'radio'
149
+ error_class, error_message = render_errors method
150
+
151
+ text = options[:label] || ''
152
+ options.delete :label
153
+
154
+ content_tag(:label, class: options[:class]) do
155
+ super(method,value,options) + text
113
156
  end
114
157
  end
115
158
 
159
+ def submit method, options = {}
160
+ # options block gets stringify_keys called on it in the first super, no :keys exist after that
161
+ field = super
162
+ return field if options['vanilla']
163
+ field = div_with_class('form-actions', content: field) unless options['no_action_block'] || @action_wrapped || [:inline, :search].include?(@form_mode)
164
+ puts @action_wrapped
165
+ field
166
+ end
167
+
168
+
169
+ #input groups
116
170
  def inline_inputs field_options = {}, &block
117
171
  field_options[:inline] = true
118
172
  wrapper = lambda { |content|
@@ -123,15 +177,34 @@ module BootstrapsBootstraps
123
177
  @template.wrapped_inputs(@object_name, @object, @options.merge(field_options), wrapper, &block)
124
178
  end
125
179
 
180
+ def grouped_inputs field_options = {}, &block
181
+ wrapper = lambda do |content|
182
+ field_group = div_with_class('controls', content:content)
183
+ if field_options[:label]
184
+ field_group = label( field_options[:label], field_options[:label], class: 'control-label') + field_group
185
+ end
186
+ field_group = div_with_class('control-group', content:field_group)
187
+ end
188
+
189
+ @template.wrapped_inputs(@object_name, @object, @options, wrapper, &block)
190
+ end
191
+
192
+ def form_actions field_options = {}, &block
193
+ field_options[:action_wrapped] = true
194
+ wrapper = lambda { |content|
195
+ field_group = div_with_class('form-actions', content: content)
196
+ }
197
+
198
+ @template.wrapped_inputs(@object_name, @object, @options.merge(field_options), wrapper, &block)
199
+ end
200
+
126
201
  private
127
202
 
128
203
  def field_label(name, *args, &block)
129
204
  options = args.extract_options!
130
- clss = options[:class] || []
131
-
132
- required = object.class.validators_on(name).any? { |v| v.kind_of? ActiveModel::Validations::PresenceValidator}
133
- clss.push 'required' if required
134
-
205
+ guarantee_html_class options
206
+ clss = options[:class]
207
+ clss.push 'required' if object.class.validators_on(name).any? { |v| v.kind_of? ActiveModel::Validations::PresenceValidator}
135
208
 
136
209
  label(name, options[:label], class: clss, &block)
137
210
  end
@@ -154,6 +227,22 @@ module BootstrapsBootstraps
154
227
  end
155
228
  end
156
229
 
230
+ def guarantee_html_class options_hash, *new_classes
231
+ if options_hash[:class].nil?
232
+ options_hash[:class] = []
233
+ elsif options_hash[:class].kind_of?(Symbol)|| options_hash[:class].kind_of?(String)
234
+ options_hash[:class] = [ options_hash[:class] ]
235
+ end
236
+
237
+ unless new_classes.empty?
238
+ new_classes.each do |clss|
239
+ options_hash[:class].push clss
240
+ end
241
+ end
242
+
243
+ options_hash
244
+ end
245
+
157
246
  def div_with_class clss, options = {}, &block
158
247
  options[:class] = [options[:class]] || []
159
248
  options[:class].push clss
@@ -172,6 +261,19 @@ module BootstrapsBootstraps
172
261
  end
173
262
  end
174
263
 
264
+ def render_errors method
265
+ if object.nil?
266
+ return ['','']
267
+ end
268
+
269
+ errors = object.errors[method].any? ? 'error' : ''
270
+ error_msg = object.errors[method].any? ? content_tag(:span, object.errors[method].join(","), class: 'help-inline') : ''
271
+
272
+ [errors, error_msg]
273
+ end
175
274
 
275
+ def help_text options
276
+ options[:help_text].blank? ? '' : content_tag(:span,options[:help_text], class: 'help-block')
277
+ end
176
278
  end
177
279
  end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module BootstrapsBootstraps
2
- VERSION = "2.0.0"
2
+ VERSION = "2.0.1"
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 2
7
7
  - 0
8
- - 0
9
- version: 2.0.0
8
+ - 1
9
+ version: 2.0.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Robert L. Carpenter
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-02-09 00:00:00 -07:00
17
+ date: 2012-03-20 00:00:00 -06:00
18
18
  default_executable:
19
19
  dependencies: []
20
20