Module: ObscuredId::HasObscuredId::ClassMethods

Defined in:
lib/obscured_id/obscured_id.rb

Overview

Specify this has extension if you want to model a to have an obscured id. This requires a key column for the obscured id, which is obscured_id by default.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.set_obscured_idsObject

Reset all obscured ids



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/obscured_id/obscured_id.rb', line 39

def self.set_obscured_ids
  success = 0
  fail = 0

  begin
    self.find_each do |record|
      begin
        record.set_obscured_id
        success += 1
      rescue
        fail += 1
      end
    end
  rescue
    false
  end

  [success, fail]
end

Instance Method Details

#has_obscured_id(options = {}) ⇒ Object

Configuration options are:

  • field - specifies the column name to use for the obscured id. Default is obscured_id.

  • secret_token - salt for the SHA1 digest. Default is obscured_id_secret_token configuration option.

  • auto - Automatically update record with obscured id after save. Default it true.



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
53
54
55
56
57
58
59
# File 'lib/obscured_id/obscured_id.rb', line 18

def has_obscured_id(options = {})
  self.obscured_id_secret_token = options[:secret_token] || ActiveRecord::Base.obscured_id_secret_token
  self.obscured_id_field = options[:field] || ActiveRecord::Base.obscured_id_field
  self.record_obscured_ids = options.has_key?(:auto) ? options[:auto] : true
  
  # Define the instance method set an obscured id for this model
  define_method :set_obscured_id do
    update_column( self.obscured_id_field, 
                   OpenSSL::HMAC.hexdigest( OpenSSL::Digest.const_get(:SHA1).new, 
                                            self.obscured_id_secret_token.to_s, 
                                            "#{id}#{created_at.to_i}" ) ) 
  end

  define_method :safe_set_obscured_id do
    set_obscured_id if ActiveRecord::Base.record_obscured_ids && self.record_obscured_ids
  end

  # Call set_obscured_id after create.
  after_create :safe_set_obscured_id

  # Reset all obscured ids
  def self.set_obscured_ids
    success = 0
    fail = 0

    begin
      self.find_each do |record|
        begin
          record.set_obscured_id
          success += 1
        rescue
          fail += 1
        end
      end
    rescue
      false
    end

    [success, fail]
  end # set_obscure_ids

end