simple_form 2.1.3 → 3.0.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.

Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -51
  3. data/README.md +195 -161
  4. data/lib/generators/simple_form/install_generator.rb +4 -4
  5. data/lib/generators/simple_form/templates/README +2 -2
  6. data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +16 -13
  7. data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +16 -16
  8. data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +3 -3
  9. data/lib/simple_form/action_view_extensions/builder.rb +1 -320
  10. data/lib/simple_form/action_view_extensions/builder.rb.orig +247 -0
  11. data/lib/simple_form/action_view_extensions/form_helper.rb +2 -9
  12. data/lib/simple_form/components/errors.rb +1 -7
  13. data/lib/simple_form/components/hints.rb +2 -7
  14. data/lib/simple_form/components/html5.rb +5 -2
  15. data/lib/simple_form/components/labels.rb +4 -4
  16. data/lib/simple_form/components/maxlength.rb +1 -8
  17. data/lib/simple_form/components/pattern.rb +2 -2
  18. data/lib/simple_form/components.rb +1 -1
  19. data/lib/simple_form/error_notification.rb +2 -2
  20. data/lib/simple_form/form_builder.rb +154 -50
  21. data/lib/simple_form/form_builder.rb.orig +486 -0
  22. data/lib/simple_form/helpers.rb +1 -1
  23. data/lib/simple_form/inputs/base.rb +7 -10
  24. data/lib/simple_form/inputs/block_input.rb +1 -1
  25. data/lib/simple_form/inputs/boolean_input.rb +6 -5
  26. data/lib/simple_form/inputs/collection_input.rb +7 -7
  27. data/lib/simple_form/inputs/date_time_input.rb +1 -1
  28. data/lib/simple_form/inputs/numeric_input.rb +0 -6
  29. data/lib/simple_form/inputs/password_input.rb +0 -1
  30. data/lib/simple_form/inputs/string_input.rb +0 -1
  31. data/lib/simple_form/railtie.rb +7 -0
  32. data/lib/simple_form/tags.rb +62 -0
  33. data/lib/simple_form/version.rb +1 -1
  34. data/lib/simple_form/version.rb.orig +7 -0
  35. data/lib/simple_form/wrappers/builder.rb +5 -29
  36. data/lib/simple_form/wrappers/many.rb +1 -1
  37. data/lib/simple_form/wrappers/root.rb +1 -1
  38. data/lib/simple_form/wrappers.rb +1 -1
  39. data/lib/simple_form.rb +43 -47
  40. data/test/action_view_extensions/builder_test.rb +78 -99
  41. data/test/action_view_extensions/form_helper_test.rb +25 -16
  42. data/test/components/label_test.rb +46 -46
  43. data/test/form_builder/association_test.rb +47 -29
  44. data/test/form_builder/button_test.rb +4 -4
  45. data/test/form_builder/error_notification_test.rb +8 -8
  46. data/test/form_builder/error_test.rb +18 -65
  47. data/test/form_builder/general_test.rb +62 -63
  48. data/test/form_builder/hint_test.rb +23 -29
  49. data/test/form_builder/input_field_test.rb +29 -12
  50. data/test/form_builder/label_test.rb +7 -17
  51. data/test/form_builder/wrapper_test.rb +21 -21
  52. data/test/inputs/boolean_input_test.rb +24 -24
  53. data/test/inputs/collection_check_boxes_input_test.rb +66 -55
  54. data/test/inputs/collection_radio_buttons_input_test.rb +81 -79
  55. data/test/inputs/collection_select_input_test.rb +76 -51
  56. data/test/inputs/datetime_input_test.rb +17 -11
  57. data/test/inputs/disabled_test.rb +10 -10
  58. data/test/inputs/discovery_test.rb +4 -4
  59. data/test/inputs/file_input_test.rb +1 -1
  60. data/test/inputs/general_test.rb +28 -12
  61. data/test/inputs/grouped_collection_select_input_test.rb +33 -20
  62. data/test/inputs/hidden_input_test.rb +3 -2
  63. data/test/inputs/numeric_input_test.rb +3 -3
  64. data/test/inputs/priority_input_test.rb +9 -3
  65. data/test/inputs/readonly_test.rb +12 -12
  66. data/test/inputs/required_test.rb +5 -5
  67. data/test/inputs/string_input_test.rb +15 -25
  68. data/test/inputs/text_input_test.rb +1 -1
  69. data/test/support/misc_helpers.rb +46 -24
  70. data/test/support/mock_controller.rb +6 -6
  71. data/test/support/models.rb +77 -62
  72. data/test/test_helper.rb +17 -34
  73. metadata +39 -22
  74. data/lib/simple_form/core_ext/hash.rb +0 -16
@@ -1,27 +1,38 @@
1
1
  Association = Struct.new(:klass, :name, :macro, :options)
2
2
 
3
- class Column < Struct.new(:name, :type, :limit)
3
+ Column = Struct.new(:name, :type, :limit) do
4
4
  # Returns +true+ if the column is either of type integer, float or decimal.
5
5
  def number?
6
6
  type == :integer || type == :float || type == :decimal
7
7
  end
8
8
  end
9
9
 
10
- class Company < Struct.new(:id, :name)
10
+ Relation = Struct.new(:all) do
11
+ def where(conditions = nil)
12
+ self.class.new conditions ? all.first : all
13
+ end
14
+
15
+ def order(conditions = nil)
16
+ self.class.new conditions ? all.last : all
17
+ end
18
+
19
+ alias_method :to_a, :all
20
+ end
21
+
22
+ Company = Struct.new(:id, :name) do
11
23
  extend ActiveModel::Naming
12
24
  include ActiveModel::Conversion
13
25
 
14
- def self.all(options={})
15
- all = (1..3).map{|i| Company.new(i, "Company #{i}")}
16
- return [all.first] if options[:conditions].present?
17
- return [all.last] if options[:order].present?
18
- return all[0..1] if options[:include].present?
19
- return all[1..2] if options[:joins].present?
20
- all
26
+ class << self
27
+ delegate :order, :where, to: :_relation
28
+ end
29
+
30
+ def self._relation
31
+ Relation.new(all)
21
32
  end
22
33
 
23
- def self.merge_conditions(a, b)
24
- (a || {}).merge(b || {})
34
+ def self.all
35
+ (1..3).map { |i| new(i, "#{name} #{i}") }
25
36
  end
26
37
 
27
38
  def persisted?
@@ -29,14 +40,9 @@ class Company < Struct.new(:id, :name)
29
40
  end
30
41
  end
31
42
 
32
- class Tag < Company
33
- def self.all(options={})
34
- (1..3).map{|i| Tag.new(i, "Tag #{i}")}
35
- end
36
- end
43
+ class Tag < Company; end
37
44
 
38
- class TagGroup < Struct.new(:id, :name, :tags)
39
- end
45
+ TagGroup = Struct.new(:id, :name, :tags)
40
46
 
41
47
  class User
42
48
  extend ActiveModel::Naming
@@ -46,7 +52,19 @@ class User
46
52
  :description, :created_at, :updated_at, :credit_limit, :password, :url,
47
53
  :delivery_time, :born_at, :special_company_id, :country, :tags, :tag_ids,
48
54
  :avatar, :home_picture, :email, :status, :residence_country, :phone_number,
49
- :post_count, :lock_version, :amount, :attempts, :action, :credit_card, :gender
55
+ :post_count, :lock_version, :amount, :attempts, :action, :credit_card, :gender,
56
+ :extra_special_company_id
57
+
58
+ def self.build(extra_attributes = {})
59
+ attributes = {
60
+ id: 1,
61
+ name: 'New in SimpleForm!',
62
+ description: 'Hello!',
63
+ created_at: Time.now
64
+ }.merge! extra_attributes
65
+
66
+ new attributes
67
+ end
50
68
 
51
69
  def initialize(options={})
52
70
  @new_record = false
@@ -112,7 +130,9 @@ class User
112
130
  when :first_company
113
131
  Association.new(Company, association, :has_one, {})
114
132
  when :special_company
115
- Association.new(Company, association, :belongs_to, { :conditions => { :id => 1 } })
133
+ Association.new(Company, association, :belongs_to, { conditions: { id: 1 } })
134
+ when :extra_special_company
135
+ Association.new(Company, association, :belongs_to, { conditions: proc { { id: 1 } } })
116
136
  end
117
137
  end
118
138
 
@@ -120,11 +140,11 @@ class User
120
140
  @errors ||= begin
121
141
  hash = Hash.new { |h,k| h[k] = [] }
122
142
  hash.merge!(
123
- :name => ["can't be blank"],
124
- :description => ["must be longer than 15 characters"],
125
- :age => ["is not a number", "must be greater than 18"],
126
- :company => ["company must be present"],
127
- :company_id => ["must be valid"]
143
+ name: ["can't be blank"],
144
+ description: ["must be longer than 15 characters"],
145
+ age: ["is not a number", "must be greater than 18"],
146
+ company: ["company must be present"],
147
+ company_id: ["must be valid"]
128
148
  )
129
149
  end
130
150
  end
@@ -136,31 +156,31 @@ end
136
156
 
137
157
  class ValidatingUser < User
138
158
  include ActiveModel::Validations
139
- validates :name, :presence => true
140
- validates :company, :presence => true
141
- validates :age, :presence => true, :if => Proc.new { |user| user.name }
142
- validates :amount, :presence => true, :unless => Proc.new { |user| user.age }
159
+ validates :name, presence: true
160
+ validates :company, presence: true
161
+ validates :age, presence: true, if: Proc.new { |user| user.name }
162
+ validates :amount, presence: true, unless: Proc.new { |user| user.age }
143
163
 
144
- validates :action, :presence => true, :on => :create
145
- validates :credit_limit, :presence => true, :on => :save
146
- validates :phone_number, :presence => true, :on => :update
164
+ validates :action, presence: true, on: :create
165
+ validates :credit_limit, presence: true, on: :save
166
+ validates :phone_number, presence: true, on: :update
147
167
 
148
168
  validates_numericality_of :age,
149
- :greater_than_or_equal_to => 18,
150
- :less_than_or_equal_to => 99,
151
- :only_integer => true
169
+ greater_than_or_equal_to: 18,
170
+ less_than_or_equal_to: 99,
171
+ only_integer: true
152
172
  validates_numericality_of :amount,
153
- :greater_than => :min_amount,
154
- :less_than => :max_amount,
155
- :only_integer => true
173
+ greater_than: :min_amount,
174
+ less_than: :max_amount,
175
+ only_integer: true
156
176
  validates_numericality_of :attempts,
157
- :greater_than_or_equal_to => :min_attempts,
158
- :less_than_or_equal_to => :max_attempts,
159
- :only_integer => true
160
- validates_length_of :name, :maximum => 25
161
- validates_length_of :description, :maximum => 50
162
- validates_length_of :action, :maximum => 10, :tokenizer => lambda { |str| str.scan(/\w+/) }
163
- validates_length_of :home_picture, :is => 12
177
+ greater_than_or_equal_to: :min_attempts,
178
+ less_than_or_equal_to: :max_attempts,
179
+ only_integer: true
180
+ validates_length_of :name, maximum: 25
181
+ validates_length_of :description, maximum: 50
182
+ validates_length_of :action, maximum: 10, tokenizer: lambda { |str| str.scan(/\w+/) }
183
+ validates_length_of :home_picture, is: 12
164
184
 
165
185
  def min_amount
166
186
  10
@@ -182,26 +202,21 @@ end
182
202
  class OtherValidatingUser < User
183
203
  include ActiveModel::Validations
184
204
  validates_numericality_of :age,
185
- :greater_than => 17,
186
- :less_than => 100,
187
- :only_integer => true
205
+ greater_than: 17,
206
+ less_than: 100,
207
+ only_integer: true
188
208
  validates_numericality_of :amount,
189
- :greater_than => Proc.new { |user| user.age },
190
- :less_than => Proc.new { |user| user.age + 100},
191
- :only_integer => true
209
+ greater_than: Proc.new { |user| user.age },
210
+ less_than: Proc.new { |user| user.age + 100 },
211
+ only_integer: true
192
212
  validates_numericality_of :attempts,
193
- :greater_than_or_equal_to => Proc.new { |user| user.age },
194
- :less_than_or_equal_to => Proc.new { |user| user.age + 100},
195
- :only_integer => true
213
+ greater_than_or_equal_to: Proc.new { |user| user.age },
214
+ less_than_or_equal_to: Proc.new { |user| user.age + 100 },
215
+ only_integer: true
196
216
 
197
- validates_format_of :country, :with => /\w+/
198
-
199
- # TODO: Remove this check when we drop Rails 3.0 support
200
- if ActiveModel::VERSION::MAJOR == 3 && ActiveModel::VERSION::MINOR >= 1
201
- validates_format_of :name, :with => Proc.new { /\w+/ }
202
- else
203
- validates_format_of :name, :with => /\w+/
204
- end
217
+ validates_format_of :country, with: /\w+/
218
+ validates_format_of :name, with: Proc.new { /\w+/ }
219
+ validates_format_of :description, without: /\d+/
205
220
  end
206
221
 
207
222
  class HashBackedAuthor < Hash
data/test/test_helper.rb CHANGED
@@ -1,16 +1,12 @@
1
- require 'rubygems'
2
1
  require 'bundler/setup'
3
2
 
4
- require 'test/unit'
5
- require 'mocha'
3
+ require 'minitest/autorun'
6
4
 
7
5
  require 'active_model'
8
6
  require 'action_controller'
9
7
  require 'action_view'
10
8
  require 'action_view/template'
11
9
 
12
- # Rails 3.0.4 is missing this "deprecation" require.
13
- require 'active_support/core_ext/module/deprecation'
14
10
  require 'action_view/test_case'
15
11
 
16
12
  module Rails
@@ -39,40 +35,27 @@ class ActionView::TestCase
39
35
  include SimpleForm::ActionViewExtensions::FormHelper
40
36
 
41
37
  setup :set_controller
42
- setup :setup_new_user
38
+ setup :setup_users
43
39
 
44
40
  def set_controller
45
41
  @controller = MockController.new
46
42
  end
47
43
 
48
- def setup_new_user(options={})
49
- @user = User.new({
50
- :id => 1,
51
- :name => 'New in SimpleForm!',
52
- :description => 'Hello!',
53
- :created_at => Time.now
54
- }.merge(options))
55
-
56
- @validating_user = ValidatingUser.new({
57
- :id => 1,
58
- :name => 'New in SimpleForm!',
59
- :description => 'Hello!',
60
- :home_picture => 'Home picture',
61
- :created_at => Time.now,
62
- :age => 19,
63
- :amount => 15,
64
- :attempts => 1,
65
- :company => [1]
66
- }.merge(options))
67
-
68
- @other_validating_user = OtherValidatingUser.new({
69
- :id => 1,
70
- :name => 'New in SimpleForm!',
71
- :description => 'Hello!',
72
- :created_at => Time.now,
73
- :age => 19,
74
- :company => 1
75
- }.merge(options))
44
+ def setup_users(extra_attributes = {})
45
+ @user = User.build(extra_attributes)
46
+
47
+ @validating_user = ValidatingUser.build({
48
+ home_picture: 'Home picture',
49
+ age: 19,
50
+ amount: 15,
51
+ attempts: 1,
52
+ company: [1]
53
+ }.merge!(extra_attributes))
54
+
55
+ @other_validating_user = OtherValidatingUser.build({
56
+ age: 19,
57
+ company: 1
58
+ }.merge!(extra_attributes))
76
59
  end
77
60
 
78
61
  def protect_against_forgery?
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.3
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - José Valim
@@ -10,36 +10,48 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-07-02 00:00:00.000000000 Z
13
+ date: 2013-09-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - "~>"
19
+ - - '>='
20
20
  - !ruby/object:Gem::Version
21
- version: '3.0'
21
+ version: 4.0.0
22
+ - - <
23
+ - !ruby/object:Gem::Version
24
+ version: '4.1'
22
25
  type: :runtime
23
26
  prerelease: false
24
27
  version_requirements: !ruby/object:Gem::Requirement
25
28
  requirements:
26
- - - "~>"
29
+ - - '>='
30
+ - !ruby/object:Gem::Version
31
+ version: 4.0.0
32
+ - - <
27
33
  - !ruby/object:Gem::Version
28
- version: '3.0'
34
+ version: '4.1'
29
35
  - !ruby/object:Gem::Dependency
30
36
  name: actionpack
31
37
  requirement: !ruby/object:Gem::Requirement
32
38
  requirements:
33
- - - "~>"
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: 4.0.0
42
+ - - <
34
43
  - !ruby/object:Gem::Version
35
- version: '3.0'
44
+ version: '4.1'
36
45
  type: :runtime
37
46
  prerelease: false
38
47
  version_requirements: !ruby/object:Gem::Requirement
39
48
  requirements:
40
- - - "~>"
49
+ - - '>='
41
50
  - !ruby/object:Gem::Version
42
- version: '3.0'
51
+ version: 4.0.0
52
+ - - <
53
+ - !ruby/object:Gem::Version
54
+ version: '4.1'
43
55
  description: Forms made easy!
44
56
  email: contact@plataformatec.com.br
45
57
  executables: []
@@ -49,9 +61,7 @@ files:
49
61
  - CHANGELOG.md
50
62
  - MIT-LICENSE
51
63
  - README.md
52
- - lib/generators/simple_form/USAGE
53
64
  - lib/generators/simple_form/install_generator.rb
54
- - lib/generators/simple_form/templates/README
55
65
  - lib/generators/simple_form/templates/_form.html.erb
56
66
  - lib/generators/simple_form/templates/_form.html.haml
57
67
  - lib/generators/simple_form/templates/_form.html.slim
@@ -59,10 +69,11 @@ files:
59
69
  - lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb
60
70
  - lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb
61
71
  - lib/generators/simple_form/templates/config/locales/simple_form.en.yml
62
- - lib/simple_form.rb
72
+ - lib/generators/simple_form/templates/README
73
+ - lib/generators/simple_form/USAGE
63
74
  - lib/simple_form/action_view_extensions/builder.rb
75
+ - lib/simple_form/action_view_extensions/builder.rb.orig
64
76
  - lib/simple_form/action_view_extensions/form_helper.rb
65
- - lib/simple_form/components.rb
66
77
  - lib/simple_form/components/errors.rb
67
78
  - lib/simple_form/components/hints.rb
68
79
  - lib/simple_form/components/html5.rb
@@ -73,17 +84,17 @@ files:
73
84
  - lib/simple_form/components/pattern.rb
74
85
  - lib/simple_form/components/placeholders.rb
75
86
  - lib/simple_form/components/readonly.rb
76
- - lib/simple_form/core_ext/hash.rb
87
+ - lib/simple_form/components.rb
77
88
  - lib/simple_form/error_notification.rb
78
89
  - lib/simple_form/form_builder.rb
79
- - lib/simple_form/helpers.rb
90
+ - lib/simple_form/form_builder.rb.orig
80
91
  - lib/simple_form/helpers/autofocus.rb
81
92
  - lib/simple_form/helpers/disabled.rb
82
93
  - lib/simple_form/helpers/readonly.rb
83
94
  - lib/simple_form/helpers/required.rb
84
95
  - lib/simple_form/helpers/validators.rb
96
+ - lib/simple_form/helpers.rb
85
97
  - lib/simple_form/i18n_cache.rb
86
- - lib/simple_form/inputs.rb
87
98
  - lib/simple_form/inputs/base.rb
88
99
  - lib/simple_form/inputs/block_input.rb
89
100
  - lib/simple_form/inputs/boolean_input.rb
@@ -101,13 +112,18 @@ files:
101
112
  - lib/simple_form/inputs/range_input.rb
102
113
  - lib/simple_form/inputs/string_input.rb
103
114
  - lib/simple_form/inputs/text_input.rb
115
+ - lib/simple_form/inputs.rb
104
116
  - lib/simple_form/map_type.rb
117
+ - lib/simple_form/railtie.rb
118
+ - lib/simple_form/tags.rb
105
119
  - lib/simple_form/version.rb
106
- - lib/simple_form/wrappers.rb
120
+ - lib/simple_form/version.rb.orig
107
121
  - lib/simple_form/wrappers/builder.rb
108
122
  - lib/simple_form/wrappers/many.rb
109
123
  - lib/simple_form/wrappers/root.rb
110
124
  - lib/simple_form/wrappers/single.rb
125
+ - lib/simple_form/wrappers.rb
126
+ - lib/simple_form.rb
111
127
  - test/action_view_extensions/builder_test.rb
112
128
  - test/action_view_extensions/form_helper_test.rb
113
129
  - test/components/label_test.rb
@@ -145,7 +161,8 @@ files:
145
161
  - test/support/models.rb
146
162
  - test/test_helper.rb
147
163
  homepage: https://github.com/plataformatec/simple_form
148
- licenses: []
164
+ licenses:
165
+ - MIT
149
166
  metadata: {}
150
167
  post_install_message:
151
168
  rdoc_options: []
@@ -153,17 +170,17 @@ require_paths:
153
170
  - lib
154
171
  required_ruby_version: !ruby/object:Gem::Requirement
155
172
  requirements:
156
- - - ">="
173
+ - - '>='
157
174
  - !ruby/object:Gem::Version
158
175
  version: '0'
159
176
  required_rubygems_version: !ruby/object:Gem::Requirement
160
177
  requirements:
161
- - - ">="
178
+ - - '>='
162
179
  - !ruby/object:Gem::Version
163
180
  version: '0'
164
181
  requirements: []
165
182
  rubyforge_project: simple_form
166
- rubygems_version: 2.2.3
183
+ rubygems_version: 2.0.6
167
184
  signing_key:
168
185
  specification_version: 4
169
186
  summary: Forms made easy!
@@ -1,16 +0,0 @@
1
- # TODO: Delete this file when we drop support for Rails 3.0
2
- # This method is already implemented in active_support 3.1
3
-
4
- unless Hash.new.respond_to?(:deep_dup)
5
- class Hash
6
- # Returns a deep copy of hash.
7
- def deep_dup
8
- duplicate = self.dup
9
- duplicate.each_pair do |k,v|
10
- tv = duplicate[k]
11
- duplicate[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_dup : v
12
- end
13
- duplicate
14
- end
15
- end
16
- end