Class: FriendlyDigest
- Inherits:
-
String
- Object
- String
- FriendlyDigest
- Defined in:
- lib/friendly_digest.rb
Defined Under Namespace
Classes: InvalidInputException
Class Method Summary collapse
- .[](*p) ⇒ Object
- .checksum(array) ⇒ Object
- .codes ⇒ Object
- .decode(input, parity = false) ⇒ Object
- .numcodes ⇒ Object
Instance Method Summary collapse
-
#initialize(input, parity = false) ⇒ FriendlyDigest
constructor
A new instance of FriendlyDigest.
Constructor Details
#initialize(input, parity = false) ⇒ FriendlyDigest
Returns a new instance of FriendlyDigest.
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/friendly_digest.rb', line 28 def initialize(input, parity=false) output = input == 0 ? [self.class.codes.first] : [] while input > 0 rem = input % self.class.codes.length input = (input - rem) / self.class.numcodes #/ output << self.class.codes[rem] end output.reverse.each {|c| self << c } self << self.class.checksum(output) if parity end |
Class Method Details
.[](*p) ⇒ Object
5 |
# File 'lib/friendly_digest.rb', line 5 def [](*p) ; new(*p) ; end |
.checksum(array) ⇒ Object
23 24 25 |
# File 'lib/friendly_digest.rb', line 23 def checksum(array) codes[array.inject(0) {|sum,c| (sum + codes.index(c)) % numcodes }] end |
.codes ⇒ Object
7 8 9 |
# File 'lib/friendly_digest.rb', line 7 def codes @codes ||= ['Z','2','B','T','C','9','H','Q','V','K','N','W','7','P','4','J','Y','G','E','A','D','3','F','8','M','X','6','U','R'] end |
.decode(input, parity = false) ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/friendly_digest.rb', line 15 def decode(input, parity=false) cleaned = input.strip.upcase.split('') raise InvalidInputException.new "Invalid character" if cleaned.any?(&:nil?) raise InvalidInputException.new "Invalid input" if parity && cleaned.pop!= checksum(cleaned) cleaned.map {|c| codes.index(c) }.inject(0) {|tot,c| (tot * numcodes) + c } end |
.numcodes ⇒ Object
11 12 13 |
# File 'lib/friendly_digest.rb', line 11 def numcodes @numcodes ||= codes.length end |