なるようになるブログ

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

rails commit log流し読み(2016/01/29)

2016/01/29分のコミットです。

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

activerecord/CHANGELOG.md

activesupport/CHANGELOG.md


Reworked ActiveRecord::Relation#last to always use SQL

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

ActiveRecord::Relation#lastリファクタリングを行っています。

  1. relationがロード済みの場合、常にSQLは発行せずRubyでのみ処理を行う
  2. relationがロードされていない場合、常にSQLを発行する
  3. 自動的にreverse出来ないようなSQLを発行するのはdeprecateになった(Rails 5.1ではActiveRecord::IrreversibleOrderErrorがthrowされる)

CHANGELOGより。

Topic.order("title").load.last(3)
  # before: SELECT ...
  # after: No SQL

Topic.order("title").last
  # before: SELECT * FROM `topics`
  # after:  SELECT * FROM `topics` ORDER BY `topics`.`title` DESC LIMIT 1

Topic.order("coalesce(author, title)").last
  # before: SELECT * FROM `topics`
  # after:  Deprecation Warning for irreversible order

Regression test for rendering file from absolute path

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

renderメソッド絶対パスでファイルを指定した場合に、エラーになる事を確認するテストを追加しています。


Bundle update to fix tests locally

Gemfile.lockの修正です。

bundle updateを実行し、Gemfile.lockを更新しています。


Run file.close before unlinking for travis

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

renderメソッド絶対パスでファイルを指定した場合にエラーになる事を確認するテストで、テストの後処理でunlinkメソッドでファイルを削除しているのですが、削除を行う前にcloseでファイルをクローズするよう修正しています。


Put "Using Rails for API-only Applications" in table of contents

guides/source/documents.yamlの修正です。

Rails guideのリストにUsing Rails for API-only Applications(Rails APIのguide)を追加しています。


Merge pull request #23220 from maclover7/fix-23215

railties/lib/rails/rack/logger.rbの修正です。

envがdevelopmentだった場合、requestの間に空行が2行追加されていたのを、追加されないよう対応しています。

       def call_app(request, env)
-        # Put some space between requests in development logs.
-        if development?
-          logger.debug ''
-          logger.debug ''
-        end

Tag the blank log line between dev requests so it's easier to filter … · rails/rails@1a70499 で追加されたもので、filterをしやすする為だったようなのですが、assetのrequestが並列に実行されるようになってしまい、不要な空行が大量に発生する、というような事がおこるようになってしまった為、削除したようです。


convert AcceptList to a regular class

actionpack/lib/action_dispatch/http/mime_type.rbの修正です。

Mime::Type::AcceptListクラスの親クラスにArrayを指定していたのをやめています。

外部から実行されるクラスではなく、別にArrayを継承している必要性も無い為、修正したようです。


Mark API guide as work in progress

guides/source/documents.yamlの修正です。

Using Rails for API-only Applications guideにwork_in_progress: trueを設定しています。まだレビューが出来てない為、との事です。


Middleware have no plural

rails guideのUsing Rails for API-only Applicationsの修正です。

middlewaresを単数形(middleware)に修正しています。


Remove Rack::Lock from the API guides

rails guideのUsing Rails for API-only Applicationsの修正です。

使用しなくなったRack::Lockについての説明を削除しています。


Docs review of api_app.md

rails guideのUsing Rails for API-only Applicationsの修正です。

グラマーの修正、及び使用しているけど説明が行われてなかったmiddlewareについての説明の追加等を行っています。


speed up accept header parsing a bit.

actionpack/lib/action_dispatch/http/mime_type.rbの修正です。

paramsのパース処理のリファクタリングを行っています。ちょっと高速化しているとのことです。

コミットログより。

require 'benchmark/ips'
require 'action_dispatch/http/mime_type'
require 'active_support/all'

accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'

Benchmark.ips do |x|
  x.report "omg" do
    Mime::Type.parse(accept)
  end
end

Before:

[aaron@TC actionpack (master)]$ be ruby ../x.rb
Calculating -------------------------------------
                 omg     3.181k i/100ms
-------------------------------------------------
                 omg     35.062k (±12.8%) i/s -    174.955k
[aaron@TC actionpack (master)]$ be ruby ../x.rb
Calculating -------------------------------------
                 omg     3.153k i/100ms
-------------------------------------------------
                 omg     33.724k (±12.4%) i/s -    167.109k
[aaron@TC actionpack (master)]$ be ruby ../x.rb
Calculating -------------------------------------
                 omg     3.575k i/100ms
-------------------------------------------------
                 omg     37.251k (±10.4%) i/s -    185.900k

After:

[aaron@TC actionpack (master)]$ be ruby ../x.rb
Calculating -------------------------------------
                 omg     3.365k i/100ms
-------------------------------------------------
                 omg     40.069k (±16.1%) i/s -    198.535k
[aaron@TC actionpack (master)]$ be ruby ../x.rb
Calculating -------------------------------------
                 omg     4.168k i/100ms
-------------------------------------------------
                 omg     47.596k (± 7.7%) i/s -    237.576k
[aaron@TC actionpack (master)]$ be ruby ../x.rb
Calculating -------------------------------------
                 omg     4.282k i/100ms
-------------------------------------------------
                 omg     43.626k (±17.7%) i/s -    209.818k

frozen-string-literalが指定されているのですが、Railsのコード内で指定されたの始めてな気がします。


Getting Started Guide: Update Ruby version to 2.3.0p0

rails guideのGetting Started with Railsの修正です。

Installing Railsの項、ruby -vで表示されるバージョンの情報をruby 2.2.2p95からruby 2.3.0p0に更新しています。


Merge pull request #22800 from dgynn/pr_cache_helper_options

actionview/lib/action_view/helpers/cache_helper.rbの修正です。

cache_fragment_nameメソッドの引数に任意の値を指定する為の_options引数を追加しています。

Rails 4系までは普通に使用出来ていたのですが、Fix cache issue when different partials use the same collection · rails/rails@da16745の対応の際に誤って削除されてしまっていたようです。


Merge pull request #23296 from radar/cache-fragment-name-options

actionview/lib/action_view/helpers/cache_helper.rbの修正です。

Rails 5.0.0.beta1で、cacheメソッドexpires_inオプションを指定した場合に正しく動作しないバグがあったのを修正しています。

cacheメソッドからcache_fragment_nameメソッドを呼び出しているのですが、Fix cache issue when different partials use the same collection · rails/rails@da16745cache_fragment_nameメソッドの引数にキーワード引数を使用するようになった影響で、オプションが正しく渡せなくなっていたのが問題だったようです。キーワード引数を使用するようになったオプションについては、sliceして値を個別に渡すようにして対応しています。


Change number_to_currency behavior for checking negativity

activesupport/lib/active_support/number_helper/number_to_currency_converter.rbの修正です。

number_to_currencyメソッドで負の値のチェックにto_f.phaseメソッドを使用していたのを、to_f.negativeメソッドを使用するよう修正しています。

to_f.phaseだと"-0.0"の時に正の値になってしまう為、との事です。

-0.0.to_f.negative? #=> false
-0.0.to_f.phase #=> 3.14

Float#phaseメソッドを始めて知りました。Class: Float (Ruby 2.3.0)


Merge pull request #23188 from jcoleman/ar-connection-execute-docs-clarification

activerecord/lib/active_record/connection_adapters/abstract/database_statements.rbactiverecord/lib/active_record/connection_adapters/postgresql/database_statements.rbのdocの修正です。

DatabaseStatements#executeメソッドのdocに、メモリの使い方についての説明を追加しています。


Merge pull request #23252 from kamipo/remove_limit_11

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

Rails 2.0ようのコンパチとして残っていた、migrationでinteger型のlimitオプションに11を指定した場合にint(11)マッピングする処理を削除しています。


Fix broken number_to_currency tests

activesupport/lib/active_support/number_helper/number_to_currency_converter.rbの修正です。

不足していたactive_support/core_ext/numeric/inquiryのrequireを追加しています。