なるようになるブログ

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

rails commit log流し読み(2016/07/20)

2016/07/20分のコミットです。

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

activerecord/CHANGELOG.md

railties/CHANGELOG.md


Fix ActionView::Helpers#current_page? with issue in https://github.com/rails/rails/issues/19472

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

ActionView::Helpers#current_page?メソッドがtrailing slash付きのURLのチェックを正しく行えないバグがあったのを修正しています。


Add a new rule to rubocop

.rubocop.ymlの修正です。

Lint/EndAlignmentのルールを追加しています。


Merge pull request #25868 from kamipo/fix_payload_class_name_to_spec_name

Active Recordの修正です。

connection接続用に使用するpayloadデータの名前をpayload[:class_name]からpayload[:spec_name]に修正しています。

Refactor connection handlerでconnection管理はclassではなくspecの名前で行われるようになったので、それに合わせて修正しています。


Merge pull request #25869 from kamipo/specificiation_id_was_renamed_to_spec_name

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

#retrieve_connectionでraiseするエラーのエラーメッセージに、不要なidという文字が残ってしまっていたのを削除しています。


Merge pull request #25822 from mechanicles/clear-local-cache-on-invalid-parameters-error

activesupport/test/caching_test.rbの修正です。

Middlewareでinvalid parameters errorが起きた際に、local cacheがクリアされる事を確認するテストを追加しています。


Merge pull request #25834 from alpaca-tc/fixes_multiparameter_attributes_on_time_with_time_zone_aware_attributes

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

time_zone_aware_attributesがtrue、かつ、multi-parameter attributesに不正な値を渡した場合に、ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter#set_time_zone_without_conversionでexceptionがraiseされてしまうバグがあったのを修正しています。

不正なパラメータが渡された場合、#set_time_zone_without_conversionの引数がnilになってしまうのですが、#set_time_zone_without_conversionの中で引数がnilの場合のケアが不足していた為、エラーになっていたので、nilの場合のケアを追加し対応しています。


Merge pull request #25393 from gsamokovarov/introduce-assert-changes

activesupport/lib/active_support/testing/assertions.rbの修正です。

ActiveSupport::Testing::Assertions moduleに、assert_changesassert_no_changes assertionを追加しています。名前の通りで、特定の項目が指定した値に変わった事を確認する事が出来るassertionです。

例。

assert_changes -> { Status.all_good? } do
  post :create, params: { status: { ok: false } }
end

上記の例だと、post :create, params: { status: { ok: false } }を実行した結果、Status.all_good?がtrueになればsuccess、という事になります。変化後の値は、toオプションで任意の値を指定できます。

user = User.start_registration
assert_changes 'user.token', to: /\w{32}/ do
  user.finish_registration
end

また、fromオプションを指定する事で、変化前の値についても指定可能です。

assert_changes :@object, from: nil, to: :foo do
  @object = :foo
end

assert_no_changesは、特定の項目の値が変わらなければOKとなっています。

assert_no_changes 'Status.all_good?' do
  post :create, params: { status: { ok: true } }
end

Merge pull request #25828 from bogdanvlviv/ref_default_sequence_name

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

ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements#default_sequence_namepk引数のデフォルトにidを指定するよう修正しています。

元々のデフォルトはnilだったのですが、メソッド内で値がnilだった場合、idを使用するようになっていた為、そもそもデフォルト自体をidにしてしまっています。


Merge pull request #25849 from suginoy/fix_merge_in_scope

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

scopeの中で最初にmergeメソッドをよぶとNoMethodErrorが発生してしまうバグがあったのを修正しています。

ActiveRecord::Querying moduleがdelegateするメソッドの一覧に:mergeが無かった為エラーになっていました。


Merge pull request #25823 from mechanicles/missing-memory-store-tests

activesupport/test/caching_test.rbの修正です。

cacheにmemory storeを使用した場合のテストを追加しています。


Merge pull request #25888 from kamipo/use_conn_to_sql_for_construct_sql

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

ActiveRecord::Relation#to_sqlメソッドでSQLを生成するのに独自ロジックでやっていたのを、connectionのto_sqlメソッドを使用するよう修正しています。


Merge pull request #25889 from kamipo/do_not_dup_binds_in_to_sql

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

ActiveRecord::ConnectionAdapters::DatabaseStatements#to_sqlメソッドでcompileメソッドにbindsを渡す際、dupした値を渡していたのを、値をそのまま渡すよう修正しています。

-          collected.compile(binds.dup, self)
+          collected.compile(binds, self)

先の処理で引数自身の状態を変えるような処理は無い為、との事です。


Merge pull request #25578 from kamipo/move_warning_about_composite_primary_key_to_attribute_methods_primary_key

Active Recordの修正です。

composite primary keyを使用した場合に出力エラーメッセージを出力する箇所をActiveRecord::ConnectionAdapters::SchemaStatements#primary_keyからActiveRecord::AttributeMethods::PrimaryKey#get_primary_keyに移動しています。

schemaのdump / create処理ではcomposite primary keyはサポートしている為、connection adapterでwarningを表示するのは不適切だろう、との事で移動したようです。

また、合わせて、has_and_belongs_to_manyを使用している場合に不要なwarningが出てしまっているケースがあったのを対応しています。


Merge pull request #25438 from prathamesh-sonpatki/rm-session-store-initializer

railtiesの修正です。

initializerで行っていたデフォルトのsession storeの設定を、railties内部で行うよう修正しています。


Add exists? and update_all to CollectionProxy for respects an association scope

ActiveRecord::Associations::CollectionProxyクラスがdelegateするメソッドの一覧に、:exists?:update_allを追加しています。 association scopeで左記メソッドが正しく動作するようにする為、との事です。


Fix explain logging with binds

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

ActiveRecord::Explain#exec_explainでbindsの値が正しく表示されなくなっていたのを修正しています。 Rails 5.0.0でbindsがquery attributeのarrayに変わったのですが、その対応が入っていなかった為との事です。


Oracle TIMESTAMP sql type is associated with Rails DateTime type now

activerecord/test/cases/migration/column_attributes_test.rbactiverecord/test/models/topic.rbの修正です。

Orcale adapterでdeprecateになったset_date_columnsを使用しないよう修正、及びTIMESTAMP型をRailsDateTypeとして扱うようにした事でコケるようになってしまっていたテストを修正しています。