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 を何となく使ってみました。
まだよくわかってないですが、便利っぽいです。