なるようになるブログ

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

rails commit log流し読み(2014/07/01)

2014/07/01分のコミットです。

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

activemodel/CHANGELOG.md

actionview/CHANGELOG.md

Add String support for min/max attributes on DatetimeField


Move STI docs off of the main Base document, leaving a note

activerecord/lib/active_record/inheritance.rbのdocの修正です。

STIのついてのdocをactiverecord/lib/active_record/base.rbからactiverecord/lib/active_record/inheritance.rbに移動しています。

適切な箇所に配置した、との事。


Fix 10.3 invite_email.body assert_match example.

rails guideのA Guide to Testing Rails Applicationsの修正です。

ActionMailer::Baseのテストのexampleを修正しています。

-    assert_match(/Hi friend@example.com/, invite_email.body)
+    assert_match(/Hi friend@example.com/, invite_email.body.to_s)

元々、body部分は暗黙の変換を行ってくれていたのですが、現状行われなくなっているので、明示的にStringへの変換が必要との事で修正しています。


Don't add a second method for attribute existence

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

昨日attribute_exists?メソッドを新規に作成したのですが、既に同じ役割のhas_attribute?メソッドがあったので、attribute_exists?メソッドの方は削除しています。


Merge pull request #14861 from igor04/dirty-rollback

ActiveModel::Dirtymoduleの修正です。

値を元の値に戻すrollback_changesというメソッドが追加されています。

class Person
  include ActiveModel::Dirty

  define_attribute_methods :name

  def name
    @name
  end

  def name=(val)
    name_will_change! unless val == @name
    @name = val
  end

  def rollback!
    rollback_changes
  end
end
person = Person.find_by(name: 'Uncle Bob')
person.name = "Uncle Bob"
person.rollback!
person.name           # => "Bill"
person.name_changed?  # => false

こんな感じで。割と使い道ありそうな。


Add CHANGELOG entry for #14861 and document private methods on the API

上記rollback_changesメソッドの対応についてCHANGELOGに追記しています。


Rename rollback_changes to undo_changes

activemodel/lib/active_model/dirty.rbの修正です。

上記で追加されたrollback_changesメソッドundo_changesに名前を変更しています。

database rollbackのオーバーロードを避ける為との事。確かに、rollback_changesだと紛らわしいですね。


Add String support for min/max attributes on DatetimeField actionview/lib/action_view/helpers/tags/datetime_field.rbの修正です。

DatetimeFieldmin/max属性を追加しています。

date_field("user", "born_on", min: Date.today)
# => <input id="user_born_on" name="user[born_on]" type="date" min="2014-05-20" />

time_field("task", "started_at", min: Time.now)
# => <input id="task_started_at" name="task[started_at]" type="time" min="01:00:00.000" />

datetime_field("user", "born_on", min: Date.today)
# => <input id="user_born_on" name="user[born_on]" type="datetime" min="2014-05-20T00:00:00.000+0000" />

datetime_local_field("user", "born_on", min: Date.today)
# => <input id="user_born_on" name="user[born_on]" type="datetime-local" min="2014-05-20T00:00:00.000" />

対応されてなかったのが意外でした。


Use if/else

actionview/lib/action_view/helpers/tags/datetime_field.rbの修正です。

early returnしていた箇所をif/elseで書きなおしています。

-            return value unless value.is_a? String
-            DateTime.parse(value) rescue nil
+            if value.is_a? String
+              DateTime.parse(value) rescue nil
+            else
+              value
+            end

rails としては、early returnよりif/elseを使うほうが良いと考えているようです。


Add CHANGELOG entry for #15214

DatetimeFieldの対応について、コミットログに追記しています。


push host / port / protocol extraction up

actionpack/lib/action_dispatch/http/url.rbの修正です。

host / port / protocolについて、Hashへの参照を一度で済ますよう修正しています。

性能改善対応ですかね。


Fix doc unwanted dl Admin:: [ci skip]

actionpack/lib/action_dispatch/routing/mapper.rbのdocの修正です。

Admin::をttタグでくくるように修正しています。


Silence warning emitted in tests

activemodel/lib/active_model/naming.rbの修正です。

extendedメソッドの中でremove_possible_method(:model_name)を行うよう修正しています。

model_nameメソッド複数回定義してしまっていて、warningが出力されてしまっていたので、remove_possible_methodでundefするよう対応しています。


[ci skip] Add missing prologue section of upgrading ruby on rails guide.

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

最初の節の前に+--------------------------------------------------------------------------------を追加しています。 +