なるようになるブログ

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

rails commit log流し読み(2016/08/19)

2016/08/19分のコミットです。

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

activerecord/CHANGELOG.md

railties/CHANGELOG.md

actionpack/CHANGELOG.md


[ci skip] Updates ActiveJob guide on default runner.

rails guideのActive Job Basicsの修正です。

The Purpose of Active Jobの項にデフォルトのadapterはinline(すぐ実行されるもの)である旨説明されていたのですが、Rails 5.0.0からasync adapter(非同期実行)に変わったので、その旨説明を修正しています。


Merge pull request #26197 from kamipo/remove_unnecessary_test_sql_for_insert_with_returning_disabled

activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rbactiverecord/test/cases/adapters/postgresql/postgresql_adapter_test.rbの修正です。

test_sql_for_insert_with_returning_disabledを削除しています。 現状、sql_for_insertメソッドはuse_insert_returning?がtrueの場合の時のみよばれる為。


Merge pull request #25999 from kamipo/remove_sanitize_conditions

activerecord/lib/active_record/querying.rbactiverecord/lib/active_record/sanitization.rbの修正です。

sanitize_conditionsをdeprecateにしています。今後はsanitize_sqlを使うようにとの事です。


Merge pull request #26200 from kamipo/remove_unnecessary_ordinal_methods

Active Recordの修正です。

CollectionAssociationクラスからordinal methods(firstlast等)を削除しています。

元々はCollectionProxyからCollectionAssociationを経由してRelationのメソッドを呼ぶようになっていたのですが、今はCollectionProxyRelationを継承しており、直接メソッドを参照出来る為、不要になったCollectionAssociationからメソッドを削除したとの事です。


Merge pull request #24099 from k0kubun/preserve-readonly

activerecord/lib/active_record/associations/join_dependency.rbactiverecord/lib/active_record/associations/preloader/association.rbactiverecord/lib/active_record/reflection.rbの修正です。

associationsをeager loadした際に、readonlyではないassociationでもreadonlyが設定されてしまっていたのを、readonlyではないassociationについてはreadonlyが設定されないよう修正しています。


Remove text default treated as an empty string in non-strict mode

Active Recordの修正です。

DBにMySQLを指定した場合、かつ、strict modeを指定していなかった場合に、text型のデフォルトを空文字として扱っていたのを、空文字として扱わない(他の型同様nullにする)よう修正しています。

text/blob 型のみ上記のような特殊な処理が入っており、他の型と挙動を合わせる為、修正したとの事です。


run before_configuration callbacks as soon as application constant inherits from Rails::Application

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

before_configuration callbackが、Rails::Applicationを継承したapplicationが定義された時点で実行されるよう修正しています。

Rails 4.1までは上記挙動になっていたのですが、Rails 4.2でRails::Applicationを継承したapplicationのインスタンスを生成したタイミングで実行するようになってしまっており、Rails 4.1までと同じ挙動になるよう修正しています。


Merge pull request #26089 from travisoneill/sqlite_rollback_fix

activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rbactiverecord/lib/active_record/connection_adapters/abstract/schema_statements.rbの修正です。 DBにsqlite3を使用、かつ、migrationファイルでカラムを指定する際に、存在しない型をカラムに指定した場合に、migrationのrollback処理でエラーになってしまっていたバグがあったのを修正しています。


Revert "sql_for_insert returns values for passing to exec_insert"

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

ActiveRecord::ConnectionAdapters::DatabaseStatements#sql_for_insertメソッドの戻り値からpk, sequence_nameを削除しています。

        def sql_for_insert(sql, pk, id_value, sequence_name, binds)
-          [sql, binds, pk, sequence_name]
+          [sql, binds]
         end

元々は不要なqueryの発行を避ける為返すようにしていたのですが、`sql_for_insert` should be called inside `exec_insert`の対応により不要になった為削除したとの事です。


Merge pull request #25989 from kamipo/remove_unnecessary_select_for_collection_proxy

activerecord/lib/active_record/associations/collection_association.rbactiverecord/lib/active_record/associations/collection_proxy.rbの修正です。

CollectionAssociation及びCollectionProxyクラスからselectメソッドを削除しています。

元々はCollectionProxyからCollectionAssociationを経由してRelationのメソッドを呼ぶようになっていたのですが、今はCollectionProxyRelationを継承しており、直接メソッドを参照出来る為、不要になったCollectionAssociationからメソッドを削除したとの事です。


Add chengelog entry to #25976

pluckメソッドで、recordsをload済みの場合、load済みのrecordsを使用するよう対応した、`pluck` should use `records` (`load_target`) when `loaded?` is trueの対応について、CHANGELOGにentryを追加しています。


Merge pull request #25675 from TimPetricola/schema-no-standardized-column-widths

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

schema.rbを生成する際に、引数や型のスペースの自動整形を行うかどうかを指定する為のActiveRecord::SchemaDumper.standardized_argument_widthsActiveRecord::SchemaDumper.standardized_type_widthsオプションを追加しています。

例えば、下記のようなテーブル作成用のメソッドががあったとします。

create_table "delayed_jobs", force: :cascade do |t|
  t.integer  "priority",   default: 0, null: false
  t.integer  "attempts",   default: 0, null: false
  t.text     "handler",                null: false
  t.text     "last_error"
  t.datetime "run_at"
  t.datetime "locked_at"
  t.datetime "failed_at"
  t.string   "locked_by"
  t.string   "queue"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.index ["priority", "run_at"], name: "delayed_jobs_priority"
end

ActiveRecord::SchemaDumper.standardized_type_widthsにfalseを指定すると、下記のようになります。型の長さに関わらず、スペースが一つに統一されています。

create_table "delayed_jobs", force: :cascade do |t|
  t.integer "priority",   default: 0, null: false
  t.integer "attempts",   default: 0, null: false
  t.text "handler",                null: false
  t.text "last_error"
  t.datetime "run_at"
  t.datetime "locked_at"
  t.datetime "failed_at"
  t.string "locked_by"
  t.string "queue"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.index ["priority", "run_at"], name: "delayed_jobs_priority"
end

ActiveRecord::SchemaDumper.standardized_argument_widthsにfalseを指定すると、下記のようになります。null: falseの位置を無理にスペースで調整、というような事はしなくなっています。

create_table "delayed_jobs", force: :cascade do |t|
  t.integer  "priority", default: 0, null: false
  t.integer  "attempts", default: 0, null: false
  t.text     "handler", null: false
  t.text     "last_error"
  t.datetime "run_at"
  t.datetime "locked_at"
  t.datetime "failed_at"
  t.string   "locked_by"
  t.string   "queue"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.index ["priority", "run_at"], name: "delayed_jobs_priority"
end

migrationを実行した際に、関係な部分までdiffが出てしまうのを避けるようにする為追加したとの事です。地味に良さそう。


Merge pull request #26212 from evmunro/as-json-sets-request-to-json-for-controller-test

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

ActionController::TestCase#process及び、http method用のメソッド(getpost等)でContent typeを指定するためのasオプションを追加しています。

例。

post :render_body, params: { bool_value: true, str_value: "string", num_value: 2 }, as: :json

ActionController::Testcase、まだ手をいれるのOKなんですね。今後どういう扱いにするんだろう。


Copy edits in the documentation [ci skip]

actionpack/CHANGELOG.mdactionpack/lib/action_controller/test_case.rbのdocの修正です。

フォーマットの修正を行っています。


Remove unused blob_or_text_column? method

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

使用していないblob_or_text_column?メソッドを削除しています。


Merge pull request #26218 from kamipo/remove_unnecessary_length

activerecord/lib/active_record/associations/collection_association.rbactiverecord/lib/active_record/associations/collection_proxy.rbの修正です。

CollectionAssociation及びCollectionProxyクラスからlengthメソッドを削除しています。

lengthrecordsdelegateするようになっており、上記クラスには不要な為との事です。