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_key
reversible. 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]]