2015/09/23分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
- introduce
conn.data_source_exists?andconn.data_sources. - Fixed taking precision into count when assigning a value to timestamp attribute
tests, use if_exists: true instead of rescue nil.
activerecord/test/cases/migration/helper.rbの修正です。
teardownでテスト用のtableをdropする際、if_existsオプションで存在チェックを行うよう修正しています。
Remove unneeded generator variable.
railties/test/generators/shared_generator_tests.rbの修正です。
test_template_is_executed_when_supplied_an_https_pathメソッドから使用していない変数を削除してみあす。
rails guideのRails Internationalization (I18n) APIの修正です。
application.rb を config/application.rbに修正しています。
introduce conn.data_source_exists? and conn.data_sources.
Active Recordの修正です。
connection.data_sourcesメソッド、connection.data_source_exists?メソッドを新規に追加しています。
data_sourcesメソッドはtablesとviewsを返すメソッドで、data_source_exists?該当のtable or viewが存在するかどうかをチェックするためのメソッドです。
元々、`SchemaCache#tables, SchemaCache#table_exists?というメソッドがあったのですが、これらのメソッドがDBのadapterにより返す値が異なる(PostgreSQL adapterはtableのみを返すが、MySQL adapterはtable + viewを返す) という問題があった為、メソッドを整理する為に、tables と viewsをまとめて返す為のdata_sourcesメソッドを追加しています。
これに伴い、SchemaCache#tables, SchemaCache#table_exists?, SchemaCache#clear_table_cache!はdeprecateになります。また、tablesメソッドは、tableのみ返すよう対応される予定です(All AR::ConnectionAdapters#tables return only tables(exclude views))。
Merge pull request #21722 from ronakjangir47/test_delivery_methods
actionmailer/test/delivery_methods_test.rbの修正です。
deliverメソッドのテストで、 エラーがraiseされる事しか確認していなかったのを、エラーメッセージも確認するよう修正しています。
actionpack/lib/action_controller/metal/params_wrapper.rb、
actionpack/lib/action_dispatch/http/mime_negotiation.rbの修正です。
ParamsWrapper moduleの_wrapper_enabled?メソッドでrequestオブジェクトのcontent_mime_typeを取得する際、nilの場合を考慮してtryメソッドを使用していたのですが、
content typeが設定されていない場合は、early returnするようにし、取得処理ではnilを考慮しないで済むよう修正しています。
ask the request object for the session
actionpack/lib/action_dispatch/middleware/flash.rbの修正です。
Flash#callメソッドでsession情報を取得する際、Request::Session.findメソッド経由ではなく、作成済みのrequestオブジェクト経由で値を取得するよう修正しています。
Fix arguments of AR::Calculations#sum
activerecord/lib/active_record/relation/calculations.rbの修正です。
Calculations#sumメソッドの引数が*argsになっていたのを、必要な引数を明確に定義するように修正、及び、
メソッド内でEnumerable#sumを呼び出す際、引数を全て渡すのではなく、必要なブロック引数のみ渡すよう修正しています。
stop using deprecated method in mailers controller
railties/lib/rails/mailers_controller.rb、
railties/lib/rails/templates/rails/mailers/email.html.erbの修正です。
先日deprecateになったmime typeを定数から取得する処理を使用している箇所があったのを、Mime::Type経由で値を取得するよう修正しています。
Add tests for sanitize named bind arity
activerecord/test/cases/finder_test.rbの修正です。
キー名を指定したplaceholderを使用した場合のテストを追加しています。
assert_nothing_raised { bind "name = :name", { name: "37signals" } }
assert_nothing_raised { bind "name = :name", { name: "37signals", id: 1 } }
assert_raise(ActiveRecord::PreparedStatementInvalid) { bind "name = :name", { id: 1 } }
Remove not used argument table_name of sanitize_sql_for_conditions
activerecord/lib/active_record/sanitization.rbの修正です。
sanitize_sql_for_conditionsメソッドから、使用していないtable_name変数を削除しています。
Remove leading slash from path
rails guideのGetting Started with Enginesの修正です。
Mounting the Engineの項、GemfileにRails Engineで作ったgemを指定するexampleで、pathオプションの指定を絶対パスから相対パスに修正しています。
-gem 'blorgh', path: "/path/to/blorgh" +gem 'blorgh', path: "path/to/blorgh"
んー、これは絶対パスで良さそうな気もするんですけどねえ。
remove warning from Calculations#sum
activerecord/lib/active_record/relation/calculations.rbの修正です。
Calculations#sumメソッドで、warning:&' interpreted as argument prefix`のワーニングが出力されていたのを対応しています。
- return super &block if block_given? + return super(&block) if block_given?
&の付く変数を括弧で囲まないと出てしまうワーニングですね。
Updated Mime Negotiations docs [ci skip]
actionpack/lib/action_controller/metal/http_authentication.rb、
actionpack/lib/action_dispatch/http/mime_negotiation.rbのdocの修正です。
各docで、先日deprecateになったmime typeを定数から取得する処理を使用している箇所があったのを、Mime::Type経由で値を取得するよう修正しています。
Fixed taking precision into count when assigning a value to timestamp attribute
Active Record / Active Modelの修正です。
timestamp型のカラムをDBからロードした時と、データを作成した時とでusecの値が異なる問題があったのを修正しています。
d1 = Developer.create!(name: 'bogdan') d2 = Developer.find(d1.id) d1.created_at.usec # => 837728 d2.created_at.usec # => 0 d1.created_at == d2.created_at # => false d1.cache_key == d2.cache_key # => false
precisionの設定により、RubyのtimestampよりDBで保持するprecisionの精度が低い場合に問題が起きてしまっていたようです。 データをロードした時、timestamp型の値をStringで扱っていたのをtime objectとして扱うよう修正して対応しています。