simple_form 3.5.0 → 3.5.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.

Potentially problematic release.


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

Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/README.md +38 -28
  4. data/lib/generators/simple_form/install_generator.rb +1 -0
  5. data/lib/generators/simple_form/templates/_form.html.erb +1 -0
  6. data/lib/generators/simple_form/templates/_form.html.haml +1 -0
  7. data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +1 -0
  8. data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +1 -0
  9. data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +2 -1
  10. data/lib/simple_form.rb +8 -6
  11. data/lib/simple_form/action_view_extensions/builder.rb +1 -0
  12. data/lib/simple_form/action_view_extensions/form_helper.rb +1 -0
  13. data/lib/simple_form/components.rb +1 -0
  14. data/lib/simple_form/components/errors.rb +2 -1
  15. data/lib/simple_form/components/hints.rb +1 -0
  16. data/lib/simple_form/components/html5.rb +1 -0
  17. data/lib/simple_form/components/label_input.rb +2 -1
  18. data/lib/simple_form/components/labels.rb +2 -1
  19. data/lib/simple_form/components/maxlength.rb +1 -0
  20. data/lib/simple_form/components/min_max.rb +1 -0
  21. data/lib/simple_form/components/minlength.rb +2 -1
  22. data/lib/simple_form/components/pattern.rb +1 -0
  23. data/lib/simple_form/components/placeholders.rb +1 -0
  24. data/lib/simple_form/components/readonly.rb +1 -0
  25. data/lib/simple_form/error_notification.rb +1 -0
  26. data/lib/simple_form/form_builder.rb +9 -3
  27. data/lib/simple_form/helpers.rb +1 -0
  28. data/lib/simple_form/helpers/autofocus.rb +1 -0
  29. data/lib/simple_form/helpers/disabled.rb +1 -0
  30. data/lib/simple_form/helpers/readonly.rb +1 -0
  31. data/lib/simple_form/helpers/required.rb +1 -0
  32. data/lib/simple_form/helpers/validators.rb +2 -1
  33. data/lib/simple_form/i18n_cache.rb +1 -0
  34. data/lib/simple_form/inputs.rb +1 -0
  35. data/lib/simple_form/inputs/base.rb +2 -1
  36. data/lib/simple_form/inputs/block_input.rb +1 -0
  37. data/lib/simple_form/inputs/boolean_input.rb +3 -2
  38. data/lib/simple_form/inputs/collection_check_boxes_input.rb +2 -1
  39. data/lib/simple_form/inputs/collection_input.rb +3 -2
  40. data/lib/simple_form/inputs/collection_radio_buttons_input.rb +2 -1
  41. data/lib/simple_form/inputs/collection_select_input.rb +1 -0
  42. data/lib/simple_form/inputs/date_time_input.rb +1 -0
  43. data/lib/simple_form/inputs/file_input.rb +1 -0
  44. data/lib/simple_form/inputs/grouped_collection_select_input.rb +1 -0
  45. data/lib/simple_form/inputs/hidden_input.rb +1 -0
  46. data/lib/simple_form/inputs/numeric_input.rb +1 -0
  47. data/lib/simple_form/inputs/password_input.rb +1 -0
  48. data/lib/simple_form/inputs/priority_input.rb +1 -0
  49. data/lib/simple_form/inputs/range_input.rb +1 -0
  50. data/lib/simple_form/inputs/string_input.rb +1 -0
  51. data/lib/simple_form/inputs/text_input.rb +1 -0
  52. data/lib/simple_form/map_type.rb +1 -0
  53. data/lib/simple_form/railtie.rb +1 -0
  54. data/lib/simple_form/tags.rb +1 -0
  55. data/lib/simple_form/version.rb +2 -1
  56. data/lib/simple_form/wrappers.rb +1 -0
  57. data/lib/simple_form/wrappers/builder.rb +1 -0
  58. data/lib/simple_form/wrappers/leaf.rb +2 -1
  59. data/lib/simple_form/wrappers/many.rb +1 -0
  60. data/lib/simple_form/wrappers/root.rb +1 -0
  61. data/lib/simple_form/wrappers/single.rb +2 -1
  62. data/test/action_view_extensions/builder_test.rb +6 -5
  63. data/test/action_view_extensions/form_helper_test.rb +3 -2
  64. data/test/components/label_test.rb +5 -4
  65. data/test/form_builder/association_test.rb +27 -2
  66. data/test/form_builder/button_test.rb +1 -0
  67. data/test/form_builder/error_notification_test.rb +1 -0
  68. data/test/form_builder/error_test.rb +6 -0
  69. data/test/form_builder/general_test.rb +10 -3
  70. data/test/form_builder/hint_test.rb +6 -0
  71. data/test/form_builder/input_field_test.rb +2 -1
  72. data/test/form_builder/label_test.rb +9 -3
  73. data/test/form_builder/wrapper_test.rb +3 -2
  74. data/test/generators/simple_form_generator_test.rb +4 -3
  75. data/test/inputs/boolean_input_test.rb +9 -0
  76. data/test/inputs/collection_check_boxes_input_test.rb +30 -14
  77. data/test/inputs/collection_radio_buttons_input_test.rb +40 -24
  78. data/test/inputs/collection_select_input_test.rb +40 -39
  79. data/test/inputs/datetime_input_test.rb +5 -4
  80. data/test/inputs/disabled_test.rb +1 -0
  81. data/test/inputs/discovery_test.rb +1 -0
  82. data/test/inputs/file_input_test.rb +1 -0
  83. data/test/inputs/general_test.rb +3 -2
  84. data/test/inputs/grouped_collection_select_input_test.rb +11 -10
  85. data/test/inputs/hidden_input_test.rb +1 -0
  86. data/test/inputs/numeric_input_test.rb +2 -1
  87. data/test/inputs/priority_input_test.rb +1 -0
  88. data/test/inputs/readonly_test.rb +1 -0
  89. data/test/inputs/required_test.rb +1 -0
  90. data/test/inputs/string_input_test.rb +2 -1
  91. data/test/inputs/text_input_test.rb +1 -0
  92. data/test/simple_form_test.rb +1 -0
  93. data/test/support/discovery_inputs.rb +1 -0
  94. data/test/support/misc_helpers.rb +2 -1
  95. data/test/support/mock_controller.rb +4 -0
  96. data/test/support/models.rb +36 -12
  97. data/test/test_helper.rb +2 -0
  98. metadata +3 -3
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'test_helper'
2
3
 
3
4
  class SimpleFormTest < ActiveSupport::TestCase
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class StringInput < SimpleForm::Inputs::StringInput
2
3
  def input(wrapper_options = nil)
3
4
  "<section>#{super}</section>".html_safe
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module MiscHelpers
2
3
  def store_translations(locale, translations, &block)
3
4
  I18n.backend.store_translations locale, translations
@@ -181,7 +182,7 @@ module MiscHelpers
181
182
  end
182
183
 
183
184
  def custom_wrapper_with_label_text
184
- SimpleForm.build :label_text => proc { |label, required| "**#{label}**" } do |b|
185
+ SimpleForm.build label_text: proc { |label, required| "**#{label}**" } do |b|
185
186
  b.use :label_input
186
187
  end
187
188
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class MockController
2
3
  attr_writer :action_name
3
4
 
@@ -20,7 +21,10 @@ class MockController
20
21
  def polymorphic_mappings(*); {}; end
21
22
 
22
23
  def hash_for_user_path(*); end
24
+
23
25
  def hash_for_validating_user_path(*); end
26
+
24
27
  def hash_for_other_validating_user_path(*); end
28
+
25
29
  def hash_for_users_path(*); end
26
30
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Association = Struct.new(:klass, :name, :macro, :scope, :options)
2
3
 
3
4
  Column = Struct.new(:name, :type, :limit) do
@@ -7,7 +8,7 @@ Relation = Struct.new(:records) do
7
8
  delegate :each, to: :records
8
9
 
9
10
  def where(conditions = nil)
10
- self.class.new conditions ? records.first : records
11
+ self.class.new conditions ? [records.first] : records
11
12
  end
12
13
 
13
14
  def order(conditions = nil)
@@ -18,6 +19,12 @@ Relation = Struct.new(:records) do
18
19
  alias_method :to_ary, :records
19
20
  end
20
21
 
22
+ Decorator = Struct.new(:object) do
23
+ def to_model
24
+ object
25
+ end
26
+ end
27
+
21
28
  Picture = Struct.new(:id, :name) do
22
29
  extend ActiveModel::Naming
23
30
  include ActiveModel::Conversion
@@ -56,6 +63,19 @@ Company = Struct.new(:id, :name) do
56
63
  end
57
64
  end
58
65
 
66
+ Friend = Struct.new(:id, :name) do
67
+ extend ActiveModel::Naming
68
+ include ActiveModel::Conversion
69
+
70
+ def self.all
71
+ (1..3).map { |i| new(i, "#{name} #{i}") }
72
+ end
73
+
74
+ def persisted?
75
+ true
76
+ end
77
+ end
78
+
59
79
  class Tag < Company; end
60
80
 
61
81
  TagGroup = Struct.new(:id, :name, :tags)
@@ -70,7 +90,7 @@ class User
70
90
  :avatar, :home_picture, :email, :status, :residence_country, :phone_number,
71
91
  :post_count, :lock_version, :amount, :attempts, :action, :credit_card, :gender,
72
92
  :extra_special_company_id, :pictures, :picture_ids, :special_pictures,
73
- :special_picture_ids, :uuid
93
+ :special_picture_ids, :uuid, :friends, :friend_ids, :special_tags, :special_tag_ids
74
94
 
75
95
  def self.build(extra_attributes = {})
76
96
  attributes = {
@@ -191,16 +211,20 @@ class User
191
211
  Association.new(Company, association, :belongs_to, nil, {})
192
212
  when :tags
193
213
  Association.new(Tag, association, :has_many, nil, {})
214
+ when :special_tags
215
+ Association.new(Tag, association, :has_many, ->(user) { where(id: user.id) }, {})
194
216
  when :first_company
195
217
  Association.new(Company, association, :has_one, nil, {})
196
218
  when :special_company
197
- Association.new(Company, association, :belongs_to, nil, { conditions: { id: 1 } })
219
+ Association.new(Company, association, :belongs_to, nil, conditions: { id: 1 })
198
220
  when :extra_special_company
199
- Association.new(Company, association, :belongs_to, nil, { conditions: proc { { id: self.id } } })
221
+ Association.new(Company, association, :belongs_to, nil, conditions: proc { { id: self.id } })
200
222
  when :pictures
201
223
  Association.new(Picture, association, :has_many, nil, {})
202
224
  when :special_pictures
203
225
  Association.new(Picture, association, :has_many, proc { where(name: self.name) }, {})
226
+ when :friends
227
+ Association.new(Friend, association, :has_many, nil, {})
204
228
  end
205
229
  end
206
230
 
@@ -226,8 +250,8 @@ class ValidatingUser < User
226
250
  include ActiveModel::Validations
227
251
  validates :name, presence: true
228
252
  validates :company, presence: true
229
- validates :age, presence: true, if: Proc.new { |user| user.name }
230
- validates :amount, presence: true, unless: Proc.new { |user| user.age }
253
+ validates :age, presence: true, if: proc { |user| user.name }
254
+ validates :amount, presence: true, unless: proc { |user| user.age }
231
255
 
232
256
  validates :action, presence: true, on: :create
233
257
  validates :credit_limit, presence: true, on: :save
@@ -248,7 +272,7 @@ class ValidatingUser < User
248
272
  validates_length_of :name, maximum: 25, minimum: 5
249
273
  validates_length_of :description, in: 15..50
250
274
  if ActionPack::VERSION::STRING < '5'
251
- validates_length_of :action, maximum: 10, tokenizer: lambda { |str| str.scan(/\w+/) }
275
+ validates_length_of :action, maximum: 10, tokenizer: ->(str) { str.scan(/\w+/) }
252
276
  end
253
277
  validates_length_of :home_picture, is: 12
254
278
 
@@ -276,16 +300,16 @@ class OtherValidatingUser < User
276
300
  less_than: 100,
277
301
  only_integer: true
278
302
  validates_numericality_of :amount,
279
- greater_than: Proc.new { |user| user.age },
280
- less_than: Proc.new { |user| user.age + 100 },
303
+ greater_than: proc { |user| user.age },
304
+ less_than: proc { |user| user.age + 100 },
281
305
  only_integer: true
282
306
  validates_numericality_of :attempts,
283
- greater_than_or_equal_to: Proc.new { |user| user.age },
284
- less_than_or_equal_to: Proc.new { |user| user.age + 100 },
307
+ greater_than_or_equal_to: proc { |user| user.age },
308
+ less_than_or_equal_to: proc { |user| user.age + 100 },
285
309
  only_integer: true
286
310
 
287
311
  validates_format_of :country, with: /\w+/
288
- validates_format_of :name, with: Proc.new { /\w+/ }
312
+ validates_format_of :name, with: proc { /\w+/ }
289
313
  validates_format_of :description, without: /\d+/
290
314
  end
291
315
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'bundler/setup'
2
3
 
3
4
  require 'minitest/autorun'
@@ -53,6 +54,7 @@ class ActionView::TestCase
53
54
 
54
55
  def setup_users(extra_attributes = {})
55
56
  @user = User.build(extra_attributes)
57
+ @decorated_user = Decorator.new(@user)
56
58
 
57
59
  @validating_user = ValidatingUser.build({
58
60
  name: 'Tester McTesterson',
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: 3.5.0
4
+ version: 3.5.1
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: 2017-05-17 00:00:00.000000000 Z
13
+ date: 2018-02-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
@@ -179,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
179
  version: '0'
180
180
  requirements: []
181
181
  rubyforge_project: simple_form
182
- rubygems_version: 2.6.10
182
+ rubygems_version: 2.6.11
183
183
  signing_key:
184
184
  specification_version: 4
185
185
  summary: Forms made easy!