2014/08/18分のコミットです。 今日は、多かったです…。
ActiveJob / DeliverLater / GlobalIDのマージ、 respond_withのresponders gemへの切り出し等、割と大きな対応が行われています。
CHANGELOGにのったコミットは以下の通りです。
- Move respond_with to the responders gem
- Prepare for partial release.
- Add
config.action_dispatch.cookies_digest
option for setting custom digest. The default remains the same - 'SHA1'. - Use AS::JSON for (de)serializing cookies
actionmailer/CHANGELOG.md
- Make ActionMailer::Previews methods class methods. Previously they were methods and ActionMailer tries to render a message when they are called.
- Add CHANGELOG entry for #deliver_later
Allow usage of bundle local config for rack by specifying the branch
Gemfile
の修正です。
rack
について、branchを指定するよう対応しています。
-gem 'rack', github: 'rack/rack' +gem 'rack', github: 'rack/rack', branch: 'master'
Move respond_with to the responders gem
respond_with
、respond_to
メソッドをrespondersというgemに切り出しています。
それに伴い、rails内のrespond_with
、respond_to
メソッド及びその関連をばっさり削除しています。
respondersはこちら。割と大きい対応が。
Remove usafe of respond_to in ActionView tests
actionview/test/activerecord/controller_runtime_test.rb
の修正です。
respond_to
、respond_with
メソッドを使用している箇所を削除しています。
Remove more references to respond_with
各テストのfixturesの修正です。
respond_with
が削除された事により、不要になったfixturesを削除しています。
actionpack/actionviewの修正です。
HTML Sanitizerとしてrails-html-sanitizerというgemがあり、今後はそちらを使用するようguideに追加、及び下位互換の為に、railsの中ではrails-deprecated_sanitizerというgemを読むこむよう修正しています。
rails-deprecated_sanitizerはrails5まで保守されるようです。
Merge pull request #16484 from strzalek/remove-redundant-null-serializer
actionpack/lib/action_dispatch/middleware/cookies.rb
の修正です。
不要なActionDispatch::Cookies::NullSerializer
クラスを削除しています。
Merge pull request #16467 from strzalek/cookies-digest-config-option2
actionpack/lib/action_dispatch/middleware/cookies.rb
の修正です。
cookies digestに使用するアルゴリズムを指定出来るようになりました。
action_dispatch.cookies_digest = 'SHA256'
デフォルトはSHA1のままなので、そのまま使用する場合は、特に変更してないでもOKです。
Fixed broken reference caused by 14965ba
actionpack/test/dispatch/cookies_test.rb
の修正です。
ActionDispatch::Cookies::NullSerializer
クラス削除に伴いコケてたテストを修正しています。
Raise a more helpful error for people who are using these extracted features
actionpack/lib/action_controller/metal/mime_responds.rb
の修正です。
respond_to
、respond_with
メソッドを再定義して、メソッドを使用した際はresponder
gemを使用してね、というエラーメッセージを出力よう修正しています。
The gem is called 'responders'
actionpack/lib/action_controller/metal/mime_responds.rb
の修正です。
responder
をresponder
に修正しています。
Merge pull request #16458 from chancancode/ar_fix_reserved_inheritance
activerecord/lib/active_record/attribute_methods.rb
の修正です。
親クラスで定義したcustom accessor methodsを子クラスで再定義した場合に問題があったのを修正しています。
responders
1.x won't do it. Told you to RTFM for details!
actionpack/lib/action_controller/metal/mime_responds.rb
の修正です。
responders
の1.x系では動作しないので、エラーメッセージにgem 'responders', '~> 2.0'
を指定してね、というのを追加しています。
activesupport/lib/active_support/multibyte/unicode.rb
の修正です。
不要な改行・スペースの削除、を行っています。
Preload UnicodeDatabase outside the loop
activesupport/lib/active_support/multibyte/unicode.rb
の修正です。
multibyte_chars_test
のテストがが1.9.3で失敗するらしく、そのための対応として、apply_mapping
メソッドにdatabase.codepoints
を追加しています。
因みに、コミットログには"I don't know why the tests fail. And I really don't know why this fixes."と記載されており、何でこの対応が必要かは、不明なようです。
Use AS::JSON for (de)serializing cookies
cookiesのserializing/deserializing処理にActiveSupport::JSON.decode
、ActiveSupport::JSON.encode
メソッドを使用するよう修正しています。
これにより、cookiesにシリアライズした任意のRuby Objectを設定出来るようになります。
サンプル。
class JSONWrapper def initialize(obj) @obj = obj end def as_json(options = nil) "wrapped: #{@obj.as_json(options)}" end end
こんな感じで、as_json
メソッドが定義されてればOKのようです。
activesupport/lib/active_support/testing/time_helpers.rb
の修正です。
travel_to
メソッドにusecの値を設定した場合にエラーになっていたのを対応しています。travel_to
メソッドとしては、usecについては対応しない方針となっていて、usecの値が渡された場合、強制的に0になるよう対応しています。
Lock web-console to 2.0.0.beta1 for the first 4.2 beta
railties/lib/rails/generators/rails/app/templates/Gemfile
の修正です。
web-console
について、バージョンを'2.0.0.beta1'に固定するよう対応しています。
Merge pull request #16485 from seuros/activejob
ActiveJob / DeliverLater / GlobalIDがrails本体にマージされました。
以下簡単な説明を。詳細はActive Job Basicsのguideをご参考。
ActiveJob
ActiveJobはバックグラウンドジョブ実行の為の仕組みです。
ActiveJob::Base
クラスを継承してJob用のクラスを作成する事が出来ます
class GuestsCleanupJob < ActiveJob::Base queue_as :default def perform # Do something later end end
MyJob.enqueue record # Enqueue a job to be performed as soon the queueing system is free. MyJob.enqueue_at Date.tomorrow.noon, record # Enqueue a job to be performed tomorrow at noon. MyJob.enqueue_in 1.week, record # Enqueue a job to be performed 1 week from now.
バックエンドにはDelayed Job、Sidekiq等の既存のキューシステムを使用する事が出来ます。対応している バックエンドが下記の通りです。
- Backburner
- Delayed Job
- Qu
- Que
- QueueClassic
- Resque 1.x
- Sidekiq
- Sneakers
- Sucker Punch
それぞれに出来る事出来ない事があるので、用件に合わせて選択するのが良さそう。詳細は上記ガイド参照。
DeliverLater 名前の通りで、emailを非同期送信出来る仕組み。
# Instead of the classic UserMailer.welcome(@user).deliver # use #deliver later to send the email async UserMailer.welcome(@user).deliver_later
deliver_later
メソッドを使用するだけ。簡単。
GlobalID
GlobalIDとは modelのインスタンスをユニークに特定するためのURI。gemはこちら
フォーマットはgid://YourApp/Some::Model/id
。
ActiveJobは引数にGlobalIDを受け付けるようになっている。GlobalIDを使用する事で、以下のような書き方が可能になる。
# before class TrashableCleanupJob def perform(trashable_class, trashable_id, depth) trashable = trashable_class.constantize.find(trashable_id) trashable.cleanup(depth) end end # after class TrashableCleanupJob def perform(trashable, depth) trashable.cleanup(depth) end end
元々クラス名とidを渡していたのを、GlobalID一つにまとめられるようになる。
Add CHANGELOG entry for #deliver_later
DeliverLaterで追加された#deliver_later
メソッドについてCHANGELOGに追記しています。
Merge pull request #16294 from bf4/code_tools
各toolの修正です。
を実施しています。
Merge pull request #16481 from sgrif/sg-change-default-timestamps
activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
及び各schemaの修正です。
rails 5からtimestampsのデフォルトがnull: true
からnull: false
に変わる事に伴い、null: xx
が設定されてない場合にwarningsが出力されるよう対応しています。
元々の挙動を引き継ぎたい場合は、null: true
を明示的に指定する必要があります。
Use the release gems and point application gemfile to right loofah
Gemfile
、railties/lib/rails/generators/rails/app/templates/Gemfile
の修正です。
loofah
の読み込み位置をrails-html-sanitizer
の下に移動しています。
Deprecate NamedRouteCollection#helpers.
NamedRouteCollection#helpers
メソッドを呼び出した際に、deprecateメッセージを出力するよう対応しています。
元々はこのコミットで削除されていたのですが、third partyのgemがこのメソッドを使用してい為、deprecateメッセージを出力する形に修正しています。
Gemfile
、activerecord/activerecord.gemspec
の修正です。
github: 'rails/arel'
を指定していたのを削除しています。最近、arelの6.0.0.beta1がリリースされたので、そちらのバージョンを使用すればOKな為ですね。
Merge pull request #15889 from carnesmedia/model-name
ActionPack/ActionViewの修正です。
モデル名を取得する際、クラスメソッドではなくインスタンスメソッドを使用するよう修正しています。
このPRでActiveModel::Naming
のインスタンスメソッドとして#model_name
を追加しており、その対応の続きです。
No need to check model_name anymore
activemodel/lib/active_model/naming.rb
の修正です。
model_name
メソッドのチェック処理を削除しています。
Fix ActiveJob isolation tests.
activejob/test/cases/rescue_test.rb
の修正です。
足りてなかったrequireを追加しています。
activesupport/test/core_ext/string_ext_test.rb
の修正です。
assert_equalメソッドの引数の順番を入れ替えています。最初の引数が期待する値ですね。
activesupport/test/core_ext/string_ext_test.rb
の修正です。
先ほどのコミットと同じ対応です。
Fix rails-html_sanitizer in Gemfile template
railties/lib/rails/generators/rails/app/templates/Gemfile
の修正です。
'rails-html-sanitizer'のgithubのパスが誤っていたのを修正しています。
"warning: `*' interpreted as argument prefix"
ActiveJobのテストの修正です。
引数が*の場合、()が無いとwarningが出てしまうので、その対応です。
- job_name.constantize.new.execute *args + job_name.constantize.new.execute(*args)
Merge pull request #16528 from byroot/add-test-case-for-nested-array-in-where-conditions
activerecord/test/cases/relation/where_test.rb
の修正です。
ネストした空の配列をwhere
に指定した場合のテストケースを追加しています。
def test_where_with_table_name_and_nested_empty_array assert_equal [], Post.where(:id => [[]]).to_a end