2016/04/14分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
Add ruby 2.2.2+ version requirement for Rails 5 apps
rails guideのA Guide for Upgrading Ruby on Rails
の修正です。
Ruby 2.2.2+
の項に、Rails 5.0はRuby 2.2.2以降のみサポートする旨説明を追加しています。
Properly serialize all JSON primitives in the AR JSON type
activerecord/lib/active_record/type/internal/abstract_json.rb
の修正です。
ActiveRecord::Type::Internal::AbstractJson#serialize
メソッドで、引数がArray or Hashの場合のみActiveSupport::JSON.encode
を行うようにしていたのを、型を問わずActiveSupport::JSON.encode
を行うよ修正しています。
def serialize(value) - if value.is_a?(::Array) || value.is_a?(::Hash) - ::ActiveSupport::JSON.encode(value) - else - value - end + ::ActiveSupport::JSON.encode(value) end
元の実装だと、Array、Hash以外のprimitiveな型(String, boolean等)をjson型のattributeに指定出来ない、という問題があった為対応したとの事です。
Merge pull request #24519 from bogdan/diry-keyword-args
activemodel/lib/active_model/dirty.rb
の修正です。
#attribute_changed?
の引数の指定に、キーワード引数を使用するよう修正しています。
Fixed bug introduced in #24519. Makes build green again
activemodel/lib/active_model/dirty.rb
の修正です。
先ほどの#attribute_changed?
の引数の指定にキーワード引数を使用するよう修正した対応で、#changes_include?
メソッドの呼び出し結果の値をbooleanにする処理を誤って削除してしまっていたのを、戻しています。
Update ActionMailer base documentation [ci skip]
actionmailer/lib/action_mailer/base.rb
のdocの修正です。
ActionMailer::Base
クラスのdocのグラマーの修正を行っています。
Merge pull request #24533 from vipulnsward/nodoc-version
activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
のdocの修正です。
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter#version
メソッドの:nodoc:
を追加しています。内部向けAPIの為。
Include running mariadb on travis
.travis.yml
、Active Recordの修正です。
travis ciでテストを行うmatrixに、Mariadbを使用するケースを追加しています。
Basecamp 3ではMariaDBを使用しており、Railsとして正式にMariadbをサポートする為、との事です。
が、time
型にprecisionを指定した場合のテストで問題がおきており、一旦skipが追加されています。後ほど対応されています。
[ci skip] Remove extra so
from the Action Pack CHANGELOG
actionpack/CHANGELOG.md
の修正です。
各entryのグラマーの修正を行っています。
Add quoted_time
for truncating the date part of a time column value
activerecord/lib/active_record/connection_adapters/abstract/quoting.rb
、
activerecord/lib/active_record/type/time.rb
の修正です。
time型の値のquote処理で、日付部分を削除するよう修正しています。
MySQLと異なり、MariaDBではtime型に日付が含まれた文字列を指定した場合、日付部分が無視されない為、MySQL / MariaDBで同じ挙動になるようにする為に対応したようです。
PRより。
-- MySQL root@localhost [test] > CREATE TABLE `foos` (`id` int AUTO_INCREMENT PRIMARY KEY, `start` time(0), `finish` time(4)) ENGINE=InnoDB; Query OK, 0 rows affected (0.04 sec) root@localhost [test] > INSERT INTO `foos` (`start`, `finish`) VALUES ('2000-01-01 12:30:00', '2000-01-01 12:30:00.999900'); Query OK, 1 row affected, 2 warnings (0.02 sec) Note (Code 1292): Incorrect time value: '2000-01-01 12:30:00' for column 'start' at row 1 Note (Code 1292): Incorrect time value: '2000-01-01 12:30:00.999900' for column 'finish' at row 1 root@localhost [test] > SELECT `foos`.* FROM `foos`; +----+----------+---------------+ | id | start | finish | +----+----------+---------------+ | 1 | 12:30:00 | 12:30:00.9999 | +----+----------+---------------+ 1 row in set (0.00 sec) root@localhost [test] > SELECT `foos`.* FROM `foos` WHERE `foos`.`start` = '2000-01-01 12:30:00' LIMIT 1; +----+----------+---------------+ | id | start | finish | +----+----------+---------------+ | 1 | 12:30:00 | 12:30:00.9999 | +----+----------+---------------+ 1 row in set, 1 warning (0.01 sec) Note (Code 1292): Incorrect time value: '2000-01-01 12:30:00' for column 'start' at row 1
-- MariaDB root@localhost [test] > CREATE TABLE `foos` (`id` int AUTO_INCREMENT PRIMARY KEY, `start` time(0), `finish` time(4)) ENGINE=InnoDB; Query OK, 0 rows affected (0.02 sec) root@localhost [test] > INSERT INTO `foos` (`start`, `finish`) VALUES ('2000-01-01 12:30:00', '2000-01-01 12:30:00.999900'); Query OK, 1 row affected, 2 warnings (0.00 sec) Note (Code 1265): Data truncated for column 'start' at row 1 Note (Code 1265): Data truncated for column 'finish' at row 1 root@localhost [test] > SELECT `foos`.* FROM `foos`; +----+----------+---------------+ | id | start | finish | +----+----------+---------------+ | 1 | 12:30:00 | 12:30:00.9999 | +----+----------+---------------+ 1 row in set (0.00 sec) root@localhost [test] > SELECT `foos`.* FROM `foos` WHERE `foos`.`start` = '2000-01-01 12:30:00' LIMIT 1; Empty set (0.00 sec) -- ここがMySQLと異なり結果が空になってしまう root@localhost [test] > SELECT `foos`.* FROM `foos` WHERE `foos`.`start` = '12:30:00' LIMIT 1; +----+----------+---------------+ | id | start | finish | +----+----------+---------------+ | 1 | 12:30:00 | 12:30:00.9999 | +----+----------+---------------+ 1 row in set (0.00 sec)
MariaDB、MySQLと微妙に挙動の違いがあるんですねえ。
rails guideの修正です。
各guide内のMySQLについて説明している箇所に、MariaDBについての説明も追加しています。
先のコミットでも書いた通り、Basecamp 3ではMariaDBを使用しており、Railsとして正式にMariadbをサポートする為。