A gem to set the digested value before validation and validate uniqueness.
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
gemfiles
lib
spec
.gitignore
.rspec
.travis.yml
Gemfile
LICENSE.txt
README.md
Rakefile
acts_as_digested_on.gemspec

README.md

ActsAsDigestedOn Build Status

acts_as_digested_on is a gem for Rails 3 and Rails 4.

This sets the digested value before validation and validates uniqueness of the digested value.

If you use this gem for Rails 2, see rails-2 branch.

Installation

Add this line to your application's Gemfile:

gem 'acts_as_digested_on'

And then execute:

$ bundle

Or install it yourself as:

$ gem install acts_as_digested_on

Usage

# db/migrate/20090706000000_create_articles.rb
class CreateArticles < ActiveRecord::Migration
  def self.up
    create_table :articles do |t|
      t.text :url       # any type is ok
      t.string :digest  # this is sha-1 hex digest field of url value
      ...
    end

    add_index :articles, :digest, :unique => true  # you can add index on digest field
  end

  def self.down
    drop_table :articles
  end
end

# app/models/article.rb
class Article < ActiveRecord::Base
  acts_as_digested_on :url  # please add this
  ...
end

# this means
class Article < ActiveRecord::Base
  validates_uniqueness_of :digest
  before_validation :set_digest

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

  private
  def set_digest
    self.digest = generate_digest
  end
  ...
end

Examples

acts_as_digested_on :url, :unique => false

acts_as_digested_on :url, :digest_column => :url_digest

acts_as_digested_on [:url, :salt]

acts_as_digested_on :url, :scope => :site_id

Article.new(:url => 'http://example.com').generate_digest

Contributing

  1. Fork it ( https://github.com/milk1000cc/acts_as_digested_on/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request