なるようになるブログ

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

rails commit log流し読み(2017/03/19)

2017/03/19分のコミットです。

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


Merge pull request #28469 from matthewd/new-new-defaults

railtiesの修正です。

new_framework_defaults.rbを生成しないよう対応、及び version-compatible configの設定処理を railtiesの中で行うよう修正しています。

version-compatible configはload_defaultsメソッドで呼べるようになっており、新規作成するapplication.rbにはデフォルトでload_defaultsを呼ぶようの設定が追加されています。


Merge pull request #28467 from baerjam/improve-caching-guides

rails guideのCaching with Rails: An Overviewの修正です。

Caching in Developmentの項を追加し、dev:cacheタスクについての説明を追加しています。


Merge pull request #28446 from y-yagi/move_new_changelog_entry_to_the_top

activesupport/CHANGELOG.mdの修正です。

freeze済みのTimeクラスのオブジェクトでto_timeメソッドを呼び出した場合に、RuntimeErrorが発生してしまうバグがあったのを修正した対応(Merge pull request #28147 from kmcphillips/master-time-freeze) についてのエントリーをCHANGELOGの先頭に移動しています。


First pass on 5.1 release notes

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

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


Second pass on 5.1 release notes

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

引き続きフォーマット、グラマーの修正を行っています。


Add link to Webpack/Webpacker PR

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

Webpackerの対応について、PRへのリンクを追加しています。


Add link to rails-ujs/dropping jQuery PR

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

jQueryをドロップした対応について、PRへのリンクを追加しています。


Update some jquery-ujs references to rails-ujs

rails guideの修正です。

jquery-ujsについて言及していたた箇所を、まとめてrails-ujsに修正しています。


Minor grammar fixes for Rails 5.1 release notes

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

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


Remove stray back-end from ActiveJob Basics guide

rails guideのActive Job Basicsの修正です。

back-endbackendに修正しています。

rails commit log流し読み(2017/03/18)

2017/03/18分のコミットです。

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

activerecord/CHANGELOG.md


Merge pull request #28318 from bogdanvlviv/remove-ability-update-locking_column-value

Added ability update locking_column valueで追加された、optimize lockに使用するカラムの値(lock version)を明示的に更新出来るようにした処理を削除しています。

この対応の影響で、lock処理が正しく動作しない(同時に同じデータを更新しようとした際に、後の更新が買ってしまう)バグが発生してしまった為。


Merge pull request #28341 from mtsmfm/pass-options-to-driven-by

actionpack/lib/action_dispatch/system_test_case.rbactionpack/lib/action_dispatch/system_testing/driver.rbの修正です。

SystemTestCase.driven_byメソッドに、Capybara::Selenium::Driverに渡すオプションを指定出来るよう修正しています。

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :chrome, screen_size: [1400, 1400], options: { url: "http://chrome:4444/wd/hub" }
end

Add support for calling nested direct routes (#28462)

Action Packの修正です。

先に定義したdirect routesをdirect routes内で使用出来るよう対応しています。

resources :buckets

direct :recordable do |recording|
  route_for(:bucket, recording.bucket)
end

direct :threadable do |threadable|
  route_for(:recordable, threadable.parent)
end
threadable_path(threadable) # => /buckets/1
threadable_url(threadable)  # => http://example.com/buckets/1

uniq was deprecated and removed already

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

ActiveRecord::Querying moduleがalldelegateするメソッドから、deprecateになったいたuniqメソッドを削除しています。


Merge pull request #28096 from prathamesh-sonpatki/5-1-release-notes-first-draft

rails guideにRuby on Rails 5.1 Release Notesを追加しています。今のところMajor featuresのみ。


Fix resolve usage in the release notes

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

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


Merge pull request #28154 from aripollak/remove-comments-from-structure-sql

Active Recordの修正です。

postgresql adapterを使用している場合に、db:structure:dump taksが生成するstructure.sqlの先頭のコメント行を出力しないよう修正しています。

先頭のコメントにPostgreSQLのバージョンが含まている事があり、その場合、環境ごとに使用しているPostgreSQLのバージョンが違うと毎回差分が発生してしまうので、それを避ける為に、との事です。環境合わせろよ、という気がしないでも無いのですが…


Merge pull request #28191 from eugeneius/string_assoc_order

Active Recordの修正です。

orderメソッドにHashを渡した場合に、HashのkeyにArel.sqlを渡せるよう修正しています。これにより、下記のような書き方が出来るようになっています。

Topic.order(Arel.sql("length(title)") => :asc)

Always use original url_for when generating direct routes

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

view contextでdirectで定義したroutesを呼び出した際に、正しくURLが取得出来ないバグがあったのを修正しています。

Action Viewでurl_forをオーバライドしてしまう為、期待していたメソッドの呼び出しが正しく行えなかった為問題になっていました。Action Pack側でメソッド名を変更して対応しています。

rails commit log流し読み(2017/03/17)

2017/03/17分のコミットです。

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


Add documentation to use with_options in the same class [ci skip]

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

Object#with_optionsメソッドのdocに、with_options内で同じクラスの値を使用する場合のexampleを追加しています。


Merge pull request #28444 from budnik/patch-2

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

Session#postメソッドのdocに、メソッドの戻り値がresponse objectである旨説明が記載されていたのですが、実際はstatus codeを返すようになっていたので、その旨ドキュメントを修正しています。


Merge pull request #28421 from tangposmarvin/docs-assest-pipeline

rails guideのThe Asset Pipelineの修正です。

Coding Links to Assetsの項、assetsを格納するディレクトリのパスに誤りがあったのを修正しています。


Cleanup documentation fixes (#28460)

actionpack/lib/action_dispatch/testing/integration.rbactivesupport/lib/active_support/core_ext/object/with_options.rbのdocの修正です。

ActionDispatch::Integration::Session#postメソッド、Object#with_optionsメソッドのdocのグラマーの修正を行っています。


Bump Capybara and include Minitest::Assertions

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

Capybaraのバージョンを2.13.0に更新、及び、ActionDispatch::SystemTestCaseクラスでCapybara::Minitest::Assertions moduleをincludeするよう修正しています。

Capybara + Minitestの組み合わせだとAssertionsが正しく表示されない、という問題があり、最新のCapybaraでその問題が対応された為、最新のCapybaraを使用するようバージョンを更新しています。

参考:Add parity between rspec support and minitest


Add :default option to belongs_to (#28453)

Active Recordの修正です。

belongs_toメソッドにデフォルト値を設定する為のdefaultオプションを追加しています。

belongs_to :account, default: -> { Current.account }

rails commit log流し読み(2017/03/16)

2017/03/16分のコミットです。

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

activesupport/CHANGELOG.md


Merge pull request #28412 from benoittgt/add_doc_for_message_encryptor_new

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

ActiveSupport::MessageEncryptor#initializeメソッドのdocに、メソッドの引数にsignature keyを指定した場合のexampleを追加しています。


Merge pull request #28426 from mtsmfm/fix-fragile-test

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

default scoping + threadに関するテストを、別クラスに切り出してテストを行うよう修正しています。

Ensure test threads share a DB connectionでdefault scopingのテスト全体に対してuse_transactional_tests = falseを設定していました。が、それにより残ってしまうfixtureの後処理が漏れており、テストの実行順によりテストが壊れてしまっていました。

その対応として、後処理を追加するのではなく、そもそもuse_transactional_testsをfalseにする必要があるテスト(threadが絡むテスト)だけを別クラスに切り出して、そちらのクラスのuse_transactional_testsをfalseにするよう修正したようです。


Revert #27850 following test breakage (#28427)

perform_enqueued_jobsメソッドにonlyオプションを指定した場合に、onlyオプションに指定した以外のjobがenqueueされないようになっていたのを、enqueueはされるよう修正した、Feature/active job test helper by apaulyをrevertしています。

元々の挙動(enqueueされない挙動)が意図通りだった為、との事です。


Remove unnecessary params munging

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

ActionDispatch::Routing::RouteSet#recognize_pathメソッドで、異なるroutesで設定されたparamsが参照出来るバグがあったのを修正しています。

# routes
get "/class/:foo", to: "pages#show", constraints: PageConstraint.new(:foo, /foo/)
get "/class/:bar", to: "pages#show", constraints: PageConstraint.new(:bar, /bar/)
# before
recognize_path("/class/bar")
# => {:controller=>"pages", :action=>"show", :foo=>"bar", :bar=>"bar"}

# after
recognize_path("/class/bar")
# => {:controller=>"pages", :action=>"show", :bar=>"bar"}

beforeの方だと、本来存在しない筈の:foo=>"bar"がいるのですが、これは最初のconstraintのチェックの際に設定されたparamsが使われてしまっていた為でした(paramsのマージ処理が行われてしまっていた)。


Tweak 28412

activesupport/lib/active_support/message_encryptor.rbメソッドのdocの修正です。

ActiveSupport::MessageEncryptor#initializeメソッドのdoc内のsignature keyを指定した場合のexampleの値を、signature_keyからsignature_secretに変更しています。うーん、元のkeyのままで良さそうな気もするんですけどね。


Merge pull request #28368 from y-yagi/add_test_for_secrets_command

railties/test/commands/secrets_test.rbの修正です。

secrets:editコマンドを実際に使用してファイルの読み込みを行った場合のテストを追加しています。


Merge pull request #28147 from kmcphillips/master-time-freeze

Active Supportの修正です。

freeze済みのTimeクラスのオブジェクトでto_timeメソッドを呼び出した場合に、RuntimeErrorが発生してしまうバグがあったのを修正しています。

source = Time.new(2016, 4, 23, 15, 11, 12, 3600).freeze
# => 2016-04-23 15:11:12 +0100
source.to_time
# => RuntimeError: can't modify frozen Time

Move to_time to DateTime compatibility.rb file

activesupport/lib/active_support/core_ext/date_and_time/compatibility.rbactivesupport/lib/active_support/core_ext/date_time/compatibility.rbの修正です。

Time、及びActiveSupport::TimeWithZoneクラスで使用する為のto_timeメソッドの実装が、activesupport/lib/active_support/core_ext/date_and_time/compatibility.rbに定義されていたのをactivesupport/lib/active_support/core_ext/date_time/compatibility.rbに移動しています。

Timeクラスに関する処理なので、date_time/compatibility.rbにある方が適切だろうとの事のようです。


Fix test warnings

activesupport/test/core_ext/duration_test.rbの修正です。

テストでRubyのwarning(ambiguous first argument; put parentheses or a space even after-‘ operator`)が出ていたので、括弧を追加し対応しています。

rails commit log流し読み(2017/03/15)

2017/03/15分のコミットです。

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

activesupport/CHANGELOG.md


Add CHANGELOG entry for –skip-coffee [ci skip]

railties/CHANGELOG.mdの修正です。

rails newコマンドに--skip-coffeeオプションを追加した対応について、エントリーを追加しています。


Don’t cast to float unnecessarily

actionmailer/test/message_delivery_test.rbの修正です。

deliveryのテストでTimeインスタンス同士を足す際に、Timeをfloatに変換してから加算処理を行っていたのを、Timeインスタンスのまま加算処理を行うよう修正しています。


Rename test of app:update to more appropriate name

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

app:updateタスクに関するテストのテスト名がxxx_rails_update_xxxになっていたのを、タスク名に合わせてxxx_app_update_xxxに修正しています。


Remove unused @txn variable

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

ActiveRecord::Core moduleから使用していいない@txn変数を削除しています。


Merge pull request #28409 from y-yagi/make_destroy_command_work_within_engines

railties/lib/rails/commands/destroy/destroy_command.rbの修正です。

rails destroyコマンドがrails engineで動作しないバグがあったのを修正しています。


Remove implicit coercion deprecation of durations

Active Supportの修正です。

Merge pull request #28204 from rails/deprecate-implicit-coercion-of-durationsでdeprecateになった、NumericからActiveSupport::Durationへの暗黙的な変換処理が、deprecateではなくなりました。

サードパーティのライブラリの設定をする際に、この暗黙的な変換処理に依存している処理があった(e.g. redis.expire("foo", 5.minutes))為、deprecateにするのはやめたとの事です。

代わりに、numericをラップしたprivateクラスを追加し、そこで処理を行う事でdurationの情報を維持したまま処理が行えるようにしています。

# before
Date.today + 2 * 1.day
# => Tue, 25 Apr 2490

# after
Date.today + 2 * 1.day
# => Sat, 18 Mar 2017 00:00:00 UTC +00:00

Use better duration aliases in tests

actionmailer/test/message_delivery_test.rbの修正です。

deliveryのテストで10分waitさせたい場合の値が600.secondsになっていたのを10.minutesに修正しています。


Restore 5.minutes changed in #28204

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

write_entryメソッドでexpireの値を追加する時にActiveSupport::Durationクラスの値をそのまま使用するよう修正しています。

rails commit log流し読み(2017/03/14)

2017/03/14分のコミットです。

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


Merge pull request #28385 from javan/actioncable/fix-npm-package

Gemfileactioncable/Rakefileの修正です。

action_cable.jsのUMD module supportの為に、Gemfileにsprockets-exportを追加しています。

元々はbladeの依存で入るようになっていた為問題なかったのですが、blade 0.7.0でsprockets-exportが依存から外れてしまっていた為、今回明示的にGemfileに追加しています。

合わせて、コンパイルされたAction Cable assetsが正常に動作する事を確認する為のrake taskも追加しています。


Merge pull request #28381 from shime/docs-action-controller-base

Action Packのdocの修正です。

ActionController module配下の各メソッド、クラス等のdocのフォーマット、グラマーの修正をまとめて行っています。


Fix HTTPS grammar

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

ActionController::ForceSSL moduleのdocのグラマーの修正を行っています。


Fix Typo [ci skip]

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

ActionDispatch::IntegrationTestクラスのdoc内のexampleコードで、クラス名をタイポしている箇所があったのを修正しています。


Small grammar change

actionpack/CHANGELOG.mdの修正です。

ActionController::Renderer#with_defaultsを修正した対応のエントリーのグラマーの修正を行っています。


Small grammar change + new line for “fixes”

actionview/CHANGELOG.mdの修正です。

encode_special_charsオプションについて対応したエントリーのグラマーの修正を行っています。


Lint activesupport/CHANGELOG.md

activesupport/CHANGELOG.mdの修正です。

各エントリーのフォーム、グラマーの修正をまとめて行っています。


Move “fixes” to a new line

railties/CHANGELOG.mdの修正です。

各エントリーのフォーム、グラマーの修正をまとめて行っています。


Merge pull request #28068 from kamipo/refactor_data_sources

Active Recordの修正です。

各メソッド各々で行っていたdata sourcesの取得処理を、メソッド(data_source_sql)に切り出して、そのメソッドを使用するよう修正しています。


Merge pull request #28356 from jasl/patch-1

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

ActiveModel::Type::Registryに存在しないメソッド(#add_modifier)の呼び出しがあったのを削除しています。


Merge pull request #28369 from mylake/reduce-postgresql-adapter-memory-bloat

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

PostgreSQLAdapter#load_additional_typesメソッドでtypesを取得する際に、DISTINCTで重複データ取得しないよう修正しています。

            query = <<-SQL
-              SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, r.rngsubtype, t.typtype, t.typbasetype
+              SELECT DISTINCT on (t.typname) t.oid, t.typname, t.typelem, t.typdelim, t.typinput, r.rngsubtype, t.typtype, t.typbasetype
               FROM pg_type as t
               LEFT JOIN pg_range as r ON oid = rngtypid
             SQL

schemaが大量にある場合に、不要なデータの取得を抑える為に、とのことです。DISTINCT ONという書き方出来るんですねえ。

が、そもそもtypenameでDISTINCTしてしまうのは良くない(typenameは同じ場合にそれらが関係あると断言してしまう)という事で、後ほどrevertされています。


Add CHANGELOG for #26226 [ci skip]

actionview/CHANGELOG.mdの修正です。

各view用のhelper method(image_tagjavascript_include_tag等)に、asset pipelineを使用しているかどうかを明示的に指定するためのオプション(skip_pipeline)を追加した対応(Make public asset use explicit)について、CHANGELOGにエントリーを追加しています。


Revert “Merge pull request #28369 from mylake/reduce-postgresql-adapter-memory-bloat”

先ほどコミットされたDISTINCTの対応をrevertしています。理由は先に書いた通り。


Remove obsolete warning about regular expression

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

numericalityの項にonly_integerを使用する場合の注意事項に、末尾に改行記号がある場合にマッチする旨説明記載されていたのですが、実際使用される正規表現/\A[+-]?\d+\z/であり、改行記号にはマッチしない為該当の説明を削除しています。

rails commit log流し読み(2017/03/13)

2017/03/13分のコミットです。

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

actionpack/CHANGELOG.md


First editing pass on “Active Model Basics” guide

rails guideのActive Model Basicsの修正です。

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


Second editing pass on “Active Model Basics” guide

rails guideのActive Model Basicsの修正です。

引き続き、言い回し、グラマー、フォーマットの修正等をまとめて行っています。


Merge pull request #28372 from kamipo/delegate_as_json

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

ActiveRecord::Relationクラスにas_jsonメソッドを明示的に定義していたのをやめて、recordsにdelegateするメソッドの一覧にas_jsonを追加しています。as_jsonメソッドの中身がrecordsas_jsonを呼び出すだけだった為。


Fix weird documentation line

rails guideのActive Model Basicsの修正です。

先のActive Model Basics guideの修正で、Dirtyの項にあるexampleコードを誤って修正してしまっていたのを戻しています。


Merge pull request #28371 from kamipo/simplify_count

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

Calculations#count#sumメソッドで、引数にblockが与えられていた場合は、親クラスのメソッドを呼び出すよう修正しています。

    def count(column_name = nil)
-      if block_given?
-        to_a.count { |*block_args| yield(*block_args) }
-      else
-        calculate(:count, column_name)
-      end
+      return super() if block_given?
+      calculate(:count, column_name)
     end

ActiveRecord::RelationEnumerableをincludeしており、countsumも使える為。


Merge pull request #28352 from alpaca-tc/fixes_renderer_with_defaults

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

ActionController::Renderer#with_defaultsメソッドがタイポによりNameErrorでエラーになってしまうバグがあったのを修正しています。

    def with_defaults(defaults)
-      self.class.new controller, env, self.defaults.merge(defaults)
+      self.class.new controller, @env, self.defaults.merge(defaults)
     end

Merge pull request #28017 from mtsmfm/suppress-dep-warn

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

Active Recordのテストでto_yamlに関するdeprecateメッセージ(implementing to_yaml is deprecated, please implement "encode_with")が出ていたのを、出ないよう対応(to_yamlが定義されていたらundefするよう対応)しています。

Objectdelegateしているクラスに対してYAML.dumpを呼び出した場合に発生してしまうとのことです。

参考:Bug #13115: `YAML.dump` outputs deperecated message even with delegated object


Merge pull request #28185 from renchap/system-testing-screenshot-output

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

system testingのスクリーンショット取得処理(#take_screenshot)で必ずターミナルにスクリーンショットを表示していたのを、環境変数(RAILS_SYSTEM_TESTING_SCREENSHOT)によって表示の仕方を調整出来るよう修正しています。

RAILS_SYSTEM_TESTING_SCREENSHOTに指定出来る値はinline(デフォルト。iTerm image protocol (http://iterm2.com/documentation-images.html)で表示。)、simple(スクリーンショットのファイルのパスだけ表示)、artifact(terminal artifact format (http://buildkite.github.io/terminal/inline-images/) で表示)の3つです。