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

なるようになるブログ

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

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

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

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

actionview/CHANGELOG.md


Add documentation of data attributes for UJS [ci skip]

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

rails-ujsでのdata attributes(data-methoddata-disable-with等)の指定の方法や扱われか方等についての説明を追加しています。


Evaluate belongs_to :default option against the owner, not the association

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

belongs_todefaultオプションに指定したblockを実行する際、associationに対して実行していたのを、associationが定義されているmodelの元で実行するよう修正しています。

PRより。

# app/models/ship.rb
class Ship < ApplicationRecord
  belongs_to :developer, default: -> { default_developer }

  def default_developer
    Developer.first
  end
end

というクラスがあった場合に、

# before
ship = Ship.create!
NameError: undefined local variable or method `default_developer' for #<ActiveRecord::Associations::BelongsToAssociation:0x0056312d94b8d0>

# after
ship = Ship.create!
# => #<Ship id: 1, developer_id: 1>

のように、modelで定義したメソッドが呼べるようになっています。


Also raise error when VERSION is nil

activerecord/lib/active_record/railties/databases.rakeの修正です。

VERSION envを指定せずにdb:migrate:updb:migrate:downを実行してもエラーにならないバグがあったのを修正しています。


Ensure input to distance_of_time_in_words is not nil

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

distance_of_time_in_wordsメソッドの引数に不正な値(nil等)を指定した場合のエラーメッセージの改善、及び、from_timeto_time引数にTime / Date objectとNumericが混在した場合に正常に動作するよう修正しています。

# before

helper.time_ago_in_words(nil)
# => NoMethodError: undefined method `>' for nil:NilClass

helper.distance_of_time_in_words(Date.current, 0)
# => NoMethodError: undefined method `/' for 2017-04-28 00:00:00 +0900:Time


# after

helper.time_ago_in_words(nil)
# => ArgumentError: nil can't be converted to a Time value

helper.distance_of_time_in_words(Date.current, 0)
# => "over 47 years"

Merge pull request #28844 from kyuden/remove_unnecessary_attributes_of_select_in_form_with

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

form_withが生成するformの中でselectタグを生成する際に、不要なskip_default_idsallow_method_names_outside_object attributesが付与されてしまっていたのを、付与されないよう修正しています。


Added some more release notes for Active Record [ci skip]

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

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


Fix indentation [ci skip]

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

Active Recordの項のエントリーのインデントがずれていたのを調整しています。


Small grammar fixes

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

グラマーの修正を行っています。


Small grammar fix

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

グラマーの修正を行っています。


5.1 Release Notes are complete [ci skip]

guides/source/documents.yamlの修正です。

Ruby on Rails 5.1 Release NotesからWIPを削除し、リリースしています。

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を生成しない)バグがあったのを修正しています。