simple_form 1.0.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

data/README.rdoc CHANGED
@@ -8,17 +8,16 @@ SimpleForm aims to be as flexible as possible while helping you with powerful co
8
8
 
9
9
  Install the gem:
10
10
 
11
- gem install simple_form --version=1.0.2
12
-
13
- Configure simple_form gem inside your app:
14
-
15
- config.gem 'simple_form'
11
+ sudo gem install simple_form --version=1.1
16
12
 
17
13
  Run the generator:
18
14
 
19
- ruby script/generate simple_form_install
15
+ rails generate simple_form_install
16
+
17
+ And you are ready to go. Since this branch is aims Rails 3 support,
18
+ if you want to use it with Rails 2.3 you should check this branch:
20
19
 
21
- And you're ready to go.
20
+ http://github.com/plataformatec/simple_form/tree/v1.0
22
21
 
23
22
  == Usage
24
23
 
@@ -158,8 +157,8 @@ Now we have the user form:
158
157
 
159
158
  Simple enough right? This is going to render a :select input for choosing the :company, and another :select input with :multiple option for the :roles. You can of course change it, to use radios and check boxes as well:
160
159
 
161
- f.association :company, :as => :radio
162
- f.association :roles, :as => :check_boxes
160
+ f.association :company, :as => :radio
161
+ f.association :roles, :as => :check_boxes
163
162
 
164
163
  And you will get a set of radios to select the company and another set of check boxes for the roles. Some options are available for refining the collection for associations: :conditions, :include, :joins, :order. These options are given straight to the find method. Here is an example of how to use these options:
165
164
 
@@ -176,34 +175,14 @@ The association helper just invokes input under the hood, so all options availab
176
175
 
177
176
  == Buttons
178
177
 
179
- All web forms need buttons, right? To help you with this, SimpleForm has a default button helper that acts as a wrapper for Rails helpers, creating submit texts using I18n. It's pretty straightforward:
178
+ All web forms need buttons, right? SimpleForm wraps them in the DSL, acting like a proxy:
180
179
 
181
180
  <% simple_form_for @user do |f| -%>
182
181
  <p><%= f.input :name %></p>
183
182
  <p><%= f.button :submit %></p>
184
183
  <% end -%>
185
184
 
186
- This will create a input submit tag for you. If the resource @user is a new record, the button will have text 'Create User', otherwise 'Update User' is shown. If you are working with forms without objects, 'Submit User' would be shown. All those buttons labels can be configured using I18n through the keys :simple_form.buttons.create, :simple_form.buttons.update and :simple_form.buttons.submit.
187
-
188
- You can also pass the button text directly:
189
-
190
- f.button :submit, 'Save User'
191
- f.button :submit, :label => 'Save User'
192
-
193
- As button is just a wrapper, it is actually calling Rails helper :submit_tag with the provided text. That said, any other option you pass will be given to :submit_tag call:
194
-
195
- f.button :submit, :confirm => 'Are you sure?'
196
-
197
- And if you want to use any other button tag, you just need to create a helper that ends with "_tag":
198
-
199
- # inside ApplicationHelper for instance
200
- def custom_submit_tag(text, options={})
201
- # render submit tag here
202
- end
203
-
204
- And you will able to use it with SimpleForm:
205
-
206
- f.button :custom_submit
185
+ The above will simply call submit. You choose to use it or not, it's just a question of taste.
207
186
 
208
187
  == Extra helpers
209
188
 
@@ -238,7 +217,7 @@ Creates a collection of radio inputs with labels associated (same API as collect
238
217
  Creates a collection of check boxes with labels associated (same API as collection_select):
239
218
 
240
219
  form_for @user do |f|
241
- f.collection_check_boxes :options, [[true, 'Yes'] ,[false, 'No']], :first, :last
220
+ f.collection_check_box :options, [[true, 'Yes'] ,[false, 'No']], :first, :last
242
221
  end
243
222
 
244
223
  <input name="user[options][]" type="hidden" value="" />
@@ -256,6 +235,8 @@ SimpleForm comes with a lot of default mappings:
256
235
 
257
236
  boolean check box boolean
258
237
  string text field string
238
+ email email field string
239
+ url url field string
259
240
  password password field string with name matching "password"
260
241
  text text area text
261
242
  file file field string, responding to file methods
@@ -324,6 +305,10 @@ SimpleForm has several configuration values. You can read and change them in the
324
305
 
325
306
  ruby script/generate simple_form_install
326
307
 
308
+ == TODO
309
+
310
+ Please refer to TODO file.
311
+
327
312
  == Maintainers
328
313
 
329
314
  * José Valim (http://github.com/josevalim)
data/init.rb CHANGED
@@ -1 +1 @@
1
- require 'simple_form'
1
+ require 'simple_form'
@@ -0,0 +1,19 @@
1
+ class SimpleFormInstallGenerator < Rails::Generators::Base
2
+ desc "Copy SimpleForm default files"
3
+
4
+ def self.source_root
5
+ @_source_root = File.expand_path('../templates', __FILE__)
6
+ end
7
+
8
+ def copy_initializers
9
+ copy_file 'simple_form.rb', 'config/initializers/simple_form.rb'
10
+ end
11
+
12
+ def copy_locale_file
13
+ copy_file 'en.yml', 'config/locales/simple_form.en.yml'
14
+ end
15
+
16
+ def copy_scaffold_template
17
+ copy_file '_form.html.erb', 'lib/templates/erb/scaffold/_form.html.erb'
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ <%% simple_form_for(@<%= singular_name %>) do |f| %>
2
+ <div class="inputs">
3
+ <%- attributes.each do |attribute| -%>
4
+ <%%= f.<%= attribute.reference? ? :association : :input %> :<%= attribute.name %> %>
5
+ <%- end -%>
6
+ </div>
7
+
8
+ <div class="actions">
9
+ <%%= f.button :submit %>
10
+ </div>
11
+ <%% end %>
@@ -2,10 +2,6 @@ en:
2
2
  simple_form:
3
3
  "yes": 'Yes'
4
4
  "no": 'No'
5
- buttons:
6
- create: 'Create %{model}'
7
- update: 'Update %{model}'
8
- submit: 'Submit %{model}'
9
5
  required:
10
6
  text: 'required'
11
7
  mark: '*'
@@ -5,16 +5,18 @@ SimpleForm.setup do |config|
5
5
  # remove any of them, change the order, or even add your own components in the
6
6
  # stack. By inheriting your component from SimpleForm::Components::Base you'll
7
7
  # have some extra helpers for free.
8
- # config.components = [ :label, :input, :hint, :error ]
8
+ # config.components = [
9
+ # SimpleForm::Components::Wrapper, SimpleForm::Components::Label,
10
+ # SimpleForm::Components::Input, SimpleForm::Components::Hint,
11
+ # SimpleForm::Components::Error
12
+ #]
9
13
 
10
- # Default tag used on hints.
11
- # config.hint_tag = :span
14
+ # Default tag used in components (hints and errors basically). When using one
15
+ # of these components, this tag will be used to render it.
16
+ # config.component_tag = :span
12
17
 
13
- # Default tag used on errors.
14
- # config.error_tag = :span
15
-
16
- # You can wrap all inputs in a pre-defined tag.
17
- # config.wrapper_tag = :div
18
+ # You can wrap all inputs in a pre-defined tag. By default is nil.
19
+ # config.wrapper_tag = nil
18
20
 
19
21
  # How the label text should be generated altogether with the required text.
20
22
  # config.label_text = lambda { |label, required| "#{required} #{label}" }
@@ -33,4 +35,7 @@ SimpleForm.setup do |config|
33
35
 
34
36
  # Default priority for country inputs.
35
37
  # config.country_priority = nil
38
+
39
+ # Default size for text inputs
40
+ # config.default_input_size = 50
36
41
  end
data/lib/simple_form.rb CHANGED
@@ -1,6 +1,6 @@
1
+ require 'action_view'
1
2
  require 'simple_form/action_view_extensions/form_helper'
2
3
  require 'simple_form/action_view_extensions/builder'
3
- require 'simple_form/action_view_extensions/instance_tag'
4
4
 
5
5
  module SimpleForm
6
6
  autoload :Components, 'simple_form/components'
@@ -9,11 +9,11 @@ module SimpleForm
9
9
  autoload :Inputs, 'simple_form/inputs'
10
10
  autoload :MapType, 'simple_form/map_type'
11
11
 
12
- # Default tag used on hints.
12
+ # Default tag used in hints.
13
13
  mattr_accessor :hint_tag
14
14
  @@hint_tag = :span
15
15
 
16
- # Default tag used on errors.
16
+ # Default tag used in errors.
17
17
  mattr_accessor :error_tag
18
18
  @@error_tag = :span
19
19
 
@@ -31,7 +31,7 @@ module SimpleForm
31
31
 
32
32
  # You can wrap all inputs in a pre-defined tag. By default is nil.
33
33
  mattr_accessor :wrapper_tag
34
- @@wrapper_tag = nil
34
+ @@wrapper_tag = :div
35
35
 
36
36
  # How the label text should be generated altogether with the required text.
37
37
  mattr_accessor :label_text
@@ -49,6 +49,10 @@ module SimpleForm
49
49
  mattr_accessor :country_priority
50
50
  @@country_priority = nil
51
51
 
52
+ # Maximum size allowed for inputs.
53
+ mattr_accessor :default_input_size
54
+ @@default_input_size = 50
55
+
52
56
  # Default way to setup SimpleForm. Run script/generate simple_form_install
53
57
  # to create a fresh initializer with all configuration values.
54
58
  def self.setup
@@ -38,7 +38,7 @@ module SimpleForm
38
38
 
39
39
  result << radio_button(attribute, value, default_html_options) <<
40
40
  label("#{attribute}_#{value}", text, :class => "collection_radio")
41
- end
41
+ end.html_safe
42
42
  end
43
43
 
44
44
  # Creates a collection of check boxes for each item in the collection, associated
@@ -48,15 +48,15 @@ module SimpleForm
48
48
  # == Examples
49
49
  #
50
50
  # form_for @user do |f|
51
- # f.collection_check_boxes :options, [[true, 'Yes'] ,[false, 'No']], :first, :last
51
+ # f.collection_check_box :options, [[true, 'Yes'] ,[false, 'No']], :first, :last
52
52
  # end
53
53
  #
54
54
  # <input name="user[options][]" type="hidden" value="" />
55
55
  # <input id="user_options_true" name="user[options][]" type="checkbox" value="true" />
56
- # <label class="collection_check_boxes" for="user_options_true">Yes</label>
56
+ # <label class="collection_check_box" for="user_options_true">Yes</label>
57
57
  # <input name="user[options][]" type="hidden" value="" />
58
58
  # <input id="user_options_false" name="user[options][]" type="checkbox" value="false" />
59
- # <label class="collection_check_boxes" for="user_options_false">No</label>
59
+ # <label class="collection_check_box" for="user_options_false">No</label>
60
60
  #
61
61
  # == Options
62
62
  #
@@ -78,7 +78,7 @@ module SimpleForm
78
78
 
79
79
  result << check_box(attribute, default_html_options, value, '') <<
80
80
  label("#{attribute}_#{value}", text, :class => "collection_check_boxes")
81
- end
81
+ end.html_safe
82
82
  end
83
83
 
84
84
  # Wrapper for using simple form inside a default rails form.
@@ -101,7 +101,7 @@ module SimpleForm
101
101
  # Generate default options for collection helpers, such as :checked and
102
102
  # :disabled.
103
103
  def default_html_options_for_collection(item, value, options, html_options) #:nodoc:
104
- html_options.dup.tap do |default_html_options|
104
+ returning(html_options.dup) do |default_html_options|
105
105
  [:checked, :disabled].each do |option|
106
106
  next unless options[option]
107
107
 
@@ -28,7 +28,7 @@ module SimpleForm
28
28
  end
29
29
 
30
30
  def label_text
31
- html_safe(SimpleForm.label_text.call(raw_label_text, required_label_text))
31
+ SimpleForm.label_text.call(raw_label_text, required_label_text)
32
32
  end
33
33
 
34
34
  def label_target
@@ -65,4 +65,4 @@ module SimpleForm
65
65
  end
66
66
  end
67
67
  end
68
- end
68
+ end
@@ -7,7 +7,8 @@ module SimpleForm
7
7
  include SimpleForm::Inputs
8
8
 
9
9
  map_type :boolean, :password, :text, :file, :to => SimpleForm::Inputs::MappingInput
10
- map_type :string, :integer, :decimal, :float, :to => SimpleForm::Inputs::TextFieldInput
10
+ map_type :string, :email, :url, :to => SimpleForm::Inputs::StringInput
11
+ map_type :integer, :decimal, :float, :to => SimpleForm::Inputs::NumericInput
11
12
  map_type :select, :radio, :check_boxes, :to => SimpleForm::Inputs::CollectionInput
12
13
  map_type :date, :time, :datetime, :to => SimpleForm::Inputs::DateTimeInput
13
14
  map_type :country, :time_zone, :to => SimpleForm::Inputs::PriorityInput
@@ -172,7 +173,7 @@ module SimpleForm
172
173
  klass.all(finders)
173
174
  end
174
175
 
175
- input(attribute, options).tap { @reflection = nil }
176
+ returning(input(attribute, options)) { @reflection = nil }
176
177
  end
177
178
 
178
179
  # Creates a button:
@@ -181,48 +182,14 @@ module SimpleForm
181
182
  # f.button :submit
182
183
  # end
183
184
  #
184
- # If the record is a new_record?, it will create a button with label "Create User",
185
- # otherwise it will create with label "Update User". You can overwrite the label
186
- # giving a second parameter or giving :label.
185
+ # It just acts as a proxy to method name given.
187
186
  #
188
- # f.button :submit, "Create a new user"
189
- # f.button :submit, :label => "Create a new user"
190
- #
191
- # button is actually just a wrapper that adds a default text, that said, f.button
192
- # above is just calling:
193
- #
194
- # submit_tag "Create a new user"
195
- #
196
- # All options given to button are given straight to submit_tag. That said, you can
197
- # use :confirm normally:
198
- #
199
- # f.button :submit, :confirm => "Are you sure?"
200
- #
201
- # And if you want to use image_submit_tag, just give it as an option:
202
- #
203
- # f.button :image_submit, "/images/foo/bar.png"
204
- #
205
- # This comes with a bonus that any method added to your ApplicationController can
206
- # be used by SimpleForm, as long as it ends with _tag. So is quite easy to customize
207
- # your buttons.
208
- #
209
- def button(type, *args)
210
- options = args.extract_options!
211
- value = args.first || options.delete(:label)
212
- key = @object ? (@object.new_record? ? :create : :update) : :submit
213
-
214
- value ||= begin
215
- model = if @object.class.respond_to?(:human_name)
216
- @object.class.human_name
217
- else
218
- @object_name.to_s.humanize
219
- end
220
-
221
- I18n.t(:"simple_form.buttons.#{key}", :model => model, :default => "#{key.to_s.humanize} #{model}")
187
+ def button(type, *args, &block)
188
+ if respond_to?(:"#{type}_button")
189
+ send(:"#{type}_button", *args, &block)
190
+ else
191
+ send(type, *args, &block)
222
192
  end
223
-
224
- options[:class] = "#{key} #{options[:class]}".strip
225
- @template.send(:"#{type}_tag", value, options)
226
193
  end
227
194
 
228
195
  # Creates an error tag based on the given attribute, only when the attribute
@@ -304,6 +271,8 @@ module SimpleForm
304
271
  when /password/ then :password
305
272
  when /time_zone/ then :time_zone
306
273
  when /country/ then :country
274
+ when /email/ then :email
275
+ when /url/ then :url
307
276
  end
308
277
 
309
278
  match || input_type || file_method? || :string
@@ -6,7 +6,8 @@ module SimpleForm
6
6
  autoload :DateTimeInput, 'simple_form/inputs/date_time_input'
7
7
  autoload :HiddenInput, 'simple_form/inputs/hidden_input'
8
8
  autoload :MappingInput, 'simple_form/inputs/mapping_input'
9
+ autoload :NumericInput, 'simple_form/inputs/numeric_input'
9
10
  autoload :PriorityInput, 'simple_form/inputs/priority_input'
10
- autoload :TextFieldInput, 'simple_form/inputs/text_field_input'
11
+ autoload :StringInput, 'simple_form/inputs/string_input'
11
12
  end
12
13
  end
@@ -39,8 +39,7 @@ module SimpleForm
39
39
  send(component)
40
40
  end
41
41
  content.compact!
42
- content = html_safe(content.join)
43
- html_safe(wrap(content))
42
+ wrap(content.join).html_safe
44
43
  end
45
44
 
46
45
  protected
@@ -65,17 +64,6 @@ module SimpleForm
65
64
  html_options
66
65
  end
67
66
 
68
- # Ensure we make html safe only if it responds to it.
69
- def html_safe(content)
70
- if content.respond_to?(:html_safe)
71
- content.html_safe
72
- elsif content.respond_to?(:html_safe!)
73
- content.html_safe!
74
- else
75
- content
76
- end
77
- end
78
-
79
67
  # Lookup translations for the given namespace using I18n, based on object name,
80
68
  # actual action and attribute name. Lookup priority as follows:
81
69
  #
@@ -116,4 +104,4 @@ module SimpleForm
116
104
  end
117
105
  end
118
106
  end
119
- end
107
+ end
@@ -1,14 +1,14 @@
1
1
  module SimpleForm
2
2
  module Inputs
3
- # Handles common text field inputs, as String, Numeric, Float and Decimal.
4
- class TextFieldInput < Base
3
+ class NumericInput < Base
5
4
  def input
6
5
  @builder.text_field(attribute_name, input_html_options)
7
6
  end
8
7
 
9
8
  def input_html_options
10
9
  input_options = super
11
- input_options[:maxlength] ||= column.limit if column
10
+ input_options[:class] = "numeric #{input_options[:class]}"
11
+ input_options[:size] ||= SimpleForm.default_input_size
12
12
  input_options
13
13
  end
14
14
  end
@@ -0,0 +1,24 @@
1
+ module SimpleForm
2
+ module Inputs
3
+ class StringInput < Base
4
+ def input
5
+ @builder.text_field(attribute_name, input_html_options)
6
+ end
7
+
8
+ def input_html_options
9
+ input_options = super
10
+ input_options[:class] = "string #{input_options[:class]}" unless input_type == :string
11
+ input_options[:size] ||= [limit, SimpleForm.default_input_size].compact.min
12
+ input_options[:maxlength] ||= limit if limit
13
+ input_options[:type] ||= input_type
14
+ input_options
15
+ end
16
+
17
+ protected
18
+
19
+ def limit
20
+ column && column.limit
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module SimpleForm
2
- VERSION = "1.0.4".freeze
2
+ VERSION = "1.1.0".freeze
3
3
  end
@@ -34,17 +34,4 @@ class FormHelperTest < ActionView::TestCase
34
34
  assert f.instance_of?(SimpleForm::FormBuilder)
35
35
  end
36
36
  end
37
-
38
- test 'remote form for yields an instance of FormBuilder' do
39
- simple_remote_form_for :user do |f|
40
- assert f.instance_of?(SimpleForm::FormBuilder)
41
- end
42
- assert_select "form[onsubmit]"
43
- end
44
-
45
- test 'pass options to simple remote form' do
46
- simple_remote_form_for :user, :url => '/account', :html => { :id => 'my_form' } do |f| end
47
- assert_select 'form#my_form'
48
- assert_select 'form[action=/account]'
49
- end
50
37
  end
@@ -79,12 +79,12 @@ class FormBuilderTest < ActionView::TestCase
79
79
 
80
80
  test 'builder should use integer text field for integer columns' do
81
81
  with_form_for @user, :age
82
- assert_select 'form input#user_age.integer'
82
+ assert_select 'form input#user_age.numeric.integer'
83
83
  end
84
84
 
85
85
  test 'builder should generate decimal text field for decimal columns' do
86
86
  with_form_for @user, :credit_limit
87
- assert_select 'form input#user_credit_limit.decimal'
87
+ assert_select 'form input#user_credit_limit.numeric.decimal'
88
88
  end
89
89
 
90
90
  test 'builder should generate password fields for columns that matches password' do
@@ -102,6 +102,16 @@ class FormBuilderTest < ActionView::TestCase
102
102
  assert_select 'form select#user_time_zone.time_zone'
103
103
  end
104
104
 
105
+ test 'builder should generate email fields for columns that matches email' do
106
+ with_form_for @user, :email
107
+ assert_select 'form input#user_email.string.email'
108
+ end
109
+
110
+ test 'builder should generate url fields for columns that matches url' do
111
+ with_form_for @user, :url
112
+ assert_select 'form input#user_url.string.url'
113
+ end
114
+
105
115
  test 'builder should generate date select for date columns' do
106
116
  with_form_for @user, :born_at
107
117
  assert_select 'form select#user_born_at_1i.date'
@@ -344,63 +354,13 @@ class FormBuilderTest < ActionView::TestCase
344
354
  # BUTTONS
345
355
  test 'builder should create buttons' do
346
356
  with_button_for :post, :submit
347
- assert_select 'form input.submit[type=submit][value=Submit Post]'
357
+ assert_select 'form input[type=submit][value=Save Post]'
348
358
  end
349
359
 
350
- test 'builder should create buttons for new records' do
360
+ test 'builder should create buttons for records' do
351
361
  @user.new_record!
352
362
  with_button_for @user, :submit
353
- assert_select 'form input.create[type=submit][value=Create User]'
354
- end
355
-
356
- test 'builder should create buttons for existing records' do
357
- with_button_for @user, :submit
358
- assert_select 'form input.update[type=submit][value=Update User]'
359
- end
360
-
361
- test 'builder should create buttons using human_name' do
362
- @user.class.expects(:human_name).returns("Usuario")
363
- with_button_for @user, :submit
364
- assert_select 'form input[type=submit][value=Update Usuario]'
365
- end
366
-
367
- test 'builder should create object buttons with localized labels' do
368
- store_translations(:en, :simple_form => { :buttons => {
369
- :create => "Criar %{model}", :update => "Atualizar %{model}" }}) do
370
- with_button_for @user, :submit
371
- assert_select 'form input[type=submit][value=Atualizar User]'
372
-
373
- @user.new_record!
374
- with_button_for @user, :submit
375
- assert_select 'form input[type=submit][value=Criar User]'
376
- end
377
- end
378
-
379
- test 'builder should create non object buttons with localized labels' do
380
- store_translations(:en, :simple_form => { :buttons => { :submit => "Enviar %{model}" }}) do
381
- with_button_for :post, :submit
382
- assert_select 'form input[type=submit][value=Enviar Post]'
383
- end
384
- end
385
-
386
- test 'builder forwards first options as button text' do
387
- with_button_for :post, :submit, "Send it!"
388
- assert_select 'form input[type=submit][value=Send it!]'
389
- end
390
-
391
- test 'builder forwards label option as button text' do
392
- with_button_for :post, :submit, :label => "Send it!"
393
- assert_select 'form input[type=submit][value=Send it!]'
394
- end
395
-
396
- test 'builder forwards all options except label to button' do
397
- with_button_for :post, :submit, :class => "cool", :id => "super"
398
- assert_select 'form input#super.submit.cool[type=submit]'
399
- end
400
-
401
- test 'builder calls any button tag' do
402
- with_button_for :post, :image_submit, "/image/foo/bar"
403
- assert_select 'form input[src=/image/foo/bar][type=image]'
363
+ assert_select 'form input[type=submit][value=Create User]'
404
364
  end
405
365
 
406
366
  # ASSOCIATIONS
@@ -426,7 +386,7 @@ class FormBuilderTest < ActionView::TestCase
426
386
  end
427
387
  end
428
388
 
429
- assert_equal calls, 3
389
+ assert_equal 3, calls
430
390
  end
431
391
 
432
392
  # ASSOCIATIONS - BELONGS TO
data/test/inputs_test.rb CHANGED
@@ -47,14 +47,19 @@ class InputTest < ActionView::TestCase
47
47
  assert_select 'input.decimal#user_age'
48
48
  end
49
49
 
50
- test 'input should get options from column definition for string attributes' do
50
+ test 'input should use default text size for decimal attributes' do
51
+ with_input_for @user, :credit_limit, :decimal
52
+ assert_select 'input.decimal[size=50]'
53
+ end
54
+
55
+ test 'input should get maxlength from column definition for string attributes' do
51
56
  with_input_for @user, :name, :string
52
57
  assert_select 'input.string[maxlength=100]'
53
58
  end
54
-
55
- test 'input should get options from column definition for decimal attributes' do
56
- with_input_for @user, :credit_limit, :decimal
57
- assert_select 'input.decimal[maxlength=15]'
59
+
60
+ test 'input should get size from column definition for string attributes respecting maximum value' do
61
+ with_input_for @user, :name, :string
62
+ assert_select 'input.string[size=50]'
58
63
  end
59
64
 
60
65
  # MappingInput
@@ -4,6 +4,8 @@ Column = Struct.new(:name, :type, :limit)
4
4
  Association = Struct.new(:klass, :name, :macro, :options)
5
5
 
6
6
  class Company < Struct.new(:id, :name)
7
+ extend ActiveModel::Naming
8
+
7
9
  def self.all(options={})
8
10
  all = (1..3).map{|i| Company.new(i, "Company #{i}")}
9
11
  return [all.first] if options[:conditions].present?
@@ -23,12 +25,16 @@ class Company < Struct.new(:id, :name)
23
25
  end
24
26
 
25
27
  class Tag < Company
28
+ extend ActiveModel::Naming
29
+
26
30
  def self.all(options={})
27
31
  (1..3).map{|i| Tag.new(i, "Tag #{i}")}
28
32
  end
29
33
  end
30
34
 
31
35
  class User < OpenStruct
36
+ extend ActiveModel::Naming
37
+
32
38
  # Get rid of deprecation warnings
33
39
  undef_method :id
34
40
 
@@ -40,7 +46,7 @@ class User < OpenStruct
40
46
  @new_record || false
41
47
  end
42
48
 
43
- def company_attributes=(foo)
49
+ def company_attributes=(*)
44
50
  end
45
51
 
46
52
  def column_for_attribute(attribute)
@@ -71,10 +77,6 @@ class User < OpenStruct
71
77
  end
72
78
  end
73
79
 
74
- def self.human_name
75
- "User"
76
- end
77
-
78
80
  def self.reflect_on_association(association)
79
81
  case association
80
82
  when :company
data/test/test_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'test/unit'
3
- require 'mocha'
4
3
 
4
+ require 'active_model'
5
5
  require 'action_controller'
6
6
  require 'action_view/test_case'
7
7
 
metadata CHANGED
@@ -1,13 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_form
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 0
9
- - 4
10
- version: 1.0.4
4
+ version: 1.1.0
11
5
  platform: ruby
12
6
  authors:
13
7
  - "Jos\xC3\xA9 Valim"
@@ -16,7 +10,7 @@ autorequire:
16
10
  bindir: bin
17
11
  cert_chain: []
18
12
 
19
- date: 2010-10-08 00:00:00 -03:00
13
+ date: 2010-02-07 00:00:00 +01:00
20
14
  default_executable:
21
15
  dependencies: []
22
16
 
@@ -29,14 +23,15 @@ extensions: []
29
23
  extra_rdoc_files:
30
24
  - README.rdoc
31
25
  files:
32
- - generators/simple_form_install/USAGE
33
- - generators/simple_form_install/simple_form_install_generator.rb
34
- - generators/simple_form_install/templates/simple_form.rb
35
26
  - init.rb
27
+ - lib/generators/simple_form_install/USAGE
28
+ - lib/generators/simple_form_install/simple_form_install_generator.rb
29
+ - lib/generators/simple_form_install/templates/_form.html.erb
30
+ - lib/generators/simple_form_install/templates/en.yml
31
+ - lib/generators/simple_form_install/templates/simple_form.rb
36
32
  - lib/simple_form.rb
37
33
  - lib/simple_form/action_view_extensions/builder.rb
38
34
  - lib/simple_form/action_view_extensions/form_helper.rb
39
- - lib/simple_form/action_view_extensions/instance_tag.rb
40
35
  - lib/simple_form/components.rb
41
36
  - lib/simple_form/components/errors.rb
42
37
  - lib/simple_form/components/hints.rb
@@ -51,29 +46,12 @@ files:
51
46
  - lib/simple_form/inputs/date_time_input.rb
52
47
  - lib/simple_form/inputs/hidden_input.rb
53
48
  - lib/simple_form/inputs/mapping_input.rb
49
+ - lib/simple_form/inputs/numeric_input.rb
54
50
  - lib/simple_form/inputs/priority_input.rb
55
- - lib/simple_form/inputs/text_field_input.rb
56
- - lib/simple_form/locale/en.yml
51
+ - lib/simple_form/inputs/string_input.rb
57
52
  - lib/simple_form/map_type.rb
58
53
  - lib/simple_form/version.rb
59
54
  - README.rdoc
60
- - test/action_view_extensions/builder_test.rb
61
- - test/action_view_extensions/form_helper_test.rb
62
- - test/components/error_test.rb
63
- - test/components/hint_test.rb
64
- - test/components/label_test.rb
65
- - test/form_builder_test.rb
66
- - test/inputs_test.rb
67
- - test/simple_form_test.rb
68
- - test/support/country_select/init.rb
69
- - test/support/country_select/install.rb
70
- - test/support/country_select/lib/country_select.rb
71
- - test/support/country_select/uninstall.rb
72
- - test/support/misc_helpers.rb
73
- - test/support/mock_controller.rb
74
- - test/support/mock_response.rb
75
- - test/support/models.rb
76
- - test/test_helper.rb
77
55
  has_rdoc: true
78
56
  homepage: http://github.com/plataformatec/simple_form
79
57
  licenses: []
@@ -84,27 +62,21 @@ rdoc_options:
84
62
  require_paths:
85
63
  - lib
86
64
  required_ruby_version: !ruby/object:Gem::Requirement
87
- none: false
88
65
  requirements:
89
66
  - - ">="
90
67
  - !ruby/object:Gem::Version
91
- hash: 3
92
- segments:
93
- - 0
94
68
  version: "0"
69
+ version:
95
70
  required_rubygems_version: !ruby/object:Gem::Requirement
96
- none: false
97
71
  requirements:
98
72
  - - ">="
99
73
  - !ruby/object:Gem::Version
100
- hash: 3
101
- segments:
102
- - 0
103
74
  version: "0"
75
+ version:
104
76
  requirements: []
105
77
 
106
78
  rubyforge_project:
107
- rubygems_version: 1.3.7
79
+ rubygems_version: 1.3.5
108
80
  signing_key:
109
81
  specification_version: 3
110
82
  summary: Forms made easy!
@@ -1,19 +0,0 @@
1
- class SimpleFormInstallGenerator < Rails::Generator::Base
2
-
3
- def manifest
4
- record do |m|
5
- m.directory 'config/initializers'
6
- m.template 'simple_form.rb', 'config/initializers/simple_form.rb'
7
-
8
- m.directory 'config/locales'
9
- m.template locale_file, 'config/locales/simple_form.en.yml'
10
- end
11
- end
12
-
13
- private
14
-
15
- def locale_file
16
- @locale_file ||= '../../../lib/simple_form/locale/en.yml'
17
- end
18
-
19
- end
@@ -1,37 +0,0 @@
1
- module SimpleForm
2
- module ActionViewExtensions
3
- module InstanceTag #:nodoc:
4
- # Overwrite to_check_box_tag to make it available to work with :multiple => true
5
- def to_check_box_tag(options = {}, checked_value = "1", unchecked_value = "0")
6
- options = options.stringify_keys
7
- options["type"] = "checkbox"
8
- options["value"] = checked_value
9
-
10
- if options.has_key?("checked")
11
- cv = options.delete "checked"
12
- checked = cv == true || cv == "checked"
13
- else
14
- checked = self.class.check_box_checked?(value(object), checked_value)
15
- end
16
- options["checked"] = "checked" if checked
17
-
18
- # The only part added to deal with multiple check box is this conditional.
19
- if options["multiple"]
20
- add_default_name_and_id_for_value(checked_value, options)
21
- options.delete("multiple")
22
- else
23
- add_default_name_and_id(options)
24
- end
25
-
26
- hidden = tag("input", "name" => options["name"], "type" => "hidden", "value" => options['disabled'] && checked ? checked_value : unchecked_value)
27
- checkbox = tag("input", options)
28
-
29
- result = hidden + checkbox
30
- result.respond_to?(:html_safe) ? result.html_safe : result
31
- end
32
- end
33
- end
34
- end
35
-
36
- ActionView::Helpers::InstanceTag.send :remove_method, :to_check_box_tag
37
- ActionView::Helpers::InstanceTag.send :include, SimpleForm::ActionViewExtensions::InstanceTag