ウェブサービスを作っています。

ActsAsDigestedOn プラグインをリリース

近年 255 バイトを超える URL が増加しており、これらをデータベースに格納するため URL のフィールドを TEXT 型にすることがあります。
参考: URLを扱うテーブルを作るときにどうすべきか - 金利0無利息キャッシング – キャッシングできます - subtech


しかし TEXT 型にすることによって、unique index の適用ができなくなってしまいます。
そこで URL の sha1 ハッシュを格納するカラムを追加し、これに unique index を追加することで対応したりします。


つまり、モデルでこんな感じのことをするのですが

class Article < ActiveRecord::Base
  validates_uniqueness_of :digest
  before_validation :set_digest

  def generate_digest
    Digest::SHA1.hexdigest "--#{ url }--"
  end

  private
  def set_digest
    self.digest = generate_digest
  end
end

これを 1 行で書くプラグインが、今回リリースした ActsAsDigestedOn です。

class Article < ActiveRecord::Base
  acts_as_digested_on :url
end

モデルに上の 1 行を追加するだけで validation 前に url の sha1 ハッシュを (デフォルトでは digest カラムに) セットし、ユニークの検証も行います。


機能的にそれだけですが、いろんなモデルで同じようなコードばかり書いていたので、プラグイン化してみました。
ユニーク検証の有無、カラムの変更などはオプションで設定できます。


詳しくは GitHub で
Page not found · GitHub


どうぞご利用ください。


なお、今回 gem 化は jeweler を何となく使ってみました。
まだよくわかってないですが、便利っぽいです。