fixed_length_encoder 0.0.1

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.
Files changed (2) hide show
  1. data/lib/fixed_length_encoder.rb +25 -0
  2. metadata +48 -0
@@ -0,0 +1,25 @@
1
+ class FixedLengthEncoder
2
+ ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
3
+ BASE = ALPHABET.length
4
+
5
+ def self.encode(value, length = 8)
6
+ raise ArgumentError, 'Cannot encode a non-Integer.' unless value.is_a?(Integer)
7
+ message = ''
8
+ while (value > 0)
9
+ remainder = value % BASE
10
+ message += ALPHABET[remainder]
11
+ value = (value - remainder)/BASE
12
+ end
13
+ message
14
+ end
15
+
16
+ def self.decode(message)
17
+ value = 0
18
+ message.reverse.split('').each do |digit|
19
+ index = ALPHABET.index(digit)
20
+ raise ArgumentError, 'Invalid character' if index.nil?
21
+ value = (value * BASE) + index
22
+ end
23
+ value
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fixed_length_encoder
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Brett Pontarelli
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-13 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Integers are converted to 6 or 8 digit strings using a binary reversal
15
+ and a shuffled base 62 alphabet. Strings with valid digits (0-9 a-z A-z)are converted
16
+ back to integers. The encoding is one-to-one but not sequential.This is useful
17
+ for obfuscating user ids in urls.
18
+ email: brett@paperyfrog.com
19
+ executables: []
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - lib/fixed_length_encoder.rb
24
+ homepage: http://rubygems.org/gems/fixed_length_encoder
25
+ licenses: []
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 1.8.24
45
+ signing_key:
46
+ specification_version: 3
47
+ summary: Two way conversion from integer to a fixed 6 or 8 digit string.
48
+ test_files: []