2016/04/19分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
- SQLite: Force NOT NULL primary keys.
- Migrations:
#foreign_key
respectstable_name_prefix
and_suffix
. - Raise
ActiveRecord::ValueTooLong
when column limits are exceeded. by MySQL and PostgreSQL adapters. - SQLite: Fix uniqueness validation when values exceed the column limit.
ActiveSupport::Duration
supports ISO8601 formatting and parsing.Array#sum
compat with Ruby 2.4's native method.
activerecord/lib/active_record/relation/where_clause.rb
の修正です。
#non_empty_predicates
で空配列を作成するのに、定数を使用するよう修正しています。
+ ARRAY_WITH_EMPTY_STRING = [''] def non_empty_predicates - predicates - [''] + predicates - ARRAY_WITH_EMPTY_STRING end
ちょっとだけ性能改善になっているそうです。
Database comments: switch to keyword args for new table options
Active Recordの修正です。
Database commentsの指定にキーワード引数を使用するよう修正、オプションの設定処理を#add_table_options!
メソッドで行うよう修正、そのリファクタリングをまとめて行っています。
Active Recordの修正です。
rake task用テストファイルに、不足していたactive_record/tasks/database_tasks
のrequireを追加しています。
Cable: Periodic timers refresh
Action Cableの修正です。
定期的に実行する処理を定義する為のメソッド(#periodically
)にdocを追加、引数にblockを指定出来るよう修正、引数のチェック処理を追加等の修正を行っています。
periodically :transmit_progress, every: 5.seconds
periodically every: 3.minutes do transmit action: :update_count, count: current_count end
こんなメソッドあったんですねえ。
Merge pull request #23622 from kamipo/primary_key_should_be_not_null
Active Recordの修正です。
SQLite adapterで、強制的にprimary keyにNOT NULL制約を設定するよう修正しています。
PostgreSQL、MySQLについては暗黙的にNOT NULLになるようになっていたのですが、SQLiteについてはNULLになってしまう可能性があった為、column optionsに強制的にoptions[:null] = false
を設定し対応しています。
ActiveSupport::Duration
supports ISO8601 formatting and parsing.
Active Supportの修正です。
ActiveSupport::Duration
クラスに、ISO8601 format及びパース処理のサポートを追加しています。
CHANGELOGより。
ActiveSupport::Duration.parse('P3Y6M4DT12H30M5S') # => 3 years, 6 months, 4 days, 12 hours, 30 minutes, and 5 seconds (3.years + 3.days).iso8601 # => "P3Y3D"
元々、ISO8601 gemというgemがあり、それを参考にして実装を行っているとの事です。
rails guideのRuby on Rails 5.0 Release Notes
の修正です。
上記ActiveSupport::Duration
クラスにISO8601 format及びパース処理のサポートを追加した対応について、Notable changes
の項にentryを追加しています。
Merge pull request #24613 from vipulnsward/fix-dbs-test-assertions
railties/test/application/rake/dbs_test.rb
の修正です。
rake db taskのテストで、Rubyのワーニング(ambiguous first argument; put parentheses or a space even after
/' operator`)が出ていたのを対応しています。
Merge pull request #24614 from kamipo/foreign_key_respects_table_name_prefix_and_suffix
activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
の修正です。
#foreign_key
メソッドで、テーブル名を生成する際、ActiveRecord::Base.table_name_prefix
及びActiveRecord::Base.table_name_suffix
の値を使用するよう修正しています。
Merge pull request #23522 from kamipo/add_value_too_long_exception_class
Active Recordの修正です。
limitに指定した値以上の値が指定された場合に、ActiveRecord::ValueTooLong
のエラーをraiseするよう修正しています(MySQLとPostgreSQLのみ)。
Merge pull request #23523 from kamipo/avoid_truncation_in_uniqueness_validation
activerecord/lib/active_record/validations/uniqueness.rb
の修正です。
uniqueness validatorで、値がStringかつlimitが指定されていた場合に、validation前に値をtruncateしていたのを、truncateしないよう修正しています。
value = cast_type.serialize(value) value = klass.connection.type_cast(value) - if value.is_a?(String) && column.limit - value = value.to_s[0, column.limit] - end
MySQL, PostgreSQLの場合は、先の対応によりlimitより大きい値が設定された場合、エラー(ActiveRecord::ValueTooLong
)が発生するので問題無いのですが、SQLiteはlimitに指定した値以上の値も保存出来てしまうので、limitで指定した値でtruncateしてしまうと、正常に uniquenessのチェックが出来ないので、truncateしないよう修正したようです。
Ruby 2.4: compat with new Array#sum
activesupport/lib/active_support/core_ext/enumerable.rb
の修正です。
Array#sum
が定義されている場合に、Enumerable#sum
が使用されるよう修正しています。
Ruby 2.4からRuby本体にArray#sum
が追加されたのですが、現状numeric elementしかサポートしていません。
しかし、元々Railsが提供していたEnumerable#sum
メソッドはStringもサポートしていた為、Rub本体のメソッドをそのまま使用すると、下位非互換が発生してしまいます。
# Ruby 2.4 %w[ a b ].sum # => TypeError: String can't be coerced into Fixnum
# `Enumerable#sum` %w[ a b ].sum # => 'ab'
そのため、下位互換の為に、Array#sum
が定義されいる、かつ、Stringのsum
に失敗したする場合は、Enumerable#sum
を呼び出すよう修正しています。
if Array.instance_methods(false).include?(:sum) && !(%w[a].sum rescue false) class Array def sum(*args) #:nodoc: # Use Enumerable#sum instead. super end end end
Cable: Extract stream handler construction
Action Cableの修正です。
stream handlerの生成処理をメソッドへ切り出しています。オーバーライド及びテストをしやすくする為に、とのことです。
Travis: cache unicode data downloads and beanstalkd build
.travis.yml
の修正です。
コンパイルしたbeanstalkd
及び、テスト中で使用するダウンロードしたunicodeのデータをtravis上でキャッシュするよう修正しています。
Merge pull request #23515 from kamipo/extract_arel_visitor
Active Recordの修正です。
各connection adapterで行っていたarel visitorの生成処理をabstract adapterで行うよう修正しています。
Merge pull request #23497 from kamipo/extract_schema_qualified_name
activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
の修正です。
table_name
からからschemeとtable名を切り出す処理をメソッドに(#extract_schema_qualified_name
)に切り出しています。
Merge pull request #24552 from yui-knk/raise_argument_error
activesupport/lib/active_support/core_ext/date/conversions.rb
の修正です
Date#to_time
の引数に不正な値(:local
, :utc
以外の値)を指定した場合に、ArgumentError
をraiseするよう修正しています。
Ruby 2.4 Array#sum: fix non-numeric #sum feature detection
activesupport/lib/active_support/core_ext/enumerable.rb
の修正です。
Array#sum
がStringに対応しているかどうかのチェックロジックで、判定処理に誤りがあったのを修正しています。
Ruby 2.4 Array#sum: ficauses -> cases changelog typo [ci skip]
activesupport/CHANGELOG.md
の修正です。
cases
をcauses
にタイポしている箇所があったのを修正しています。
Merge pull request #24576 from yahonda/quote_column_name_for_reserved_word_size
activerecord/lib/active_record/collection_cache_key.rb
の修正です。
ActiveRecord::CollectionCacheKey#collection_cache_key
メソッドで、SELECT
query内でsize
を使用する際に、#quote_column_name
メソッドでquoteするよう修正しています。
- .select("COUNT(*) AS size", "MAX(#{column}) AS timestamp") + .select("COUNT(*) AS #{connection.quote_column_name("size")}", "MAX(#{column}) AS timestamp")
size
そのままだと、oracleでエラーになってしまう為、とのことです。
Merge pull request #24503 from prathamesh-sonpatki/add-test-for-warn-on-records-fetched-greater-than https://github.com/rails/rails/commit/db06ad61497c8860f73b5548acad138b367aa9a1
activerecord/test/cases/relation/record_fetch_warning_test.rb
の修正です。
warn_on_records_fetched_greater_than
に値を指定した場合のテストケースを追加しています。
Merge pull request #24317 from Gaurav2728/unused_set_in_active_record
activerecord/lib/active_record/connection_adapters/column.rb
、
activerecord/lib/active_record/relation/delegation.rb
の修正です。
使用していないset
のrequireを削除しています。
Remove unused table_with_autoincrement
table
activerecord/test/schema/sqlite_specific_schema.rb
の修正です。
使用していないテスト用のテーブル(table_with_autoincrement
)を削除しています。
Change the Hash.to_xml with a lamda example
activesupport/lib/active_support/core_ext/hash/conversions.rb
のdocの修正です。
Hash#to_xml
のdoc内にあるlamdaを使用した場合のexampleが、実際は動作しないコードになっていたのを、正常に動作するコードに修正しています。