simple_form 2.1.2 → 2.1.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of simple_form might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c4f641b8e74ebf64e3fb7fe4ebe925c64713eb13
4
- data.tar.gz: e74db71fa1d985a906d520673cf82504470c16dd
3
+ metadata.gz: e0846cac8facbc990fc17731962d98598a2e40ee
4
+ data.tar.gz: 4e1b4b5645eb07f7273b89b4a50007a6cc72fb82
5
5
  SHA512:
6
- metadata.gz: bc974c636d805808f4b5fd47e9eec4c656ae53b680113f03eea075dac24a7607c773e1243ceff8201bced0fc849c752def0130efefe5b9d7a24c6e85fc4e176a
7
- data.tar.gz: f7a7f67d9ce616e8f7697558ca957cf2701641c0a149eb06b0dab2b60ba17833f432f7bdeeaf29312ff7606acf70971dea86b8ec4f19198ff6420aa7421d646e
6
+ metadata.gz: 0aeca7d6cf3e6ea92299c4a55f7483e5f9ef3c49fc9497840cb11109eb57872cebc98b71c49669b5334cd8409dae300e40409fae39c0d9f2634060fdf65fb95c
7
+ data.tar.gz: 7c9fe5310c7403486fbbeeeb2f4633fb9e6987b6c22e663d727e6eacd41f357252a705ac31e5e91cf03575cc053b153f7fa1ff3f31b0545b9ce82ffb34510582
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 2.1.3
2
+
3
+ ### bug fix
4
+ * Fix method reflection for Ruby 2.1+. [@badosu](https://github.com/badosu)
5
+ * Collection input generates `required` attribute if it has `prompt` option. [@nashby](https://github.com/nashby)
6
+ * Use the given name in `input_html` for the hidden field in `collection_check_boxes` [@angelic](https://github.com/angelic)
7
+ * Add "checkbox" class to the label of boolean input when there is no `:label`
8
+ in `generate_additional_classes_for` config option [@nashby](https://github.com/nashby)
9
+ * Support models with digits in their names [@webgago](https://github.com/webgago)
10
+
1
11
  ## 2.1.2
2
12
 
3
13
  ### bug fix
@@ -13,7 +23,7 @@
13
23
  ### enhancements
14
24
  * `input_field` supports components that don't generate tags
15
25
  as `:min_max`, `:maxlength`, `:placeholder`, `:pattern`, `:readonly`.
16
- Closes[#362](https://github.com/plataformatec/simple_form/issues/632).
26
+ Closes [#362](https://github.com/plataformatec/simple_form/issues/632).
17
27
  ([@nashby](https://github.com/nashby))
18
28
  * support for Rails eager loading.
19
29
  Closes [#478](https://github.com/plataformatec/simple_form/issues/478).
data/README.md CHANGED
@@ -35,23 +35,23 @@ Also, if you want to use the country select, you will need the
35
35
  gem 'country_select'
36
36
  ```
37
37
 
38
- ### Twitter Bootstrap
38
+ ### Bootstrap
39
39
 
40
- **SimpleForm** 2.0 can be easily integrated to the [Twitter Bootstrap](http://twitter.github.com/bootstrap).
40
+ **Simple Form** can be easily integrated to the [Bootstrap](http://getbootstrap.com/2.3.2/) 2.3.
41
41
  To do that you have to use the `bootstrap` option in the install generator, like this:
42
42
 
43
43
  ```console
44
44
  rails generate simple_form:install --bootstrap
45
45
  ```
46
46
 
47
- You have to be sure that you added a copy of the [Twitter Bootstrap](http://twitter.github.com/bootstrap)
47
+ You have to be sure that you added a copy of the [Bootstrap](http://getbootstrap.com/2.3.2/)
48
48
  assets on your application.
49
49
 
50
50
  For more information see the generator output, our
51
51
  [example application code](https://github.com/rafaelfranca/simple_form-bootstrap) and
52
52
  [the live example app](http://simple-form-bootstrap.plataformatec.com.br/).
53
53
 
54
- **NOTE**: **SimpleForm** integration requires Twitter Bootstrap version 2.0 or higher.
54
+ **NOTE**: **SimpleForm** integration requires Twitter Bootstrap version 2.0 up to 2.3.
55
55
 
56
56
  ### Zurb Foundation 3
57
57
 
@@ -163,6 +163,13 @@ And of course, the `required` property of any input can be overwritten as needed
163
163
  <% end %>
164
164
  ```
165
165
 
166
+ By default, SimpleForm will look at the column type in the database and use an
167
+ appropriate input for the column. For example, a column created with type
168
+ `:text` in the database will use a `textarea` input by default. See the section
169
+ [Available input types and defaults for each column
170
+ type](https://github.com/plataformatec/simple_form#available-input-types-and-defaults-for-each-column-type)
171
+ for a complete list of defaults.
172
+
166
173
  **SimpleForm** also lets you overwrite the default input type it creates:
167
174
 
168
175
  ```erb
@@ -176,7 +183,7 @@ And of course, the `required` property of any input can be overwritten as needed
176
183
  ```
177
184
 
178
185
  So instead of a checkbox for the *accepts* attribute, you'll have a pair of radio buttons with yes/no
179
- labels and a text area instead of a text field for the description. You can also render boolean
186
+ labels and a textarea instead of a text field for the description. You can also render boolean
180
187
  attributes using `:as => :select` to show a dropdown.
181
188
 
182
189
  It is also possible to give the `:disabled` option to **SimpleForm**, and it'll automatically mark
@@ -289,7 +296,7 @@ f.input :shipping_country, :priority => [ "Brazil" ], :collection => [ "Australi
289
296
 
290
297
  ### Associations
291
298
 
292
- To deal with associations, **SimpleForm** can generate select inputs, a series of radios buttons or check boxes.
299
+ To deal with associations, **SimpleForm** can generate select inputs, a series of radios buttons or checkboxes.
293
300
  Lets see how it works: imagine you have a user model that belongs to a company and has_and_belongs_to_many
294
301
  roles. The structure would be something like:
295
302
 
@@ -321,7 +328,7 @@ Now we have the user form:
321
328
 
322
329
  Simple enough, right? This is going to render a `:select` input for choosing the `:company`, and another
323
330
  `:select` input with `:multiple` option for the `:roles`. You can, of course, change it to use radio
324
- buttons and check boxes as well:
331
+ buttons and checkboxes as well:
325
332
 
326
333
  ```ruby
327
334
  f.association :company, :as => :radio_buttons
@@ -408,7 +415,7 @@ end
408
415
 
409
416
  #### Collection Check Boxes
410
417
 
411
- Creates a collection of check boxes with labels associated (same API as `collection_select`):
418
+ Creates a collection of checkboxes with labels associated (same API as `collection_select`):
412
419
 
413
420
  ```ruby
414
421
  form_for @user do |f|
@@ -433,36 +440,36 @@ form_for @user do |f|
433
440
  end
434
441
  ```
435
442
 
436
- ## Mappings/Inputs available
437
-
438
- **SimpleForm** comes with a lot of default mappings:
439
-
440
- ```text
441
- Mapping Input Column Type
442
-
443
- boolean check box boolean
444
- string text field string
445
- email email field string with name matching "email"
446
- url url field string with name matching "url"
447
- tel tel field string with name matching "phone"
448
- password password field string with name matching "password"
449
- search search -
450
- text text area text
451
- file file field string, responding to file methods
452
- hidden hidden field -
453
- integer number field integer
454
- float number field float
455
- decimal number field decimal
456
- range range field -
457
- datetime datetime select datetime/timestamp
458
- date date select date
459
- time time select time
460
- select collection select belongs_to/has_many/has_and_belongs_to_many associations
461
- radio_buttons collection radio buttons belongs_to
462
- check_boxes collection check boxes has_many/has_and_belongs_to_many associations
463
- country country select string with name matching "country"
464
- time_zone time zone select string with name matching "time_zone"
465
- ```
443
+ ## Available input types and defaults for each column type
444
+
445
+ The following table shows the html element you will get for each attribute
446
+ according to its database definition. These defaults can be changed by
447
+ specifying the helper method in the column `Mapping` as the `as:` option.
448
+
449
+ Mapping | Generated HTML Element | Database Column Type
450
+ --------------- |:-------------------------------------|:--------------------
451
+ `boolean` | `input[type=checkbox]` | `boolean`
452
+ `string` | `input[type=text]` | `string`
453
+ `email` | `input[type=email]` | `string` with `name =~ /email/`
454
+ `url` | `input[type=url]` | `string` with `name =~ /url/`
455
+ `tel` | `input[type=tel]` | `string` with `name =~ /phone/`
456
+ `password` | `input[type=password]` | `string` with `name =~ /password/`
457
+ `search` | `input[type=search]` | -
458
+ `text` | `textarea` | `text`
459
+ `file` | `input[type=file]` | `string` responding to file methods
460
+ `hidden` | `input[type=hidden]` | -
461
+ `integer` | `input[type=number]` | `integer`
462
+ `float` | `input[type=number]` | `float`
463
+ `decimal` | `input[type=number]` | `decimal`
464
+ `range` | `input[type=range]` | -
465
+ `datetime` | `select` | `datetime/timestamp`
466
+ `date` | `select` | `date`
467
+ `time` | `select` | `time`
468
+ `select` | `select` | `belongs_to`/`has_many`/`has_and_belongs_to_many` associations
469
+ `radio_buttons` | collection of `input[type=radio]` | `belongs_to` associations
470
+ `check_boxes` | collection of `input[type=checkbox]` | `has_many`/`has_and_belongs_to_many` associations
471
+ `country` | `select` (countries as options) | `string` with `name =~ /country/`
472
+ `time_zone` | `select` (timezones as options) | `string` with `name =~ /time_zone/`
466
473
 
467
474
  ## Custom inputs
468
475
 
@@ -483,6 +490,7 @@ And use it in your views:
483
490
  ```ruby
484
491
  f.input :money, :as => :currency
485
492
  ```
493
+ Note, you may have to create the `app/inputs/` directory and restart your webserver.
486
494
 
487
495
  You can also redefine existing **SimpleForm** inputs by creating a new class with the same name. For
488
496
  instance, if you want to wrap date/time/datetime in a div, you can do:
@@ -4,12 +4,12 @@ module SimpleForm
4
4
  desc "Copy SimpleForm default files"
5
5
  source_root File.expand_path('../templates', __FILE__)
6
6
  class_option :template_engine, :desc => 'Template engine to be invoked (erb, haml or slim).'
7
- class_option :bootstrap, :type => :boolean, :desc => 'Add the Twitter Bootstrap wrappers to the SimpleForm initializer.'
7
+ class_option :bootstrap, :type => :boolean, :desc => 'Add the Bootstrap wrappers to the SimpleForm initializer.'
8
8
  class_option :foundation, :type => :boolean, :desc => 'Add the Zurb Foundation 3 wrappers to the SimpleForm initializer.'
9
9
 
10
10
  def info_bootstrap
11
11
  return if options.bootstrap? || options.foundation?
12
- puts "SimpleForm 2 supports Twitter Bootstrap and Zurb Foundation 3. If you want "\
12
+ puts "SimpleForm 2 supports Bootstrap and Zurb Foundation 3. If you want "\
13
13
  "a configuration that is compatible with one of these frameworks, then please " \
14
14
  "re-run this generator with --bootstrap or --foundation as an option."
15
15
  end
@@ -1,7 +1,7 @@
1
1
  ===============================================================================
2
2
 
3
3
  Be sure to have a copy of the Bootstrap stylesheet available on your
4
- application, you can get it on http://twitter.github.com/bootstrap.
4
+ application, you can get it on http://getbootstrap.com/2.3.2/.
5
5
 
6
6
  Inside your views, use the 'simple_form_for' with one of the Bootstrap form
7
7
  classes, '.form-horizontal', '.form-inline', '.form-search' or
@@ -37,8 +37,8 @@ SimpleForm.setup do |config|
37
37
  end
38
38
  end
39
39
 
40
- # Wrappers for forms and inputs using the Twitter Bootstrap toolkit.
41
- # Check the Bootstrap docs (http://twitter.github.com/bootstrap)
40
+ # Wrappers for forms and inputs using the Bootstrap toolkit.
41
+ # Check the Bootstrap docs (http://getbootstrap.com/2.3.2/)
42
42
  # to learn about the different styles for forms and inputs,
43
43
  # buttons and other elements.
44
44
  config.default_wrapper = :bootstrap
@@ -178,7 +178,8 @@ module SimpleForm
178
178
 
179
179
  # Append a hidden field to make sure something will be sent back to the
180
180
  # server if all checkboxes are unchecked.
181
- hidden = @template.hidden_field_tag("#{object_name}[#{attribute}][]", "", :id => nil)
181
+ hidden_name = html_options[:name] || "#{object_name}[#{attribute}][]"
182
+ hidden = @template.hidden_field_tag(hidden_name, "", :id => nil)
182
183
 
183
184
  wrap_rendered_collection(rendered_collection + hidden, options)
184
185
  end
@@ -342,7 +342,7 @@ module SimpleForm
342
342
  def lookup_model_names
343
343
  @lookup_model_names ||= begin
344
344
  child_index = options[:child_index]
345
- names = object_name.to_s.scan(/([a-zA-Z_]+)/).flatten
345
+ names = object_name.to_s.scan(/(?!\d)\w+/).flatten
346
346
  names.delete(child_index) if child_index
347
347
  names.each { |name| name.gsub!('_attributes', '') }
348
348
  names.freeze
@@ -17,6 +17,7 @@ module SimpleForm
17
17
  input
18
18
  elsif nested_boolean_style?
19
19
  html_options = label_html_options.dup
20
+ html_options[:class] ||= []
20
21
  html_options[:class].push(:checkbox)
21
22
 
22
23
  build_hidden_field_for_checkbox +
@@ -34,7 +35,7 @@ module SimpleForm
34
35
  # reuse the method for nested boolean style, but with no unchecked value,
35
36
  # which won't generate the hidden checkbox. This is the default functionality
36
37
  # in Rails > 3.2.1, and is backported in SimpleForm AV helpers.
37
- def build_check_box(unchecked_value = unchecked_value)
38
+ def build_check_box(unchecked_value = unchecked_value())
38
39
  @builder.check_box(attribute_name, input_html_options, checked_value, unchecked_value)
39
40
  end
40
41
 
@@ -33,7 +33,7 @@ module SimpleForm
33
33
  end
34
34
 
35
35
  def has_required?
36
- super && (input_options[:include_blank] || multiple?)
36
+ super && (input_options[:include_blank] || input_options[:prompt] || multiple?)
37
37
  end
38
38
 
39
39
  # Check if :include_blank must be included by default.
@@ -1,3 +1,3 @@
1
1
  module SimpleForm
2
- VERSION = "2.1.2".freeze
2
+ VERSION = "2.1.3".freeze
3
3
  end
@@ -288,6 +288,13 @@ class BuilderTest < ActionView::TestCase
288
288
  assert_select "form input[type=hidden][name='user[tag_ids][]'][value=]", :count => 1
289
289
  end
290
290
 
291
+ test "collection check box generates a hidden field using the given :name in :input_html" do
292
+ collection = [Tag.new(1, 'Tag 1'), Tag.new(2, 'Tag 2')]
293
+ with_collection_check_boxes @user, :tag_ids, collection, :id, :name, {}, {:name => "user[other_tag_ids][]"}
294
+
295
+ assert_select "form input[type=hidden][name='user[other_tag_ids][]'][value=]", :count => 1
296
+ end
297
+
291
298
  test "collection check box accepts a collection and generate a serie of checkboxes with labels for label method" do
292
299
  collection = [Tag.new(1, 'Tag 1'), Tag.new(2, 'Tag 2')]
293
300
  with_collection_check_boxes @user, :tag_ids, collection, :id, :name
@@ -79,6 +79,26 @@ class FormBuilderTest < ActionView::TestCase
79
79
  end
80
80
  end
81
81
 
82
+ test 'builder allow to use numbers in the model name' do
83
+ user = UserNumber1And2.new({
84
+ :id => 1,
85
+ :name => 'New in SimpleForm!',
86
+ :description => 'Hello!',
87
+ :created_at => Time.now
88
+ })
89
+
90
+ user.tags = [Tag.new(nil, 'Tag1')]
91
+
92
+ with_concat_form_for(user, :url => '/') do |f|
93
+ f.simple_fields_for(:tags) do |tags|
94
+ tags.input :name
95
+ end
96
+ end
97
+
98
+ assert_select 'form .user_number1_and2_tags_name'
99
+ assert_no_select 'form .user_number1_and2_tags_1_name'
100
+ end
101
+
82
102
  # INPUT TYPES
83
103
  test 'builder should generate text fields for string columns' do
84
104
  with_form_for @user, :name
@@ -137,4 +137,16 @@ class BooleanInputTest < ActionView::TestCase
137
137
  end
138
138
  end
139
139
  end
140
+
141
+ test 'input boolean without additional classes should add "checkbox" class to label' do
142
+ swap_wrapper :default, self.custom_wrapper_without_top_level do
143
+ swap SimpleForm, :boolean_style => :nested, :generate_additional_classes_for => [:input] do
144
+ with_input_for @user, :active, :boolean
145
+
146
+ assert_select 'label'
147
+ assert_select 'label.checkbox'
148
+ assert_no_select 'label.boolean'
149
+ end
150
+ end
151
+ end
140
152
  end
@@ -172,6 +172,12 @@ class CollectionSelectInputTest < ActionView::TestCase
172
172
  assert_select 'select[required]'
173
173
  end
174
174
 
175
+ test 'collection input with select type should generate required html attribute only with blank option or prompt' do
176
+ with_input_for @user, :name, :select, :prompt => 'Name...', :collection => ['Jose', 'Carlos']
177
+ assert_select 'select.required'
178
+ assert_select 'select[required]'
179
+ end
180
+
175
181
  test 'collection input with select type should not generate required html attribute without blank option' do
176
182
  with_input_for @user, :name, :select, :include_blank => false, :collection => ['Jose' , 'Carlos']
177
183
  assert_select 'select.required'
@@ -214,3 +214,6 @@ class HashBackedAuthor < Hash
214
214
  'hash backed author'
215
215
  end
216
216
  end
217
+
218
+ class UserNumber1And2 < User
219
+ end
data/test/test_helper.rb CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'bundler/setup'
3
3
 
4
4
  require 'test/unit'
5
- require 'mocha/setup'
5
+ require 'mocha'
6
6
 
7
7
  require 'active_model'
8
8
  require 'action_controller'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_form
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - José Valim
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-11-25 00:00:00.000000000 Z
13
+ date: 2015-07-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
@@ -163,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
163
  version: '0'
164
164
  requirements: []
165
165
  rubyforge_project: simple_form
166
- rubygems_version: 2.2.2
166
+ rubygems_version: 2.2.3
167
167
  signing_key:
168
168
  specification_version: 4
169
169
  summary: Forms made easy!