なるようになるブログ

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

rails commit log流し読み(2014/05/20)

2014/05/20分のコミットです。

CHANGELOGにのったコミットは以下の通りです(詳細は本文参照)。

activerecord/CHANGELOG.md

  • Fix bug that added table_name_prefix and table_name_suffix to extension names in PostgreSQL when migrating.
  • Remove :timestamp column type
  • Fixed the inferred table name of a HABTM auxiliar table inside a schema.

railties/CHANGELOG.md

  • Default config.assets.digest to true in development.

Delegate Column#type to the injected type object

以前あったConnectionAdaptersの修正の続きです。

カラムの型情報をtype objectで持つように修正しています。


Merge pull request #10798 from jcxplorer/fix-enable_extension-with-table_name_prefix

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

DBにPostgreSQLを指定する、かつ、table_name_prefixまたはtable_name_suffixを使用する、かつenable_extensionを使用した場合にエラーになっていたバグを修正しています。

extensionにもprefix/suffixが適応されてしまい、extensionの名前がおかしくなってしまったようです。


Fixing test order issues

activerecord/test/cases/adapters/postgresql/extension_migration_test.rbの修正です。

テストの前処理/後処理を修正しています。


Merge pull request #15155 from dskang/digest

developmentのconfig.assets.digestのデフォルトをtrueにするよう修正しています。

assetファイルのパスをハードコーディングしてしまって、開発環境で動くけど本番で動かない、というケースを防ぐ為との事です。

これ、慣れている人は良いのですが、rails始めたての頃は割と苦労しそうな。


Add ActionController::Renderers.remove.

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

ActionController::Renderers.removeメソッドが追加されています。

ActionController::Renderers.addした後に、取り消したい、というケースがあったらしく追加されています。

テストの時は重宝しそうなのですが、実際のサービス内で使うユースケースはあるのかなあ。


Remove :timestamp column type

ConnectionAdapterからtimestamp型が削除されました。 現状そもそも利用されていなかった為との事です。

現状、timestampで定義されているカラムについては、今後も動作するとの事です。(datetimeエイリアスされている)


Revert "Rewrite journey routes formatter for performance"

こちらのコミットのrevertです。

routingの処理にバグをいれこんでしまったようで、revertされています。このコミットに、リグレッションテストのコードも追加されています。


fix escaping in generation

actionpack/lib/action_dispatch/journey/visitors.rbの修正です。

エスケープ処理を追加しているのですが、そもそも何の為の処理なのかが、解らない…。


make the AST go from left to right, rather than right to left

actionpack/lib/action_dispatch/journey/parser.rbの修正です。

Raccで構文木の再生成を行ったのは分かるのですが、修正内容はさっぱり分かりませんでした…。


Add using_resouce_with_json to controller.

actionpack/test/controller/mime/respond_with_test.rbの修正です。

テスト用に、using_resource_with_jsonメソッドを追加しています。


docs, instantiate expects String keys. [Rafal Piekarski & Yves Senn]

ActiveRecord::Persistence::ClassMethods#instantiateメソッドのdoc及び変数名の修正です。

instantiateメソッドの第一引数にHashを指定出来るのですが、そのHashのkeyにはStringしか使用出来ないらしく、その旨docに追加しています。


fix rake test_sqlite3_mem.

activerecord/test/cases/migration/change_schema_test.rbの修正です。

同じテーブル名を異なるテストで使用しており、schemaがcacheされてしまうと、期待と違うschemaでテストが動いてしまいエラーになる場合があったようで、teardownActiveRecord::Base.clear_cache!を追加しています。


Use generated binstubs in guides examples.

rails guideの全体の修正です。railsのコマンドを実行する際、binstubを使用するよう修正しています。

# before
rails generate scaffold user name email login
rake db:migrate

# after
bin/rails generate scaffold user name email login
bin/rake db:migrate

Distinguish rake assets:clobber from rake assets:clean

rails guideのThe Rails Command Lineのページの修正です。

rake assets:clobberの説明を追加しています。


Fixed the inferred table name for HABTM within a schema

activerecord/lib/active_record/associations/builder/has_and_belongs_to_many.rbの修正です。

DBにPostgreSQLを指定してHABTMを使用している場合に、テーブル名の解決が出来ず、エラーになるケースがあったようです。

class Music::Song < ActiveRecord::Base
  self.table_name = "music.songs"
  has_and_belongs_to_many :albums
end

class Music::Album < ActiveRecord::Base
  self.table_name = "music.albums"
  has_and_belongs_to_many :songs
end
Music::Song.includes(:albums).first

SELECT DISTINCT "music"."songs"."id", "music"."songs"."id" AS alias_0
FROM "music"."songs"
  LEFT OUTER JOIN "music"."albums_music" ON "music"."albums_music"."song_id" = "music"."songs"."id"
  LEFT OUTER JOIN "music"."albums" ON "music"."albums"."id" = "music"."albums_music"."album_id"
ORDER BY "music"."songs"."id" ASC
LIMIT 1

"music"."albums_music"になっている箇所は、"music"."albums_songs"になるべきですね。しかし、ややこしいなあ…。