なるようになるブログ

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

rails commit log流し読み(2017/02/27)

2017/02/27分のコミットです。

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

activerecord/CHANGELOG.md


Refactor connection_pool_test

activerecord/test/cases/connection_pool_test.rbの修正です。

一つのテストでまとめて行われていた、disconnectの後に自動で再接続が行われる事を確認するテストと、automatic_reconnectにfalseを指定した場合のテストを、別のテストに分けています。


Deprecate supports_migrations? on connection adapters

Active Recordの修正です。

connection adapterのsupports_migrations?メソッドがdeprecateになりました。

supports_migrations?メソッドは名前の通りcreate_tabledrop_table等のmigration系のメソッドが使用出来るかどうか確認する為のメソッドなのですが、現状サポートしているadapterは全てmigrationメソッドをサポートしており、そもそもチェックする必要が無くなっている為、deprecateにしたとの事です。


Update i18n guide to cover :zero key support in pluralization [ci skip]

rails guideのRails Internationalization (I18n) APIの修正です。

Pluralizationの項に、translationsの:zero keyについての説明を追加しています。


Use max_identifier_length for index_name_length in PostgreSQL adapter

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

PostgreSQL adapterのindex nameが63固定になっていたのを、max_identifier_length パラメータの値を使用するよう修正しています。

参考:19.15. 設定済みのオプション


Fix test_apply_distinct_in_count failure in PG adapter

activerecord/test/cases/calculations_test.rbの修正です。

distinct + countを組み合わせた場合のテストがPostgreSQL adapterでfailしていたのを修正しています。

    queries.each do |query|
+      # `table_alias_length` in `column_alias_for` would execute
+      # "SHOW max_identifier_length" statement in PostgreSQL adapter.
+      next if query == "SHOW max_identifier_length"
       assert_match %r{\ASELECT(?! DISTINCT) COUNT\(DISTINCT\b}, query
     end

先のmax_identifier_lengthを使用する対応の影響によるものです。


Merge pull request #25274 from kamipo/fix_find_nth_with_limit_value

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

limitに指定された範囲外のfinderメソッドを使用した場合(e.g. Topic.limit(1).second)にDBにqueryを投げずに空の値を返すよう修正しています。


Only load SystemTestCase if Puma is defined

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

SystemTestCaseクラスのload処理を、Capbyara及びPuma両方が定義されている場合にのみ行うよう修正しています。

SystemTestCaseクラスは現状Pumaのみをサポートしており、Pumaが定義されてないとエラーになってしまう為。


Set correct host except development environment

railties/lib/rails/commands/server/server_command.rbの修正です。

rails serverのHostオプションのデフォルトに全ての環境でlocalhostが使われていたのを、Rails 5.0までと同様に、developmentでのみlocalhostを使用し、それ以外の環境では0.0.0.0を使用するよう修正しています。


Handle non-existing $ARCONN

activerecord/test/support/connection.rbの修正です。

$ARCONNに存在しないconnectionを指定した場合に、指定可能なconnectionの一覧を表示するよう修正しています。

PRより。

Before

$ ARCONN=postgres bundle exec ruby -Itest test/cases/adapters/postgresql/connection_test.rb
Using postgres
/Users/kir/Projects/opensource/rails/activerecord/lib/active_record/connection_handling.rb:63:in `dup': can't dup NilClass (TypeError)
        from /Users/kir/Projects/opensource/rails/activerecord/lib/active_record/connection_handling.rb:63:in `initialize'
        from /Users/kir/Projects/opensource/rails/activerecord/lib/active_record/core.rb:46:in `new'
        from /Users/kir/Projects/opensource/rails/activerecord/lib/active_record/core.rb:46:in `configurations='
        from /Users/kir/Projects/opensource/rails/activerecord/test/support/connection.rb:19:in `connect'
        from /Users/kir/Projects/opensource/rails/activerecord/test/cases/helper.rb:24:in `<top (required)>'
        from test/cases/adapters/postgresql/connection_test.rb:1:in `require'
        from test/cases/adapters/postgresql/connection_test.rb:1:in `<main>'

After

$ ARCONN=postgres bundle exec ruby -Itest test/cases/adapters/postgresql/connection_test.rb
Using postgres
Connection "postgres" not found. Available connections: jdbcderby, jdbch2, jdbchsqldb, jdbcmysql, jdbcpostgresql, jdbcsqlite3, db2, mysql, mysql2, oracle, postgresql, sqlite3, sqlite3_mem

rails commit log流し読み(2017/02/26)

2017/02/26分のコミットです。

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

actionpack/CHANGELOG.md

activesupport/CHANGELOG.md

activerecord/CHANGELOG.md


Commit flash changes when using a redirect route.

actionpack/lib/action_dispatch/routing/redirection.rbの修正です。

routeでredirectメソッドを使用している、かつ、そのredirect処理内でflashを設定した場合に、その設定したflashがコミットされてない(flash hash経由で値が取得出来ない)バグがあったのを修正しています。

issueより。

# config/routes.rb
Rails.application.routes.draw do
  get "/foo", to: redirect { |params, req|
    req.flash[:error] = "test"
    # uncomment this out to make it work:
    #req.commit_flash
    "/bar"
  }
  get "/bar", to: "bar#show"
end

上記のように定義した場合に、controllerでflash[:error]に値が設定されてない状態になってしまっていました。


Deprecate AbstractAdapter#verify! with arguments

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

AbstractAdapter#verify!メソッドに引数を渡すのがdeprecateになりました。引数は渡せるようになっていたものの、Rails 2系の頃から渡された引数は全く使用していなかった為、deprecateにしています。


Use ensure block for things we cleanup in tests

activerecord/test/cases/adapters/mysql2/connection_test.rbactiverecord/test/cases/adapters/postgresql/connection_test.rbの修正です。

テストの後処理をensureブロック内で行うよう修正しています。


Suppress DISTINCT clause outside aggregate function

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

集約関数用メソッドを実行した際、クエリーに不要なDISTINCTが含まれていたのを、削除しています。

コミットより。

# Before
author.unique_categorized_posts.count
# => SELECT DISTINCT COUNT(DISTINCT "posts"."id") FROM "posts" INNER JOIN "categorizations" ON "posts"."id" = "categorizations"."post_id" WHERE "categorizations"."author_id" = ?  [["author_id", 2]]

# After
author.unique_categorized_posts.count
# => SELECT COUNT(DISTINCT "posts"."id") FROM "posts" INNER JOIN "categorizations" ON "posts"."id" = "categorizations"."post_id" WHERE "categorizations"."author_id" = ?  [["author_id", 2]]

AS CHANGELOG Pass [ci skip]

activesupport/CHANGELOG.mdの修正です。

各エントリーのフォーマット、タイポの修正をまとめて行っています。


Fix change_column to drop default with null: false

Active Recordの修正です。

change_columnメソッドでdefault: nil + null: falseが同時に設定出来ない(e.g. change_column "tests", "contributor", :boolean, default: nil, null: false)バグがあったのを修正しています。


Fix typo ‘affect’ -> ‘effect’ [ci skip]

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

AbstractAdapter#verify!メソッドに引数を渡した際のdeprecateメッセージでeffectaffectにタイポしていたのを修正しています。


Add Duration#before and #after as aliases for #ago and #since

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

ActiveSupport::Duration#until#sinceメソッドのaliasとして、#after#beforeメソッドを追加しています。

5.days.before(Date.today)
# => Tue, 21 Feb 2017
2.weeks.after
# => Sun, 12 Mar 2017 10:41:22 UTC +00:00

Remove duplicated private method

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

ActiveRecord::ActiveRecord moduleで二回privateメソッドを2回呼び出していたので、2回目の呼び出しを削除しています。


Remove useless select_values += select_values

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

不要なselect_values変数への代入処理を削除しています。直前の行でselect_valuesは定義済みであり不要との事。

-        select_values += select_values unless having_clause.empty?

が、実際は意味のある行だった為、後ほどrevertされています。


Use released arel

guides/bug_report_templates/action_controller_master.rbの修正です。

ActionController用のbug report templateファイルで、リリース済みのarelを使用するよう修正しています。


Merge pull request #28176 from kamipo/push_valid_type_up_to_abstract_adapter

Active Recordの修正です。

各adapterで独自に処理が定義されていたvalid_type?メソッドについて、abstract adapterで処理を定義するよう修正しています。各adapterでやっている事が同じだった為。


Remove unused params.

actionpack/lib/action_dispatch/routing/route_set.rbの修正です。

RouteSet#add_routeメソッドから使用していない引数を削除しています。


Include selects in group query with having clause

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

先ほど削除されたselect_valuesの代入式を戻しています。また、合わせてその代入式が必要な場合についてのテストを追加しています。having句で指定したaliasをselectに含む場合に必要だったらしいです。

+ select_values += self.select_values unless having_clause.empty?

[ci skip] Add CHANGELOG entry for #28183

activerecord/CHANGELOG.mdの修正です。

直前のhaving句で指定したaliasselectで指定した場合について正しく動作するようにした対応について、CHANGELOGにエントリーを追加しています。

rails commit log流し読み(2017/02/25)

2017/02/25分のコミットです。

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

activesupport/CHANGELOG.md


[close #24435] Send user_supplied_options to server

railties/lib/rails/commands/server/server_command.rbの修正です。

server_optionsメソッドが返す値に、ユーザが指定したオプションを格納する為のuser_supplied_optionsを追加しています。

Puma等のAPサーバがoptionsの値を取得した際に、その値がrailsが設定しているデフォルトの値なのか、ユーザが指定した値かが判別出来ない(:Portに3000と設定されていた場合に、railsのデフォルトにより設定された値なのかユーザがconfig等で指定した値なのかがわからない)為、それを判別出来るようにする為に追加したようです。これしかしAPサーバ側にも対応が必要そうな。


Change SystemTestCase.driven_by to use setup/teardown hooks

Action Packの修正です。

SystemTestCaseのdriverの設定を、setup / teardownでやるよう修正しています。

元々はtest caseのload時に設定が行われいたのですが、それだとtest case毎にdriverを切り替える、ということが出来なかった為、setup / teardownで行うよう修正したとの事です。


add optional second argument to ActiveSupport core extension for Marshal#load so it can take a proc

activesupport/lib/active_support/core_ext/marshal.rbの修正です。

MarshalWithAutoloading#loadにprocを渡せるよう引数を追加しています。渡されたprocはそのままMarshal#loadの第二引数に渡されるようになっています。


Add missing gzip footer check in ActiveSupport::Gzip.decompress

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

ActiveSupport::Gzip.decompressメソッドでfooterのchecksumとlengthの値もチェックするよう修正しています。

     def self.decompress(source)
 -      Zlib::GzipReader.new(StringIO.new(source)).read
 +      Zlib::GzipReader.wrap(StringIO.new(source), &:read)
      end

参考:Gzip - ForensicsWiki


Fix CHANGELOG entry position [ci skip]

activesupport/CHANGELOG.mdの修正です。

先のActiveSupport::Gzip.decompressの対応のエントリーの位置がおかし(Rails 5.1.0.beta1に含まれているような書き方になっていた)かったのを修正しています。


Merge pull request #28157 from robin850/hwia-soft-deprecation

Active Support及びRails guideのA Guide for Upgrading Ruby on Railsの修正です。

top levelのHashWithIndifferentAccessがdeprecateになりました。今後はActiveSupport::HashWithIndifferentAccessを使う必要があります。

諸々の都合上deprecateメッセージは出ないようになっているのですが、将来削除されるようになっているので、ActiveSupport::HashWithIndifferentAccessを使うよう移行する必要があります。


Merge branch ‘jhawthorn-ruby_2_4_bigdecimal_casting’

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

BigDecimalのtype cast時に、不正なStringが渡された場合もエラーにならない(BigDecimal(0)を返す)よう修正しています。

-            when ::Numeric, ::String
+            when ::Numeric
               BigDecimal(value, precision || BIGDECIMAL_PRECISION)
+            when ::String
+              begin
+                value.to_d
+              rescue ArgumentError
+                BigDecimal(0)
+              end

BigDecimalは不正なString(e.g. 1ignore)が渡された場合もエラーにならないようになっていたのですが、Ruby 2.4.0でエラーをraiseするように挙動が変更された為、対応したとの事です。

なお、Ruby本体(というかbigdecimal gem)で、to_dがエラーをraiseしないよう修正が行われています。fixes issue: #13062 - String#to_d is not raising error


Use shasum 256 on the release

tasks/release.rbの修正です。

railsのリリース用タスクでhashにSHA-1を使用していたのを、SHA-256を使用するよう修正しています。


Order array contents to match Relation#first

activerecord/test/cases/scoping/named_scoping_test.rbの修正です。

Relation#firstメソッドのテストで、必ず期待通りの値がとれるよう、値を取得する前にidorderするよう修正しています。


Fix typo HashWithIndifferentAcces to HashWithIndifferentAccess [ci skip]

activesupport/CHANGELOG.mdの修正です。

先のtop levelのHashWithIndifferentAccessをdeprecateにした対応のエントリーで、HashWithIndifferentAccessHashWithIndifferentAccesにタイポしている箇所があったのを修正しています。


Imporove docs for Rails::AppGenerator [ci skip]

railties/lib/rails/generators/rails/app/app_generator.rbのdocの修正です。

Rails::AppBuilderのdocにexampleコードを追加しています。


[ci ckip] Fix example of resolve in CHANGELOG.md

actionpack/CHANGELOG.mdのdocの修正です。

resolveメソッドのexampleコードに不要なclassオプションがあったのを削除しています。

rails commit log流し読み(2017/02/24)

2017/02/24分のコミットです。

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

activerecord/CHANGELOG.md


Merge pull request #28128 from rails/revert-28127-revert-28038-encrypted-secrets

railtiesの修正です。

Encrypted Secretsを操作する為のsecrets:setup及びsecrets:editコマンドを追加しています。

Encrypted Secretsを使用する為には、まずsecrets:setupコマンドを実行する必要があります。secrets:setupコマンドを実行すると、下記ファイルが生成されます。

Adding config/secrets.yml.key to store the encryption key: 6c59e63ec2965b8c78324b37ad142635

Save this in a password manager your team can access.

If you lose the key, no one, including you, can access any encrypted secrets.

      create  config/secrets.yml.key

Ignoring config/secrets.yml.key so it won't end up in Git history:

      append  .gitignore

Adding config/secrets.yml.enc to store secrets that needs to be encrypted.

      create  config/secrets.yml.enc

For now the file contains this but it's been encrypted with the generated key:

# See `secrets.yml` for tips on generating suitable keys.
# production:
#  external_api_key: 1466aac22e6a869134be3d09b9e89232fc2c2289…

You can edit encrypted secrets with `bin/rails secrets:edit`.
Add this to your config/environments/production.rb:
config.read_encrypted_secrets = true

config/secrets.yml.keyにsecret keyが生成され、そのkeyを使用して暗号化されたファイルがconfig/secrets.yml.encになっています。また、config/secrets.yml.keyをバージョン管理に含まないように、.gitignoreconfig/secrets.yml.keyが追加されています。

secrets fileを編集するには、secrets:editコマンドを使用する必要があります。secrets:editコマンドを実行するとエディタが起動し、secret fileの編集が出来るようになります(エディタは$EDITORに設定されているエディタが使用されます)。

EDITOR=vim bin/rails secrets:edit

secret fileのデータを読み込むには、上記secret:setupコマンドの実行結果に書かれている通り、configにconfig.read_encrypted_secrets = trueを設定する必要があります。config.read_encrypted_secretsがfalseの場合、secret fileのデータを読み込まないようになっています(デフォルトはfalse)。

secret fileから読み込んだ値はRails.application.secrets経由で使用出来るようになっています。

なお、暗号化にはaes-256-cbcが使用されるようになっています。が、デフォルトでAES-128-GCMを使用するPR(Update secrets to use modern crypto by stouset · Pull Request #28139 · rails/rails)がきており、今後変わりそうです。


���� :nodoc: AS::Duration::ISO8601Serializer

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

内部向けAPIであるActiveSupport::Duration::ISO8601Serializerクラスに:nodoc:を設定しています。


Merge pull request #28105 from y-yagi/add_wrapper_for_plugins_test_runner

railties/lib/rails/generators/rails/plugin/templates/bin/test.ttrailties/lib/rails/plugin/test.rbの修正です。

Rails pluginで使用するtest runner用のscriptで、Railsのprivate APIを直接使用していたのを、test runner用のwrapperファイルを新規に作成し、そちらをrequireするよう修正しています。private APIを外に晒すのを避ける為。


Use double quotes in the generated plugin test script.

railties/lib/rails/generators/rails/plugin/templates/bin/test.ttの修正です。

Rails pluginで使用するtest runner用のscriptでシングルクォートを使用していた箇所をダブルクォートに修正しています。


Move documentation to the correct place

actionpack/lib/action_dispatch/system_test_case.rbのdocの修正です。

ActionDispatch::SystemTestCaseクラスのdocの記載されている箇所に誤りがあった(クラス定義の前に無いと正しくdocが生成されないのが、クラス定義の後にdocがあった)のを修正しています。


Fix Rakefile loading generator relatively

railties/lib/rails/api/task.rbの修正です。

generatorファイルの読み込みをrequire_relativeで行うよう修正しています。

-require "rails/api/generator"
+require_relative "generator"

generatortask.rbと同じディレクトリにあり、LOAD_PATHはデフォルトでは通ってないので、require_relativeじゃないとロード出来ないから、ですかねえ。


Preparing for 5.1.0.beta1 release

コンポーネントのバージョンを5.1.0.beta1に更新、CHANGELOGのヘッダーにRails 5.1.0.beta1を追加等を行っています。


Update package.json

actioncable/package.jsonactionview/package.jsonの修正です。

npmとしてリリースするライブラリ(actioncable、rails-ujs)のバージョンも5.1.0-beta1に更新しています。


Do not override the global variable

tasks/release.rbの修正です。

gem及びnpmをpushするようのrake taskで、task実行時にグローバル変数を上書きしてしまう処理があったのを、上書きしないよう修正しています。


Add a task to build a draft of the release announcement

tasks/release.rbの修正です。

release announcement作成用のtaskを追加しています。


Rearrange npm release process again

tasks/release.rbの修正です。

npm release用の処理を整理しています。prep_releaseタスクが冪等になっていなかったのを、冪等になるよう修正したとのことです。


Fix wait_timeout to configurable for mysql2 adapter

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

MySQL adapterを使用している場合、wait_timeoutの設定が正しく反映されないバグがあったのを修正しています。


Fix w3c_validator.rb validation script

guides/w3c_validator.rbの修正です。

rails guideのvalidationにMarkupValidatorクラスを使用していたのを、NuValidatorを使用するよう修正しています。

今はhttp://validator.w3.org/nu/の方が使用するのが推奨されている為、とのことです。

参考:Service » Input » GET · validator/validator Wiki


Merge pull request #28112 from bolek/include-job_id-in-all-active-job-logs

activejob/lib/active_job/logging.rbの修正です。

Active Jobがデフォルトで出力するログにjob idを含むよう修正ですしています。


Enable Active Model testing for JRuby

.travis.ymlの修正です。

Active Model + JRubyのテストをCIで実行するよう修正しています。


Make HWIA#compact not return nil when no nils

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

保持しているHashにnilが含まれていない場合に、HashWithIndifferentAccess#compactnilを返してしまっていたのを、保持している値をそのまま返すよう修正しています。


Merge pull request #27962 from kamipo/deprecate_quoted_id

Active Recordの修正です。

quote処理にquoted_idメソッドを使用するのがdeprecateになりました。quoted_idは昔のquote処理用のメソッドで、現状はtype castingを使用するようになっている為、deprecateにしたとのことです。


Merge pull request #25285 from kamipo/fix_remove_reference_to_multiple_foreign_keys_in_the_same_table

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

同じテーブルに対して、remove_referenceメソッドで複数のforeign keys を削除しようとした場合に正常にforeign keyの削除が行われないバグがあったのを修正しています。


Make security policy more prominent in docs

CONTRIBUTING.mdREADME.mdの修正です。

security vulnerabilityについてはGitHubのissueにあげるのではなく、http://rubyonrails.org/security/ を参照して欲しい旨説明を追加しています。


Make version short-cut alias to work

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

versionコマンドのショートカット(-v--version)を指定してもversionコマンドが動作しないバグがあったのを修正しています。


Make help short-cut alias to work

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

helpコマンドのショートカット(-h--help)を指定してもhelpコマンドが動作しないバグがあったのを修正しています。


Make adding gemfile entry work even if specify only the plugin name

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

rails plugin作成時のディレクトリがrails application配下だった場合に、自動でrails applicationのGemfileにそのpluginを追加する、という処理がありますが。が、それがplugin名を絶対パスで指定しないと動作しないようになっていたのを、相対パスを指定した場合も動作するよう修正しています。


Improve docs for ActiveRecord::Result. [ci skip]

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

ActiveRecord::Resultクラス配下の各メソッドにdocを追加しています。


does not show hidden namespaces in generator’s help

railties/lib/rails/commands/generate/generate_command.rbの修正です。

generatorのhelpに表示しないように設定していたnamespaceまで出てしまっていたのを、Rails 5.0までと同様に表示されないよう修正しています。

rails commit log流し読み(2017/02/23)

2017/02/23分のコミットです。

CHANGELOGへの追加はありませんでした。


Merge pull request #27572 from matthewd/prerelease-specifier

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

railsコマンドで生成されるGemfileのrailsのバージョン指定で、範囲(e.g. ">= 5.0.0.beta1", "< 5.1")を指定していたのを、~>記法(e.g. ~> 5.0.0.beta1)を使用するよう修正しています。


Move rails-ujs README and LICENCE to actionview

actionview/app/assets/javascripts/MIT-LICENSEactionview/app/assets/javascripts/README.mdの修正です。

rails/rails-ujsで管理していたrails-ujsのLICENCEファイル及びREADMEをrails/rails配下に移動しています。

今後、rails-ujsrails/railsリポジトリで完全に管理されるようになります。https://github.com/rails/rails-ujs はもう消されています。


Test rails-ujs in our travis matrix

CIでrails-ujsのテストを実行するようmatrixを修正、及びテスト実行用のPhantomJS Runnerの追加等を行っています。


Clarify use of params in direct

actionpack/lib/action_dispatch/routing/mapper.rbのdoc及びactionpack/test/dispatch/routing/custom_url_helpers_test.rbの修正です。

directメソッドのdocにdirectメソッド内でparamsオブジェクトを扱う場合の注意点についての説明、及び、directメソッド内でparamsオブジェクトを参照する場合のテストを追加しています。


Deprecate the EventedRedis subscription adapter

actioncable/lib/action_cable/subscription_adapter/evented_redis.rbの修正です。

Action Cableの"evented_redis" subscription adapterがdeprecateになりました。redisを使いたい場合、"redis" adapterは引き続き使用出来るので、ストレージにredisを使用したい場合、"redis" adapterを使用すればOKです。


Correctly dump native timestamp types for MySQL

Active Recordの修正です。

MySQLのtimestamp typeを使用していた場合に、schemaファイルに正しくtypeの情報がdumpされないバグがあったのを修正しています。

nativeのtimestamp typeはデフォルトで、NULLを設定しようとすると現在のtimestampが設定される、という挙動があります。そのため、明示的にNULL値を指定出来るようにする為の属性を設定をするよう対応が行われています。

参考:MySQL :: MySQL 5.7 Reference Manual :: 12.3.5 Automatic Initialization and Updating for TIMESTAMP and DATETIME


[ci skip] Fix more quotes in direct/resolve docs

actionpack/lib/action_dispatch/routing/mapper.rbのdocの修正です。

resolveメソッドのdoc内のexampleでdirectメソッドを使用していたのを、resolveメソッドを使用するよう修正しています。また、exampleコードでStringを表すのにシングルクォートを使用していたのを、ダブルクォートを使用するよう修正しています。


Do not take screenshot when test skipped

actionpack/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rbの修正です。

ActionDispatch::SystemTestCaseのscreenshotの自動取得処理が、テストをスキップした場合も取得するようになっていたのを、テストをスキップした場合は取得しないよう修正しています。

rails commit log流し読み(2017/02/22)

2017/02/22分のコミットです。

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

actionpack/CHANGELOG.md

activesupport/CHANGELOG.md


Tiny documentation edits [ci skip]

actionpack/lib/action_dispatch/system_test_case.rbのdoc及びrails guideのA Guide to Testing Rails Applicationsの修正です。

グラマー及びフォーマットの修正を行っています。


Only load SystemTestCase if Capybara is defined

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

Capybaraが定義されている場合のに、ActionDispatch::SystemTestCaseクラスを読み込むよう修正しています。


Revert back to the original of using package.json in the root of the project (#28093)

railtiesの修正です。

vendor配下で管理されるようになっていたpackage.json及びnode_modulesを、vendor配下ではなくproject root配下で管理するよう戻しています。既に多くのエコシステムがrails rootでpackage.json及びnode_modulesを管理するようになっており、合わせた方が混乱が少ないだろう、という理由により戻したようです。


Add backticks around constant

actionmailer/CHANGELOG.mdの修正です。

定数をバッククォートで囲むよう修正しています。


Use released arel

各ファイルで、リリース済みのarelを使用するよう修正しています。


Add backticks around command

actionmailer/CHANGELOG.mdの修正です。

コマンドをバッククォートで囲むよう修正しています。


Remove extra spaces

activejob/CHANGELOG.mdの修正です。

CHANGELOGのエントリー間にあった不要なスペースを削除しています。


Fix schema leakage from dirty_test.rb

activerecord/test/cases/dirty_test.rbの修正です。

filedという名前のカラムを作成した場合のテストの後処理で、DBのcacheをclearするよう修正しています。clearしないと不要なカラムの除法を保持したままになってしまうため。


Add backticks around method names

activerecord/CHANGELOG.mdの修正です。

メソッド名をバッククォートで囲むよう修正しています。


Merge pull request #23138 from rails/custom-url-helpers-and-polymorphic-urls https://github.com/rails/rails/commit/f3d729f75363136f659f2cb78165ca5c899ecfe7

Action Packの修正です。

routesに関する改善がまとめて含まれています。まず、routesファイルで直接custom url helpersを作成出来るdirectメソッドが追加されています。

例。

# routes.rb
Rails.application.routes.draw do
  direct :homepage do
    "http://www.rubyonrails.org"
  end

  direct :commentable do |model|
    [ model, anchor: model.id ]
  end

  direct :main do
    { controller: 'pages', action: 'index', subdomain: 'www' }
  end
end
irb(main):004:0> app.homepage_url
# => "http://www.rubyonrails.org"
irb(main):001:0> app.commentable_url(User.first)
# => "http://www.example.com/users/298486374#298486374"

次に、routesファイルでmodelのpolymorphic mapping をカスタマイズする為のresolveメソッドが追加されています。

# routes.rb
Rails.application.routes.draw do
  resource :basket
  resolve "Basket" do
    [:basket]
  end
end

上記のように定義した場合、link_toform_forBasketクラスのインスタンスを渡した場合、/baskets/:idというURLではなく、/basketというURLが生成されるようになっています。

最後に、routesをreloadした際に、undef_methodではなくremove_methodメソッドを使用するよう修正しています。親クラスに同名のメソッドが定義されていた場合に、そちらのメソッドは引き続き呼べるようにするためのようです。


[ci skip] Fix typos in direct/resolve changelog.

actionpack/CHANGELOG.mdの修正です。

先ほどコミットされたresolve、directメソッドの対応のentryにタイポがあったのを修正しています。


[ci skip] Fix direct/resolve documentation.

actionpack/lib/action_dispatch/routing/mapper.rbのdocの修正です。

resolve、directメソッドのdocにタイポ及びフォーマットの修正を行っています。


Merge pull request #28042 from kamipo/add_changelog_for_27384

activerecord/CHANGELOG.mdの修正です。

整数型のPKがauto incrementになった対応(Tweak bigint PK handlingCorrectly dump integer-like primary key with default nil)について、CHANGELOGのエントリーを追加しています。


Merge pull request #28095 from matthewd/nested-database-config

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

DB configファイルに3階層目を定義出来るよう修正しています。

例。

default: &default
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  primary:
    <<: *default
    database: db/development.sqlite3
  readonly:
    <<: *default
    database: db/readonly.sqlite3

上記のように、environment配下に更に定義を追加出来るようになっています。


[doc] Fix wrong class name in testing.md

rails guideのA Guide to Testing Rails Applicationsの修正です。

Implementing a system testの項のexampleコードのクラス名に誤りがあったのを修正しています。


remove needless extension from system test example [ci skip]

rails guideのA Guide to Testing Rails Applicationsの修正です。

System Testクラスをgenerateする場合のexampleに不要な拡張子があったのを削除しています。


Preload to_datetime before freezing a TimeWithZone instance

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

TimeWithZoneインスタンスをfreezeする際に、to_datetimeメソッドの結果もcacheするよう修正しています。

    def freeze
-      period; utc; time # preload instance variables before freezing
+      # preload instance variables before freezing
+      period; utc; time; to_datetime
       super
     end

freezeメソッド呼び出し後にto_datetimeメソッドが呼び出せるようにする為。


Add CHANGELOG entry for #28104

activesupport/CHANGELOG.mdの修正です。

直前のfreezeにto_datetimeメソッドの結果をcacheするようにした対応について、CHANGELOGのエントリーを追加しています。


Add missing requires

activesupport/test/json/encoding_test_cases.rbの修正です。

不足していたdatetime等のrequireを追加しています。

Bundler 1.14.5でrubygems/spec_fetcherがlazy loadされるようになり、その影響で、元々はrequireされていたファイルがrequireされなくなった為、requireを追加したとのことです。

参考:Defer requiring rubygems/spec_fetcher until it becomes necessary · bundler/bundler@a78583c


Bump removal of /:controller/:action to Rails 5.2

actionpack/lib/action_dispatch/routing/route_set.rbの修正です。

Rails 5.1で削除予定だったroutes.rbのpath parametersに:controller:actionを指定した場合の処理の削除を、Rails 5.2に削除するようdeprecateメッセージを変更しています。

        if route.segment_keys.include?(:controller)
           ActiveSupport::Deprecation.warn(<<-MSG.squish)
             Using a dynamic :controller segment in a route is deprecated and
-            will be removed in Rails 5.1.
+            will be removed in Rails 5.2.
           MSG
         end

単純に対応が間に合わなかったからですかねえ。


Add more missing requires

actionpack/test/controller/live_stream_test.rbactivesupport/test/core_ext/string_ext_test.rbの修正です。

不足していたtimeoutのrequireを追加しています。こちらもBundler 1.14.5の対応の影響。

rails commit log流し読み(2017/02/21)

2017/02/21分のコミットです。

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

actionpack/CHANGELOG.md


Merge pull request #25877 from kamipo/delegate_to_scope_rather_than_merge

Active Recordの修正です。

collection proxyを生成する際に必ずassocation.scopeの結果をmergeしていたのを、必要に応じてscope(assocation.scope)にメソッド呼び出しをdelegateするようにして、不要な場合はassocationのscope呼び出し、及びmerge処理を行わないよう修正しています。

Rails 3.2 -> 4.0にアップグレードにhas_many associationが遅くなっていたのは、このmergeとassociation.scopeの呼び出しが原因だった為、この対応により大分性能改善されそうです。ありがたや。


Merge pull request #27863 from robin850/api-improvements

api docのsidebarRubyのcoreを拡張したクラスがそのまま羅列されていたのを、coreを拡張したクラスはCore extensionsというラベル配下にまとめるよう修正しています。

beforeaftersidebarを見比べて頂けるとわかりやすいかと思います。


Revert “Merge pull request #27925 from robin850/hwia-removal”

top levelのHashWithIndifferentAccessをdeprecateにした、Merge pull request #27925 from robin850/hwia-removalをrevertしています。

yamlを生成した際に必ずActiveSupport::HashWithIndifferentAccessになるようtop levelのHashWithIndifferentAccessencode_withメソッドを定義していたのですが、これだとHashWithIndifferentAccessを継承したクラスのyaml生成結果にも影響が出てしまう(子クラスのクラス名ではなく、こちらもActiveSupport::HashWithIndifferentAccessとして生成されてしまう)為、revertしたようです。


Merge pull request #27941 from y-yagi/prevent_multiple_values_being_set_to_run_via

Active Support、railtiesの修正です。

rake経由でテストを実行した場合に、Minitest.run_viaに複数の値が設定されるようになってしまっていたのを、設定されないよう修正しています。


Merge pull request #26703 from eileencodes/rails_system_tests

System Test(browserを使用してのテスト)の為のActionDispatch::SystemTestCaseクラスを追加しています。ActionDispatch::SystemTestCaseCapybara::DSLをincludeしており、Capybaraのメソッドが使えるようになっています。

System Test作成用のgeneratorが提供されており、bin/rails generate system_test xxxでSystem Testが作成出来るようになっています。実際にgeneratorを実行(bin/rails generate system_test users_create_test)すると、下記クラスが生成されます。

# test/application_system_test_case.rb
require "test_helper"

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
end
# test/system/users_create_tests_test.rb
require "application_system_test_case"

class UsersCreateTestsTest < ApplicationSystemTestCase
  test "visiting the index" do
    visit users_create_tests_url

    assert_selector "h1", text: "UsersCreateTest"
  end
end

ActionDispatch::SystemTestCaseを継承したApplicationSystemTestCaseクラスが生成されるようになっており、そこで共通の処理が定義出来るようになっています。また、デフォルトではseleniumドライバーを使うようになっていますが、driven_by:poltergeistを指定する事で、poltergeistも使用出来るようになっています。

他にもスクリーンショットをとる為のヘルパーメソッドが提供されてたりします。こちらについてはAPI doc参照。


Add changelog for system tests

actionpack/CHANGELOG.mdの修正です。

先のActionDispatch::SystemTestCaseの対応についてCHANGELOGにentryを追加しています。


Add missing space

actionpack/CHANGELOG.mdの修正です。

先のコミットで追加されたActionDispatch::SystemTestCaseの対応についてのentryで、スペースが不足していたのを追加しています。


Merge pull request #28083 from eileencodes/ensure-test-threads-shared-db-conn

Active Recordの修正です。

テスト実行時に、スレッド間で同じDB connectionを使うよう修正しています。fixturesのsetup / teardown実行時にスレッドのlockをするようにしており、それ以外の環境では影響が出ないようにしています。


Merge pull request #28081 from meinac/fix_redirect_method

actionpack/lib/action_controller/metal/redirecting.rbの修正です。

redirect_toメソッドでresponse bodyに設定するredirect先URLの情報を、response.locationから取得するよう修正しています。

-      self.response_body = "<html><body>You are being <a href=\"#{ERB::Util.unwrapped_html_escape(location)}\">redirected</a>.</body></html>"
+      self.response_body = "<html><body>You are being <a href=\"#{ERB::Util.unwrapped_html_escape(response.location)}\">redirected</a>.</body></html>"

locationメソッドを参照してしまうと、contollerに独自のlocationメソッドが定義されていた場合に、そちらが使用されてしまい、予期せぬ挙動になるため。


Fix some grammar in docs [ci skip]

actionpack/lib/action_dispatch/system_test_case.rbのdoc及びrails guideのA Guide to Testing Rails Applicationsの修正です。

グラマーの修正、及び不要なスペースの削除を行っています。


Merge pull request #28055 from robertomiranda/patch-3

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

rails newで生成するGemfileで使用するpumaのバージョンを3.7以上に修正しています。


Fix run_via[]= backwards compatibility.

railties/lib/rails/test_unit/minitest_plugin.rbの修正です。

Minitest.run_viaに古い形式で値を設定(Minitest.run_via[:rails] = true)しようとした場合に、エラーになってしまっていた(引数の受け取り方に誤りがあった)のを修正しています。


Merge pull request #28088 from y-yagi/do_not_generate_templates_to_api_doc

railties/lib/rails/api/task.rbの修正です。

API docにtemplateファイルが表示されていまっていたのを、templateファイルはAPI docに表示されないよう修正しています。


Fix define_attribute_method with Symbol in AR

railties/lib/rails/api/task.rbの修正です。

define_attribute_methodメソッドにSymbolを渡した場合、NoMethodErrorでエラーになってしまうバグがあったのを修正しています。