Class: GermanNumbers::Parser::StackMachine

Inherits:
Object
  • Object
show all
Extended by:
StateMachine
Defined in:
lib/german_numbers/parser/stack_machine.rb

Constant Summary collapse

SHORT =
{
  'eins' => 1,
  'sech' => 6,
  'sieb' => 7
}.freeze
KEYWORDS =
{
  'und' => :und_keyword,
  'hundert' => :hundert_keyword
}.freeze
SHORT_UNITS =
Set.new(%w(drei vier fünf sech sieb acht neun)).freeze

Instance Method Summary collapse

Methods included from StateMachine

state_machine_for

Constructor Details

#initializeStackMachine

Returns a new instance of StackMachine.



47
48
49
50
51
# File 'lib/german_numbers/parser/stack_machine.rb', line 47

def initialize
  initialize_stack(:initial)
  @collector = ''
  @k = 1
end

Instance Method Details

#empty?Boolean

rubocop:enable Metrics/MethodLength

Returns:

  • (Boolean)


75
76
77
# File 'lib/german_numbers/parser/stack_machine.rb', line 75

def empty?
  @collector.empty?
end

#step(result, letter) ⇒ Object

rubocop:disable Metrics/MethodLength



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/german_numbers/parser/stack_machine.rb', line 54

def step(result, letter)
  @collector = letter + @collector
  num = SHORT[@collector] || Parser::DIGITS[@collector]
  unless (s = select_state(num, @collector)).nil?
    self.stack_state = s
  end
  if stack_state == :hundert_keyword
    self.stack_state = :hundreds
    @k = 100
  end
  unless (st = KEYWORDS[@collector]).nil?
    self.stack_state = st
    @collector = ''
    return result
  end
  return result if num.nil?
  @collector = ''
  result + num * @k
end