なるようになるブログ

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

rails commit log流し読み(2017/03/20)

2017/03/20分のコミットです。

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

railties/CHANGELOG.md


Merge pull request #28475 from y-yagi/correctly_check_whether_key_is_defined

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

Merge pull request #28469 from matthewd/new-new-defaultsで追加された、version-compatible configの設定処理(load_defaults)のチェック処理が正しく動作しないバグがあったのを修正しています。


Fix warning: character class has duplicated range

railties/test/generators/encrypted_secrets_generator_test.rbの修正です。

encrypted secretのテストでRubyのwarning(warning: character class has duplicated range: /[\w\d]+/)が出ていたのを、正規表現を修正して対応しています。


Fix changelog entry about transaction error classes [ci skip]

activerecord/CHANGELOG.mdの修正です。

DBでtransaction serialization failures、又は、deadlocksが発生した時にraiseする為に、ActiveRecord::TransactionSerializationErrorを追加した、というエントリーがあったのですが、その後別の対応(Introduce new ActiveRecord transaction error classesによりTransactionSerializationErrorクラスは削除されてしまったので、エントリーの内容を調整しています。


Merge pull request #28479 from kamipo/evaluate_default_block_only_when_necessary

Active Recordの修正です。

二つの異なるコミットが一つのPRに混ざっています。

まずひとつ目は、activerecord/lib/active_record/relation/delegation.rbの修正です。ActiveRecord::Relationrecordsdelegateするメソッドの一覧にuniqを追加しています。

ActiveRecord::RelationはEnumerableをincludeしているものの、Enumerable#uniqはRuby 2.4で追加された為、明示的にdelegateしないと、Ruby 2.3以下でRelationに対してuniq`メソッドを呼び出すとエラーになってしまう為。

もうひとつはactiverecord/lib/active_record/associations/belongs_to_association.rbactiverecord/lib/active_record/associations/builder/belongs_to.rbの修正です。

BelongsTo.add_default_callbacksメソッドで必ずinstance_execメソッドを呼び出すようになっていたのを、belongs_toメソッドにblockが渡された場合のみinstance_execメソッドを呼び出すよう修正しています。


Add app:update task to engines

railtiesの修正です。

rails engineでもapp:updateタスクを使用出来るよう修正しています。挙動はrails applicationのapp:updateタスクと同じ。


Fix extension method with dirty target in has_many associations

Active Recordの修正です。

has_many associationsのextensionに指定したmethodでdirty targetが取得出来ないバグがあったのを修正しています。

class Post < ApplcationRecord
  has_many :comments do
    def with_content(content)
      self.detect { |comment| comment.body == content }
    end
  end
end
posts(:welcome).comments.build(body: "New comment")
posts(:welcome).comments.with_content("New comment") # => ここで上記でbuildしたオブジェクトが取得出来なかった

Remove duplicated columns definition

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

重複していたcolumnsメソッドの定義を一つにまとめています。