なるようになるブログ

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

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

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

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

railties/CHANGELOG.md


Don't recommend using ActiveRecord::Base[]

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

ActiveRecord::Baseクラスのdoc内、default accessorsについて説明している箇所で、attributeの指定にActiveRecord::Base[]も指定出来る旨説明していた箇所を削除しています。

ActiveRecord::Base[]は処理が重く、セマンティックも奇妙であり、おすすめすべきではない、という事で削除したようです。


Revert "Revert "Eliminate the EventMachine dependency""

Action CableでEventMacineを使用しないよう対応したコミットをrevertしたコミット(Revert "Eliminate the EventMachine dependency" · rails/rails@9ea7aa8)をrevertしています。という訳で再度EventMachineを使用していないようになっています。

問題があった箇所については、以降のコミットで対応されています。


Fix arguments to on_close

actioncable/lib/action_cable/connection/base.rbactioncable/lib/action_cable/connection/client_socket.rbの修正です。

ActionCable::Connection::Base#on_closeの引数にreason, codeを追加しています。


Synchronize the lazy setters in Server

Action Cableの修正です。

ActionCableのServerのsetterをMutexを使用してスレッドセーフになるよう修正しています。


Add a couple of tests that connect with a WS client

Action Cableのテストの修正です。

WebSocketのクライアントを使用してのテストを追加しています。WebSocketのライブラリにはfaye/faye-websocket-ruby: Standards-compliant WebSocket client and serverを使用しています。


Handle more IO errors (especially, ECONNRESET)

actioncable/lib/action_cable/connection/stream_event_loop.rbの修正です。

event loopで、ECONNRESET(クライアントからの切断)が発生した場合の対応を追加しています。


Be more patient while gathering the expected responses

actioncable/test/client_test.rbの修正です。

clientでメッセージを読み取る歳、期待するメッセージサイズ分読み取るまでwaitするよう修正しています。


Reduce the client count, in hope of a more consistent test

actioncable/test/client_test.rbの修正です。

テストで使用するクライアントの数を20から10に減らしています。テストを安定させる為、ですかねえ。


Keep the socket reference after close

actioncable/test/client_test.rbの修正です。

puma serverを起動するメソッドの後処理で、サーバーの停止を行う際に、サーバーのインスタンスが生成済みかどうかのチェックを行うよう修正しています。同様に、スレッドの終了処理を待つ際にもスレッドのインスタンスが生成済みかどうかチェックを行うようにしています。


remove require logging

actioncable/README.mdの修正です。

不要なloggingファイルのrequieを削除しています。


Intervene on change_table as well as create_table

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

create_tableメソッド同様に、change_tableメソッドでもmigrationのcompatibility用メソッドを実行するよう対応しています。


Don't bother stopping EM between tests

actioncable/test/client_test.rbの修正です。

テストの度にEventMachineの起動 / 停止を行っていたのを、必要に応じて起動だけを行い、停止は行わないよう修正しています。


Add additional documentation on Headers#[] [ci skip]

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

Headers#[]メソッドのdocに、headerに複数の値を指定した場合のexampleを追加、及びダッシュ(-)とアンダースコア(_)はどちらもアンダースコアに変換される旨説明を追加しています。

# GET / HTTP/1.1
# ...
# User-Agent: curl/7.43.0
# X_Custom_Header: token

headers["X_Custom_Header"] # => nil
headers["X-Custom-Header"] # => "token"

Use a gentler disconnect

actioncable/test/client_test.rbの修正です。

テスト内で、クライアントのclose処理にclose!を使用していたのをcloseを使用するよう修正しています。

コミットログ見る限り、Travisでの実行時に何か問題があった為、な感じなんですかねえ。


Merge pull request #23317 from rfmanuel/after-bundle-in-rails-plugin-template

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

Rails plugin templateにafter_bundle callbackを追加しています。名前の通りで、bundle install実行後に行う処理を定義する事が出来ます。


remove unused variable from render test

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

renderのテストから、使用していないresponse変数を削除しています。


remove unused require

actionpack/lib/action_dispatch/testing/test_process.rbの修正です。

使用していないactive_support/core_ext/hash/indifferent_accessのrequireを削除しています。


Warn if AR.primary_key is called for a table who has composite primary key

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

primary_keyメソッドcomposite primary keyを使用しているテーブルを指定した場合に、Railsではcomposite primary keyをサポートしていない旨ワーニングメッセージを出力するよう修正しています。


Refactor OID::Money.precision

activerecord/lib/active_record/connection_adapters/postgresql/oid/money.rbactiverecord/lib/active_record/connection_adapters/postgresql_adapter.rbの修正です。

OID::Money.precisionメソッドリファクタリングを行っています。

元々、PostgresSQL 8.2以下用のコードがあったのですが、Rails 5ではPostgreSQL 9.1以上のみサポートする方針らしく、PostgresSQL 8.2以下用のコードは削除しています。


Explicitly define columns method as an interface

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

ActiveRecord::ConnectionAdapters::SchemaStatements#columnsメソッドで、他のメソッド同様NotImplementedErrorエラーをraiseするよう修正しています。


Refactor column_exists? in SchemaStatements

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

SchemaStatements#column_exists?メソッドリファクタリングを行っています。

        column_name = column_name.to_s
-        columns(table_name).any?{ |c| c.name == column_name &&
-                                      (!type                     || c.type == type) &&
-                                      (!options.key?(:limit)     || c.limit == options[:limit]) &&
-                                      (!options.key?(:precision) || c.precision == options[:precision]) &&
-                                      (!options.key?(:scale)     || c.scale == options[:scale]) &&
-                                      (!options.key?(:default)   || c.default == options[:default]) &&
-                                      (!options.key?(:null)      || c.null == options[:null]) }
+        checks = []
+        checks << lambda { |c| c.name == column_name }
+        checks << lambda { |c| c.type == type } if type
+        [:limit, :precision, :scale, :default, :null].each do |attr|
+          checks << lambda { |c| c.send(attr) == options[attr] } if options.key?(attr)
+        end
+
+        columns(table_name).any? { |c| checks.all? { |check| check[c] } }

SchemaStatements#index_exists?メソッドと同じような実装となるようリファクタリングしたようです。


Make SchemaMigration.drop_table to one SQL

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

元々明示的にindexの削除をしてからtableをdropしていたSchemaMigration.drop_tableメソッドを、tableのdrop処理のみ行うよう修正しています。table dropするとindexも自動で削除される為。


remove unnecessary gsub for action_cable_meta_tag

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

skip_action_cableオプションを指定した場合に、application.html.erbからaction_cable_meta_tagメソッドの呼び出しを削除する処理があったのを、削除しています。

そもそもapplication.html.erbテンプレートの方で、skip_action_cableオプションを指定した場合にaction_cable_meta_tagメソッドを呼び出さないようにしており、別途削除処理を行う必要は無い為。


Handle response_body= when body is nil

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

Metal#response_body=メソッドがbodyがnilだった場合にエラーで落ちてしまっていたのを、正しく値を返すよう修正しています。