class RPNCalculator::OperationProcessor
Attributes
operation_classes[R]
operation_symbols[R]
Public Class Methods
new(operation_classes)
click to toggle source
# File lib/rpn-calculator/operation_processor.rb, line 3 def initialize(operation_classes) @operation_classes = operation_classes @operation_symbols = @operation_classes.keys end
Public Instance Methods
process(parsed_expression)
click to toggle source
# 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
Private Instance Methods
as_float(num_string)
click to toggle source
# File lib/rpn-calculator/operation_processor.rb, line 30 def as_float(num_string) Float(num_string) end
invalid_processor_result(result)
click to toggle source
# File lib/rpn-calculator/operation_processor.rb, line 26 def invalid_processor_result(result) Result::Processor.new([], result.error) end