simple_form 1.4.2 → 1.5.0
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.
Potentially problematic release.
This version of simple_form might be problematic. Click here for more details.
- data/.gitignore +1 -0
- data/.travis.yml +9 -1
- data/CHANGELOG.rdoc +20 -0
- data/Gemfile +5 -4
- data/README.rdoc +2 -2
- data/Rakefile +1 -1
- data/lib/generators/simple_form/install_generator.rb +2 -6
- data/lib/generators/simple_form/templates/{simple_form.rb → config/initializers/simple_form.rb} +0 -0
- data/lib/generators/simple_form/templates/{en.yml → config/locales/simple_form.en.yml} +0 -0
- data/lib/simple_form.rb +1 -1
- data/lib/simple_form/action_view_extensions/builder.rb +12 -5
- data/lib/simple_form/action_view_extensions/form_helper.rb +13 -8
- data/lib/simple_form/components.rb +1 -1
- data/lib/simple_form/components/errors.rb +10 -2
- data/lib/simple_form/components/hints.rb +10 -0
- data/lib/simple_form/components/label_input.rb +5 -3
- data/lib/simple_form/components/labels.rb +10 -4
- data/lib/simple_form/components/placeholders.rb +10 -4
- data/lib/simple_form/error_notification.rb +1 -1
- data/lib/simple_form/form_builder.rb +10 -7
- data/lib/simple_form/helpers.rb +9 -0
- data/lib/simple_form/helpers/has_errors.rb +15 -0
- data/lib/simple_form/helpers/maxlength.rb +24 -0
- data/lib/simple_form/helpers/pattern.rb +28 -0
- data/lib/simple_form/helpers/required.rb +36 -0
- data/lib/simple_form/helpers/validators.rb +44 -0
- data/lib/simple_form/inputs.rb +5 -2
- data/lib/simple_form/inputs/base.rb +24 -47
- data/lib/simple_form/inputs/boolean_input.rb +1 -1
- data/lib/simple_form/inputs/collection_input.rb +1 -1
- data/lib/simple_form/inputs/date_time_input.rb +1 -1
- data/lib/simple_form/inputs/file_input.rb +9 -0
- data/lib/simple_form/inputs/hidden_input.rb +1 -1
- data/lib/simple_form/inputs/numeric_input.rb +20 -13
- data/lib/simple_form/inputs/password_input.rb +13 -0
- data/lib/simple_form/inputs/range_input.rb +16 -0
- data/lib/simple_form/inputs/string_input.rb +7 -24
- data/lib/simple_form/inputs/text_input.rb +12 -0
- data/lib/simple_form/version.rb +1 -1
- data/test/action_view_extensions/builder_test.rb +59 -0
- data/test/action_view_extensions/form_helper_test.rb +21 -0
- data/test/discovery_inputs.rb +2 -2
- data/test/form_builder_test.rb +54 -0
- data/test/inputs_test.rb +185 -20
- data/test/support/models.rb +23 -2
- data/test/test_helper.rb +1 -0
- metadata +17 -11
- data/Gemfile.lock +0 -54
- data/init.rb +0 -1
- data/lib/simple_form/has_errors.rb +0 -14
- data/lib/simple_form/inputs/mapping_input.rb +0 -29
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -2,6 +2,14 @@ script: "git submodule update --init && bundle exec rake test"
|
|
2
2
|
rvm:
|
3
3
|
- 1.8.7
|
4
4
|
- 1.9.2
|
5
|
+
- 1.9.3
|
6
|
+
- ruby-head
|
5
7
|
- ree
|
6
8
|
- jruby
|
7
|
-
-
|
9
|
+
- rbx
|
10
|
+
- rbx-2.0
|
11
|
+
notifications:
|
12
|
+
recipients:
|
13
|
+
- jose.valim@plataformatec.com.br
|
14
|
+
- carlos@plataformatec.com.br
|
15
|
+
- rafael.franca@plataformatec.com.br
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
== 1.5.0
|
2
|
+
|
3
|
+
* enhancements
|
4
|
+
* Simplified generator by using directory action (by github.com/rupert654)
|
5
|
+
* Support for `maxlength` on string inputs inferred from validation (by github.com/srbartlett)
|
6
|
+
* Change form css class handling to only add the dom class when one is not given to the form call (by github.com/patrick99e99)
|
7
|
+
* Support for required attributes when action validations are present (by github.com/csegura)
|
8
|
+
* Don't generate `size` attribute for numeric input (by github.com/jasonmp85)
|
9
|
+
* Support for `maxlength` on text area inputs inferred from validation
|
10
|
+
* Support for `pattern` on text field inferred from validation when :pattern is true
|
11
|
+
* Break Text, Password and File into their own inputs
|
12
|
+
* Support easy enabling and disabling of components for specific inputs
|
13
|
+
* Add HTML5 range input
|
14
|
+
|
15
|
+
* bug fix
|
16
|
+
* Fix bug when simple_fields_for is used with a hash like models and Rails 3.1
|
17
|
+
* Fix bug that doesn't remove the item_wrapper_tag or the collection_wrapper_tag on collection inputs when nil or false value is passed to these options (by gitbub.com/dw2)
|
18
|
+
* Fix bug that disable the entire select and wrapper when `disabled` option is a string or array
|
19
|
+
* Fix bug when using label/value methods as procs together with disabled/selected options as procs for select inputs
|
20
|
+
|
1
21
|
== 1.4.2
|
2
22
|
|
3
23
|
* enhancements
|
data/Gemfile
CHANGED
@@ -2,7 +2,8 @@ source "http://rubygems.org"
|
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
gem "rake", '0.9.3.beta1'
|
6
|
+
gem "rdoc"
|
7
|
+
gem "mocha"
|
8
|
+
gem "tzinfo"
|
9
|
+
gem "ruby-debug", :platform => :mri_18
|
data/README.rdoc
CHANGED
@@ -158,7 +158,7 @@ Collection inputs accepts two other options beside collections:
|
|
158
158
|
|
159
159
|
* value_method => the value method to be applied to the collection to retrieve the value
|
160
160
|
|
161
|
-
Those methods are useful to manipulate the given collection. Both of these options also
|
161
|
+
Those methods are useful to manipulate the given collection. Both of these options also accept lambda/procs in case you want to calculate the value or label in a special way eg. custom translation. All other options given are sent straight to the underlying helper. For example, you can give prompt as:
|
162
162
|
|
163
163
|
f.input :age, :collection => 18..60, :prompt => "Select your age"
|
164
164
|
|
@@ -311,6 +311,7 @@ SimpleForm comes with a lot of default mappings:
|
|
311
311
|
integer number field integer
|
312
312
|
float number field float
|
313
313
|
decimal number field decimal
|
314
|
+
range range field -
|
314
315
|
datetime datetime select datetime/timestamp
|
315
316
|
date date select date
|
316
317
|
time time select time
|
@@ -456,7 +457,6 @@ SimpleForm has several configuration values. You can read and change them in the
|
|
456
457
|
|
457
458
|
== Maintainers
|
458
459
|
|
459
|
-
* José Valim (https://github.com/josevalim)
|
460
460
|
* Carlos Antonio da Silva (https://github.com/carlosantoniodasilva)
|
461
461
|
* Rafael Mendonça França (https://github.com/rafaelfranca)
|
462
462
|
|
data/Rakefile
CHANGED
@@ -5,12 +5,8 @@ module SimpleForm
|
|
5
5
|
source_root File.expand_path('../templates', __FILE__)
|
6
6
|
class_option :template_engine
|
7
7
|
|
8
|
-
def
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
def copy_locale_file
|
13
|
-
copy_file 'en.yml', 'config/locales/simple_form.en.yml'
|
8
|
+
def copy_config
|
9
|
+
directory 'config'
|
14
10
|
end
|
15
11
|
|
16
12
|
def copy_scaffold_template
|
data/lib/generators/simple_form/templates/{simple_form.rb → config/initializers/simple_form.rb}
RENAMED
File without changes
|
File without changes
|
data/lib/simple_form.rb
CHANGED
@@ -6,7 +6,7 @@ module SimpleForm
|
|
6
6
|
autoload :Components, 'simple_form/components'
|
7
7
|
autoload :ErrorNotification, 'simple_form/error_notification'
|
8
8
|
autoload :FormBuilder, 'simple_form/form_builder'
|
9
|
-
autoload :
|
9
|
+
autoload :Helpers, 'simple_form/helpers'
|
10
10
|
autoload :I18nCache, 'simple_form/i18n_cache'
|
11
11
|
autoload :Inputs, 'simple_form/inputs'
|
12
12
|
autoload :MapType, 'simple_form/map_type'
|
@@ -114,10 +114,10 @@ module SimpleForm
|
|
114
114
|
def default_html_options_for_collection(item, value, options, html_options) #:nodoc:
|
115
115
|
html_options = html_options.dup
|
116
116
|
|
117
|
-
[:checked, :disabled].each do |option|
|
117
|
+
[:checked, :selected, :disabled].each do |option|
|
118
118
|
next unless options[option]
|
119
119
|
|
120
|
-
accept = if options[option].
|
120
|
+
accept = if options[option].respond_to?(:call)
|
121
121
|
options[option].call(item)
|
122
122
|
else
|
123
123
|
Array(options[option]).include?(value)
|
@@ -134,8 +134,8 @@ module SimpleForm
|
|
134
134
|
end
|
135
135
|
|
136
136
|
def render_collection(attribute, collection, value_method, text_method, options={}, html_options={}) #:nodoc:
|
137
|
-
collection_wrapper_tag = options[:collection_wrapper_tag]
|
138
|
-
item_wrapper_tag
|
137
|
+
collection_wrapper_tag = options.has_key?(:collection_wrapper_tag) ? options[:collection_wrapper_tag] : SimpleForm.collection_wrapper_tag
|
138
|
+
item_wrapper_tag = options.has_key?(:item_wrapper_tag) ? options[:item_wrapper_tag] : SimpleForm.item_wrapper_tag
|
139
139
|
|
140
140
|
rendered_collection = collection.map do |item|
|
141
141
|
value = value_for_collection(item, value_method)
|
@@ -171,8 +171,15 @@ class ActionView::Helpers::FormBuilder
|
|
171
171
|
collection = collection.map do |item|
|
172
172
|
value = value_for_collection(item, value_method)
|
173
173
|
text = value_for_collection(item, text_method)
|
174
|
-
|
174
|
+
|
175
|
+
default_html_options = default_html_options_for_collection(item, value, options, html_options)
|
176
|
+
disabled = value if default_html_options[:disabled]
|
177
|
+
selected = value if default_html_options[:selected]
|
178
|
+
|
179
|
+
[value, text, selected, disabled]
|
175
180
|
end
|
181
|
+
options[:disabled] = collection.map(&:pop).compact
|
182
|
+
options[:selected] = collection.map(&:pop).compact
|
176
183
|
value_method, text_method = :first, :last
|
177
184
|
end
|
178
185
|
|
@@ -31,24 +31,29 @@ module SimpleForm
|
|
31
31
|
|
32
32
|
def simple_form_for(record, options={}, &block)
|
33
33
|
options[:builder] ||= SimpleForm::FormBuilder
|
34
|
-
css_class = case record
|
35
|
-
when String, Symbol then record.to_s
|
36
|
-
when Array then dom_class(record.last)
|
37
|
-
else dom_class(record)
|
38
|
-
end
|
39
34
|
options[:html] ||= {}
|
40
35
|
unless options[:html].key?(:novalidate)
|
41
36
|
options[:html][:novalidate] = !SimpleForm.browser_validations
|
42
37
|
end
|
43
|
-
options[:html][:class] =
|
44
|
-
|
38
|
+
options[:html][:class] = [SimpleForm.form_class, css_class(record, options[:html])].compact.join(" ")
|
45
39
|
with_custom_field_error_proc do
|
46
40
|
form_for(record, options, &block)
|
47
41
|
end
|
48
42
|
end
|
49
43
|
|
44
|
+
def css_class(record, html_options)
|
45
|
+
if html_options.key?(:class)
|
46
|
+
html_options[:class]
|
47
|
+
elsif record.is_a?(String) || record.is_a?(Symbol)
|
48
|
+
record
|
49
|
+
else
|
50
|
+
record = record.last if record.is_a?(Array)
|
51
|
+
dom_class(record)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
50
55
|
def simple_fields_for(record_name, record_object = nil, options = {}, &block)
|
51
|
-
options, record_object = record_object, nil if record_object.is_a?(Hash)
|
56
|
+
options, record_object = record_object, nil if record_object.is_a?(Hash) && record_object.extractable_options?
|
52
57
|
options[:builder] ||= SimpleForm::FormBuilder
|
53
58
|
|
54
59
|
with_custom_field_error_proc do
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module SimpleForm
|
2
2
|
module Components
|
3
3
|
module Errors
|
4
|
-
include SimpleForm::HasErrors
|
4
|
+
include SimpleForm::Helpers::HasErrors
|
5
5
|
|
6
6
|
def error
|
7
|
-
|
7
|
+
enabled_error
|
8
8
|
end
|
9
9
|
|
10
10
|
def error_tag
|
@@ -29,6 +29,14 @@ module SimpleForm
|
|
29
29
|
|
30
30
|
protected
|
31
31
|
|
32
|
+
def enabled_error
|
33
|
+
template.content_tag(error_tag, error_text, error_html_options) if has_errors?
|
34
|
+
end
|
35
|
+
|
36
|
+
def disabled_error
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
|
32
40
|
def errors
|
33
41
|
@errors ||= (errors_on_attribute + errors_on_association).compact
|
34
42
|
end
|
@@ -2,9 +2,19 @@ module SimpleForm
|
|
2
2
|
module Components
|
3
3
|
module Hints
|
4
4
|
def hint
|
5
|
+
enabled_hint
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def enabled_hint
|
5
11
|
template.content_tag(hint_tag, hint_text, hint_html_options) unless hint_text.blank?
|
6
12
|
end
|
7
13
|
|
14
|
+
def disabled_hint
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
|
8
18
|
def hint_tag
|
9
19
|
options[:hint_tag] || SimpleForm.hint_tag
|
10
20
|
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
module SimpleForm
|
2
2
|
module Components
|
3
3
|
module LabelInput
|
4
|
-
|
5
|
-
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
include SimpleForm::Components::Labels
|
6
8
|
end
|
7
9
|
|
8
10
|
def label_input
|
@@ -10,4 +12,4 @@ module SimpleForm
|
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
13
|
-
end
|
15
|
+
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
module SimpleForm
|
2
2
|
module Components
|
3
3
|
module Labels
|
4
|
-
|
5
|
-
base.extend ClassMethods
|
6
|
-
end
|
4
|
+
extend ActiveSupport::Concern
|
7
5
|
|
8
6
|
module ClassMethods #:nodoc:
|
9
7
|
def translate_required_html
|
@@ -24,7 +22,7 @@ module SimpleForm
|
|
24
22
|
end
|
25
23
|
|
26
24
|
def label
|
27
|
-
|
25
|
+
enabled_label
|
28
26
|
end
|
29
27
|
|
30
28
|
def label_text
|
@@ -43,6 +41,14 @@ module SimpleForm
|
|
43
41
|
|
44
42
|
protected
|
45
43
|
|
44
|
+
def enabled_label
|
45
|
+
@builder.label(label_target, label_text, label_html_options)
|
46
|
+
end
|
47
|
+
|
48
|
+
def disabled_label
|
49
|
+
""
|
50
|
+
end
|
51
|
+
|
46
52
|
def raw_label_text #:nodoc:
|
47
53
|
options[:label] || label_translation
|
48
54
|
end
|
@@ -2,12 +2,18 @@ module SimpleForm
|
|
2
2
|
module Components
|
3
3
|
module Placeholders
|
4
4
|
def placeholder
|
5
|
-
|
5
|
+
disabled_placeholder
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def enabled_placeholder
|
11
|
+
input_html_options[:placeholder] ||= placeholder_text if placeholder_present?
|
6
12
|
nil
|
7
13
|
end
|
8
14
|
|
9
|
-
def
|
10
|
-
|
15
|
+
def disabled_placeholder
|
16
|
+
nil
|
11
17
|
end
|
12
18
|
|
13
19
|
def placeholder_present?
|
@@ -15,7 +21,7 @@ module SimpleForm
|
|
15
21
|
end
|
16
22
|
|
17
23
|
def placeholder_text
|
18
|
-
@
|
24
|
+
@placeholder_text ||= options[:placeholder] || translate(:placeholders)
|
19
25
|
end
|
20
26
|
end
|
21
27
|
end
|
@@ -5,13 +5,16 @@ module SimpleForm
|
|
5
5
|
extend MapType
|
6
6
|
include SimpleForm::Inputs
|
7
7
|
|
8
|
-
map_type :text,
|
9
|
-
map_type :
|
10
|
-
map_type :
|
11
|
-
map_type :
|
12
|
-
map_type :
|
13
|
-
map_type :
|
14
|
-
map_type :
|
8
|
+
map_type :text, :to => SimpleForm::Inputs::TextInput
|
9
|
+
map_type :file, :to => SimpleForm::Inputs::FileInput
|
10
|
+
map_type :string, :email, :search, :tel, :url, :to => SimpleForm::Inputs::StringInput
|
11
|
+
map_type :password, :to => SimpleForm::Inputs::PasswordInput
|
12
|
+
map_type :integer, :decimal, :float, :to => SimpleForm::Inputs::NumericInput
|
13
|
+
map_type :range, :to => SimpleForm::Inputs::RangeInput
|
14
|
+
map_type :select, :radio, :check_boxes, :to => SimpleForm::Inputs::CollectionInput
|
15
|
+
map_type :date, :time, :datetime, :to => SimpleForm::Inputs::DateTimeInput
|
16
|
+
map_type :country, :time_zone, :to => SimpleForm::Inputs::PriorityInput
|
17
|
+
map_type :boolean, :to => SimpleForm::Inputs::BooleanInput
|
15
18
|
|
16
19
|
def self.discovery_cache
|
17
20
|
@discovery_cache ||= {}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module SimpleForm
|
2
|
+
module Helpers
|
3
|
+
autoload :HasErrors, 'simple_form/helpers/has_errors'
|
4
|
+
autoload :Maxlength, 'simple_form/helpers/maxlength'
|
5
|
+
autoload :Pattern, 'simple_form/helpers/pattern'
|
6
|
+
autoload :Validators, 'simple_form/helpers/validators'
|
7
|
+
autoload :Required, 'simple_form/helpers/required'
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module SimpleForm
|
2
|
+
module Helpers
|
3
|
+
# Helper methods for maxlength.
|
4
|
+
module Maxlength #:nodoc:
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
def add_maxlength!
|
9
|
+
input_html_options[:maxlength] ||= maximum_length_from_validation || limit if SimpleForm.html5
|
10
|
+
end
|
11
|
+
|
12
|
+
def maximum_length_from_validation
|
13
|
+
return unless has_validators?
|
14
|
+
|
15
|
+
length_validator = find_length_validator or return
|
16
|
+
length_validator.options[:maximum]
|
17
|
+
end
|
18
|
+
|
19
|
+
def find_length_validator
|
20
|
+
find_validator(ActiveModel::Validations::LengthValidator)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module SimpleForm
|
2
|
+
module Helpers
|
3
|
+
# Helper methods for pattern.
|
4
|
+
module Pattern #:nodoc:
|
5
|
+
private
|
6
|
+
|
7
|
+
def add_pattern!
|
8
|
+
input_html_options[:pattern] ||= pattern_source if options[:pattern]
|
9
|
+
end
|
10
|
+
|
11
|
+
def pattern_source
|
12
|
+
if options[:pattern] == true
|
13
|
+
if has_validators? && pattern_validator
|
14
|
+
pattern_validator.options[:with].source
|
15
|
+
else
|
16
|
+
raise "Could not find format validator for #{attribute_name}"
|
17
|
+
end
|
18
|
+
else
|
19
|
+
options[:pattern]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def pattern_validator
|
24
|
+
@pattern_validator ||= find_validator(ActiveModel::Validations::FormatValidator)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|