2015-06-19

18:52:05

ActiveRecode っぽいクラスをつくるあれ

DBにアクセスしないけど ActiveRecode のような機能をもったクラスがほしいというケースがときどきあって、 Rails の ActiveModel をつかえばできるんだけど、なぜか ActiveModelattributes メソッドに 対応してないので不便。

そこで https://github.com/cgriego/active_attr とか https://github.com/solnic/virtus とか使う。

今の仕事では https://github.com/cgriego/active_attr を使っている。

で。今日気がついたんだけど。

active_attr はコールバックに対応してなかった。

active_attr は ActiveModel のラッパーなので、コールバックは ActiveModel を使うことにした。

やり方は http://guides.rubyonrails.org/active_model_basics.html#callbacks

ただ、僕がやりたかったのは before_validation なので、 http://apidock.com/rails/ActiveModel/Validations/Callbacks/ClassMethods/before_validation のようにする。

active_attr と合わせて使うので、下記のようになる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Person
  include ActiveAttr::BasicModel
  include ActiveAttr::Attributes
  include ActiveModel::Validations::Callbacks

  attr_accessor :name

  validates_length_of :name, maximum: 6

  before_validation :remove_whitespaces

  private

  def remove_whitespaces
    name.strip!
  end
end

person = Person.new
person.name = '  bob  '
person.valid? # => true
person.name   # => "bob"

なんか active_attr の内部実装に依存している感じでやだなー。

というわけで Pull Request を出してみた。 https://github.com/cgriego/active_attr/pull/145

comments powered by Disqus
kbaba1001 profile photo
馬場 一樹 ( @kbaba1001 )
A programmer. Ruby on Rails, SublimeText, zsh, Linux.
Twitter,GitHub