1月OSSパッチ会に参加した。

kamipo さんに Rails Attribute API について質問した。

activemodel/lib/active_model/attribute.rb#L12-L14

Attribute API が遅いところ。このへんで attribute 1つに対してオブジェクトを生成しまくっている。

コードの重複について

ActiveModelのこのへんのファイルの機能

activemodel/lib/active_model/attributes.rb

がActiveRecord でいうと下記で分散している

  • active_record/attribute_methods/read.rb
  • active_record/attribute_methods/write.rb

新旧Dirty Tracking

activemodel/lib/active_model/dirty.rb#L246-L252

ここで切り替えを行っている。

Q.「Attribute API は public API にならないのか」

  • 基本的にpublicにしちゃうと破壊的変更がしにくくなるのでpublicにするのは慎重にやりたい
  • Rails Attribute APIの機能自体は悪くないと思っている
  • Rails 6.1 で public にしてもいいかなと思っている
  • ただ public にするには他のメンテナのAgreeが必要。make sense な reason があるか?
  • private APIなのにChangelog listにのってたりするのでもはやpublic APIでは?という話も。