なるようになるブログ

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

rails commit log流し読み(2016/05/07)

2016/05/07分のコミットです。

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


Fix link in 'Configuring Rails Applications' [ci skip]

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

Passenger manual へのリンクが壊れてしまっていたのを修正しています。


Array#split refactoring for case with block

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

Array#splitリファクタリングを行っています。

  def split(value = nil)
+    arr = self.dup
+    result = []
     if block_given?
-      inject([[]]) do |results, element|
-        if yield(element)
-          results << []
-        else
-          results.last << element
-        end
-
-        results
+      while (idx = arr.index { |i| yield i })
+        result << arr.shift(idx)
+        arr.shift
       end
     else
-      arr = self.dup
-      result = []
       while (idx = arr.index(value))
         result << arr.shift(idx)
         arr.shift
       end
-      result << arr
     end
+    result << arr
   end

性能測定の結果は下記の通り。ちょっと早くなっています。

arr = (1..12).to_a

Benchmark.ips do |x|
  x.report('before') { arr.split { |i| i % 3 == 0 } }
  x.report('after') { arr.split2 { |i| i % 3 == 0 } }
  x.compare!
end
Calculating -------------------------------------
              before    26.319k i/100ms
               after    29.414k i/100ms
-------------------------------------------------
              before    350.623k (± 1.6%) i/s -      1.763M
               after    416.227k (± 1.4%) i/s -      2.088M

Comparison:
               after:   416226.8 i/s
              before:   350622.8 i/s - 1.19x slower

Fix broken links in 'Ruby on Rails 2.3 Release Notes' [ci skip]

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

各外部ページへのリンクが壊れてしまっていたのを、まとめて修正しています。


Allow the connection adapters to determine the order of bind params

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

bind parametersを設定する順番をconnection adapters毎に設定出来るよう対応しています。

Rails 5からlimitoffsetでもbind parametersを使用するようになったのですが、limit / offsetを指定するシンタックスがDB毎に多少異なる(limitが先かoffsetが先かが微妙に違う)為、connection adapter毎に指定出来るよう、bind parametersを設定する処理をメソッド(#combine_bind_parameters)に切り出しています。

参考:bound_attributes needs support to change limit and offset orders · Issue #24775 · rails/rails


We are erroring due to nested transaction failures from mysql on test_migrate_clears_schema_cache_afterward test.

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

migration taskのテストで、transactionを無効化するよう修正しています。

テスト内でDDLの変更を行っているのですが、MySQLはtransaction内でのDDLの変更を許容していない為。


Release notes: Add a note about use_transactional_tests in the deprecated section of Active Record notes [ci skip]

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

use_transactional_fixturesuse_transactional_testsに変更になった対応についてentryを追加しています。


Merge pull request #24029 from rthbound/dont-call-each-when-calling-body-on-response

Action Packの修正です。

controllerの中で、response.bodyの値を読み込んだ後にresponse.headersの値を設定しようとした場合に、エラーになってしまっていたのを修正しています。


BoomerAPI is not used anywhere, so removed it!

actionpack/test/dispatch/debug_exceptions_test.rbの修正です。

使用していないBoomerAPIクラスを削除しています。


Make flash messages cookie compatible with Rails 4

actionpack/lib/action_dispatch/middleware/flash.rbの修正です。

#to_session_valueが返すHashにdiscardを追加しています。

-        {'flashes' => flashes_to_keep}
+        { 'discard' => [], 'flashes' => flashes_to_keep }

Rails 4へのコンパチ(Rails 5のアプリで作成したflashRails 4のアプリで表示する際に必要)の為との事です。


Merge pull request #24844 from arthurnn/arthurnn/conn

Active Recordの修正です。

connection handlerのリファクタリングを行っています。

元々は、connection handler内でActive Recordのmodelの情報を保持するようになっていたのですが、それはやめて、specの情報だけ保持するようにしています。

また、spec名はクラス毎に指定出来るようになっています。

issueより。

# database.yml
production:
  database: ...
readonly:
  database: ...
class User < ApplicationRecord
  self.connection_specification_name = "readonly"
end

または

class User < ApplicationRecord
  def self.connection_specification_name
     @in_readonly_mode ? "readonly" : "primary"
  end
end

Upgrade all gems to make sure Rails works with rack 2.0.0.rc1

Gemfile.lockの修正です。

Railsで使用しているgemのバージョンをあげています。Rack 2.0.0.rc1を使用する為との事です。


Sign the tags when releasing

tasks/release.rbの修正です。

tagを作成する際に署名付きのタグを作成するよう、git tagコマンドのオプションに-sオプションを追加しています。


Fix etag expectation to work with the SHA256

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

etagの値をMD5からSHA256の値に変更しています。Rack側でetagを生成する際にSHA256を使用するよう変更になった為。参考:use sha256 for ETag generation · rack/rack@7b66d2c


http --> https

各docの修正です。

githubへのリンクがhttpになっていたのを、まとめてhttpsに修正しています。