なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2015/12/31)

2015/12/31分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

actionview/CHANGELOG.md

activesupport/CHANGELOG.md

actionpack/CHANGELOG.md


Merge pull request #22241 from kamipo/add_columns_for_distinct_for_mysql57

activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rbの修正です。

MySQLのadapterに、引数のカラム名ORDER BY句からSELECT DISTINCTの為のカラムを生成する#columns_for_distinctメソッドを追加しています。

元々はORDER BY句の値に関係無く引数のcolumnsの値をそのまま返すだけだったのですが、MySQL 5.7.5から、ONLY_FULL_GROUP_BYSELECT DISTINCTORDER BY句にも影響を与えるようになり、ORDER BY句に指定したカラム名SELECT DISTINCTに指定する必要が出来た為、ORDER BY句に指定したカラム名も返すようメソッドを追加したようです。

# before
ActiveRecord::Base.connection.columns_for_distinct("posts.id", ["posts.created_at desc", "posts.position asc"])
#=> "posts.id"

# after
ActiveRecord::Base.connection.columns_for_distinct("posts.id, posts.name", ["posts.created_at desc", "posts.id"])
#=> "posts.id, posts.name, posts.created_at AS alias_0, posts.id AS alias_1"

参考:MySQL :: MySQL 5.7 Reference Manual :: 12.20.3 MySQL Handling of GROUP BY


Fix test for AC::Parameters#to_unsafe_h

actionpack/test/controller/parameters/parameters_permit_test.rbの修正です。

ActionController::Parameters#to_unsafe_hメソッドのテストで、ActionController::Parameters#to_hメソッドを使用してしまっていたのを、正しく#to_unsafe_hメソッドを使用するよう修正しています。


Avoid Time.parse for static date

actionpack/lib/action_controller/metal/conditional_get.rbの修正です。

固定の値からTimeインスタンスを生成するのに、Time.parseを使用していたのを、Time.newを使用するよう修正しています。

      yield if stale?(etag: "#{version}-#{request.fullpath}",
-                      last_modified: Time.parse('2011-01-01').utc,
+                      last_modified: Time.new(2011, 1, 1).utc,

Time.newの方が早い為、との事です。コミットログに記載されてあったベンチマークは下記の通りです。

  Benchmark.ips do |x|
    x.report('Time.parse') { Time.parse('2011-01-01') }
    x.report('Time.new')   { Time.new(2011, 1, 1) }
  end
  Calculating -------------------------------------
            Time.parse     6.640k i/100ms
              Time.new    15.082k i/100ms
  -------------------------------------------------
            Time.parse     71.915k (± 3.1%) i/s -    365.200k
              Time.new    167.645k (± 3.3%) i/s -    844.592k

Add sass-rails back to the default Gemfile

railties/lib/rails/generators/app_base.rbの修正です。

デフォルトのGemfileにsass-railsが記載されるよう修正しています。

Use sprockets 3 in the Rails 5 release · rails/rails@877a411で誤って削除してしまい、それを戻したとの事です。


[ci skip] Update rails/all.rb reference.

rails guideのThe Rails Initialization Processの修正です。

railties/lib/rails/all.rbのコードを記載している箇所が、実際のコードの異なっていたのを、実際のコードと同じ内容に修正しています。


[ci skip] Space out framework names in USAGE

railties/lib/rails/generators/rails/model/USAGErailties/lib/rails/generators/rails/scaffold/USAGEの修正です。

Active ModelActiveModelに、Active RecordActiveRecordにそれぞれタイポしている箇所があったのを修正しています。


Fix typo: test -> text

rails guideのA Guide to Testing Rails Applicationsの修正です。

What to Include in your Functional Testsの項で、scaffold_controllerの実行例を記載している箇所でbody:textbody:testにタイポしていたのを修正しています。


Fix collection_radio_buttons' hidden_field name and make it appear before the radios

actionview/lib/action_view/helpers/tags/collection_check_boxes.rbactionview/lib/action_view/helpers/tags/collection_helpers.rbの修正です。

collection_radio_buttonsメソッドでhidden fieldのnameに不要な[]がついてしまったのを削除、及び実際のtagより先にhidden fieldを表示するよう修正しています。hidden fieldタグで実際の値の方を上書きしてしまうのを防ぐ為、のようです。


Merge pull request #12877 from aroben/extended-graphemes

activesupport/lib/active_support/multibyte/unicode.rbの修正です。

ActiveSupport::Multibyte::Unicode moduleに、拡張書記素クラスタ(extended grapheme cluster)とUnicode標準附属書29(UAX #29)のサポートを追加しています。


Add CHANGELOG entry for #12877 [ci skip]

先のunicodeの対応についてCHANGELOGに追記しています。


Merge pull request #22826 from timrogers/actiondispatch-ssl-config

actionpack/lib/action_dispatch/middleware/ssl.rbの修正です。

ActionDispatch::SSLクラスで、secure cookiesを使用するかどうかを#newメソッドsecure_cookies引数で指定出来るよう対応、及び#newメソッドredirect引数がnil / falseだった場合、httpからhttpsへの強制redirect処理は行わないよう対応しています。


Merge pull request #22105 from morgoth/fix-errors-details-on-autosave-associations

activerecord/lib/active_record/autosave_association.rbの修正です。

Autosave Associationを使用していエラーになった際に、Add ActiveModel::Errors#detailsにそのエラー情報の詳細が格納されないバグがあったのを修正しています。


Lets not put fullstop at the end of a migration pending command

activerecord/lib/active_record/migration.rbの修正です。

PendingMigrationErrorが発生した場合のエラーメッセージにの末尾からピリオドを削除しています。

-        super("Migrations are pending. To resolve this issue, run:\n\n\tbin/rails db:migrate RAILS_ENV=#{::Rails.env}.")
+        super("Migrations are pending. To resolve this issue, run:\n\n\tbin/rails db:migrate RAILS_ENV=#{::Rails.env}")

表示されたメッセージを使用して再実行するのに、あると邪魔だから、という理由のようです。


Fix AC::Parameters#to_unsafe_h to return all unfiltered values

actionpack/lib/action_controller/metal/strong_parameters.rbの修正です。

ActionController::Parametersの値がnestしたActionController::Parametersだった場合に、ActionController::Parameters#to_unsafe_hがpermitしていない値をかえさないバグがあったのを修正しています。

foo = ActionController::Parameters.new("f"=>{"language_facet"=>["Tibetan"]})
foo['f'].class #=> ActionController::Parameters

# before
foo.to_unsafe_h  #=> {"f"=>{}}

# after
foo.to_unsafe_h  #=> {"f"=>{"language_facet"=>["Tibetan"]}}