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

なるようになるブログ

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

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

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

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

activemodel/CHANGELOG.md

activesupport/CHANGELOG.md


Includes namespace in system test skelton when namespace is specified

railties/lib/rails/generators/test_unit/system/system_generator.rbの修正です。

system testを生成する際に、namespaceが指定されている場合はファイル名にnamespaceを含むよう修正しています。


Merge pull request #29249 from bradleypriest/numericality-precision-regression

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

numericality validatorでDecimal、Floatの値をチェックする際に、schemaに定義されているscaleより大きな値のチェック処理が正しく行われないバグがあったのを修正しています。


Merge pull request #28895 from codeforkjeff/fix-session-keys-and-values-methods

actionpack/lib/action_dispatch/request/session.rbの修正です。

Request::Session#keys#valuesメソッドで他のメソッド同様に、値を取得する前にsessionのload処理を行うよう修正しています。


Remove double Thread.current storage.

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

current threadに複数の値を別々("current_attributes_for_#{name}"current_attributes_instances)のkeyで格納していたのを、current_attributes_instancesのvalueをHashにして、一つのkeyに値をまとめて格納するよう修正しています。


Make reset execution assertions easier to read.

railties/test/application/current_attributes_integration_test.rbの修正です。

ActiveSupport::CurrentAttributesのreset処理が行われることを確認するテストで、テスト結果を取得する為に別途結果確認用のスクリプトを別に準備していたのを、Rails.application.executorを直接呼び出してテストするよう修正しています。


Clear all current instances before a reload.

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

classのreload時にCurrentAttributesで保持している情報をresetするよう修正しています。

CurrentAttributesの子クラスにattributeを追加したり、何か他の変更があった場合、情報がそのままだとpage load時にexceptionが発生してしまう(ActiveSupport::CurrentAttributes.current_instancesは変更前のインスタンスの参照を保持しているから)為。


Bump delayed_job_active_record gem

Gemfile.lockの修正です。

delayed_job_active_recordのバージョンを4.1.3に更新しています。


Bring back delayed_job to test list

activejob/Rakefileの修正です。

Active Jobのテスト対象にdelayed_jobを戻しています。

delayed_job_active_record 4.1.3でRails 5.1をサポートした為。


Merge pull request #29250 from kamipo/remove_unused_association_interpolate

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

使用していないAssociation#interpolateメソッドを削除しています。


Merge pull request #29197 from kamipo/enable_extending_even_if_scope_returns_nil

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

scopenilを返す場合、Association extensionsが有効化されなかったのを、nilを返す場合も有効化されるよう修正しています。


Merge pull request #29097 from EilisHamilton/fix_uncountable_pluralization_locale

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

#singularize#pluralizeメソッドでuncountableかどうかをチェックする際に、#singularize#pluralizeメソッドに指定されたlocaleを使用するよう修正しています。

元々は#singularize#pluralizeが使用する#apply_inflectionsメソッドでlocaleを使用しない(内部的にデフォルトでenを使用するようになっているので、enが使われていた)ようになっていたのですが、#apply_inflections`メソッドの引数にlocaleを追加し、渡された値を使用するよう対応しています。


Prevent extra current_database query for encoding/collation/ctype

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

PostgreSQL::SchemaStatements#encodingcollationctypeメソッドでdatabase名を取得するのにシステム情報関数のcurrent_database()を直接使用するよう修正しています。余計なqueryを発行しないようにする為。

-          select_value("SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname LIKE '#{current_database}'", "SCHEMA")
+          select_value("SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname = current_database()", "SCHEMA")

元の処理だとSELECT current_database()が実行されてしまっていた為、上記のように修正しています。


Merge pull request #29003 from kamipo/delegate_ast_and_locked_to_arel_explicitly

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

ActiveRecord::Delegation moduleでastlockedメソッドをareldelegateするよう修正しています。

元々astlockedメソッドはarelに定義されているメソッドを使う必要があったのですが、method_missingarelのメソッドを呼ぶ出すようになっていました。ただそれだとmodel classにastlockedメソッドが定義さてしまった場合に正しくarelのメソッドが呼ばれない為、明示的にdelegateするようにしています。


Merge pull request #28969 from kamipo/refactor_enum_to_use_value_instead_of_label

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

enumが生成するscopeでlabelではなくvalueを使用するよう修正しています。

labelのままだと、値がnilenumが生成するSQLが誤ったSQLになってしまう為。多分。


Remove mentions of deprecated callbacks on ActionDispatch::Callbacks

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

既に存在しないActionDispatch::Callbacks.to_prepareメソッドについての説明が残ってしまっていたのを削除しています。

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

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

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

activesupport/CHANGELOG.md


Merge pull request #29232 from koic/ci_against_jruby_9_1_10_0

.travis.ymlの修正です。

CIで使用するJRubyのバージョンを9.1.10.0に更新しています。


Remove a redundant test assertion

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

findメソッドのテストで重複したassertionがあったのを削除しています。


ActiveSupport::CurrentAttributes provides a thread-isolated attributes singleton (#29180)

スレッド毎に独立したattibutesを管理するためのActiveSupport::CurrentAttributesクラスを追加しています。リクエスト毎のattribute(リクエストIDやUA等)をシステム全体で使用可能にする、のが主なユースケースとの事です。リクエストの前後で自動でattributeのresetが行われるよう対応されています。

具体的な使い方はDoc(ActiveSupport::CurrentAttributes)参照。


Doc updates for ActiveRecord::Batches

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

ActiveRecord::Batches moduleのdoc内のexampleコードが動作しないコードになっていたのを修正、及び、doc内のフォーマットの修正を行っています。


Merge pull request #25037 from mohitnatoo/adapter-inquirer

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

QueueAdapter moduleにqueue_adapter_nameメソッドを追加しています。

class Job1 < ApplicationJob
  self.queue_adapter = :resque
end

> Job1.queue_adapter_name
#=> "resque"

Fix broken RDoc formatting

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

ActiveModel::Validatorクラスのdocでoptions[:class]がタイプライター体で表示されるよう、ttタグで囲むよう修正しています。


Update to rails-ujs documentation for yarn install

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

rails-ujisをnpm経由でインストールした場合の使い方についての説明を追加しています。


Switch to rb-inotify master

Gemfileの修正です。

rb-inotify gemを使用するのにforkしたリポジトリを使用していたのを、rb-inotifyのmasterリポジトリを指定するよう修正しています。forkしたブランチのPRがmasterにマージされた為。


[ci skip]fix wrong variable name in docs

rails guideのActive Record Query Interfaceの修正です。

Arrayを格納する変数の変数名が単数形になっていたのを複数形に修正しています。


[ci skip]fix wrong variable name in docs

rails guideのActive Record Query Interfaceの修正です。

Arrayを格納する変数の変数名が単数形になっていたのを複数形に修正しています。


Use models to match the docs.

railties/test/application/current_attributes_integration_test.rbの修正です。

ActiveSupport::CurrentAttributesのテストで、テスト用クラスを定義するファイルをapp/services/current.rbからapp/models/current.rbに修正しています。docに記載されているexampleコードと合わせる為。


[ci skip] Fix spelling that’s a bit of an overreach.

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

ActiveSupport::CurrentAttributesの docのグラマーの修正を行っています


Use non-raising finder.

ActiveSupport::CurrentAttributesの doc内のexampleコードで、userの取得にfindを使用していたのをfind_byを使用するよう修正しています。

-  #         if authenticated_user = User.find(cookies.signed[:user_id])
+  #         if authenticated_user = User.find_by(id: cookies.signed[:user_id])
   #           Current.user = authenticated_user
   #         else
   #           redirect_to new_session_url

findを使ってしまうと、userが見つからなかった場合にexceptionがraiseされてしまい、elseの処理が実行されない為。

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

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

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

activerecord/CHANGELOG.md


Remove redundant test method

railties/test/generators/app_generator_test.rbの修正です。

--skip-yarnオプションを指定した場合のテストが重複していて存在していたのを削除しています。


Merge pull request #29216 from matthewd/threadsafe-load-schema

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

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

monitorを使用して、DBからのmodel schemaのload処理がスレッドセーフになるよう修正しています。


Merge pull request #29226 from koic/remove_duplicate_mysql_rake_test

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

重複してあったstructure_dumpメソッドのテストを削除しています。


Merge pull request #29215 from voxmedia/ar_optimizations

Active Recordの修正です。

Active Recordの初期化処理の改善として、不要なattributeのコピーを避けるようdupを使用しないよう修正、column_defaultsの値をキャッシュするよう修正等を行っています。


Merge pull request #29230 from koic/remove_duplicate_schema_authorization_test

activerecord/test/cases/adapters/postgresql/schema_authorization_test.rbの修正です。

重複してあったschemaについてのテストを削除しています。


Merge pull request #29221 from koic/remove_duplicate_migration_test

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

重複してあったInternalMetadataについてのテストを削除しています。


Merge pull request #29176 from bogdanvlviv/define-path-withdir

パスを定義するのに__FILE__を使用していたのを__dir__を使用するよう修正しています。

-require ::File.expand_path('../../config/environment', __FILE__)
+require ::File.expand_path('../config/environment', __dir__)

不要な..を削除する為に、とのことです。


Remove unused test class

activesupport/test/test_case_test.rbの修正です。

使用していないテスト用のクラスを削除しています。


Prevent a redefinition warning when the real Rails.root appears

tools/test.rbの修正です。

rails test runner用にRails.rootを定義しているのですが、それだと実際にテスト中にRail.rootが現れた場合に再定義に関するwarningが出てしまう為、テスト用の方はaliasで定義するよう修正しています。


Avoid circular require due to autoload

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

autoloadによりrequireが循環してしまうのを避ける為、ファイルの終端でrequireを行うよう修正しています。


[ci skip] Changed sentence formation for ActiveRecordRelation#update

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

updateメソッドのdocの言い回しを修正しています。


Do not show –webpack option in the plugin help message

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

rails engineから--webpackオプションを削除しています。現状、engineではwebpackerは動作しない為。

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

gg2017/05/25分のコミットです。

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


Slim down the source definition

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

Gemfilegithubショートハンドを使用した場合に、httpsプロトコルを使用するよう変換する処理のリファクタリングを行っています。


We dont actually use the ultra short-hand, so no need to complicate things with it

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

Gemfilegithubショートハンドを使用している、かつ、リポジトリ名にアカウント名だけを指定した場合(e.g. gem 'rails', github: 'rails')のサポートを削除しています。

-git_source(:github) { |repo| "https://github.com/#{repo.include?("/") ? repo : "#{repo}/#{repo}"}.git" }
+git_source(:github) { |repo| "https://github.com/#{repo}.git" }

このフォーマット使わないだろう、という事で削除したとの事です。


Update information on using Gmail when 2FA is in use [ci skip]

rails guideのAction Mailer Basicsの修正です。

Action Mailer Configuration for Gmailの項に、two-factor authenticationを有効化している場合、app password の設定が必要である旨説明を追加しています。


Merge pull request #29169 from ffmike/api-guide-edit

rails guideのUsing Rails for API-only Applicationsの修正です。

API-only Applicationsでデフォルトでロードされるミドルウェアの一覧を最新の内容に更新しています。


[ci skip]fix wrong variable name in docs

raisl guideのActive Record Associationsの修正です。

findメソッドについてのexampleコードで、findメソッドで取得した値を格納する変数名が複数形になっていたのを、単数形に修正しています。


Capitalize Gmail

rails guideのAction Mailer Basicsの修正です。

gmail -> Gmailに修正しています。


Merge pull request #29181 from kamipo/fix_circular_left_joins_with_scoping

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

left_joins + scopingを使用した場合にstack level too deep errorが発生してしまうバグがあったのを修正しています。


Merge pull request #29211 from yahonda/rubocop_namespaces

.rubocop.ymlの修正です。

Style namespaceを Layout namespaceに変更しています。rubocop側の仕様が変わった為。参考:Change department from Style to Layout for space related cops · bbatsov/rubocop@54166bf


Merge pull request #29175 from kamipo/extract_json_shared_tests

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

json型についてのテストをJSONSharedTestCases moduleに切り出して、PostgreSQL / MySQLで共通で使用するよう修正しています。


Add ActiveRecord::Relation#or description to guides [ci skip]

rails guideのActive Record Query Interfaceの修正です。

ActiveRecord::Relation#orメソッドについての説明を追加しています。


Reorder first secrets edit flow.

railtiesの修正です。

secrets:setupコマンドを実行せずにsecrets:editコマンドを実行した場合に、エラー(Errno::ENOENT)になっていたのを、setupが未実行の場合は自動でsecretsの初期化処理を行い、setupコマンドを実行せずにeditが出来るよう修正しています。

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

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

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


Merge pull request #29184 from kirs/nested-attributes-friendly-error

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

nested attributes accessorsに不正な値が指定された場合のエラーメッセージに、association名を含むよう修正しています。


Merge pull request #29183 from kamipo/refactor_making_join_constraints

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

重複した内容が定義されていたAssociations::JoinDependency#make_left_outer_joins#make_inner_joinsメソッドをリファクタして#make_join_constraintsメソッドにまとめています。


Merge pull request #29182 from kamipo/remove_unused_left_joins_values_generation

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

ActiveRecord::Relationクラスから使用していないleft_joins_valuesメソッドの生成処理を削除しています。


Merge pull request #29179 from y-yagi/remove_rubygems_version_lock

.travis.ymlの修正です。

CIを実行する際にrubygemsのバージョンを2.6.11に固定していたのを、バージョンロックを削除しています。

rubygems側の問題でRailsのテストがコケてしまう、という問題があった為ロックしていたのですが、bundler 1.15でその問題が対処されており、ロックは不要になった為削除しています。


Merge pull request #29174 from kamipo/remove_unused_join_part_name

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

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


Merge pull request #29167 from koic/remove_duplicate_inverse_associations_test

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

inverse associationに関する重複したテストがあった為、片方削除しています。


Merge pull request #29027 from mohitnatoo/foreign-key-name

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

SchemaStatements#foreign_key_nameメソッドでnameが既に定義されている場合に、不要なidentifierの生成処理を行わないよう修正しています。


Merge pull request #28644 from mtsmfm/set-capybara-app-host

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

system testでcapybaraが使用するホスト(Capybara.app_host)をhost!メソッド経由で設定するよう修正しています。

アプリ側でCapybara.app_hostを上書き出来るようにする為。


Merge pull request #29145 from kamipo/reference_type_should_be_not_null

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

migrationでpolymorphic: true及びnull: falseを両方定義した際に、xxx_idカラムのみNOT NULL制約が設定されて、xxx_typeカラムにNOT NULL制約が設定されないバグがあったのを修正しています。


Merge pull request #29141 from kamipo/make_helper_methods_to_private

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

テスト用のヘルパーメソッドの可視性をprivateに変更しています。


Merge pull request #29119 from spohlenz/fix-select-with-enumerable

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

ActionView::Helpers::Tags::Select#rouped_choices?メソッドで、@choicesが空かどうかのチェックにempty?を使用していたのを、blank?を使用するよう修正しています。

selectメソッドの第二引数のchoicesEnumerableをincludeしたオブジェクトを指定した場合に、empty?Enumerableに定義されておらずエラーになってしまう為、エラーになるのを避けるためblank?を使用するようにしたとの事です。


Bump rubocop and dependent gem versions

Gemfile.lockの修正です。

rubocopのバージョンを0.49.0に更新しています。


Fix a RuboCop offences using rubocop -a

各ファイルにrubocopのルールを適応しています。


Merge pull request #29201 from willnet/fix-docs-has-one

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

has_one Association Referenceの項でhas_one associationをbuildする際のメソッド名が誤っていたのを修正しています。

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

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

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


Remove unused simulate method

actionpack/lib/action_dispatch/journey/gtg/simulator.rbの修正です。

テストでしか使用していないGTG::Simulator#simulateメソッドを削除しています。

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

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

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

activesupport/CHANGELOG.md


Remove obsolete Guides source files [ci skip]

rails guideのRails Nested Model FormsA Guide to Profiling Rails Applicationsを削除しています。

Nested Model Formsの方はどこからもインデックスされていない、かつ、 Form Helpers guideの方で必要な情報はカバーされている為削除したとの事です。Profiling Rails Applicationsの方は、雛形が1年以上前に作成されていたのですが、中身が作成される事は無かった為削除したとの事です。


Merge pull request #29163 from rails/fix-scalar-duration-calculation

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

scalarとdurationで四則演算を行った場合に、scalarが強制的に秒に変換されてしまっていたのを、元の型を維持したまま計算処理を行うよう修正しています。

具体的には、Dateとdurationで計算処理を行った際に、結果がDateになるようになっています。

# before
Time.zone = "Beijing"
Date.civil(2017, 5, 20)
# => Sat, 20 May 2017
2 * 1.day
# => 172800 seconds
date + 2 * 1.day
# => Mon, 22 May 2017 00:00:00 CST +08:00

# after
Time.zone = "Beijing"
date = Date.civil(2017, 5, 20)
# => Sat, 20 May 2017
2 * 1.day
# => 2 days
date + 2 * 1.day
# => Mon, 22 May 2017

Improving docs for callbacks execution order [ci skip]

AbstractController::Callbacks moduleのdocにAbstract Controllerで使用出来るcallback一覧を追記、及び、各docにcallbacksの定義は上書きされる旨説明を追加しています。


Simplify handling of prerequisites in Getting Started guide [ci skip]

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

guideの先頭にある前提条件の説明を簡略化しています。RubyやSQLite3のインストールが必要である旨説明が記載されていたのですが、ガイド内の以降の項で詳細な説明があるため、先頭で記載されている必要は無い為との事です。


We always + 1 to LINE when class_evaling with <<

rails guieのAPI Documentation Guidelinesの修正です。

Dynamically Generated Methodsの項のexampleコードで、class_evalメソッドを使用している箇所で__LINE__に +1するのが漏れていたのを修正しています。


Update test link in ActionView javascripts README.md.

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

How to run testsの項、テストを実行するURLの前後から括弧を削除しています。GitHubでみた際にクリック出来るようにする為、との事です。