Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #11391: form_option_helper_should_respect_default_options.patch

File form_option_helper_should_respect_default_options.patch, 16.6 kB (added by kamal, 4 months ago)

patch with tests

  • actionpack/test/template/form_helper_test.rb

    old new  
    11require 'abstract_unit' 
    22 
    33silence_warnings do 
    4   Post = Struct.new(:title, :author_name, :body, :secret, :written_on, :cost
     4  Post = Struct.new(:title, :author_name, :body, :secret, :written_on, :cost, :category, :comments, :country, :time_zone
    55  Post.class_eval do 
    66    alias_method :title_before_type_cast, :title unless respond_to?(:title_before_type_cast) 
    77    alias_method :body_before_type_cast, :body unless respond_to?(:body_before_type_cast) 
     
    3333class FormHelperTest < Test::Unit::TestCase 
    3434  include ActionView::Helpers::FormHelper 
    3535  include ActionView::Helpers::FormTagHelper 
     36  include ActionView::Helpers::FormOptionsHelper 
    3637  include ActionView::Helpers::UrlHelper 
    3738  include ActionView::Helpers::TagHelper 
    3839  include ActionView::Helpers::TextHelper 
     
    6061    @post.body        = "Back to the hill and over it again!" 
    6162    @post.secret      = 1 
    6263    @post.written_on  = Date.new(2004, 6, 15) 
     64    @post.category    = "default" 
    6365 
    6466    @controller = Class.new do 
    6567      attr_reader :url_for_options 
     
    390392      _erbout.concat f.text_field(:title) 
    391393      _erbout.concat f.text_area(:body) 
    392394      _erbout.concat f.check_box(:secret) 
     395      _erbout.concat f.select(:category, []) 
     396      _erbout.concat f.collection_select(:comments, [], :id, :name) 
     397      _erbout.concat f.country_select(:country) 
     398      _erbout.concat f.time_zone_select(:time_zone) 
    393399    end 
    394400 
     401    country_options = <<-COUNTRIES 
     402<option value="Afghanistan">Afghanistan</option> 
     403<option value="Aland Islands">Aland Islands</option> 
     404<option value="Albania">Albania</option> 
     405<option value="Algeria">Algeria</option> 
     406<option value="American Samoa">American Samoa</option> 
     407<option value="Andorra">Andorra</option> 
     408<option value="Angola">Angola</option> 
     409<option value="Anguilla">Anguilla</option> 
     410<option value="Antarctica">Antarctica</option> 
     411<option value="Antigua And Barbuda">Antigua And Barbuda</option> 
     412<option value="Argentina">Argentina</option> 
     413<option value="Armenia">Armenia</option> 
     414<option value="Aruba">Aruba</option> 
     415<option value="Australia">Australia</option> 
     416<option value="Austria">Austria</option> 
     417<option value="Azerbaijan">Azerbaijan</option> 
     418<option value="Bahamas">Bahamas</option> 
     419<option value="Bahrain">Bahrain</option> 
     420<option value="Bangladesh">Bangladesh</option> 
     421<option value="Barbados">Barbados</option> 
     422<option value="Belarus">Belarus</option> 
     423<option value="Belgium">Belgium</option> 
     424<option value="Belize">Belize</option> 
     425<option value="Benin">Benin</option> 
     426<option value="Bermuda">Bermuda</option> 
     427<option value="Bhutan">Bhutan</option> 
     428<option value="Bolivia">Bolivia</option> 
     429<option value="Bosnia and Herzegowina">Bosnia and Herzegowina</option> 
     430<option value="Botswana">Botswana</option> 
     431<option value="Bouvet Island">Bouvet Island</option> 
     432<option value="Brazil">Brazil</option> 
     433<option value="British Indian Ocean Territory">British Indian Ocean Territory</option> 
     434<option value="Brunei Darussalam">Brunei Darussalam</option> 
     435<option value="Bulgaria">Bulgaria</option> 
     436<option value="Burkina Faso">Burkina Faso</option> 
     437<option value="Burundi">Burundi</option> 
     438<option value="Cambodia">Cambodia</option> 
     439<option value="Cameroon">Cameroon</option> 
     440<option value="Canada">Canada</option> 
     441<option value="Cape Verde">Cape Verde</option> 
     442<option value="Cayman Islands">Cayman Islands</option> 
     443<option value="Central African Republic">Central African Republic</option> 
     444<option value="Chad">Chad</option> 
     445<option value="Chile">Chile</option> 
     446<option value="China">China</option> 
     447<option value="Christmas Island">Christmas Island</option> 
     448<option value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option> 
     449<option value="Colombia">Colombia</option> 
     450<option value="Comoros">Comoros</option> 
     451<option value="Congo">Congo</option> 
     452<option value="Congo, the Democratic Republic of the">Congo, the Democratic Republic of the</option> 
     453<option value="Cook Islands">Cook Islands</option> 
     454<option value="Costa Rica">Costa Rica</option> 
     455<option value="Cote d'Ivoire">Cote d'Ivoire</option> 
     456<option value="Croatia">Croatia</option> 
     457<option value="Cuba">Cuba</option> 
     458<option value="Cyprus">Cyprus</option> 
     459<option value="Czech Republic">Czech Republic</option> 
     460<option value="Denmark">Denmark</option> 
     461<option value="Djibouti">Djibouti</option> 
     462<option value="Dominica">Dominica</option> 
     463<option value="Dominican Republic">Dominican Republic</option> 
     464<option value="Ecuador">Ecuador</option> 
     465<option value="Egypt">Egypt</option> 
     466<option value="El Salvador">El Salvador</option> 
     467<option value="Equatorial Guinea">Equatorial Guinea</option> 
     468<option value="Eritrea">Eritrea</option> 
     469<option value="Estonia">Estonia</option> 
     470<option value="Ethiopia">Ethiopia</option> 
     471<option value="Falkland Islands (Malvinas)">Falkland Islands (Malvinas)</option> 
     472<option value="Faroe Islands">Faroe Islands</option> 
     473<option value="Fiji">Fiji</option> 
     474<option value="Finland">Finland</option> 
     475<option value="France">France</option> 
     476<option value="French Guiana">French Guiana</option> 
     477<option value="French Polynesia">French Polynesia</option> 
     478<option value="French Southern Territories">French Southern Territories</option> 
     479<option value="Gabon">Gabon</option> 
     480<option value="Gambia">Gambia</option> 
     481<option value="Georgia">Georgia</option> 
     482<option value="Germany">Germany</option> 
     483<option value="Ghana">Ghana</option> 
     484<option value="Gibraltar">Gibraltar</option> 
     485<option value="Greece">Greece</option> 
     486<option value="Greenland">Greenland</option> 
     487<option value="Grenada">Grenada</option> 
     488<option value="Guadeloupe">Guadeloupe</option> 
     489<option value="Guam">Guam</option> 
     490<option value="Guatemala">Guatemala</option> 
     491<option value="Guernsey">Guernsey</option> 
     492<option value="Guinea">Guinea</option> 
     493<option value="Guinea-Bissau">Guinea-Bissau</option> 
     494<option value="Guyana">Guyana</option> 
     495<option value="Haiti">Haiti</option> 
     496<option value="Heard and McDonald Islands">Heard and McDonald Islands</option> 
     497<option value="Holy See (Vatican City State)">Holy See (Vatican City State)</option> 
     498<option value="Honduras">Honduras</option> 
     499<option value="Hong Kong">Hong Kong</option> 
     500<option value="Hungary">Hungary</option> 
     501<option value="Iceland">Iceland</option> 
     502<option value="India">India</option> 
     503<option value="Indonesia">Indonesia</option> 
     504<option value="Iran, Islamic Republic of">Iran, Islamic Republic of</option> 
     505<option value="Iraq">Iraq</option> 
     506<option value="Ireland">Ireland</option> 
     507<option value="Isle of Man">Isle of Man</option> 
     508<option value="Israel">Israel</option> 
     509<option value="Italy">Italy</option> 
     510<option value="Jamaica">Jamaica</option> 
     511<option value="Japan">Japan</option> 
     512<option value="Jersey">Jersey</option> 
     513<option value="Jordan">Jordan</option> 
     514<option value="Kazakhstan">Kazakhstan</option> 
     515<option value="Kenya">Kenya</option> 
     516<option value="Kiribati">Kiribati</option> 
     517<option value="Korea, Democratic People's Republic of">Korea, Democratic People's Republic of</option> 
     518<option value="Korea, Republic of">Korea, Republic of</option> 
     519<option value="Kuwait">Kuwait</option> 
     520<option value="Kyrgyzstan">Kyrgyzstan</option> 
     521<option value="Lao People's Democratic Republic">Lao People's Democratic Republic</option> 
     522<option value="Latvia">Latvia</option> 
     523<option value="Lebanon">Lebanon</option> 
     524<option value="Lesotho">Lesotho</option> 
     525<option value="Liberia">Liberia</option> 
     526<option value="Libyan Arab Jamahiriya">Libyan Arab Jamahiriya</option> 
     527<option value="Liechtenstein">Liechtenstein</option> 
     528<option value="Lithuania">Lithuania</option> 
     529<option value="Luxembourg">Luxembourg</option> 
     530<option value="Macao">Macao</option> 
     531<option value="Macedonia, The Former Yugoslav Republic Of">Macedonia, The Former Yugoslav Republic Of</option> 
     532<option value="Madagascar">Madagascar</option> 
     533<option value="Malawi">Malawi</option> 
     534<option value="Malaysia">Malaysia</option> 
     535<option value="Maldives">Maldives</option> 
     536<option value="Mali">Mali</option> 
     537<option value="Malta">Malta</option> 
     538<option value="Marshall Islands">Marshall Islands</option> 
     539<option value="Martinique">Martinique</option> 
     540<option value="Mauritania">Mauritania</option> 
     541<option value="Mauritius">Mauritius</option> 
     542<option value="Mayotte">Mayotte</option> 
     543<option value="Mexico">Mexico</option> 
     544<option value="Micronesia, Federated States of">Micronesia, Federated States of</option> 
     545<option value="Moldova, Republic of">Moldova, Republic of</option> 
     546<option value="Monaco">Monaco</option> 
     547<option value="Mongolia">Mongolia</option> 
     548<option value="Montenegro">Montenegro</option> 
     549<option value="Montserrat">Montserrat</option> 
     550<option value="Morocco">Morocco</option> 
     551<option value="Mozambique">Mozambique</option> 
     552<option value="Myanmar">Myanmar</option> 
     553<option value="Namibia">Namibia</option> 
     554<option value="Nauru">Nauru</option> 
     555<option value="Nepal">Nepal</option> 
     556<option value="Netherlands">Netherlands</option> 
     557<option value="Netherlands Antilles">Netherlands Antilles</option> 
     558<option value="New Caledonia">New Caledonia</option> 
     559<option value="New Zealand">New Zealand</option> 
     560<option value="Nicaragua">Nicaragua</option> 
     561<option value="Niger">Niger</option> 
     562<option value="Nigeria">Nigeria</option> 
     563<option value="Niue">Niue</option> 
     564<option value="Norfolk Island">Norfolk Island</option> 
     565<option value="Northern Mariana Islands">Northern Mariana Islands</option> 
     566<option value="Norway">Norway</option> 
     567<option value="Oman">Oman</option> 
     568<option value="Pakistan">Pakistan</option> 
     569<option value="Palau">Palau</option> 
     570<option value="Palestinian Territory, Occupied">Palestinian Territory, Occupied</option> 
     571<option value="Panama">Panama</option> 
     572<option value="Papua New Guinea">Papua New Guinea</option> 
     573<option value="Paraguay">Paraguay</option> 
     574<option value="Peru">Peru</option> 
     575<option value="Philippines">Philippines</option> 
     576<option value="Pitcairn">Pitcairn</option> 
     577<option value="Poland">Poland</option> 
     578<option value="Portugal">Portugal</option> 
     579<option value="Puerto Rico">Puerto Rico</option> 
     580<option value="Qatar">Qatar</option> 
     581<option value="Reunion">Reunion</option> 
     582<option value="Romania">Romania</option> 
     583<option value="Russian Federation">Russian Federation</option> 
     584<option value="Rwanda">Rwanda</option> 
     585<option value="Saint Barthelemy">Saint Barthelemy</option> 
     586<option value="Saint Helena">Saint Helena</option> 
     587<option value="Saint Kitts and Nevis">Saint Kitts and Nevis</option> 
     588<option value="Saint Lucia">Saint Lucia</option> 
     589<option value="Saint Pierre and Miquelon">Saint Pierre and Miquelon</option> 
     590<option value="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</option> 
     591<option value="Samoa">Samoa</option> 
     592<option value="San Marino">San Marino</option> 
     593<option value="Sao Tome and Principe">Sao Tome and Principe</option> 
     594<option value="Saudi Arabia">Saudi Arabia</option> 
     595<option value="Senegal">Senegal</option> 
     596<option value="Serbia">Serbia</option> 
     597<option value="Seychelles">Seychelles</option> 
     598<option value="Sierra Leone">Sierra Leone</option> 
     599<option value="Singapore">Singapore</option> 
     600<option value="Slovakia">Slovakia</option> 
     601<option value="Slovenia">Slovenia</option> 
     602<option value="Solomon Islands">Solomon Islands</option> 
     603<option value="Somalia">Somalia</option> 
     604<option value="South Africa">South Africa</option> 
     605<option value="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</option> 
     606<option value="Spain">Spain</option> 
     607<option value="Sri Lanka">Sri Lanka</option> 
     608<option value="Sudan">Sudan</option> 
     609<option value="Suriname">Suriname</option> 
     610<option value="Svalbard and Jan Mayen">Svalbard and Jan Mayen</option> 
     611<option value="Swaziland">Swaziland</option> 
     612<option value="Sweden">Sweden</option> 
     613<option value="Switzerland">Switzerland</option> 
     614<option value="Syrian Arab Republic">Syrian Arab Republic</option> 
     615<option value="Taiwan, Province of China">Taiwan, Province of China</option> 
     616<option value="Tajikistan">Tajikistan</option> 
     617<option value="Tanzania, United Republic of">Tanzania, United Republic of</option> 
     618<option value="Thailand">Thailand</option> 
     619<option value="Timor-Leste">Timor-Leste</option> 
     620<option value="Togo">Togo</option> 
     621<option value="Tokelau">Tokelau</option> 
     622<option value="Tonga">Tonga</option> 
     623<option value="Trinidad and Tobago">Trinidad and Tobago</option> 
     624<option value="Tunisia">Tunisia</option> 
     625<option value="Turkey">Turkey</option> 
     626<option value="Turkmenistan">Turkmenistan</option> 
     627<option value="Turks and Caicos Islands">Turks and Caicos Islands</option> 
     628<option value="Tuvalu">Tuvalu</option> 
     629<option value="Uganda">Uganda</option> 
     630<option value="Ukraine">Ukraine</option> 
     631<option value="United Arab Emirates">United Arab Emirates</option> 
     632<option value="United Kingdom">United Kingdom</option> 
     633<option value="United States">United States</option> 
     634<option value="United States Minor Outlying Islands">United States Minor Outlying Islands</option> 
     635<option value="Uruguay">Uruguay</option> 
     636<option value="Uzbekistan">Uzbekistan</option> 
     637<option value="Vanuatu">Vanuatu</option> 
     638<option value="Venezuela">Venezuela</option> 
     639<option value="Viet Nam">Viet Nam</option> 
     640<option value="Virgin Islands, British">Virgin Islands, British</option> 
     641<option value="Virgin Islands, U.S.">Virgin Islands, U.S.</option> 
     642<option value="Wallis and Futuna">Wallis and Futuna</option> 
     643<option value="Western Sahara">Western Sahara</option> 
     644<option value="Yemen">Yemen</option> 
     645<option value="Zambia">Zambia</option> 
     646<option value="Zimbabwe">Zimbabwe</option> 
     647COUNTRIES 
     648 
     649    time_zone_options = <<-TIMEZONES 
     650<option value="A">A</option> 
     651<option value="B">B</option> 
     652<option value="C">C</option> 
     653<option value="D">D</option> 
     654<option value="E">E</option> 
     655TIMEZONES 
     656     
    395657    expected = 
    396658      "<form action='http://www.example.com' method='post'>" + 
    397659      "<input name='post[][title]' size='30' type='text' id='post__title' value='Hello World' />" + 
    398660      "<textarea name='post[][body]' id='post__body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" + 
    399661      "<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />" + 
    400662      "<input name='post[][secret]' type='hidden' value='0' />" + 
     663      "<select name='post[][category]' id='post__category'></select>" + 
     664      "<select name='post[][comments]' id='post__comments'></select>" + 
     665      "<select name='post[][country]' id='post__country'>" + country_options + "</select>" + 
     666      "<select name='post[][time_zone]' id='post__time_zone'>" + time_zone_options + "</select>" 
    401667      "</form>" 
    402668 
    403     assert_dom_equal expected, _erbout 
     669    assert_dom_equal expected.gsub("\n", ""), _erbout.gsub("\n", "") # Sorry I had to do this 
    404670  end 
    405671 
    406672  def test_nested_fields_for 
  • actionpack/lib/action_view/helpers/form_options_helper.rb

    old new  
    432432 
    433433    class FormBuilder 
    434434      def select(method, choices, options = {}, html_options = {}) 
    435         @template.select(@object_name, method, choices, options.merge(:object => @object), html_options
     435        @template.select(@object_name, method, choices, options.merge(:object => @object), @default_options.merge(html_options)
    436436      end 
    437437 
    438438      def collection_select(method, collection, value_method, text_method, options = {}, html_options = {}) 
    439         @template.collection_select(@object_name, method, collection, value_method, text_method, options.merge(:object => @object), html_options
     439        @template.collection_select(@object_name, method, collection, value_method, text_method, options.merge(:object => @object), @default_options.merge(html_options)
    440440      end 
    441441 
    442442      def country_select(method, priority_countries = nil, options = {}, html_options = {}) 
    443         @template.country_select(@object_name, method, priority_countries, options.merge(:object => @object), html_options
     443        @template.country_select(@object_name, method, priority_countries, options.merge(:object => @object), @default_options.merge(html_options)
    444444      end 
    445445 
    446446      def time_zone_select(method, priority_zones = nil, options = {}, html_options = {}) 
    447         @template.time_zone_select(@object_name, method, priority_zones, options.merge(:object => @object), html_options
     447        @template.time_zone_select(@object_name, method, priority_zones, options.merge(:object => @object), @default_options.merge(html_options)
    448448      end 
    449449    end 
    450450  end