Class: RPNCalculator::OperationProcessor

Inherits:
Object
  • Object
show all
Defined in:
lib/rpn-calculator/operation_processor.rb

Instance Method Summary collapse

Constructor Details

#initialize(operation_classes) ⇒ OperationProcessor

Returns a new instance of OperationProcessor.



3
4
5
6
# File 'lib/rpn-calculator/operation_processor.rb', line 3

def initialize(operation_classes)
  @operation_classes = operation_classes
  @operation_symbols = @operation_classes.keys
end

Instance Method Details

#process(parsed_expression) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rpn-calculator/operation_processor.rb', line 8

def process(parsed_expression)
  result_stack = parsed_expression.inject([]) do |stack, element|
    if operation_symbols.include?(element)
      result = operation_classes.fetch(element).operate(stack.pop(2))
      return invalid_processor_result(result) unless result.valid?
      stack.push(result.result)
    else
      stack.push(as_float(element))
    end
    stack
  end
  Result::Processor.new(result_stack)
end