simple_form 3.0.1 → 3.1.0.rc2

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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -27
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +179 -73
  5. data/lib/generators/simple_form/install_generator.rb +2 -2
  6. data/lib/generators/simple_form/templates/README +3 -4
  7. data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +25 -5
  8. data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +108 -24
  9. data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +1 -1
  10. data/lib/generators/simple_form/templates/config/locales/simple_form.en.yml +7 -2
  11. data/lib/simple_form/action_view_extensions/form_helper.rb +1 -1
  12. data/lib/simple_form/components/errors.rb +30 -2
  13. data/lib/simple_form/components/hints.rb +2 -2
  14. data/lib/simple_form/components/html5.rb +1 -1
  15. data/lib/simple_form/components/label_input.rb +20 -2
  16. data/lib/simple_form/components/labels.rb +10 -6
  17. data/lib/simple_form/components/maxlength.rb +1 -1
  18. data/lib/simple_form/components/min_max.rb +1 -1
  19. data/lib/simple_form/components/pattern.rb +1 -1
  20. data/lib/simple_form/components/placeholders.rb +2 -2
  21. data/lib/simple_form/components/readonly.rb +1 -1
  22. data/lib/simple_form/form_builder.rb +121 -72
  23. data/lib/simple_form/helpers.rb +5 -5
  24. data/lib/simple_form/inputs/base.rb +33 -11
  25. data/lib/simple_form/inputs/block_input.rb +1 -1
  26. data/lib/simple_form/inputs/boolean_input.rb +27 -14
  27. data/lib/simple_form/inputs/collection_input.rb +32 -9
  28. data/lib/simple_form/inputs/collection_radio_buttons_input.rb +6 -11
  29. data/lib/simple_form/inputs/collection_select_input.rb +4 -2
  30. data/lib/simple_form/inputs/date_time_input.rb +12 -2
  31. data/lib/simple_form/inputs/file_input.rb +4 -2
  32. data/lib/simple_form/inputs/grouped_collection_select_input.rb +15 -3
  33. data/lib/simple_form/inputs/hidden_input.rb +4 -2
  34. data/lib/simple_form/inputs/numeric_input.rb +5 -4
  35. data/lib/simple_form/inputs/password_input.rb +4 -2
  36. data/lib/simple_form/inputs/priority_input.rb +4 -2
  37. data/lib/simple_form/inputs/range_input.rb +1 -1
  38. data/lib/simple_form/inputs/string_input.rb +4 -2
  39. data/lib/simple_form/inputs/text_input.rb +4 -2
  40. data/lib/simple_form/railtie.rb +7 -0
  41. data/lib/simple_form/tags.rb +8 -0
  42. data/lib/simple_form/version.rb +1 -1
  43. data/lib/simple_form/wrappers/builder.rb +6 -6
  44. data/lib/simple_form/wrappers/leaf.rb +28 -0
  45. data/lib/simple_form/wrappers/many.rb +6 -6
  46. data/lib/simple_form/wrappers/root.rb +1 -1
  47. data/lib/simple_form/wrappers/single.rb +5 -3
  48. data/lib/simple_form/wrappers.rb +1 -0
  49. data/lib/simple_form.rb +46 -6
  50. data/test/action_view_extensions/builder_test.rb +5 -5
  51. data/test/action_view_extensions/form_helper_test.rb +13 -13
  52. data/test/components/label_test.rb +36 -36
  53. data/test/form_builder/association_test.rb +21 -4
  54. data/test/form_builder/button_test.rb +5 -5
  55. data/test/form_builder/error_notification_test.rb +1 -1
  56. data/test/form_builder/error_test.rb +78 -17
  57. data/test/form_builder/general_test.rb +65 -60
  58. data/test/form_builder/hint_test.rb +15 -15
  59. data/test/form_builder/input_field_test.rb +37 -13
  60. data/test/form_builder/label_test.rb +44 -12
  61. data/test/form_builder/wrapper_test.rb +120 -19
  62. data/test/generators/simple_form_generator_test.rb +2 -2
  63. data/test/inputs/boolean_input_test.rb +54 -6
  64. data/test/inputs/collection_check_boxes_input_test.rb +63 -17
  65. data/test/inputs/collection_radio_buttons_input_test.rb +112 -36
  66. data/test/inputs/collection_select_input_test.rb +141 -36
  67. data/test/inputs/datetime_input_test.rb +116 -49
  68. data/test/inputs/disabled_test.rb +15 -15
  69. data/test/inputs/discovery_test.rb +56 -6
  70. data/test/inputs/file_input_test.rb +2 -2
  71. data/test/inputs/general_test.rb +20 -20
  72. data/test/inputs/grouped_collection_select_input_test.rb +38 -2
  73. data/test/inputs/hidden_input_test.rb +4 -4
  74. data/test/inputs/numeric_input_test.rb +24 -24
  75. data/test/inputs/priority_input_test.rb +7 -7
  76. data/test/inputs/readonly_test.rb +19 -19
  77. data/test/inputs/required_test.rb +13 -13
  78. data/test/inputs/string_input_test.rb +41 -21
  79. data/test/inputs/text_input_test.rb +4 -4
  80. data/test/simple_form_test.rb +8 -0
  81. data/test/support/discovery_inputs.rb +32 -2
  82. data/test/support/misc_helpers.rb +71 -5
  83. data/test/support/models.rb +50 -24
  84. data/test/test_helper.rb +2 -0
  85. metadata +23 -34
@@ -1,4 +1,4 @@
1
- Association = Struct.new(:klass, :name, :macro, :options)
1
+ Association = Struct.new(:klass, :name, :macro, :scope, :options)
2
2
 
3
3
  Column = Struct.new(:name, :type, :limit) do
4
4
  # Returns +true+ if the column is either of type integer, float or decimal.
@@ -7,16 +7,36 @@ Column = Struct.new(:name, :type, :limit) do
7
7
  end
8
8
  end
9
9
 
10
- Relation = Struct.new(:all) do
10
+ Relation = Struct.new(:records) do
11
+ delegate :each, to: :records
12
+
11
13
  def where(conditions = nil)
12
- self.class.new conditions ? all.first : all
14
+ self.class.new conditions ? records.first : records
13
15
  end
14
16
 
15
17
  def order(conditions = nil)
16
- self.class.new conditions ? all.last : all
18
+ self.class.new conditions ? records.last : records
17
19
  end
18
20
 
19
- alias_method :to_a, :all
21
+ alias_method :to_a, :records
22
+ alias_method :to_ary, :records
23
+ end
24
+
25
+ Picture = Struct.new(:id, :name) do
26
+ extend ActiveModel::Naming
27
+ include ActiveModel::Conversion
28
+
29
+ def self.where(conditions = nil)
30
+ if conditions.is_a?(Hash) && conditions[:name]
31
+ all.to_a.last
32
+ else
33
+ all
34
+ end
35
+ end
36
+
37
+ def self.all
38
+ Relation.new((1..3).map { |i| new(i, "#{name} #{i}") })
39
+ end
20
40
  end
21
41
 
22
42
  Company = Struct.new(:id, :name) do
@@ -28,11 +48,11 @@ Company = Struct.new(:id, :name) do
28
48
  end
29
49
 
30
50
  def self._relation
31
- Relation.new(all)
51
+ all
32
52
  end
33
53
 
34
54
  def self.all
35
- (1..3).map { |i| new(i, "#{name} #{i}") }
55
+ Relation.new((1..3).map { |i| new(i, "#{name} #{i}") })
36
56
  end
37
57
 
38
58
  def persisted?
@@ -53,7 +73,8 @@ class User
53
73
  :delivery_time, :born_at, :special_company_id, :country, :tags, :tag_ids,
54
74
  :avatar, :home_picture, :email, :status, :residence_country, :phone_number,
55
75
  :post_count, :lock_version, :amount, :attempts, :action, :credit_card, :gender,
56
- :extra_special_company_id
76
+ :extra_special_company_id, :pictures, :picture_ids, :special_pictures,
77
+ :special_picture_ids, :uuid
57
78
 
58
79
  def self.build(extra_attributes = {})
59
80
  attributes = {
@@ -66,7 +87,7 @@ class User
66
87
  new attributes
67
88
  end
68
89
 
69
- def initialize(options={})
90
+ def initialize(options = {})
70
91
  @new_record = false
71
92
  options.each do |key, value|
72
93
  send("#{key}=", value)
@@ -104,11 +125,12 @@ class User
104
125
  when :attempts then :integer
105
126
  when :action then :string
106
127
  when :credit_card then :string
128
+ when :uuid then :uuid
107
129
  end
108
130
  Column.new(attribute, column_type, limit)
109
131
  end
110
132
 
111
- def self.human_attribute_name(attribute)
133
+ def self.human_attribute_name(attribute, options = {})
112
134
  case attribute
113
135
  when 'name'
114
136
  'Super User Name!'
@@ -117,35 +139,39 @@ class User
117
139
  when 'company'
118
140
  'Company Human Name!'
119
141
  else
120
- attribute.humanize
142
+ attribute.to_s.humanize
121
143
  end
122
144
  end
123
145
 
124
146
  def self.reflect_on_association(association)
125
147
  case association
126
148
  when :company
127
- Association.new(Company, association, :belongs_to, {})
149
+ Association.new(Company, association, :belongs_to, nil, {})
128
150
  when :tags
129
- Association.new(Tag, association, :has_many, {})
151
+ Association.new(Tag, association, :has_many, nil, {})
130
152
  when :first_company
131
- Association.new(Company, association, :has_one, {})
153
+ Association.new(Company, association, :has_one, nil, {})
132
154
  when :special_company
133
- Association.new(Company, association, :belongs_to, { conditions: { id: 1 } })
155
+ Association.new(Company, association, :belongs_to, nil, { conditions: { id: 1 } })
134
156
  when :extra_special_company
135
- Association.new(Company, association, :belongs_to, { conditions: proc { { id: 1 } } })
157
+ Association.new(Company, association, :belongs_to, nil, { conditions: proc { { id: self.id } } })
158
+ when :pictures
159
+ Association.new(Picture, association, :has_many, nil, {})
160
+ when :special_pictures
161
+ Association.new(Picture, association, :has_many, proc { where(name: self.name) }, {})
136
162
  end
137
163
  end
138
164
 
139
165
  def errors
140
166
  @errors ||= begin
141
- hash = Hash.new { |h,k| h[k] = [] }
142
- hash.merge!(
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"]
148
- )
167
+ errors = ActiveModel::Errors.new(self)
168
+ errors.add(:name, "can't be blank")
169
+ errors.add(:description, 'must be longer than 15 characters')
170
+ errors.add(:age, 'is not a number')
171
+ errors.add(:age, 'must be greater than 18')
172
+ errors.add(:company, 'company must be present')
173
+ errors.add(:company_id, 'must be valid')
174
+ errors
149
175
  end
150
176
  end
151
177
 
data/test/test_helper.rb CHANGED
@@ -5,6 +5,8 @@ require 'minitest/autorun'
5
5
  require 'active_model'
6
6
  require 'action_controller'
7
7
  require 'action_view'
8
+ ActionView::RoutingUrlFor.send(:include, ActionDispatch::Routing::UrlFor)
9
+
8
10
  require 'action_view/template'
9
11
 
10
12
  require 'action_view/test_case'
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.0.1
4
+ version: 3.1.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - José Valim
@@ -10,50 +10,38 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-11-29 00:00:00.000000000 Z
13
+ date: 2014-07-08 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: 4.0.0
22
- - - <
23
- - !ruby/object:Gem::Version
24
- version: '4.1'
21
+ version: '4.0'
25
22
  type: :runtime
26
23
  prerelease: false
27
24
  version_requirements: !ruby/object:Gem::Requirement
28
25
  requirements:
29
- - - '>='
30
- - !ruby/object:Gem::Version
31
- version: 4.0.0
32
- - - <
26
+ - - "~>"
33
27
  - !ruby/object:Gem::Version
34
- version: '4.1'
28
+ version: '4.0'
35
29
  - !ruby/object:Gem::Dependency
36
30
  name: actionpack
37
31
  requirement: !ruby/object:Gem::Requirement
38
32
  requirements:
39
- - - '>='
40
- - !ruby/object:Gem::Version
41
- version: 4.0.0
42
- - - <
33
+ - - "~>"
43
34
  - !ruby/object:Gem::Version
44
- version: '4.1'
35
+ version: '4.0'
45
36
  type: :runtime
46
37
  prerelease: false
47
38
  version_requirements: !ruby/object:Gem::Requirement
48
39
  requirements:
49
- - - '>='
40
+ - - "~>"
50
41
  - !ruby/object:Gem::Version
51
- version: 4.0.0
52
- - - <
53
- - !ruby/object:Gem::Version
54
- version: '4.1'
42
+ version: '4.0'
55
43
  description: Forms made easy!
56
- email: contact@plataformatec.com.br
44
+ email: opensource@plataformatec.com.br
57
45
  executables: []
58
46
  extensions: []
59
47
  extra_rdoc_files: []
@@ -61,7 +49,9 @@ files:
61
49
  - CHANGELOG.md
62
50
  - MIT-LICENSE
63
51
  - README.md
52
+ - lib/generators/simple_form/USAGE
64
53
  - lib/generators/simple_form/install_generator.rb
54
+ - lib/generators/simple_form/templates/README
65
55
  - lib/generators/simple_form/templates/_form.html.erb
66
56
  - lib/generators/simple_form/templates/_form.html.haml
67
57
  - lib/generators/simple_form/templates/_form.html.slim
@@ -69,10 +59,10 @@ files:
69
59
  - lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb
70
60
  - lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb
71
61
  - lib/generators/simple_form/templates/config/locales/simple_form.en.yml
72
- - lib/generators/simple_form/templates/README
73
- - lib/generators/simple_form/USAGE
62
+ - lib/simple_form.rb
74
63
  - lib/simple_form/action_view_extensions/builder.rb
75
64
  - lib/simple_form/action_view_extensions/form_helper.rb
65
+ - lib/simple_form/components.rb
76
66
  - lib/simple_form/components/errors.rb
77
67
  - lib/simple_form/components/hints.rb
78
68
  - lib/simple_form/components/html5.rb
@@ -83,16 +73,16 @@ files:
83
73
  - lib/simple_form/components/pattern.rb
84
74
  - lib/simple_form/components/placeholders.rb
85
75
  - lib/simple_form/components/readonly.rb
86
- - lib/simple_form/components.rb
87
76
  - lib/simple_form/error_notification.rb
88
77
  - lib/simple_form/form_builder.rb
78
+ - lib/simple_form/helpers.rb
89
79
  - lib/simple_form/helpers/autofocus.rb
90
80
  - lib/simple_form/helpers/disabled.rb
91
81
  - lib/simple_form/helpers/readonly.rb
92
82
  - lib/simple_form/helpers/required.rb
93
83
  - lib/simple_form/helpers/validators.rb
94
- - lib/simple_form/helpers.rb
95
84
  - lib/simple_form/i18n_cache.rb
85
+ - lib/simple_form/inputs.rb
96
86
  - lib/simple_form/inputs/base.rb
97
87
  - lib/simple_form/inputs/block_input.rb
98
88
  - lib/simple_form/inputs/boolean_input.rb
@@ -110,17 +100,16 @@ files:
110
100
  - lib/simple_form/inputs/range_input.rb
111
101
  - lib/simple_form/inputs/string_input.rb
112
102
  - lib/simple_form/inputs/text_input.rb
113
- - lib/simple_form/inputs.rb
114
103
  - lib/simple_form/map_type.rb
115
104
  - lib/simple_form/railtie.rb
116
105
  - lib/simple_form/tags.rb
117
106
  - lib/simple_form/version.rb
107
+ - lib/simple_form/wrappers.rb
118
108
  - lib/simple_form/wrappers/builder.rb
109
+ - lib/simple_form/wrappers/leaf.rb
119
110
  - lib/simple_form/wrappers/many.rb
120
111
  - lib/simple_form/wrappers/root.rb
121
112
  - lib/simple_form/wrappers/single.rb
122
- - lib/simple_form/wrappers.rb
123
- - lib/simple_form.rb
124
113
  - test/action_view_extensions/builder_test.rb
125
114
  - test/action_view_extensions/form_helper_test.rb
126
115
  - test/components/label_test.rb
@@ -167,17 +156,17 @@ require_paths:
167
156
  - lib
168
157
  required_ruby_version: !ruby/object:Gem::Requirement
169
158
  requirements:
170
- - - '>='
159
+ - - ">="
171
160
  - !ruby/object:Gem::Version
172
161
  version: '0'
173
162
  required_rubygems_version: !ruby/object:Gem::Requirement
174
163
  requirements:
175
- - - '>='
164
+ - - ">"
176
165
  - !ruby/object:Gem::Version
177
- version: '0'
166
+ version: 1.3.1
178
167
  requirements: []
179
168
  rubyforge_project: simple_form
180
- rubygems_version: 2.1.11
169
+ rubygems_version: 2.2.2
181
170
  signing_key:
182
171
  specification_version: 4
183
172
  summary: Forms made easy!