Rozszerzanie modeli AR o dodatkowe funkcje

Czasami chcemy, aby niektĂłre z naszych modeli mogły korzystał ze wspĂłlnych metod. Poniższy przykład pokazuje, jak dodać funkcję hashującą:

Helper:

require 'digest/sha1'
module ShaHelper
  def self.append_features(base) # :nodoc:
    super
    base.extend ClassMethods
  end

  module ClassMethods
    def sha1(data)
      Digest::SHA1.hexdigest data
    end
  end
end

Model:

class Post < ActiveRecord::Base include ShaHelper end
Użycie:

<%= Post.sha1 'test' %>

Unit Test:

[code ruby]require File.dirname(FILE) + ‘/…/test_helper’

class ShaHelperTest < Test::Unit::TestCase
include ShaHelper::ClassMethods

def test_sha1
assert_equals ‘a94a8fe5ccb19ba61c4c0873d391e987982fbbd3’, sha1(‘test’)
end
end[/code]