なるようになるブログ

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

rails commit log流し読み(2014/11/11)

2014/11/11分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

activesupport/CHANGELOG.md

railties/CHANGELOG.md

activerecord/CHANGELOG.md


Merge pull request #11694 from Empact/association-bind-values-not-updated-on-save

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

CollectionAssociation#readerメソッドで、ownerがsaveされる前か後かで処理を分けるよう修正しています。

ownerのidが設定されてないのに値がキャッシュされてしまい、update_allが正常に行われないバグがあった為、対応しています。

以下PRにあったgistから抜粋。

class Firm < ActiveRecord::Base
  has_many :clients
end

class Client < ActiveRecord::Base
  belongs_to :firm
end

firm = Firm.new
firm.clients << Client.create!
firm.save!

puts "#{firm.clients.count} clients. 1 expected."
# => 1 clients. 1 expected.

updated_clients = firm.clients.update_all(description: 'Great!')
puts "#{updated_clients} clients updated. 1 expected."
# => 0 clients updated. 1 expected.

tiny code improvement in sqlite3 adapter:

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

使用していないsupports_add_column?メソッドの削除、alter出来るかカラムかどうかチェックする為のメソッドの名称をvalid_alter_table_options->valid_alter_table_type?に修正を行っています。


remove never called method limited_update_conditions

activerecord/lib/active_record/connection_adapters/abstract/database_statements.rbactiverecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rbの修正です。

使用していないlimited_update_conditionsメソッドを削除しています。


dependencies.rb: keep the decorated #load and #require private [closes #17553]

activesupport/lib/active_support/dependencies.rbの修正です。

Loadable moduleに定義されているloadrequireメソッドのアクセス制限をpublic -> privateに修正しています。

本来privateであるべきloadrequireメソッドがpublicに定義されていた為、想定していない挙動を起こしてしまっていたようです。

具体的にはNilClassで問題になるケースがあったらしく、本来NilClassloadメソッドprivateなのですが、publicになっていた事により問題が起きていたようです。

# before
nil.method(:load).source_location
# => ["/home/yaginuma/.rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/bundler/gems/rails-999a07e3b992/activesupport/lib/active_support/dependencies.rb", 244]

# after
nil.method(:load).source_location

Merge pull request #16535 from bf4/patch-1 https://github.com/rails/rails/commit/091652cae8465711de3c12697a93c67a9f94576c

initializers/secret_token.rbに定義したsecret_tokenの値をRails.application.secrets.secret_tokenで取得出来るよう対応しています。

Rails 4.1からはsecrets.ymlを使うようになり、値をRails.application.secretsから取得出来るようになっていたのですが、過去のバージョンからのアップグレードを行う際、 Rails.application.secrets.secret_tokenで値を取得出来た方が移行しやすい、との事で対応したようです。


No need to sync config.secret_token and secrets.secret_token

railties/lib/rails/application.rbの修正です。

上記secret_tokenの対応で、secrets.secret_tokenが設定されている場合に、config.secret_tokensecrets.secret_tokenの値を設定するよう対応していたのですが、 config.secret_tokenに値を設定する処理を削除しています。基本的に、secrets.secret_tokenの方の値を参照すれば問題無いからですかねえ。


:scissors:

railties/test/application/configuration_test.rbの修正です。

ストファイルから不要なスペースの削除を行っています。


Remove unnecessary double space

railties/lib/rails/generators/rails/app/templates/bin/railsrailties/lib/rails/generators/rails/app/templates/config.ruの修正です。

require行にあった不要なスペースを削除しています。

-require ::File.expand_path('../config/environment',  __FILE__)
+require ::File.expand_path('../config/environment', __FILE__)

Make FlashHash#key? work with symbol and string

actionpack/lib/action_dispatch/middleware/flash.rbの修正です。

FlashHash#key?メソッドの引数にStringを指定した場合も動作するよう修正しています。


Merge pull request #17580 from ccutrer/change_table_name

activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rbの修正です。

ConnectionAdapters#Tableクラスにnameインスタンス変数を追加しています。nameはテーブル名を保持しています。

動的にtableを作成するgemを作成する際、テーブル名を取得出来る必要があった為、対応したとの事です。