読者です 読者をやめる 読者になる 読者になる

なるようになるブログ

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

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

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

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

actionpack/CHANGELOG.md

activesupport/CHANGELOG.md

activerecord/CHANGELOG.md

actioncable/CHANGELOG.md


Merge pull request #28794 from vishalzambre/activerecord-guid

rails guideのActive Record Migrationsの修正です。

Types of Schema Dumpsの項、DB固有の項目(トリガー、シーケンス)等の扱いについての説明の箇所がハイライトされるよう、先頭にNOTE:を追加しています。


Reword sentence

rails guideのActive Record Migrationsの修正です。

Types of Schema Dumpsの項のグラマー、言い回しを修正しています。


Merge pull request #28734 from rafaelfranca/strong-parameters

Action Packの修正です。

ActionController::Parametersに対して以下の対応を行っています。

  • Hashを返すActionController::Parameters#to_hashメソッドの追加
    • #to_hHashWithIndifferentAccess返すのに対して、こちらはHashを返します
  • permitしていないActionController::Parametersクラスのオブジェクトに対してto_hメソッドを呼び出した場合に、エラー(UnfilteredParameters)をraiseするよう修正
    • 元々は空のHashか、デフォルトでpermitされる:controller:actionだけが返るようになっていました。しかしto_hを呼び出して値が空の場合にto_unsafe_hを呼びだす、というコードが多く発生してしまい、これはセキュリティ的に良くないだろう、という事で、permitされてない場合は明示的にエラーとするようにしたようです。
  • ActionController::Parameters#to_query#to_paramメソッドを追加
    • 元々はpermitされてない値が使用される可能性がある為実装されていなかったのですが、#to_hがエラーをraiseするようになり、#to_hメソッドを使用すればpermitされてない場合はエラーになるようなった為、実装を追加との事です

Send deprecation horizon and gem name as arguments to deprecation heavier handler, and make sure they are used for the ActiveSupport::Notifications message.

Active Supportの修正です。

deprecation notificationsにgem名とdeprecation horizon(削除されるバージョン)を渡せるよう修正しています。gem名は元々はdeprecations.railsが固定で設定されていたのですが、rails以外で使いたいケースがあった為との事です。


Merge pull request #28166 from bogdanvlviv/fix_migration_tasks

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

最初のマイグレーションまでrollbackされた状態でdb:forward taskを実行してもマイグレーションが実行されないバグがあったのを修正、及び、マイグレーションが存在しない場合にdb:rollbackdb:forward taskを実行した場合にエラー(UnknownMigrationVersionError)をraiseするよう修正しています。


Merge pull request #28757 from edwardmp/log-actioncable-write-read-errors

actioncable/lib/action_cable/connection/base.rbの修正です。

socketで処理が発生した場合に、エラーを無視していたのをエラーの内容をログに出力するよう修正しています。

      def on_error(message) # :nodoc:
-        # ignore
+        # log errors to make diagnosing socket errors easier
+        logger.error "WebSocket error occurred: #{message}"
       end

Use released sass-rails instead of master version

railties/lib/rails/generators/app_base.rbの修正です。

新規に作成するrailsアプリのGemfileで、Githubのmasterブランチではなく、リリース済みのgemを使用するようまとめて修正しています。


Fix all style guides violations

rubocopのバージョンを0.48.0に更新、及び、rubocopのルールに違反していた箇所をまとめて修正しています。


Merge pull request #28708 from y-yagi/dont_generate_system_test_files

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

skip_system_testオプションを指定してrailsアプリを作成した場合、scaffoldでsystem testに関するファイルが生成されないようにする為に、application.rbgenerators.system_tests = nilを設定するよう修正しています。


Merge pull request #28776 from kamipo/respect_limit_for_cache_key

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

ActiveRecord::CollectionCacheKey#collection_cache_keyメソッドでrelationからcache keyを生成する際に、relationがload済みの場合はrelationに指定されたlimitに依存したsizeを取得していたのを、loadされてないない場合はlimitが無視されていました。

で、これをrelationがloadされていない場合もlimitを考慮したsizeを取得するよう修正しています。


Merge pull request #28733 from kamipo/dont_fallback_to_utf8mb3_after_mysql_8.0.0

Active Recordの修正です。

MySQL 8.0.0以降では、Rails内部用のテーブルを作成する際に、utf8mb3にフォールバックしないよう修正しています。

+        def internal_string_options_for_primary_key
+          super.tap do |options|
+            if CHARSETS_OF_4BYTES_MAXLEN.include?(charset) && (mariadb? || version < "8.0.0")
+              options[:collation] = collation.sub(/\A[^_]+/, "utf8")
+            end
+          end
+        end
+
         private
+          CHARSETS_OF_4BYTES_MAXLEN = ["utf8mb4", "utf16", "utf16le", "utf32"]
+

MySQL 8.0系でデフォルトのcollationが変わった為(fallback先のcollationがもう無い為)対応したようです。また、そもそも、MySQL 5.7以降はinnodb_default_row_formatでrow formatを指定出来るようになっており、fallbackしないでも大丈夫な為、という理由のようです。 あってるか大分不安。


Remove outdated comment

activesupport/lib/active_support/callbacks.rbのdocの修正です。

CallbackChainクラスのdocにArray + compileメソッドが定義されているクラスである旨説明が記載されていたのですが、use delegation over inheritance so we can figure when to cache / bust cacheでArrayを継承しなくなっていたので、コメントを消しています。