formtastic 2.3.0.rc2 → 2.3.0.rc3
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/.travis.yml +27 -1
- data/Appraisals +5 -0
- data/CHANGELOG +1 -0
- data/README.textile +19 -26
- data/formtastic.gemspec +4 -3
- data/gemfiles/rails_3.0.gemfile +1 -1
- data/gemfiles/rails_3.1.gemfile +1 -1
- data/gemfiles/rails_3.2.gemfile +1 -1
- data/gemfiles/rails_4.0.4.gemfile +7 -0
- data/gemfiles/rails_4.gemfile +1 -1
- data/lib/formtastic/form_builder.rb +9 -1
- data/lib/formtastic/helpers/form_helper.rb +11 -6
- data/lib/formtastic/helpers/inputs_helper.rb +6 -1
- data/lib/formtastic/inputs/base/collections.rb +1 -1
- data/lib/formtastic/inputs/base/validations.rb +1 -1
- data/lib/formtastic/inputs/boolean_input.rb +4 -14
- data/lib/formtastic/inputs/check_boxes_input.rb +7 -1
- data/lib/formtastic/inputs/radio_input.rb +2 -0
- data/lib/formtastic/util.rb +13 -1
- data/lib/formtastic/version.rb +1 -1
- data/lib/generators/templates/_form.html.slim +2 -2
- data/lib/generators/templates/formtastic.rb +15 -1
- data/spec/actions/generic_action_spec.rb +3 -3
- data/spec/builder/custom_builder_spec.rb +7 -7
- data/spec/builder/semantic_fields_for_spec.rb +8 -8
- data/spec/generators/formtastic/form/form_generator_spec.rb +6 -6
- data/spec/helpers/action_helper_spec.rb +11 -11
- data/spec/helpers/form_helper_spec.rb +22 -11
- data/spec/helpers/input_helper_spec.rb +44 -44
- data/spec/helpers/inputs_helper_spec.rb +64 -31
- data/spec/helpers/semantic_errors_helper_spec.rb +12 -12
- data/spec/i18n_spec.rb +5 -5
- data/spec/inputs/boolean_input_spec.rb +6 -5
- data/spec/inputs/check_boxes_input_spec.rb +27 -9
- data/spec/inputs/country_input_spec.rb +5 -5
- data/spec/inputs/custom_input_spec.rb +1 -1
- data/spec/inputs/date_picker_input_spec.rb +4 -4
- data/spec/inputs/datetime_picker_input_spec.rb +4 -4
- data/spec/inputs/hidden_input_spec.rb +3 -3
- data/spec/inputs/include_blank_spec.rb +2 -2
- data/spec/inputs/number_input_spec.rb +36 -36
- data/spec/inputs/radio_input_spec.rb +23 -5
- data/spec/inputs/range_input_spec.rb +19 -19
- data/spec/inputs/select_input_spec.rb +40 -20
- data/spec/inputs/string_input_spec.rb +2 -2
- data/spec/inputs/time_picker_input_spec.rb +4 -4
- data/spec/localizer_spec.rb +1 -1
- data/spec/spec_helper.rb +203 -188
- data/spec/support/custom_macros.rb +8 -8
- metadata +15 -13
data/.travis.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
before_install:
|
1
|
+
before_install:
|
2
2
|
- gem update --system
|
3
3
|
- gem update bundler
|
4
4
|
rvm:
|
@@ -6,6 +6,8 @@ rvm:
|
|
6
6
|
- ree
|
7
7
|
- 1.9.2
|
8
8
|
- 1.9.3
|
9
|
+
- 2.0.0
|
10
|
+
- 2.1.0
|
9
11
|
gemfile:
|
10
12
|
- gemfiles/rails_3.0.gemfile
|
11
13
|
- gemfiles/rails_3.1.gemfile
|
@@ -21,6 +23,24 @@ matrix:
|
|
21
23
|
- rvm: 2.0.0
|
22
24
|
gemfile: gemfiles/rails_4.gemfile
|
23
25
|
env: DEFER_GC=false RAILS_EDGE=true
|
26
|
+
- rvm: 2.1.0
|
27
|
+
gemfile: gemfiles/rails_4.gemfile
|
28
|
+
env: DEFER_GC=false RAILS_EDGE=true
|
29
|
+
- rvm: 1.9.3
|
30
|
+
gemfile: gemfiles/rails_4.0.4.gemfile
|
31
|
+
env: DEFER_GC=false RAILS_EDGE=true
|
32
|
+
- rvm: 2.0.0
|
33
|
+
gemfile: gemfiles/rails_4.0.4.gemfile
|
34
|
+
env: DEFER_GC=false RAILS_EDGE=true
|
35
|
+
- rvm: 1.9.3
|
36
|
+
gemfile: gemfiles/rails_edge.gemfile
|
37
|
+
env: DEFER_GC=false RAILS_EDGE=true
|
38
|
+
- rvm: 2.0.0
|
39
|
+
gemfile: gemfiles/rails_edge.gemfile
|
40
|
+
env: DEFER_GC=false RAILS_EDGE=true
|
41
|
+
- rvm: 2.1.0
|
42
|
+
gemfile: gemfiles/rails_edge.gemfile
|
43
|
+
env: DEFER_GC=false RAILS_EDGE=true
|
24
44
|
allow_failures:
|
25
45
|
- rvm: 1.9.3
|
26
46
|
gemfile: gemfiles/rails_edge.gemfile
|
@@ -28,3 +48,9 @@ matrix:
|
|
28
48
|
- rvm: 2.0.0
|
29
49
|
gemfile: gemfiles/rails_edge.gemfile
|
30
50
|
env: DEFER_GC=false RAILS_EDGE=true
|
51
|
+
- rvm: 2.1.0
|
52
|
+
gemfile: gemfiles/rails_4.gemfile
|
53
|
+
env: DEFER_GC=false RAILS_EDGE=true
|
54
|
+
- rvm: 2.1.0
|
55
|
+
gemfile: gemfiles/rails_edge.gemfile
|
56
|
+
env: DEFER_GC=false RAILS_EDGE=true
|
data/Appraisals
CHANGED
@@ -14,6 +14,11 @@ appraise 'rails-4' do
|
|
14
14
|
gem 'rails', '~> 4.0.0'
|
15
15
|
end
|
16
16
|
|
17
|
+
# Special case for a change in I18n
|
18
|
+
appraise 'rails-4.0.4' do
|
19
|
+
gem 'rails', '4.0.4'
|
20
|
+
end
|
21
|
+
|
17
22
|
if ENV["RAILS_EDGE"] == "true"
|
18
23
|
appraise 'rails-edge' do
|
19
24
|
gem 'rails', :git => 'git://github.com/rails/rails.git'
|
data/CHANGELOG
CHANGED
data/README.textile
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
h1. Formtastic
|
2
2
|
|
3
|
-
|
3
|
+
!https://travis-ci.org/justinfrench/formtastic.png?branch=master!:https://travis-ci.org/justinfrench/formtastic
|
4
|
+
!http://inch-pages.github.io/github/justinfrench/formtastic.png!:http://inch-pages.github.io/github/justinfrench/formtastic
|
5
|
+
!https://codeclimate.com/github/justinfrench/formtastic.png!:https://codeclimate.com/github/justinfrench/formtastic
|
6
|
+
!https://badge.fury.io/rb/formtastic.png!:http://badge.fury.io/rb/formtastic
|
7
|
+
!https://gemnasium.com/justinfrench/formtastic.png!:https://gemnasium.com/justinfrench/formtastic
|
4
8
|
|
5
|
-
|
9
|
+
Formtastic is a Rails FormBuilder DSL (with some other goodies) to make it far easier to create beautiful, semantically rich, syntactically awesome, readily stylable and wonderfully accessible HTML forms in your Rails applications.
|
6
10
|
|
7
11
|
|
8
12
|
h2. Documentation & Support
|
@@ -20,7 +24,7 @@ h2. Compatibility
|
|
20
24
|
* Formtastic 2.3 is Rails 3 and Rails 4 compatible (Rails < 3.2 is deprecated)
|
21
25
|
* Formtastic 2.1 & 2.2 is Rails 3 and Rails 4 compatible
|
22
26
|
* Formtastic, much like Rails, is very ActiveRecord-centric. Many are successfully using other ActiveModel-like ORMs and objects (DataMapper, MongoMapper, Mongoid, Authlogic, Devise...) but we're not guaranteeing full compatibility at this stage. Patches are welcome!
|
23
|
-
|
27
|
+
|
24
28
|
|
25
29
|
h2. The Story
|
26
30
|
|
@@ -95,7 +99,7 @@ Simply add Formtastic to your Gemfile and bundle it up:
|
|
95
99
|
Run the installation generator:
|
96
100
|
|
97
101
|
<pre>
|
98
|
-
$ rails generate formtastic:install
|
102
|
+
$ rails generate formtastic:install
|
99
103
|
</pre>
|
100
104
|
|
101
105
|
|
@@ -106,7 +110,7 @@ A proof-of-concept set of stylesheets are provided which you can include in your
|
|
106
110
|
h3. Stylesheet usage in Rails < 3.1:
|
107
111
|
|
108
112
|
<pre>
|
109
|
-
$ rails generate formtastic:install
|
113
|
+
$ rails generate formtastic:install
|
110
114
|
</pre>
|
111
115
|
|
112
116
|
<pre>
|
@@ -131,7 +135,7 @@ Conditional stylesheets need to be compiled separately to prevent them being bun
|
|
131
135
|
<pre>
|
132
136
|
# app/assets/stylesheets/ie6.css
|
133
137
|
*= require formtastic_ie6
|
134
|
-
|
138
|
+
|
135
139
|
# app/assets/stylesheets/ie7.css
|
136
140
|
*= require formtastic_ie7
|
137
141
|
</pre>
|
@@ -145,7 +149,7 @@ Conditional stylesheets need to be compiled separately to prevent them being bun
|
|
145
149
|
|
146
150
|
<pre>
|
147
151
|
# config/environments/production.rb
|
148
|
-
config.assets.precompile += %w( ie6.css ie7.css )
|
152
|
+
config.assets.precompile += %w( ie6.css ie7.css )
|
149
153
|
</pre>
|
150
154
|
|
151
155
|
h2. Usage
|
@@ -365,7 +369,7 @@ Formtastic decides which label to use in the following order:
|
|
365
369
|
1. :label # :label => "Choose Title"
|
366
370
|
2. Formtastic i18n # if either :label => true || i18n_lookups_by_default = true (see Internationalization)
|
367
371
|
3. Activerecord i18n # if localization file found for the given attribute
|
368
|
-
4. label_str_method # if nothing provided this defaults to :humanize but can be set to a custom method
|
372
|
+
4. label_str_method # if nothing provided this defaults to :humanize but can be set to a custom method
|
369
373
|
</pre>
|
370
374
|
|
371
375
|
h2. Internationalization (I18n)
|
@@ -398,7 +402,7 @@ Formtastic supports localized *labels*, *hints*, *legends*, *actions* using the
|
|
398
402
|
Formtastic::FormBuilder.i18n_lookups_by_default = true
|
399
403
|
</pre>
|
400
404
|
|
401
|
-
*2. Add some
|
405
|
+
*2. Add some label-translations/variants (@config/locales/en.yml@):*
|
402
406
|
|
403
407
|
<pre>
|
404
408
|
en:
|
@@ -593,39 +597,28 @@ To create a custom @DatePickerInput@ from scratch, put the following in @app/inp
|
|
593
597
|
|
594
598
|
You can use your new input with @:as => :date_picker@.
|
595
599
|
|
596
|
-
h3. Don't subclass Formtastic::FormBuilder anymore
|
597
|
-
|
598
|
-
It was previously recommended in Formtastic 1.x to subclass Formtastic::FormBuilder to add your own inputs. This is no longer recommended in Formtastic 2, and will not work as expected.
|
599
|
-
|
600
|
-
|
601
|
-
h2. Security
|
602
|
-
|
603
|
-
By default, Formtastic escapes HTML entities in both labels and hints unless a string is marked as html_safe. If you are using an older rails version which doesn't know html_safe, or you want to globally turn this feature off, you can set the following in your initializer:
|
604
|
-
|
605
|
-
Formtastic::FormBuilder.escape_html_entities_in_hints_and_labels = false
|
606
|
-
|
607
600
|
|
608
601
|
h2. Dependencies
|
609
602
|
|
610
603
|
There are none other than Rails itself, but...
|
611
604
|
|
612
|
-
* If you want to use the @:country@ input, you'll need to install the "country-select plugin":https://github.com/
|
613
|
-
* There are a bunch of development dependencies
|
605
|
+
* If you want to use the @:country@ input, you'll need to install the "country-select plugin":https://github.com/stefanpenner/country_select (or any other country_select plugin with the same API).
|
606
|
+
* There are a bunch of development dependencies if you plan to contribute to Formtastic
|
614
607
|
|
615
608
|
|
616
609
|
h2. How to contribute
|
617
610
|
|
618
611
|
* Fork the project on Github
|
619
612
|
* Create a topic branch for your changes
|
620
|
-
* Ensure that you provide test coverage for your changes
|
613
|
+
* Ensure that you provide *documentation* and *test coverage* for your changes (patches won't be accepted without)
|
621
614
|
* Ensure that all tests pass (`bundle exec rake`)
|
622
|
-
* Create a pull request on Github
|
615
|
+
* Create a pull request on Github (these are also a great place to start a conversation around a patch as early as possible)
|
623
616
|
|
624
617
|
|
625
618
|
h2. Project Info
|
626
619
|
|
627
|
-
Formtastic was created by "Justin French":http://www.justinfrench.com with contributions from around
|
620
|
+
Formtastic was created by "Justin French":http://www.justinfrench.com with contributions from around 180 awesome developers. Run @git shortlog -n -s@ to see the awesome.
|
628
621
|
|
629
622
|
The project is hosted on Github: "http://github.com/justinfrench/formtastic":http://github.com/justinfrench/formtastic, where your contributions, forkings, comments, issues and feedback are greatly welcomed.
|
630
623
|
|
631
|
-
Copyright (c) 2007-
|
624
|
+
Copyright (c) 2007-2014 Justin French, released under the MIT license.
|
data/formtastic.gemspec
CHANGED
@@ -11,6 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.homepage = %q{http://github.com/justinfrench/formtastic}
|
12
12
|
s.summary = %q{A Rails form builder plugin/gem with semantically rich and accessible markup}
|
13
13
|
s.description = %q{A Rails form builder plugin/gem with semantically rich and accessible markup}
|
14
|
+
s.license = 'MIT'
|
14
15
|
|
15
16
|
s.files = `git ls-files`.split("\n")
|
16
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -26,7 +27,7 @@ Gem::Specification.new do |s|
|
|
26
27
|
s.add_dependency(%q<actionpack>, [">= 3.0"])
|
27
28
|
|
28
29
|
s.add_development_dependency(%q<nokogiri>, ["< 1.6.0"]) # 1.6 requires Ruby 1.9.2, drop in v3.0
|
29
|
-
s.add_development_dependency(%q<rspec-rails>, ["~> 2.
|
30
|
+
s.add_development_dependency(%q<rspec-rails>, ["~> 2.14.0"])
|
30
31
|
s.add_development_dependency(%q<rspec_tag_matchers>, [">= 1.0.0"])
|
31
32
|
s.add_development_dependency(%q<hpricot>, ["~> 0.8.3"])
|
32
33
|
s.add_development_dependency(%q<BlueCloth>) # for YARD
|
@@ -34,7 +35,7 @@ Gem::Specification.new do |s|
|
|
34
35
|
s.add_development_dependency(%q<colored>)
|
35
36
|
s.add_development_dependency(%q<tzinfo>)
|
36
37
|
s.add_development_dependency(%q<ammeter>, ["0.2.5"])
|
37
|
-
s.add_development_dependency(%q<appraisal
|
38
|
-
s.add_development_dependency(%q<rake
|
38
|
+
s.add_development_dependency(%q<appraisal>, ["1.0.0.beta3"])
|
39
|
+
s.add_development_dependency(%q<rake>, ["<= 10.1.1"]) # Anything higher requires Ruby 1.9, drop in v3.0
|
39
40
|
s.add_development_dependency(%q<activemodel>)
|
40
41
|
end
|
data/gemfiles/rails_3.0.gemfile
CHANGED
data/gemfiles/rails_3.1.gemfile
CHANGED
data/gemfiles/rails_3.2.gemfile
CHANGED
data/gemfiles/rails_4.gemfile
CHANGED
@@ -82,7 +82,15 @@ module Formtastic
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def initialize(object_name, object, template, options, block=nil)
|
85
|
-
|
85
|
+
# rails 3 supported passing in the block parameter to FormBuilder
|
86
|
+
# rails 4.0 deprecated the block parameter and does nothing with it
|
87
|
+
# rails 4.1 removes the parameter completely
|
88
|
+
if Util.rails3? || Util.rails4_0?
|
89
|
+
super
|
90
|
+
else # Must be rails4_1 or greater
|
91
|
+
super object_name, object, template, options
|
92
|
+
end
|
93
|
+
|
86
94
|
if respond_to?('multipart=') && options.is_a?(Hash) && options[:html]
|
87
95
|
self.multipart = options[:html][:multipart]
|
88
96
|
end
|
@@ -58,11 +58,16 @@ module Formtastic
|
|
58
58
|
@@default_form_class = 'formtastic'
|
59
59
|
mattr_accessor :default_form_class
|
60
60
|
|
61
|
+
# Allows to set a custom proc to handle the class infered from the model's name. By default it
|
62
|
+
# will infer the name from the class name (eg. Post will be "post").
|
63
|
+
@@default_form_model_class_proc = proc { |model_class_name| model_class_name }
|
64
|
+
mattr_accessor :default_form_model_class_proc
|
65
|
+
|
61
66
|
# Allows to set a custom field_error_proc wrapper. By default this wrapper
|
62
67
|
# is disabled since `formtastic` already adds an error class to the LI tag
|
63
68
|
# containing the input. Change this from `config/initializers/formtastic.rb`.
|
64
|
-
@@
|
65
|
-
mattr_accessor :
|
69
|
+
@@formtastic_field_error_proc = proc { |html_tag, instance_tag| html_tag }
|
70
|
+
mattr_accessor :formtastic_field_error_proc
|
66
71
|
|
67
72
|
# Wrapper around Rails' own `form_for` helper to set the `:builder` option to
|
68
73
|
# `Formtastic::FormBuilder` and to set some class names on the `<form>` tag such as
|
@@ -156,11 +161,13 @@ module Formtastic
|
|
156
161
|
|
157
162
|
class_names = options[:html][:class] ? options[:html][:class].split(" ") : []
|
158
163
|
class_names << @@default_form_class
|
159
|
-
|
164
|
+
model_class_name = case record_or_name_or_array
|
160
165
|
when String, Symbol then record_or_name_or_array.to_s # :post => "post"
|
161
166
|
when Array then options[:as] || singularizer.call(record_or_name_or_array.last.class) # [@post, @comment] # => "comment"
|
162
167
|
else options[:as] || singularizer.call(record_or_name_or_array.class) # @post => "post"
|
163
168
|
end
|
169
|
+
class_names << @@default_form_model_class_proc.call(model_class_name)
|
170
|
+
|
164
171
|
options[:html][:class] = class_names.compact.join(" ")
|
165
172
|
|
166
173
|
with_custom_field_error_proc do
|
@@ -186,13 +193,11 @@ module Formtastic
|
|
186
193
|
|
187
194
|
def with_custom_field_error_proc(&block)
|
188
195
|
default_field_error_proc = ::ActionView::Base.field_error_proc
|
189
|
-
::ActionView::Base.field_error_proc = @@
|
196
|
+
::ActionView::Base.field_error_proc = @@formtastic_field_error_proc
|
190
197
|
yield
|
191
198
|
ensure
|
192
199
|
::ActionView::Base.field_error_proc = default_field_error_proc
|
193
200
|
end
|
194
|
-
|
195
|
-
|
196
201
|
end
|
197
202
|
end
|
198
203
|
end
|
@@ -182,6 +182,10 @@ module Formtastic
|
|
182
182
|
# <%= f.inputs %>
|
183
183
|
# <% end %>
|
184
184
|
#
|
185
|
+
# @example Quick form: Skip one or more fields
|
186
|
+
# <%= f.inputs, :except => [:featured, :something_for_admin_only] %>
|
187
|
+
# <%= f.inputs, :except => :featured %>
|
188
|
+
#
|
185
189
|
# @example Short hand: Render inputs for a named set of attributes and simple associations on the model, with all default arguments and options
|
186
190
|
# <% semantic_form_for @post do |form| %>
|
187
191
|
# <%= f.inputs, :title, :body, :user, :categories %>
|
@@ -284,6 +288,7 @@ module Formtastic
|
|
284
288
|
html_options = args.extract_options!
|
285
289
|
html_options[:class] ||= "inputs"
|
286
290
|
html_options[:name] = title
|
291
|
+
skipped_args = Array.wrap html_options.delete(:except)
|
287
292
|
|
288
293
|
out = begin
|
289
294
|
if html_options[:for] # Nested form
|
@@ -292,7 +297,7 @@ module Formtastic
|
|
292
297
|
field_set_and_list_wrapping(*(args << html_options), &block)
|
293
298
|
else
|
294
299
|
legend = args.shift if args.first.is_a?(::String)
|
295
|
-
args = default_columns_for_object if @object && args.empty?
|
300
|
+
args = default_columns_for_object - skipped_args if @object && args.empty?
|
296
301
|
contents = fieldset_contents_from_column_list(args)
|
297
302
|
args.unshift(legend) if legend.present?
|
298
303
|
field_set_and_list_wrapping(*((args << html_options) << contents))
|
@@ -124,7 +124,7 @@ module Formtastic
|
|
124
124
|
# Avoids an issue where `send_or_call` can be a String and duck can be something simple like
|
125
125
|
# `:first`, which obviously String responds to.
|
126
126
|
def send_or_call_or_object(duck, object)
|
127
|
-
return object if object.is_a?(String) || object.is_a?(Integer) # TODO what about other classes etc?
|
127
|
+
return object if object.is_a?(String) || object.is_a?(Integer) || object.is_a?(Symbol) # TODO what about other classes etc?
|
128
128
|
send_or_call(duck, object)
|
129
129
|
end
|
130
130
|
|
@@ -35,7 +35,7 @@ module Formtastic
|
|
35
35
|
return true unless validator.options.key?(:if) || validator.options.key?(:unless)
|
36
36
|
conditional = validator.options.key?(:if) ? validator.options[:if] : validator.options[:unless]
|
37
37
|
|
38
|
-
result = if conditional.respond_to?(:call)
|
38
|
+
result = if conditional.respond_to?(:call) && conditional.arity > 0
|
39
39
|
conditional.call(object)
|
40
40
|
elsif conditional.is_a?(::Symbol) && object.respond_to?(conditional)
|
41
41
|
object.send(conditional)
|
@@ -51,21 +51,11 @@ module Formtastic
|
|
51
51
|
)
|
52
52
|
end
|
53
53
|
|
54
|
-
# TODO: why are we merging `input_html_options` and then making some of the irrelevant ones `nil`?
|
55
|
-
# Seems like we should be selectively including from input_html_options (a whitelist) instead of
|
56
|
-
# excluding (blacklist).
|
57
54
|
def label_html_options
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
prev.merge(
|
63
|
-
:id => nil,
|
64
|
-
:name => nil,
|
65
|
-
:tabindex => nil,
|
66
|
-
:for => input_html_options[:id]
|
67
|
-
)
|
68
|
-
)
|
55
|
+
{
|
56
|
+
:for => input_html_options[:id],
|
57
|
+
:class => super[:class] - ['label'] # remove 'label' class
|
58
|
+
}
|
69
59
|
end
|
70
60
|
|
71
61
|
def label_text_with_embedded_checkbox
|
@@ -46,6 +46,9 @@ module Formtastic
|
|
46
46
|
# <%= f.input :categories, :as => :check_boxes, :collection => [["Ruby", 1], ["Rails", 2]] %>
|
47
47
|
# <%= f.input :categories, :as => :check_boxes, :collection => [["Ruby", 1, {'data-attr' => 'attr-value'}]] %>
|
48
48
|
# <%= f.input :categories, :as => :check_boxes, :collection => 1..5 %>
|
49
|
+
# <%= f.input :categories, :as => :check_boxes, :collection => [:ruby, :rails] %>
|
50
|
+
# <%= f.input :categories, :as => :check_boxes, :collection => [["Ruby", :ruby], ["Rails", :rails]] %>
|
51
|
+
# <%= f.input :categories, :as => :check_boxes, :collection => Set.new([:ruby, :rails]) %>
|
49
52
|
#
|
50
53
|
# @example `:hidden_fields` can be used to skip Rails' rendering of a hidden field before every checkbox
|
51
54
|
# <%= f.input :categories, :as => :check_boxes, :hidden_fields => false %>
|
@@ -182,7 +185,10 @@ module Formtastic
|
|
182
185
|
|
183
186
|
def make_selected_values
|
184
187
|
if object.respond_to?(method)
|
185
|
-
selected_items =
|
188
|
+
selected_items = object.send(method)
|
189
|
+
|
190
|
+
# Construct an array from the return value, regardless of the return type
|
191
|
+
selected_items = [*selected_items].compact.flatten
|
186
192
|
|
187
193
|
[*selected_items.map { |o| send_or_call_or_object(value_method, o) }].compact
|
188
194
|
else
|
@@ -83,6 +83,8 @@ module Formtastic
|
|
83
83
|
# <%= f.input :author, :as => :radio, :collection => [["Justin", "justin"], ["Kate", "kate"]] %>
|
84
84
|
# <%= f.input :author, :as => :radio, :collection => [["Justin", "1"], ["Kate", "3"]] %>
|
85
85
|
# <%= f.input :author, :as => :radio, :collection => [["Justin", 1], ["Kate", 3]] %>
|
86
|
+
# <%= f.input :author, :as => :radio, :collection => [["Justin", :justin], ["Kate", :kate]] %>
|
87
|
+
# <%= f.input :author, :as => :radio, :collection => [:justin, :kate] %>
|
86
88
|
# <%= f.input :author, :as => :radio, :collection => 1..5 %>
|
87
89
|
#
|
88
90
|
# @example The `:member_label` can be used to call a different method (or a Proc) on each object in the collection for rendering the label text (it'll try the methods like `to_s` in `collection_label_methods` config by default)
|
data/lib/formtastic/util.rb
CHANGED
@@ -24,9 +24,21 @@ module Formtastic
|
|
24
24
|
def rails3?
|
25
25
|
::Rails::VERSION::MAJOR == 3
|
26
26
|
end
|
27
|
+
|
28
|
+
def rails4?
|
29
|
+
::Rails::VERSION::MAJOR == 4
|
30
|
+
end
|
31
|
+
|
32
|
+
def rails4_0?
|
33
|
+
::Rails::VERSION::MAJOR == 4 && ::Rails::VERSION::MINOR == 0
|
34
|
+
end
|
35
|
+
|
36
|
+
def rails4_1?
|
37
|
+
::Rails::VERSION::MAJOR == 4 && ::Rails::VERSION::MINOR == 1
|
38
|
+
end
|
27
39
|
|
28
40
|
def deprecated_version_of_rails?
|
29
|
-
const_defined?(:Rails) && ::Rails::VERSION::MAJOR == 3 && ::Rails::VERSION::MINOR < 2
|
41
|
+
const_defined?(:Rails) && ::Rails::VERSION::MAJOR == 3 && ::Rails::VERSION::MINOR < 2 && ::Rails::VERSION::PATCH < 13
|
30
42
|
end
|
31
43
|
|
32
44
|
end
|