2017/04/20分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
- Raise exception when calling
to_hin an unpermitted Parameters. - Add
ActionController::Parameters#to_hashto implicit conversion.
- Fix
bin/rails db:forwardfirst migration. - Raise error
UnknownMigrationVersionErroron the movement of migrations when the current migration does not exist.
actioncable/CHANGELOG.md
Merge pull request #28794 from vishalzambre/activerecord-guid
rails guideのActive Record Migrationsの修正です。
Types of Schema Dumpsの項、DB固有の項目(トリガー、シーケンス)等の扱いについての説明の箇所がハイライトされるよう、先頭にNOTE:を追加しています。
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_hがHashWithIndifferentAccess返すのに対して、こちらは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されてない場合はエラーになるようなった為、実装を追加との事です
- 元々はpermitされてない値が使用される可能性がある為実装されていなかったのですが、
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:rollback、db: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.rbにgenerators.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しないでも大丈夫な為、という理由のようです。 あってるか大分不安。
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を継承しなくなっていたので、コメントを消しています。