Class: GermanNumbers::Parser::StackMachine
- Inherits:
-
Object
- Object
- GermanNumbers::Parser::StackMachine
- 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
-
#empty? ⇒ Boolean
rubocop:enable Metrics/MethodLength.
-
#initialize ⇒ StackMachine
constructor
A new instance of StackMachine.
-
#step(result, letter) ⇒ Object
rubocop:disable Metrics/MethodLength.
Methods included from StateMachine
Constructor Details
#initialize ⇒ StackMachine
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
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 |