Module: HasChecksum

Defined in:
lib/has_checksum.rb,
lib/has_checksum/version.rb

Defined Under Namespace

Modules: ActiveRecord, ClassMethods, PORO

Constant Summary collapse

VERSION =
"0.0.1"

Class Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/has_checksum.rb', line 7

def self.included(klass)
  klass.extend ClassMethods
  klass.class_eval do

    private

    def digest_string(methods)
      methods.map { |name| public_send(name) }.join("")
    end

    def calculate_signature(digest, value, options = {})
      key = case options[:key]
            when Symbol
              raise "key option refers to an unknown method '#{options[:key]}'" unless respond_to?(options[:key])
              send(options[:key])
            when Proc
              options[:key][]
            else
              options[:key]
            end

      hmac = OpenSSL::HMAC.new(key.to_s, digest)
      hmac << value

      case options[:format]
      when :binary, "binary"
        hmac.digest
      else
        hmac.hexdigest
      end
    end

    def calculate_checksum(klass, value, options = {})
      case options[:format]
      when :binary, "binary"
        klass.digest(value)
      when :base64, "base64"
        klass.base64digest(value)
      when :bubblebabble, "bubblebabble"
        klass.bubblebabble(value)
      else
        klass.hexdigest(value)
      end
    end
  end
end