class EasyPin::Generator

Public Class Methods

build(dictionary: EASY_PUBLIC, random_seed: 24, padding: 4, separator: '') click to toggle source
# 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
new(base_converter:, checksum_generator:, tumbler:, padder:, formatter:) click to toggle source
# 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

Public Instance Methods

generate(integer) click to toggle source
# 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) click to toggle source
# 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