なるようになるブログ

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

rails commit log流し読み(2016/05/21)

2016/05/21分のコミットです。

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

actionview/CHANGELOG.md

activerecord/CHANGELOG.md

railties/CHANGELOG.md


Merge pull request #25041 from maclover7/jm-actionview

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

DetailsKey.get?メソッドでdetails keyを管理するのに、DetailsKeyクラスのインスタンスを生成し、DetailsKeyを経由して値を管理していたのを、インスタンスを作成せず値を管理するよう修正しています。


Make sure the cache is always populated

actionpack/lib/abstract_controller/base.rbactionview/lib/action_view/test_case.rbの修正です。

controller_pathメソッドでanonymous(nameがnil)だった場合、親クラスのcontroller_pathを取得するよう修正しています。

controller_pathnilが返ってしまうと、cacheの生成が行われないので、それを避ける為ですかねえ。

が、既存のテストが壊れてしまった為、後ほどrevertされています。


Add more test coverage to layouts

actionview/test/actionpack/abstract/layouts_test.rbの修正です。

layoutにfalseを指定した場合、layoutにブロックを渡す、かつ、そのブロックがfalseを返した場合等、layout関連処理のテストを追加しています。


Merge pull request #24984 from kamipo/remove_magic_comment_in_schema.rb

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

schema.rbを生成する際、encodingに関するマジックコメントを記載しないよう修正しています。

Rails 5ではRuby 2.2以上をサポートする為、との事なのですが、これ明示的にencodingを指定した場合、ちょっと不味かったりするんですかねえ。


Revert "Make sure the cache is always populated"

controller_pathメソッドでanonymous(nameがnil)だった場合、親クラスのcontroller_pathを取得するよう修正した対応をrevertしています。テストが壊れてしまった為。


Merge pull request #24958 from maclover7/fix-24955

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

binary型を使用している、かつ、そのattributeにHashを指定し値を保存しようとした場合に、NoMethodErrorがraiseされてしまうバグがあったのを修正しています。

    def render_bind(attribute)
       value = if attribute.type.binary? && attribute.value
-        "<#{attribute.value.bytesize} bytes of binary data>"
+        if attribute.value.is_a?(Hash)
+          "<#{attribute.value_for_database.to_s.bytesize} bytes of binary data>"
+        else
+          "<#{attribute.value.bytesize} bytes of binary data>"
+        end

データ保存時にそのサイズをログに出力するようになっているのですが、Hashにはbytesizeメソッドが無い為、NoMethodErrorになってしまっていたようです。


add #23980 to release notes [ci skip]

rails guideのRuby on Rails 5.0 Release Notesの修正です。

path parametersに:controller:actionを使用した際にdeprecateメッセージが表示されるよう対応した、Deprecate :controller and :action path parameters by pixeltrix · Pull Request #23980 · rails/railsの対応について、release notesにentryを追加しています。


Confirm with the specification when generating emtpy option for select with include_blank: true option.

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

select_tagメソッドに、include_blankオプションを指定した場合に生成されるoptionタグに、label属性を生成するよう修正しています。

before

<option value=""></option>

after

<option value="" label=" "></option>

label属性無しかつvalueを空にする、というのはHTML5の規約上NGな為、label属性を生成するようにしたとの事です。へー。

参考:


Merge pull request #24918 from prathamesh-sonpatki/cable-assets

Action Cable / railties の修正です。

javascript engineにCoffeeScriptではなくJavaScriptを使用している場合に、Action Cableのgeneratorが生成するchannel用のファイルもCoffeeScriptではなくJavaScriptのファイルを生成するよう修正しています。


Merge pull request #24732 from y-yagi/update_record_specified_in_the_key

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

InternalMetadataの値を更新する際に、first_or_initializeを使用していたのを、find_or_initialize_byを使用するよう修正しています。

      def []=(key, value)
-        first_or_initialize(key: key).update_attributes!(value: value)
+        find_or_initialize_by(key: key).update_attributes!(value: value)
       end

first_or_initializeだとデータの検索にkeyを使用せず、keyに関係無いデータを更新してしまう場合がある為。


Fix Hash#from_xml with frozen strings (#24718)

activesupport/lib/active_support/xml_mini/rexml.rbの修正です。

Hash#from_xmlメソッドに、frozen stringsを渡した場合にエラー(IOError)が発生してしまっていたのを修正しています。


Add CHANGELOG.md reference for #24958 (#25094)

activerecord/CHANGELOG.mdの修正です。

binary型を使用している、かつ、そのattributeにHashを指定し値を保存しようとした場合にNoMethodErrorがraiseされてしまうバグがあったのを修正した、対応についてCHANGELOGにentryを追加しています。


Whitespaces [ci skip]

activerecord/CHANGELOG.mdの修正です。

entryの対応者の間に空行を追加しています。


Added a shared section to config/secrets.yml that will be loaded for all environments

railties/lib/rails/application.rbrailties/lib/rails/generators/rails/app/templates/config/secrets.ymlの修正です。

secrets.ymlに全ての環境で共通で使用出来るkeyを定義出来るよう対応しています。全ての環境で共通で使用出来るkeyを使用したい場合は、sharedセクションに値を定義する必要があります。

# secrets.yml

# Shared secrets are available across all environments.

shared:
  api_key: 123

Add AR::TransactionSerializationError for transaction serialization failures or deadlocks

Active Recordの修正です。

transactionがdeadlock(MySQL)になったり、serialization failure(PostgreSQLでtransactionの実行を直列に行うことができない状況になる場合におこるエラー)になったりした場合に使用する為のActiveRecord::TransactionSerializationErrorクラスを追加しています。


Use #distinct instead of #uniq in the guides [ci skip] (#25098)

rails guideのActive Record Query Interfaceの修正です。

left_outer_joinsメソッドのexampleで、deprecateになったuniqメソッドの代わりにdistinctメソッドを使用するよう修正しています。


Add missing the

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

ActiveRecord::Associations::CollectionAssociationクラスのdocのグラマーの修正を行っています。