class RPNCalculator::InputProcessor

Attributes

input_parser[R]
input_validator[R]
operation_processor[R]

Public Class Methods

new(operation_processor, input_validator, input_parser) click to toggle source
# File lib/rpn-calculator/input_processor.rb, line 3
def initialize(operation_processor, input_validator, input_parser)
  @input_validator     = input_validator
  @input_parser        = input_parser
  @operation_processor = operation_processor
end

Public Instance Methods

process(input_expression, previous_operations = []) click to toggle source
# File lib/rpn-calculator/input_processor.rb, line 9
def process(input_expression, previous_operations = [])
  validator_result = input_validator.validate(input_expression)
  return invalid_processor_result(validator_result) unless validator_result.valid?

  parser_result = input_parser.parse(input_expression)
  return invalid_processor_result(parser_result) unless parser_result.valid?

  operation_result = operation_processor.process(
    previous_operations + parser_result.result
  )
  return invalid_processor_result(operation_result) unless operation_result.valid?

  Result::Processor.new(operation_result.result)
end

Private Instance Methods

invalid_processor_result(result) click to toggle source
# File lib/rpn-calculator/input_processor.rb, line 28
def invalid_processor_result(result)
  Result::Processor.new([], result.error)
end