2016/07/20分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
- Fixes multi-parameter attributes conversion with invalid params.
- Support calling the method
mergeinscope's lambda.
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のチェックを正しく行えないバグがあったのを修正しています。
.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がクリアされる事を確認するテストを追加しています。
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_changes、assert_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_nameのpk引数のデフォルトに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)
先の処理で引数自身の状態を変えるような処理は無い為、との事です。
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.rb、
activerecord/test/models/topic.rbの修正です。
Orcale adapterでdeprecateになったset_date_columnsを使用しないよう修正、及びTIMESTAMP型をRailsのDateTypeとして扱うようにした事でコケるようになってしまっていたテストを修正しています。