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として扱うよう修正して対応しています。