なるようになるブログ

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

rails commit log流し読み(2017/04/12)

2017/04/12分のコミットです。

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

actionpack/CHANGELOG.md


Update routing doc on the get to: option [ci skip]

rails guideのRails Routing from the Outside Inの修正です。

Singular Resourcesの項で、getメソッドのオプションに既に存在しないtoオプションを使用している箇所があったのを、actionオプションを使用するよう修正しています。


Don’t freeze input strings

activemodel/lib/active_model/type/string.rbの修正です。

ActiveModel::Type::String#cast_valueメソッドがfreezeした値を返すようになっていたのを、freezeしないよう修正しています。

# before
name = 'John'
name.frozen?  # => false
user = User.new name: name
user.save
name.frozen? #=> true

# after
name = 'John'
name.frozen?  # => false
user = User.new name: name
user.save
name.frozen? #=> false

メモリ使用量削減の為にfreezeするようになっていたのですが、ユーザ側で使用している変数もfreezeされてしまう事なる為、それは良くないだろうという事で修正されたようです。

参考:Add an immutable string type to opt out of string duping


Merge pull request #28722 from DmytroVasin/rails-ujs-default-url

actionview/app/assets/javascripts/rails-ujs/utils/ajax.coffeeの修正です。

ajax requestsを投げる際に、デフォルトでurlオプションが設定されてなかったのを設定するよう修正しています。 urlの指定が無いとrails-ujs内でエラーになってしまう為。


Merge pull request #28402 from jules2689/action-controller-api-base-hooks

actionpack/lib/action_controller/api.rbactionpack/lib/action_controller/base.rbの修正です。

action_controller_apiaction_controller_base load hookを追加しています。名前の通りで、それぞれActionController::APIActionController::Baseがloadされた時に実行されるhookです。

合わせて、Getting Started with Engines guideにActive Support On Load Hooksの項を追加し、load hookについての詳細な説明を追加しています。


Fix rubocop violations

actionview/lib/action_view/digestor.rbrailties/lib/rails/generators/named_base.rbの修正です。

rubocopの設定に違反している箇所があったのを、まとめて修正しています。


:scissors:

rails guideのGetting Started with Enginesの修正です。

行末尾の不要なスペースを削除しています。


Move CHANGELOG.md entry from Active Support to Action Pack

先のaction_controller_apiaction_controller_base load hookの追加対応のエントリーがActive SupportのCHANGELOG.mdにかかれてしまっていたのを、Action PackのCHANGELOG.mdに移動しています。


Use a query that’s compatible with PostgreSQL 9.2

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

primary key取得処理のSQLリファクタリングしています。

          select_values(<<-SQL.strip_heredoc, "SCHEMA")
-            SELECT a.attname FROM pg_index i
-            CROSS JOIN generate_subscripts(i.indkey, 1) k
-             JOIN pg_attribute a
-               ON a.attrelid = i.indrelid
-              AND a.attnum = i.indkey[k]
-            WHERE i.indrelid = #{quote(quote_table_name(table_name))}::regclass
-              AND i.indisprimary
+            SELECT a.attname
+              FROM (
+                     SELECT indrelid, indkey, generate_subscripts(indkey, 1) idx
+                       FROM pg_index
+                      WHERE indrelid = #{quote(quote_table_name(table_name))}::regclass
+                        AND indisprimary
+                   ) i
+              JOIN pg_attribute a
+                ON a.attrelid = i.indrelid
+               AND a.attnum = i.indkey[i.idx]
+             ORDER BY i.idx

元のSQLだとPostgreSQL 9.2でエラーになってしまう為修正したとの事です。合わせて、CIにPostgreSQL 9.2の環境を追加しています。PG UndefinedTableエラーが発生してしまう、という事らしいのですが、何が悪いのかよくわからない…。