Class: EasyPin::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/easy_pin.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_converter:, checksum_generator:, tumbler:, padder:, formatter:) ⇒ Generator

Returns a new instance of Generator.



19
20
21
22
23
24
25
# File 'lib/easy_pin.rb', line 19

def initialize(base_converter:, checksum_generator:, tumbler:, padder:, formatter:)
  @base_converter = base_converter
  @checksum_generator = checksum_generator
  @tumbler = tumbler
  @padder = padder
  @formatter = formatter
end

Class Method Details

.build(dictionary: EASY_PUBLIC, random_seed: 24, padding: 4, separator: '') ⇒ Object



11
12
13
14
15
16
17
# File 'lib/easy_pin.rb', line 11

def self.build(dictionary: EASY_PUBLIC, random_seed: 24, padding: 4, separator: '')
  Generator.new(base_converter: BaseConverter.new(dictionary.size),
                checksum_generator: ChecksumGenerator.new(dictionary.size),
                tumbler: Tumbler.new(dictionary, Random.new(random_seed)),
                padder: Padder.new(padding),
                formatter: Formatter.new(separator))
end

Instance Method Details

#generate(integer) ⇒ Object

Raises:



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/easy_pin.rb', line 27

def generate(integer)
  integer = integer.to_i

  raise InvalidInput, 'input must be an integer >= 1' unless integer >= 1

  parts = @base_converter.convert(integer)

  parts = @checksum_generator.checksum(parts)

  parts = @padder.pad(parts)

  parts = @tumbler.tumble(parts)

  @formatter.format(parts)
end

#revert(code) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/easy_pin.rb', line 43

def revert(code)
  parts = @formatter.unformat(code)

  parts = @tumbler.untumble(parts)

  parts = @padder.unpad(parts)

  parts = @checksum_generator.unchecksum(parts)

  @base_converter.unconvert(parts)
end