hideous 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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