なるようになるブログ

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

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

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

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

activerecord/CHANGELOG.md


Merge pull request #25570 from y-yagi/remove_useless_parameter

activesupport/lib/active_support/core_ext/module/attribute_accessors_per_thread.rbの修正です。

Module#thread_mattr_accessorメソッドから、使用していないblock引数を削除しています。


Merge pull request #26160 from prathamesh-sonpatki/use-encoding-from-metal

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

ActionController::ParameterEncoding#encoding_for_paramメソッドでparameter encodingが指定されてない場合に、Encoding::UTF_8を返すようになっていたのを、親クラスのメソッドを呼び出すよう修正しています。

        if @_parameter_encodings[action.to_s] && @_parameter_encodings[action.to_s][param.to_s]
           @_parameter_encodings[action.to_s][param.to_s]
         else
-          ::Encoding::UTF_8
+          super
         end

ActionController:Metalでデフォルトのencodingは定義済みなので、そちらを使用する為にとの事です。


Clarify use of update task on 4.2 and earlier [ci skip]

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

The Update Taskの項の、rails:update taskについて説明している箇所に、rakeコマンドを追加しています。


Fix deadlock that can occur when child live thread tries to load a constant after writing to the stream.

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

ActionController::Live::SSE#writeでデータを書き込み後にconstantのloadを行った際に、deadlockが発生してしまうバグがあったのを修正しています。

マルチスレッドで処理を行っている際にload処理を行う事を許可する為のメソッドの呼び出しが不足していた為発生してしまっていたようです。


Eager autoload ActiveRecord::TableMetadata

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

ActiveRecord::TableMetadataをeager autoloadするよう修正しています。

Active Job 経由でActive Recordにアクセスした場合に、ActiveRecord::TableMetadataがloadされておらずエラーになるバグがあった為修正されています。


Add three new rubocop rules

rubocopのルールにStyle/SpaceBeforeBlockBracesStyle/SpaceInsideBlockBracesStyle/SpaceInsideHashLiteralBracesを追加、及びアプリ全体に左記ルールを適用しています。


Merge pull request #26130 from yui-knk/drop_table

railties/test/json_params_parsing_test.rbの修正です。

json paramsに関するテストの後処理で、テスト内で作ったテーブルを削除するよう処理を追加しています。


Merge pull request #26157 from y-yagi/remove_test_mailers_when_skipping_action-mailer

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

skip-action-mailerオプションを指定してRailsアプリを作成した際に、test/mailersディレクトリを削除するよう修正しています。


Merge pull request #26019 from agrobbin/schema-load-unique-column-indices

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

一つのカラム対して複数のindexを設定出来るよう対応しています。

ActiveRecord::Schema.define do
  create_table :sponsorships do |t|
    t.string "user_id"
    t.index ["user_id"], name: "index_sponsorships_on_user_id_unique", unique: true, where: "(status = 1)", using: :btree
    t.index ["user_id"], name: "index_sponsorships_on_user_id", using: :btree
  end
end

上記のような使い方が出来るようになっています。なるほど。


Merge pull request #26162 from kamipo/take_respects_dirty_target https://github.com/rails/rails/commit/426ea715fd7522653c131076bd321e4caab40e8e

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

CollectionProxy#takeメソッドでdirty targetについての考慮がされてなかったのですが、#first#last等はされていた為、処理を合わせる為#takeでもdirty targetを正しく取得出来るよう修正しています。


Merge pull request #26156 from sfaxon/route_visualizer_fix

actionpack/lib/action_dispatch/journey/router.rbの修正です。

ActionDispatch::Journey::Router#partitioned_routesメソッドで既に存在しないRoutes#partitioned_routesメソッドを使用していたのを、使用しないよう修正しています。


Merge pull request #26155 from kamipo/refactor_quoted_columns_for_index

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

ActiveRecord::ConnectionAdapters::SchemaStatements#quoted_columns_for_indexメソッドをリファクタリングし、optionに関する処理を#add_options_for_index_columnsメソッドに切り出しています。


Merge pull request #26151 from kamipo/avoid_to_allow_unused_splat_args

activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rbactiverecord/lib/active_record/migration/compatibility.rbの修正です。

create_tabletimestampsにはsplat argsが渡せるようになっているのですが、change_tabletimestampsには渡せないようになっていない、かつ、splat argsは使用していない為、create_tableの方のtimestampsにもsplat argsは渡せないよう修正しています。


Merge pull request #26097 from Dagnan/fix_recordnotfound_args_rebased

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

association経由でfindを行い、かつ、recordが存在せずRecordNotFoundが発生した場合に、エラーになったクラスのmodel、primary_key、idが取得出来なかったのを、値を取得出来るよう修正しています。

association.find(0)

# before
exception.inspect
#=> #<ActiveRecord::RecordNotFound: Couldn't find Client with 'id'=0 [WHERE \"companies\".\"type\" IN ('Client', 'SpecialClient', 'VerySpecialClient') AND \"companies\".\"firm_id\" = ? AND \"companies\".\"type\" IN ('Client', 'SpecialClient', 'VerySpecialClient')]>

exception.id # => nil
exception.model #=> nil
exception.primary_key #=> nil

# after
exception.inspect
# => #<ActiveRecord::RecordNotFound: Couldn't find Client with 'id'=0 [WHERE \"companies\".\"type\" IN ('Client', 'SpecialClient', 'VerySpecialClient') AND \"companies\".\"firm_id\" = ? AND \"companies\".\"type\" IN ('Client', 'SpecialClient', 'VerySpecialClient')]>
exception.id  # => 0
exception.primary_key # => "id"
exception.model # => "Client"

Merge pull request #26074 from kamipo/where_by_attribute_with_array_or_range

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

predicate builderにarrayrange attribtueの値を渡した際に正常にbuild処理が行われてなかったのを修正しています。


Merge pull request #26117 from kamipo/make_association_quary_to_preparable_step1

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

ActiveRecord::PredicateBuilderクラスのリファクタリングを行っています。

現状、association queriesにprepared statementが使われておらず、association queriesでもprepared statementが使われれるようにする為の対応の第一弾との事です。


Add array column documentation

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

add_columnメソッドのdocにadd_columnメソッドにarray: trueオプションを指定した場合の説明を追加しています。


Merge pull request #26094 from igorkasyanchuk/master

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

Unpermitted parameterをログに出力する際に、parameterをSymbolとしてログに出力するよう修正しています。そのままコピーして使えるようにしたい為、との事です。


Merge pull request #26175 from stomar/upgrade-guide-fix

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Active Record Models Now Inherit from ApplicationRecord by Defaultの項に、全てのmodelの親クラスを変更する必要がある旨説明を追加しています。


Merge pull request #26061 from malclocke/specify_ar_message_interpolation_names_in_i18n_guide

rails guideのRails Internationalization (I18n) APIの修正です。

Error Message Interpolationの項に、model nameはmodel、attribute nameはattribute、valueはvalueでそれぞれ値を参照出来る旨説明を追加しています。


Makes touch_later respects no_touching policy

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

touch_laterメソッドを実行する際に、no_touchingの設定を確認し、no_touchingがtrueの場合はtouch処理を行わないよう修正しています。