simple_form 3.0.1 → 3.1.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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -27
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +204 -81
  5. data/lib/generators/simple_form/install_generator.rb +3 -3
  6. data/lib/generators/simple_form/templates/README +3 -4
  7. data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +28 -7
  8. data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +115 -24
  9. data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +86 -5
  10. data/lib/generators/simple_form/templates/config/locales/simple_form.en.yml +7 -2
  11. data/lib/simple_form/action_view_extensions/builder.rb +1 -0
  12. data/lib/simple_form/action_view_extensions/form_helper.rb +6 -2
  13. data/lib/simple_form/components/errors.rb +28 -2
  14. data/lib/simple_form/components/hints.rb +2 -2
  15. data/lib/simple_form/components/html5.rb +1 -1
  16. data/lib/simple_form/components/label_input.rb +20 -2
  17. data/lib/simple_form/components/labels.rb +10 -6
  18. data/lib/simple_form/components/maxlength.rb +1 -1
  19. data/lib/simple_form/components/min_max.rb +1 -1
  20. data/lib/simple_form/components/pattern.rb +1 -1
  21. data/lib/simple_form/components/placeholders.rb +2 -2
  22. data/lib/simple_form/components/readonly.rb +1 -1
  23. data/lib/simple_form/form_builder.rb +123 -73
  24. data/lib/simple_form/helpers.rb +5 -5
  25. data/lib/simple_form/inputs/base.rb +33 -11
  26. data/lib/simple_form/inputs/block_input.rb +1 -1
  27. data/lib/simple_form/inputs/boolean_input.rb +28 -15
  28. data/lib/simple_form/inputs/collection_input.rb +30 -9
  29. data/lib/simple_form/inputs/collection_radio_buttons_input.rb +6 -11
  30. data/lib/simple_form/inputs/collection_select_input.rb +4 -2
  31. data/lib/simple_form/inputs/date_time_input.rb +12 -2
  32. data/lib/simple_form/inputs/file_input.rb +4 -2
  33. data/lib/simple_form/inputs/grouped_collection_select_input.rb +15 -3
  34. data/lib/simple_form/inputs/hidden_input.rb +4 -2
  35. data/lib/simple_form/inputs/numeric_input.rb +5 -4
  36. data/lib/simple_form/inputs/password_input.rb +4 -2
  37. data/lib/simple_form/inputs/priority_input.rb +4 -2
  38. data/lib/simple_form/inputs/range_input.rb +1 -1
  39. data/lib/simple_form/inputs/string_input.rb +4 -2
  40. data/lib/simple_form/inputs/text_input.rb +4 -2
  41. data/lib/simple_form/railtie.rb +7 -0
  42. data/lib/simple_form/tags.rb +6 -0
  43. data/lib/simple_form/version.rb +1 -1
  44. data/lib/simple_form/wrappers/builder.rb +6 -6
  45. data/lib/simple_form/wrappers/leaf.rb +28 -0
  46. data/lib/simple_form/wrappers/many.rb +6 -6
  47. data/lib/simple_form/wrappers/root.rb +1 -1
  48. data/lib/simple_form/wrappers/single.rb +5 -3
  49. data/lib/simple_form/wrappers.rb +1 -0
  50. data/lib/simple_form.rb +59 -8
  51. data/test/action_view_extensions/builder_test.rb +36 -36
  52. data/test/action_view_extensions/form_helper_test.rb +33 -14
  53. data/test/components/label_test.rb +37 -37
  54. data/test/form_builder/association_test.rb +52 -35
  55. data/test/form_builder/button_test.rb +10 -10
  56. data/test/form_builder/error_notification_test.rb +1 -1
  57. data/test/form_builder/error_test.rb +144 -24
  58. data/test/form_builder/general_test.rb +89 -64
  59. data/test/form_builder/hint_test.rb +18 -18
  60. data/test/form_builder/input_field_test.rb +80 -16
  61. data/test/form_builder/label_test.rb +45 -13
  62. data/test/form_builder/wrapper_test.rb +135 -19
  63. data/test/generators/simple_form_generator_test.rb +4 -4
  64. data/test/inputs/boolean_input_test.rb +62 -6
  65. data/test/inputs/collection_check_boxes_input_test.rb +85 -17
  66. data/test/inputs/collection_radio_buttons_input_test.rb +134 -36
  67. data/test/inputs/collection_select_input_test.rb +146 -41
  68. data/test/inputs/datetime_input_test.rb +117 -50
  69. data/test/inputs/disabled_test.rb +15 -15
  70. data/test/inputs/discovery_test.rb +56 -6
  71. data/test/inputs/file_input_test.rb +2 -2
  72. data/test/inputs/general_test.rb +20 -20
  73. data/test/inputs/grouped_collection_select_input_test.rb +44 -8
  74. data/test/inputs/hidden_input_test.rb +4 -4
  75. data/test/inputs/numeric_input_test.rb +43 -43
  76. data/test/inputs/priority_input_test.rb +13 -13
  77. data/test/inputs/readonly_test.rb +19 -19
  78. data/test/inputs/required_test.rb +13 -13
  79. data/test/inputs/string_input_test.rb +50 -30
  80. data/test/inputs/text_input_test.rb +7 -7
  81. data/test/simple_form_test.rb +8 -0
  82. data/test/support/discovery_inputs.rb +32 -2
  83. data/test/support/misc_helpers.rb +77 -5
  84. data/test/support/models.rb +60 -24
  85. data/test/test_helper.rb +7 -1
  86. metadata +22 -33
@@ -1,12 +1,14 @@
1
1
  module SimpleForm
2
2
  module Inputs
3
3
  class CollectionSelectInput < CollectionInput
4
- def input
4
+ def input(wrapper_options = nil)
5
5
  label_method, value_method = detect_collection_methods
6
6
 
7
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
8
+
7
9
  @builder.collection_select(
8
10
  attribute_name, collection, value_method, label_method,
9
- input_options, input_html_options
11
+ input_options, merged_input_options
10
12
  )
11
13
  end
12
14
  end
@@ -1,8 +1,14 @@
1
1
  module SimpleForm
2
2
  module Inputs
3
3
  class DateTimeInput < Base
4
- def input
5
- @builder.send(:"#{input_type}_select", attribute_name, input_options, input_html_options)
4
+ def input(wrapper_options = nil)
5
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
6
+
7
+ if use_html5_inputs?
8
+ @builder.send(:"#{input_type}_field", attribute_name, merged_input_options)
9
+ else
10
+ @builder.send(:"#{input_type}_select", attribute_name, input_options, merged_input_options)
11
+ end
6
12
  end
7
13
 
8
14
  private
@@ -19,6 +25,10 @@ module SimpleForm
19
25
  position = ActionView::Helpers::DateTimeSelector::POSITION[position]
20
26
  "#{attribute_name}_#{position}i"
21
27
  end
28
+
29
+ def use_html5_inputs?
30
+ input_options[:html5]
31
+ end
22
32
  end
23
33
  end
24
34
  end
@@ -1,8 +1,10 @@
1
1
  module SimpleForm
2
2
  module Inputs
3
3
  class FileInput < Base
4
- def input
5
- @builder.file_field(attribute_name, input_html_options)
4
+ def input(wrapper_options = nil)
5
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
6
+
7
+ @builder.file_field(attribute_name, merged_input_options)
6
8
  end
7
9
  end
8
10
  end
@@ -1,11 +1,14 @@
1
1
  module SimpleForm
2
2
  module Inputs
3
3
  class GroupedCollectionSelectInput < CollectionInput
4
- def input
4
+ def input(wrapper_options = nil)
5
5
  label_method, value_method = detect_collection_methods
6
+
7
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
8
+
6
9
  @builder.grouped_collection_select(attribute_name, grouped_collection,
7
10
  group_method, group_label_method, value_method, label_method,
8
- input_options, input_html_options)
11
+ input_options, merged_input_options)
9
12
  end
10
13
 
11
14
  private
@@ -19,7 +22,7 @@ module SimpleForm
19
22
 
20
23
  # Sample collection
21
24
  def collection
22
- @collection ||= grouped_collection.first.try(:send, group_method) || []
25
+ @collection ||= grouped_collection.map { |collection| collection.try(:send, group_method) }.detect(&:present?) || []
23
26
  end
24
27
 
25
28
  def group_method
@@ -36,6 +39,15 @@ module SimpleForm
36
39
 
37
40
  label
38
41
  end
42
+
43
+ def detect_method_from_class(collection_classes)
44
+ return {} if collection_classes.empty?
45
+
46
+ sample = collection_classes.first
47
+
48
+ { label: SimpleForm.collection_label_methods.find { |m| sample.instance_methods.include?(m) },
49
+ value: SimpleForm.collection_value_methods.find { |m| sample.instance_methods.include?(m) } }
50
+ end
39
51
  end
40
52
  end
41
53
  end
@@ -3,8 +3,10 @@ module SimpleForm
3
3
  class HiddenInput < Base
4
4
  disable :label, :errors, :hint, :required
5
5
 
6
- def input
7
- @builder.hidden_field(attribute_name, input_html_options)
6
+ def input(wrapper_options = nil)
7
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
8
+
9
+ @builder.hidden_field(attribute_name, merged_input_options)
8
10
  end
9
11
 
10
12
  private
@@ -3,16 +3,17 @@ module SimpleForm
3
3
  class NumericInput < Base
4
4
  enable :placeholder, :min_max
5
5
 
6
- def input
6
+ def input(wrapper_options = nil)
7
7
  input_html_classes.unshift("numeric")
8
8
  if html5?
9
9
  input_html_options[:type] ||= "number"
10
10
  input_html_options[:step] ||= integer? ? 1 : "any"
11
11
  end
12
- @builder.text_field(attribute_name, input_html_options)
13
- end
14
12
 
15
- private
13
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
14
+
15
+ @builder.text_field(attribute_name, merged_input_options)
16
+ end
16
17
  end
17
18
  end
18
19
  end
@@ -3,8 +3,10 @@ module SimpleForm
3
3
  class PasswordInput < Base
4
4
  enable :placeholder, :maxlength
5
5
 
6
- def input
7
- @builder.password_field(attribute_name, input_html_options)
6
+ def input(wrapper_options = nil)
7
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
8
+
9
+ @builder.password_field(attribute_name, merged_input_options)
8
10
  end
9
11
  end
10
12
  end
@@ -1,9 +1,11 @@
1
1
  module SimpleForm
2
2
  module Inputs
3
3
  class PriorityInput < CollectionSelectInput
4
- def input
4
+ def input(wrapper_options = nil)
5
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
6
+
5
7
  @builder.send(:"#{input_type}_select", attribute_name, input_priority,
6
- input_options, input_html_options)
8
+ input_options, merged_input_options)
7
9
  end
8
10
 
9
11
  def input_priority
@@ -1,7 +1,7 @@
1
1
  module SimpleForm
2
2
  module Inputs
3
3
  class RangeInput < NumericInput
4
- def input
4
+ def input(wrapper_options = nil)
5
5
  if html5?
6
6
  input_html_options[:type] ||= "range"
7
7
  input_html_options[:step] ||= 1
@@ -3,13 +3,15 @@ module SimpleForm
3
3
  class StringInput < Base
4
4
  enable :placeholder, :maxlength, :pattern
5
5
 
6
- def input
6
+ def input(wrapper_options = nil)
7
7
  unless string?
8
8
  input_html_classes.unshift("string")
9
9
  input_html_options[:type] ||= input_type if html5?
10
10
  end
11
11
 
12
- @builder.text_field(attribute_name, input_html_options)
12
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
13
+
14
+ @builder.text_field(attribute_name, merged_input_options)
13
15
  end
14
16
 
15
17
  private
@@ -3,8 +3,10 @@ module SimpleForm
3
3
  class TextInput < Base
4
4
  enable :placeholder, :maxlength
5
5
 
6
- def input
7
- @builder.text_area(attribute_name, input_html_options)
6
+ def input(wrapper_options = nil)
7
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
8
+
9
+ @builder.text_area(attribute_name, merged_input_options)
8
10
  end
9
11
  end
10
12
  end
@@ -3,5 +3,12 @@ require 'rails/railtie'
3
3
  module SimpleForm
4
4
  class Railtie < Rails::Railtie
5
5
  config.eager_load_namespaces << SimpleForm
6
+
7
+ config.after_initialize do
8
+ unless SimpleForm.configured?
9
+ warn '[Simple Form] Simple Form is not configured in the application and will use the default values.' +
10
+ ' Use `rails generate simple_form:install` to generate the Simple Form configuration.'
11
+ end
12
+ end
6
13
  end
7
14
  end
@@ -15,6 +15,12 @@ module SimpleForm
15
15
 
16
16
  rendered_item = yield item, value, text, default_html_options.merge(additional_html_options)
17
17
 
18
+ if @options.fetch(:boolean_style, SimpleForm.boolean_style) == :nested
19
+ label_options = default_html_options.slice(:index, :namespace)
20
+ label_options['class'] = @options[:item_label_class]
21
+ rendered_item = @template_object.label(@object_name, sanitize_attribute_name(value), rendered_item, label_options)
22
+ end
23
+
18
24
  item_wrapper_tag ? @template_object.content_tag(item_wrapper_tag, rendered_item, class: item_wrapper_class) : rendered_item
19
25
  end.join.html_safe
20
26
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleForm
2
- VERSION = "3.0.1".freeze
2
+ VERSION = "3.1.0".freeze
3
3
  end
@@ -45,20 +45,20 @@ module SimpleForm
45
45
  @components = []
46
46
  end
47
47
 
48
- def use(name, options=nil, &block)
48
+ def use(name, options = {})
49
49
  if options && wrapper = options[:wrap_with]
50
- @components << Single.new(name, wrapper)
50
+ @components << Single.new(name, wrapper, options.except(:wrap_with))
51
51
  else
52
- @components << name
52
+ @components << Leaf.new(name, options)
53
53
  end
54
54
  end
55
55
 
56
- def optional(name, options=nil, &block)
56
+ def optional(name, options = {}, &block)
57
57
  @options[name] = false
58
- use(name, options, &block)
58
+ use(name, options)
59
59
  end
60
60
 
61
- def wrapper(name, options=nil)
61
+ def wrapper(name, options = nil)
62
62
  if block_given?
63
63
  name, options = nil, name if name.is_a?(Hash)
64
64
  builder = self.class.new(@options)
@@ -0,0 +1,28 @@
1
+ module SimpleForm
2
+ module Wrappers
3
+ class Leaf
4
+ attr_reader :namespace
5
+
6
+ def initialize(namespace, options = {})
7
+ @namespace = namespace
8
+ @options = options
9
+ end
10
+
11
+ def render(input)
12
+ method = input.method(@namespace)
13
+
14
+ if method.arity == 0
15
+ ActiveSupport::Deprecation.warn(SimpleForm::CUSTOM_INPUT_DEPRECATION_WARN % { name: @namespace })
16
+
17
+ method.call
18
+ else
19
+ method.call(@options)
20
+ end
21
+ end
22
+
23
+ def find(name)
24
+ self if @namespace == name
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,7 +1,7 @@
1
1
  module SimpleForm
2
2
  module Wrappers
3
3
  # A wrapper is an object that holds several components and render them.
4
- # A component may either be a symbol or any object that responds to `render`.
4
+ # A component may be any object that responds to `render`.
5
5
  # This API allows inputs/components to be easily wrapped, removing the
6
6
  # need to modify the code only to wrap input in an extra tag.
7
7
  #
@@ -10,9 +10,8 @@ module SimpleForm
10
10
  # on demand on input generation.
11
11
  class Many
12
12
  attr_reader :namespace, :defaults, :components
13
- alias :to_sym :namespace
14
13
 
15
- def initialize(namespace, components, defaults={})
14
+ def initialize(namespace, components, defaults = {})
16
15
  @namespace = namespace
17
16
  @components = components
18
17
  @defaults = defaults
@@ -25,8 +24,8 @@ module SimpleForm
25
24
  options = input.options
26
25
 
27
26
  components.each do |component|
28
- next if options[component] == false
29
- rendered = component.respond_to?(:render) ? component.render(input) : input.send(component)
27
+ next if options[component.namespace] == false
28
+ rendered = component.render(input)
30
29
  content.safe_concat rendered.to_s if rendered
31
30
  end
32
31
 
@@ -51,6 +50,7 @@ module SimpleForm
51
50
 
52
51
  def wrap(input, options, content)
53
52
  return content if options[namespace] == false
53
+ return if defaults[:unless_blank] && content.empty?
54
54
 
55
55
  tag = (namespace && options[:"#{namespace}_tag"]) || @defaults[:tag]
56
56
  return content unless tag
@@ -62,7 +62,7 @@ module SimpleForm
62
62
  end
63
63
 
64
64
  def html_options(options)
65
- options[:"#{namespace}_html"] || {}
65
+ (@defaults[:html] || {}).merge(options[:"#{namespace}_html"] || {})
66
66
  end
67
67
 
68
68
  def html_classes(input, options)
@@ -17,7 +17,7 @@ module SimpleForm
17
17
 
18
18
  # Provide a fallback if name cannot be found.
19
19
  def find(name)
20
- super || SimpleForm::Wrappers::Many.new(name, [name])
20
+ super || SimpleForm::Wrappers::Many.new(name, [Leaf.new(name)])
21
21
  end
22
22
 
23
23
  private
@@ -2,14 +2,16 @@ module SimpleForm
2
2
  module Wrappers
3
3
  # `Single` is an optimization for a wrapper that has only one component.
4
4
  class Single < Many
5
- def initialize(name, options={})
6
- super(name, [name], options)
5
+ def initialize(name, wrapper_options = {}, options = {})
6
+ @component = Leaf.new(name, options)
7
+
8
+ super(name, [@component], wrapper_options)
7
9
  end
8
10
 
9
11
  def render(input)
10
12
  options = input.options
11
13
  if options[namespace] != false
12
- content = input.send(namespace)
14
+ content = @component.render(input)
13
15
  wrap(input, options, content) if content
14
16
  end
15
17
  end
@@ -4,5 +4,6 @@ module SimpleForm
4
4
  autoload :Many, 'simple_form/wrappers/many'
5
5
  autoload :Root, 'simple_form/wrappers/root'
6
6
  autoload :Single, 'simple_form/wrappers/single'
7
+ autoload :Leaf, 'simple_form/wrappers/leaf'
7
8
  end
8
9
  end
data/lib/simple_form.rb CHANGED
@@ -24,6 +24,24 @@ module SimpleForm
24
24
  SimpleForm::Components.eager_load!
25
25
  end
26
26
 
27
+ CUSTOM_INPUT_DEPRECATION_WARN = <<-WARN
28
+ %{name} method now accepts a `wrapper_options` argument. The method definition without the argument is deprecated and will be removed in the next Simple Form version. Change your code from:
29
+
30
+ def %{name}
31
+
32
+ to
33
+
34
+ def %{name}(wrapper_options)
35
+
36
+ See https://github.com/plataformatec/simple_form/pull/997 for more information.
37
+ WARN
38
+
39
+ @@configured = false
40
+
41
+ def self.configured? #:nodoc:
42
+ @@configured
43
+ end
44
+
27
45
  ## CONFIGURATION OPTIONS
28
46
 
29
47
  # Method used to tidy up errors.
@@ -66,7 +84,7 @@ module SimpleForm
66
84
 
67
85
  # How the label text should be generated altogether with the required text.
68
86
  mattr_accessor :label_text
69
- @@label_text = lambda { |label, required| "#{required} #{label}" }
87
+ @@label_text = lambda { |label, required, explicit_label| "#{required} #{label}" }
70
88
 
71
89
  # You can define the class to be used on all labels. Defaults to none.
72
90
  mattr_accessor :label_class
@@ -78,10 +96,16 @@ module SimpleForm
78
96
  mattr_accessor :boolean_style
79
97
  @@boolean_style = :inline
80
98
 
81
- # You can define the class to be used on all forms. Default is simple_form.
82
- mattr_accessor :form_class
99
+ # DEPRECATED: You can define the class to be used on all forms. Default is
100
+ # simple_form.
101
+ mattr_reader :form_class
83
102
  @@form_class = :simple_form
84
103
 
104
+ # You can define the default class to be used on all forms. Can be overriden
105
+ # with `html: { :class }`. Defaults to none.
106
+ mattr_accessor :default_form_class
107
+ @@default_form_class = nil
108
+
85
109
  # You can define which elements should obtain additional classes.
86
110
  mattr_accessor :generate_additional_classes_for
87
111
  @@generate_additional_classes_for = [:wrapper, :label, :input]
@@ -107,9 +131,19 @@ module SimpleForm
107
131
  # Custom wrappers for input types. This should be a hash containing an input
108
132
  # type as key and the wrapper that will be used for all inputs with specified type.
109
133
  # e.g { string: :string_wrapper, boolean: :boolean_wrapper }
134
+ # You can also set a wrapper mapping per form basis.
135
+ # e.g simple_form_for(@foo, wrapper_mappings: { check_boxes: :bootstrap_checkbox })
110
136
  mattr_accessor :wrapper_mappings
111
137
  @@wrapper_mappings = nil
112
138
 
139
+ # Namespaces where SimpleForm should look for custom input classes that override
140
+ # default inputs. Namespaces are given as string to allow lazy loading inputs.
141
+ # e.g. config.custom_inputs_namespaces << "CustomInputs"
142
+ # will try to find CustomInputs::NumericInput when an :integer
143
+ # field is called.
144
+ mattr_accessor :custom_inputs_namespaces
145
+ @@custom_inputs_namespaces = []
146
+
113
147
  # Default priority for time_zone inputs.
114
148
  mattr_accessor :time_zone_priority
115
149
  @@time_zone_priority = nil
@@ -151,15 +185,26 @@ module SimpleForm
151
185
  mattr_accessor :input_class
152
186
  @@input_class = nil
153
187
 
188
+ # Defines if an input wrapper class should be included or not
189
+ mattr_accessor :include_default_input_wrapper_class
190
+ @@include_default_input_wrapper_class = true
191
+
192
+ # Define the default class of the input wrapper of the boolean input.
193
+ mattr_accessor :boolean_label_class
194
+ @@boolean_label_class = 'checkbox'
195
+
154
196
  ## WRAPPER CONFIGURATION
155
197
  # The default wrapper to be used by the FormBuilder.
156
198
  mattr_accessor :default_wrapper
157
199
  @@default_wrapper = :default
158
- @@wrappers = {}
200
+ @@wrappers = {} #:nodoc:
201
+
202
+ mattr_accessor :i18n_scope
203
+ @@i18n_scope = 'simple_form'
159
204
 
160
205
  # Retrieves a given wrapper
161
206
  def self.wrapper(name)
162
- @@wrappers[name.to_sym] or raise WrapperNotFound, "Couldn't find wrapper with name #{name}"
207
+ @@wrappers[name.to_s] or raise WrapperNotFound, "Couldn't find wrapper with name #{name}"
163
208
  end
164
209
 
165
210
  # Raised when fails to find a given wrapper name
@@ -172,14 +217,14 @@ module SimpleForm
172
217
  if block_given?
173
218
  options = args.extract_options!
174
219
  name = args.first || :default
175
- @@wrappers[name.to_sym] = build(options, &block)
220
+ @@wrappers[name.to_s] = build(options, &block)
176
221
  else
177
222
  @@wrappers
178
223
  end
179
224
  end
180
225
 
181
226
  # Builds a new wrapper using SimpleForm::Wrappers::Builder.
182
- def self.build(options={})
227
+ def self.build(options = {})
183
228
  options[:tag] = :div if options[:tag].nil?
184
229
  builder = SimpleForm::Wrappers::Builder.new(options)
185
230
  yield builder
@@ -210,9 +255,15 @@ module SimpleForm
210
255
  ActiveSupport::Deprecation.warn "[SIMPLE_FORM] SimpleForm.default_input_size= is deprecated and has no effect", caller
211
256
  end
212
257
 
213
- # Default way to setup SimpleForm. Run rails generate simple_form:install
258
+ def self.form_class=(value)
259
+ ActiveSupport::Deprecation.warn "[SIMPLE_FORM] SimpleForm.form_class= is deprecated and will be removed in 4.x. Use SimpleForm.default_form_class= instead", caller
260
+ @@form_class = value
261
+ end
262
+
263
+ # Default way to setup Simple Form. Run rails generate simple_form:install
214
264
  # to create a fresh initializer with all configuration values.
215
265
  def self.setup
266
+ @@configured = true
216
267
  yield self
217
268
  end
218
269
  end