hideous 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,35 +6,39 @@ module Hideous
6
6
  require 'hideous/xor_knuth_hash'
7
7
  extend ClassMethods
8
8
  include InstanceMethods
9
+
9
10
  cattr_accessor :hideous_prime
10
11
  cattr_accessor :hideous_prime_inverse
11
12
  cattr_accessor :hideous_rndxor
12
13
  cattr_accessor :hideous_enabled
14
+ cattr_accessor :hideous_base
15
+
13
16
  self.hideous_prime = (options[:prime] || hideous_default_prime)
14
17
  self.hideous_prime_inverse = (options[:prime_inverse] || hideous_default_prime_inverse)
15
18
  self.hideous_rndxor = (options[:rndxor] || hideous_default_rndxor)
16
19
  self.hideous_enabled = (options[:auto].nil? ? true : options[:auto])
20
+ self.hideous_base = (options[:base] || hideous_default_base)
17
21
  end
18
22
 
19
- def self.hide(id, hideous_prime, hideous_prime_inverse, hideous_rndxor)
20
- XorKnuthHash.hash(id, hideous_prime, hideous_prime_inverse, hideous_rndxor)
23
+ def self.hide(id, hideous_prime, hideous_prime_inverse, hideous_rndxor, base)
24
+ XorKnuthHash.hash(id, hideous_prime, hideous_prime_inverse, hideous_rndxor, base)
21
25
  end
22
26
 
23
- def self.show(id, hideous_prime, hideous_prime_inverse, hideous_rndxor)
24
- XorKnuthHash.reverse_hash(id, hideous_prime, hideous_prime_inverse, hideous_rndxor)
27
+ def self.show(id, hideous_prime, hideous_prime_inverse, hideous_rndxor, base)
28
+ XorKnuthHash.reverse_hash(id, hideous_prime, hideous_prime_inverse, hideous_rndxor, base)
25
29
  end
26
30
 
27
31
 
28
32
  module ClassMethods
29
33
  def find(*args)
30
34
  if has_obfuscated_id?
31
- args[0] = Hideous.show(args[0], self.hideous_prime, self.hideous_prime_inverse, self.hideous_rndxor)
35
+ args[0] = Hideous.show(args[0], self.hideous_prime, self.hideous_prime_inverse, self.hideous_rndxor, self.hideous_base)
32
36
  end
33
37
  super(*args)
34
38
  end
35
39
 
36
40
  def find_by_obfuscated_id(*args)
37
- args[0] = Hideous.show(args[0].to_s, self.hideous_prime, self.hideous_prime_inverse, self.hideous_rndxor)
41
+ args[0] = Hideous.show(args[0].to_s, self.hideous_prime, self.hideous_prime_inverse, self.hideous_rndxor, self.hideous_base)
38
42
  find(*args)
39
43
  end
40
44
 
@@ -42,6 +46,8 @@ module Hideous
42
46
  self.hideous_enabled
43
47
  end
44
48
 
49
+ private
50
+
45
51
  def hideous_default_prime
46
52
  413_158_511
47
53
  end
@@ -53,12 +59,20 @@ module Hideous
53
59
  def hideous_default_rndxor
54
60
  652_109_907
55
61
  end
62
+
63
+ def hideous_default_base
64
+ 16
65
+ end
56
66
  end
57
67
 
58
68
  module InstanceMethods
69
+ def obfuscated_id
70
+ Hideous.hide(self.id, self.hideous_prime, self.hideous_prime_inverse, self.hideous_rndxor, self.hideous_base)
71
+ end
72
+
59
73
  def to_param
60
74
  if self.hideous_enabled
61
- Hideous.hide(self.id, self.hideous_prime, self.hideous_prime_inverse, self.hideous_rndxor)
75
+ obfuscated_id
62
76
  else
63
77
  super
64
78
  end
@@ -68,4 +82,4 @@ module Hideous
68
82
 
69
83
  end
70
84
 
71
- ActiveRecord::Base.extend Hideous
85
+ ActiveRecord::Base.extend Hideous
@@ -1,3 +1,3 @@
1
1
  module Hideous
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -1,34 +1,35 @@
1
1
  class XorKnuthHash
2
2
  MAXID = 2147483647
3
3
  # Convience class method pointing to the instance method
4
- def self.hash(record_id, prime, prime_inverse, rndxor)
5
- new(record_id, prime, prime_inverse, rndxor).hash
4
+ def self.hash(record_id, prime, prime_inverse, rndxor, base)
5
+ new(record_id, prime, prime_inverse, rndxor, base).hash
6
6
  end
7
7
 
8
8
  # Convience class method pointing to the instance method
9
- def self.reverse_hash(hash, prime, prime_inverse, rndxor)
10
- new(hash, prime, prime_inverse, rndxor).reverse_hash
9
+ def self.reverse_hash(hash, prime, prime_inverse, rndxor, base)
10
+ new(hash, prime, prime_inverse, rndxor, base).reverse_hash
11
11
  end
12
12
 
13
13
  def self.calculate_prime_inverse(prime)
14
14
  self.modinv(prime, MAXID+1)
15
15
  end
16
16
 
17
- def initialize(id_or_hash, prime, prime_inverse, rndxor)
17
+ def initialize(id_or_hash, prime, prime_inverse, rndxor, base)
18
18
  @id_or_hash = id_or_hash
19
19
  @prime = prime
20
20
  @prime_inverse = prime_inverse
21
21
  @rndxor = rndxor
22
+ @base = base
22
23
  end
23
24
 
24
25
  # obfuscates an integer
25
26
  def hash
26
- (((@id_or_hash * @prime) & MAXID) ^ @rndxor).to_s(16)
27
+ (((@id_or_hash * @prime) & MAXID) ^ @rndxor).to_s(@base)
27
28
  end
28
29
 
29
30
  # de-obfuscates an integer
30
31
  def reverse_hash
31
- ((@id_or_hash.to_i(16) ^ @rndxor) * @prime_inverse) & MAXID
32
+ ((@id_or_hash.to_i(@base) ^ @rndxor) * @prime_inverse) & MAXID
32
33
  end
33
34
 
34
35
  private
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hideous
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-05 00:00:00.000000000 Z
12
+ date: 2012-08-09 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Hide/Obfuscate ActiveRecord IDs in a url using a modified Knuth hash
15
15
  email:
@@ -39,18 +39,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
39
39
  - - ! '>='
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
- segments:
43
- - 0
44
- hash: -1057310556346039001
45
42
  required_rubygems_version: !ruby/object:Gem::Requirement
46
43
  none: false
47
44
  requirements:
48
45
  - - ! '>='
49
46
  - !ruby/object:Gem::Version
50
47
  version: '0'
51
- segments:
52
- - 0
53
- hash: -1057310556346039001
54
48
  requirements: []
55
49
  rubyforge_project:
56
50
  rubygems_version: 1.8.23