2015/06/12分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
- Correctly handle array columns with defaults in the schema dumper
- Add enum prefix/suffix option to enum definition
- Make
remove_foreign_keyreversible. Any foreign key options must be specified, similar toremove_column
長いこと議論が行われていたRails apiがようやくマージされています。
Merge pull request #20516 from kares/patch-2
activerecord/lib/active_record/railtie.rbの修正です。
ActionDisplatch::Reloaderのフック処理で、キャッシュのクリアーより前にコネクションのクリアーを行っていたのを、順番を逆にしています。
- ActiveRecord::Base.clear_reloadable_connections! ActiveRecord::Base.clear_cache! + ActiveRecord::Base.clear_reloadable_connections!
clear_reloadable_connections!メソッドがclear_cache!メソッドで使用するコネクションもクリアーしてしまう為、順番を入替えたようです。
Merge pull request #19832 from spastorino/rails-api
ActionPackの修正です。APIだけのアプリ用サポート(Rails api)を追加しています。
Rails apiは、ざっくりというとAPIに必要と思われる機能だけをロードするようにしたRailsアプリで、通常のRailsアプリよりロードするミドルウェアが少なくなっています。
新規にRails apiを使用するには、rails newに--apiオプションを指定してあげればOKです。
rails new api_sample --api
上記で生成したRailsアプリは、3つの特徴があります。
- ロードするミドルウェアが通常のRailsアプリより制限される
ApplicationControllerの親クラスが、ActionController::BaseではなくActionController::APIになる- views、helpers 及び assetsファイルが生成されなくなる
ActionController::APIクラスがロードするミドルウェアを制限する為のAPIの為の親クラスです。
views、helpers及びassetsが生成されないので、APIには不要だからとの為です。実際Rails api上でscaffoldすると、以下のような結果になります。
$ ./bin/rails g scaffold Todo name:string
invoke active_record
create db/migrate/20150613000556_create_todos.rb
create app/models/todo.rb
invoke test_unit
create test/models/todo_test.rb
create test/fixtures/todos.yml
invoke resource_route
route resources :todos
invoke scaffold_controller
create app/controllers/todos_controller.rb
invoke test_unit
create test/controllers/todos_controller_test.rb
Rails apiはJSONを返すよう設定されていますが、使用するライブラリはデフォルトではactive_model_serializersになっています。jbuilderじゃないのは、デフォルトではview層を生成しないからのようです。
fixed sring to be string in ActiveRecord::Base params documentation
actionpack/lib/action_controller/base.rbのdocの修正です。
sring -> stringにタイポを修正しています。
Correctly handle array columns with defaults in the schema dumper
activerecord/lib/active_record/connection_adapters/postgresql/oid/array.rbの修正です。
PostgreSQLで、decimal型をarrayで使用していた場合に、defaultに指定した値が正しくschema.rbに出力されないバグがあったのを修正しています。
issueより。
create_table :things do |t| t.string :features, array: true, default: ['base'] t.decimal :prices, array: true, default: [9.99] t.decimal :default_price, default: 9.99 t.timestamps null: false end
上記のようなmigrationファイルがあった場合に、以下のように正しい内容で出力されるよう修正しています。
# before create_table "things", force: :cascade do |t| t.string "features", default: ["base"], array: true t.decimal "prices", default: [#<BigDecimal:7fe6171cb560,'0.999E1',18(18)>], array: true t.decimal "default_price", default: 9.99 t.datetime "created_at", null: false t.datetime "updated_at", null: false end # after create_table "things", force: :cascade do |t| t.string "features", default: ["base"], array: true t.decimal "prices", default: [9.99], array: true t.decimal "default_price", default: 9.99 t.datetime "created_at", null: false t.datetime "updated_at", null: false end
Credit the author of #20515 in the previous commit
activerecord/CHANGELOG.mdの修正です。
先のarrayカラムの対応について、issue報告者の名前をクレジットに追加しています。
Add a missing test case for the persistence behavior of serialize
activerecord/test/cases/serialized_attribute_test.rbの修正です。
serializedされるattributeにnilが指定された場合のテストを追加しています。
assigns was removed from Rails
railties/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rbの修正です。
Rails apiのテンプレートファイルから、assignsメソッドを使用したテストを削除しています。assignsメソッドが既にrails本体から削除済みの為。
Add an invert method for remove_foreign_key
ActiveRecordのmigrationの修正です。
remove_foreign_keyメソッドがreversibleになるよう対応しています。add_foreign_keyメソッドと同じオプションを指定してあげれば、reversibleになります。
Fix failing tests for Rails-API
railties/test/application/rake_test.rbの修正です。
Rails apiのテンプレートファイルからassignsメソッドを使用してテストを削除した影響で、Rails apiを生成し、rake testした場合のテストの実行結果が変わってしまった為、実行結果を確認するテストも合わせて修正しています。
Merge pull request #20058 from farukaydin/cache-digests-dependency-rake
actionview/lib/action_view/digestor.rbの修正です。
ActionView::Digestor#dependenciesメソッド、ActionView::Digestor#nested_dependenciesメソッドでdigest対象のファイルが存在しなかった場合に、エラー情報を握りつぶしてしまっていたのを、エラー情報をログファイルに出力するよう修正しています。
fix doc about foreign key name [ci skip]
rails guideのActive Record Migrationsの修正です。
foreign KEY の生成パターンが、元々ランダムな文字列だったのが、Generate consistent names for foreign keys · rails/rails@b8e1f20の対応から、テーブル名とカラム名をキーにしたハッシュを生成するようになっていたのですが、説明が古いままだったのを修正しています。
Update RDoc for ActionController::TestCase for kwargs.
actionpack/lib/action_controller/test_case.rbのdocの修正です。
postメソッドを使用したサンプルで、メソッドの引数にキーワード引数を使用するよう修正しています。
Add enum prefix/suffix option to enum definition
activerecord/lib/active_record/enum.rbの修正です。
enumに、prefix/suffixを指定出来る、:enum_prefix/:enum_suffixオプションを追加しています。
単純に:enum_prefix/:enum_suffixオプションにtrueを追加すると、enumの値に属性名が追加されます。
class Invoice < ActiveRecord::Base enum verification: [:done, :fail], enum_prefix: true end
Invoice.verification_done.all #=> Invoice Load (0.6ms) SELECT "invoices".* FROM "invoices" WHERE "invoices"."verification" = $1 [["verification", 0]]
また、:enum_prefix/:enum_suffixオプションには任意の文字列を指定する事も出来ます
class Invoice < ActiveRecord::Base enum verification: [:done, :fail], enum_prefix: :verify end
Invoice.verify_done.all #=> Invoice Load (0.6ms) SELECT "invoices".* FROM "invoices" WHERE "invoices"."verification" = $1 [["verification", 0]]