なるようになるブログ

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

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

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

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

railties/CHANGELOG.md


s/broadcasing/broadcasting/

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

broadcastingbroadcasingにタイポしていたのを修正しています。


Lock connection before checking it in

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

database connectionをpoolにcheck-inする際に、ロックをかけるよう修正しています。


Revert “Merge pull request #27636 from mtsmfm/disable-referential-integrity-without-superuser-privilege-take-2”

fixturesのインサート処理等のように、一時的に外部キー制約を無効にしたい場合、PostgreSQLではDISABLE TRIGGER ALLを使用するようになっていたのを、SET CONSTRAINTS ALL DEFERREDが使用出来る場合(9.4.2以上)の場合、そちらを使用するよう修正した、Merge pull request #27636 from mtsmfm/disable-referential-integrity-without-superuser-privilege-take-2をrevertしています。

“SET CONSTRAINTS ALL DEFERRED"で遅延させる事が出来るのは"NO ACTION”(デフォルト)のみで、それ以外の検査(“RESTRICT"等)は遅延させる事が出来ず、外部キー制約違反でエラーになってしまう為、との事です。

参考:CREATE TABLEデータベース PostgreSQL 制約 - s-kitaの日記


Some improvements in the 5.1 release notes [ci skip]

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

各項のフォーマット、グラマーの修正等をまとめて行っています。


Add some items to the release notes [ci skip]

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

コンポーネントの項にエントリーを追加しています。


More release notes for Rails 5.1 [ci skip]

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

コンポーネントの項にエントリーを追加しています。


Pluralize methods

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

assert_changes及びassert_no_changesを追加した対応のエントリーのグラマーの修正を行っています。


Do not try to encoding the parameters when the controller is not defined

actionpack/lib/action_dispatch/http/parameters.rbの修正です。

controllerクラスが存在しないページを表示しようとした場合に、development環境で、エラーページではなく500エラーが表示されてしまうバグがあったのを修正しています。

parametersのencodingを取得する際にcontrollerクラスが存在しない事を考慮して無かったのが問題だった為、controller classが存在しない(NameError)が発生した場合の処理を追加し対応しています。


Merge pull request #28891 from sodabrew/patch-1

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

databse configファイルにusernameが指定されてなかった場合に、デフォルトでusernameにrootを設定する、という処理があったのを削除しています。昔のコードがそのまま残ってしまっていた感。


Merge pull request #28847 from Edouard-chin/current-page-checkquery-string

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

current_page?メソッドの引数にActive Recordのオブジェクトを渡した場合にArgumentErrorが発生してしまうバグがあったのを修正しています。

-        check_parameters ||= !options.is_a?(String) && options.try(:delete, :check_parameters)
+        check_parameters ||= options.is_a?(Hash) && options.delete(:check_parameters)

元の処理ではcurrent_page?の第一引数のoptionsがStringで無かった場合、deleteメソッドを呼び出すようになっていました。が、optionsにARのオブジェクトを渡した場合、ARのdeleteメソッドが呼ばれしまい、エラーになってしまっていた為、optionsHashの場合のみcheck_parametersの取得を行うよう修正しています。


Merge pull request #28885 from kamipo/remove_useless_test_case

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

association に対してprivateメソッドが呼べる事を確認するテストを削除しています。現状privateメソッドは呼べない(public_methodを使っているので)ので、削除したとの事です。


Merge pull request #28244 from ixti/improve/action-mailer-preview-params

Action Mailer及びrailtiesの修正です。

ActionMailer::Previewにrequest parameterを渡せるように修正しています。

http://localhost:3000/rails/mailers/user_mailer/password_recovery?email=alice@foobar.comのように普通にget parameterに指定可能で、previewクラスの中ではparamsで参照可能になっています。


Merge pull request #28881 from bogdanvlviv/verbose-migration

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

ENV["VERBOSE"]false以外の文字列を指定した場合に、全てtrueとして扱うよう修正しています。

-        verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
+        verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] != "false" : true

rails guide(http://edgeguides.rubyonrails.org/active_record_migrations.html)にfalseを指定した場合のみ出力を抑圧する、という説明があり、そこの説明に合わせた形との事です。


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

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

database.ymlに全ての環境で使用されるsharedセクションを追加しています。

shared:
  username: bobby
  adapter: sqlite3

development:
  database: 'dev_db'

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


Merge pull request #28848 from Edouard-chin/ec-remove-unused-method

actionview/test/template/url_helper_test.rbの修正です。

使用されていないsort_query_string_paramsメソッドを削除しています。


Merge pull request #28883 from yahonda/fix28797

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

CURRENT_DATECURRENT_TIMESTAMPという文字もdefault functionとみなすよう修正しています。

        def has_default_function?(default_value, default)
-          !default_value && (%r{\w+\(.*\)|\(.*\)::\w+} === default)
+          !default_value && %r{\w+\(.*\)|\(.*\)::\w+|CURRENT_DATE|CURRENT_TIMESTAMP}.match?(default)
         end

PostgreSQL 9まではCURRENT_DATE('now'::text)::dateに、CURRENT_TIMESTAMPnow()に変換されていたのですが、PostgreSQL 10ではそのままCURRENT_DATECURRENT_TIMESTAMPとして扱われるようになった為、対応追加したとの事です。

参考:Re: Keeping CURRENT_DATE and similar constructs in original format


Restore fixtures :author_addresses

Active Recordのテストの修正です。

Revert “Merge pull request #27636 from mtsmfm/disable-referential-integrity-without-superuser-privilege-take-2”の対応の際に、必要なfixtureのloadもrevertしてしまっていた為、fixtureのload処理だけ戻しています。


Update the JavaScript guide to use form_with

rails guideのWorking with JavaScript in Railsの修正です。

form_for / form_tag について説明していた箇所を、form_withについて説明するよう修正しています。


Add a section with the different Ajax events [ci skip]

rails guideのWorking with JavaScript in Railsの修正です。

Dealing with Ajax eventsの項を追加し、

railsAjax処理で発火されるイベントについての説明、及び、イベントを停止したい場合の対応方法についての説明を追加しています。


Nest Action View remote helpers one level deeper [ci skip]

rails guideのWorking with JavaScript in Railsの修正です。

Built-in Helpersの項にRemote elementsセクションを追加し、form_withlink_to等の説明はRemote elementsセクション配下で説明を行うよう修正しています。

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

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

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


Fix typos [ci skip]

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

ConnectionHandlerクラスのdocのグラマーの修正を行っています。


Merge pull request #28853 from kamipo/replace_regexp_z

各テストの正規表現で終端チェックに\Zを使っていた箇所を、まとめて\zに修正しています。 恐らく\Zを指定していたのは誤りだと思われる為、まとめて修正したとのことです。


Merge pull request #28840 from rails/sane-sdoc

Gemfileの修正です。

sdocのバージョンが1.0.0.rc1に固定されていたのを、ロックの条件を緩めて("> 1.0.0.rc1", "< 2.0")います。


Fix MigratorTest#test_migrator_verbosity

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

ActiveRecord::Migration.verboseをtrueにした場合の挙動についてのテストで、明示的にActiveRecord::Migration.verboseにtrueを設定するよう修正しています。テスト全体を実行した場合は問題無かったのですが、テストを単体で実行した場合にテストが通らなかった為。ようは偶々通っていた。


Merge pull request #28831 from kamipo/respond_to_missing_should_be_private

respond_to_missing?メソッドの可視性がpublicになってしまっている箇所があったのを、まとめてprivateに修正しています。


Merge pull request #28828 from kamipo/fix_extending_modules_on_association

activerecord/lib/active_record/associations/collection_proxy.rbactiverecord/lib/active_record/relation/delegation.rbの修正です。

association extensionsを使用してassociation proxyにメソッドを追加、かつ、同名のメソッドがすでにmodelに存在していた場合に、association proxyに追加した方のメソッドが呼ばれないバグがあったのを修正しています。

issueより。

require 'bundler/setup'

require "active_record"
require "minitest/autorun"
require "logger"

# This connection will do for database-independent bug reports.
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
ActiveRecord::Base.logger = Logger.new(STDOUT)

ActiveRecord::Schema.define do
  create_table :posts, force: true do |t|
  end

  create_table :comments, force: true do |t|
    t.integer :post_id
  end
end

module Foo
  def find_by_foo(name)
  end
end

class Post < ActiveRecord::Base
  has_many :comments, extend: Foo
end

class Comment < ActiveRecord::Base
  belongs_to :post

  def self.find_by_foo(post, name)
    post.comments.find_by_foo(name)
  end
end

class BugTest < Minitest::Test
  def test_association_stuff
    post = Post.create!
    post.comments << Comment.create!

    assert_nil post.comments.find_by_foo("A")
  end
end

上記のようなコードがあった場合に、Foo#find_by_fooではなく、Comment.find_by_fooが呼ばれてしまう、というバグです。むずい。


Describe the changes in transactional tests

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

Incompatibilitiesの項を追加し、Transactional testsでは異なるスレッド間で同じARのconnectionが使われるようになった対応について説明を追加しています。


Merge pull request #28839 from y-yagi/fix-yarn-exit-status

railties/lib/rails/generators/rails/app/templates/bin/yarnの修正です。

yarnpkgコマンド実行時にyarnpkgが見つからない場合、exit statusに1を返すよう修正しています。

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

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

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


Add form_with_generates_remote_forms to configuring guide [ci skip]

rails guideのConfiguring Rails Applicationsの修正です。

form_with_generates_remote_forms configについての説明を追加しています。


Unify the name of GitHub [ci skip]

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

Github -> GitHub に修正しています。


Add missing action_view section of config flag

rails guideのConfiguring Rails Applicationsの修正です。

config.form_with_generates_remote_formsconfig.action_view.form_with_generates_remote_forms に修正しています。


Remove checks for Enumerator#size method

テストでEnumeratorsizeメソッドが定義されているかどうかチェックしている箇所があったのを、チェック処理を削除しています。

-    if Enumerator.method_defined? :size
-      test "each without block returns a sized enumerator" do
-        assert_equal 3, result.each.size
-      end
+    test "each without block returns a sized enumerator" do
+      assert_equal 3, result.each.size
     end

Enumerator#sizeRuby 2.0で追加されている、かつ、今のmasterは Ruby >= 2.2.2 しかサポートしていない為、チェック処理は不要な為。

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

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

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


Add Railties info to 5.1 release notes

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Railtiesの項にエントリーを追加しています。


Add more Railties notable changes

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

RailtiesNotable changesセクションにエントリーを追加しています。


Remove unused heading

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Railtiesの項から、エントリーの無いDeprecationsセクションを削除しています。


Small grammar fixes

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

各項のグラマー、フォーマットの修正をまとめて行っています。


Use parameters, not params

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Parameterized mailersの項のparamsparametersに修正しています。


Add Action View info to 5.1 release notes

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Action Viewの項にエントリーを追加しています。


secrets.yml –> config/secrets.yml

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

secrets.yml -> config/secrets.ymlに修正しています。


Fix regexp in the doc [ci skip]

activemodel/lib/active_model/validations/numericality.rbのdocの修正です。

validates_numericality_ofメソッドのdocにあるonly_integerオプションを指定した際に使用される正規表現が実際に使用される正規表現と異なっていたのを修正しています。

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

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

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


[ci_skip] Fix typo in Rails 5.1 upgrade notes

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

loadedladedにタイポしていたのを修正しています。


Add Active Job info to 5.1 release notes

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Active Jobの項にエントリーを追加しています。


Finish Action Mailer section in release notes

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Action Mailerの項にエントリーを追加しています。


Finish Action Cable section in release notes

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Action Cableの項にエントリーを追加しています。


Remove unused headings

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Action Cablenの項から、エントリーの無いRemovalsDeprecationsセクションを削除しています。


Add Active Model info to 5.1 release notes

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Active Modelの項にエントリーを追加しています。

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

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

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


Configure form_with_generates_remote_forms in its own initializer

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

config.action_view.form_with_generates_remote_formsに設定した値をActionView::Helpers::FormHelper.form_with_generates_remote_formsに反映する処理が漏れていたので追加しています。


Add note about #26929 in the upgrade guide

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

secrets.ymlのkeyを全てsymbolとして読み込むようにした対応(deep symbolize keys on secrets.yml)について、Upgrading guideに説明を追加しています。


Set to form_with_generates_remote_forms only when config is explicitly specified

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

config.action_view.form_with_generates_remote_formsを指定していない場合に、form_withメソッドのデフォルトの挙動が変わってしまう(remote formを生成しない)バグがあったのを修正しています。

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

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

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

railties/CHANGELOG.md

activerecord/CHANGELOG.md

activejob/CHANGELOG.md


Namespace CSS selectors on error pages

railties/lib/rails/generators/rails/app/templates/public/404.htmlrailties/lib/rails/generators/rails/app/templates/public/422.htmlrailties/lib/rails/generators/rails/app/templates/public/500.htmlの修正です。

デフォルトのエラーページでスタイルをあてる際に、bodyタグやh1タグに直接スタイルをあてていたのを、エラー表示用のクラスを作成し、そちらを使用するよう修正しています。

-<body>
+<body class="rails-default-error-page">

bodyに直接スタイルを指定してしまうと、Turbolinksを使っている場合に問題がある為(エラーページを表示して、前のページに戻った際に、bodyタグのスタイルがそのまま残ってしまうケースがある)為対応したとの事です。


Fixes Hash.from_xml with frozen strings for all backends

Active Supportの修正です。

Hash.from_xmlにfreeze済みのStringを渡した場合にエラーになってしまうバグがあったのを修正しています。IO#ungetcを使っているのが問題だった為、使用しないよう修正しています。


Merge pull request #28582 from sbull/activejob-error-logging

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

Active Jobでjob実行時のログを取得する際に、エラーが発生した場合はそのエラーの情報をログに出力するよう修正しています。

例。

Performing GuestJob (Job ID: eea34ed0-106b-4cfa-8e56-4a3c55244417) from Async(default) with arguments: "dummy"
Error performing GuestJob (Job ID: eea34ed0-106b-4cfa-8e56-4a3c55244417) from Async(default) in 0.14ms: RuntimeError (Dummy!):
/home/yaginuma/program/rails/master/app/jobs/guest_job.rb:5:in `perform'
/home/yaginuma/program/rails/master_y_yagi/rails/activejob/lib/active_job/execution.rb:37:in `block in perform_now'
/home/yaginuma/program/rails/master_y_yagi/rails/activesupport/lib/active_support/callbacks.rb:108:in `block in run_callbacks'
/home/yaginuma/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/i18n-0.8.1/lib/i18n.rb:257:in `with_locale'
...

backtraceがそのまま全て表示されるようになっています。


Merge pull request #28681 from runephilosof/fix-mysql-grant

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

db:create taskでGRANTステートメントを発行する際に、database名をエスケープするよう修正しています。


Prevent double firing the before save callback of new object when the parent association saved in the callback https://github.com/rails/rails/commit/c0038f7c362fa0c92fc9e1ea3bdb2706f42386c6

Active Recordの修正です。

has_manyの子モデルのbefore_save内で親レコードをsaveするcallbackを仕込んでると、子レコードをsaveするときsave完了前にcallback内の親レコードから子レコードのbefore_saveがもう一回発火してしまうバグがあったのを修正しています。


Add comma

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

Enumerable module内のdocのコメントにカンマを追加しています。


Add missing require

activejob/test/cases/logging_test.rbの修正です。

不足していたjobs/rescue_jobのrequireを追加しています。


Don’t attempt to create a new record that was already created.

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

association同士でhas_and_belongs_to_manyを設定していた場合に、データ保存時に複数レコードが生成されてしまうバグがあったのを修正しています。

class Organisation < ActiveRecord::Base
  has_one :user
end

class User < ActiveRecord::Base
  has_and_belongs_to_many :roles
  belongs_to :organisation
end

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users
end

user = User.new
user.organisation = Organisation.new
user.roles << Role.new
user.save!

User.first.roles.count
# => 1になるべきが、2になってしまっていた

Merge pull request #28432 from marksiemers/master

rails guideのForm Helpersの修正です。

Building Complex Formsの項のmodelのexampleコードに、inverse_ofオプションを追加しています。inverse_ofの指定が無いと、以降のexampleコードが正しく動作しない為。


Add test case to make sure we can implicit convert a Parameters to a Hash

actionpack/test/controller/parameters/parameters_permit_test.rbの修正です。

ActionController::Parametersが暗黙的にHashに変換される事を確認する為のテストを追加しています。