class ReversePolishCalculator

Postfix notation

Constants

EXAMPLES
OPERATORS
Resources:

rubular.com/ en.wikipedia.org/wiki/Reverse_Polish_notation www.betterspecs.org/ ruby-doc.org/core-2.4.2/Object.html www.digitalocean.com/community/tutorials/how-to-package-and-distribute-ruby-applications-as-a-gem-using-rubygems

VALID_EXITS
VERSION

Attributes

evaluation[RW]
expression[RW]

Public Class Methods

new(expression = nil, evaluation = []) click to toggle source
# File lib/reverse_polish_calculator.rb, line 27
def initialize(expression = nil, evaluation = [])
  @expression = expression
  @evaluation = evaluation
end

Public Instance Methods

clear_evaluation() click to toggle source
# File lib/reverse_polish_calculator.rb, line 66
def clear_evaluation
  @evaluation.clear
end
evaluate() click to toggle source
# File lib/reverse_polish_calculator.rb, line 39
def evaluate
  gather_input
  input_contains_valid_exit ? exit : evaluate_input
end
evaluate_expression(array) click to toggle source
# File lib/reverse_polish_calculator.rb, line 70
def evaluate_expression(array)
  array.each do |element|
    if element =~ /^[0-9].*$/
      @evaluation.push(element.to_f)
    elsif OPERATORS.include? element
      raise 'You must have two operands before and per operator.' if @evaluation.length < 2
      operands = @evaluation.pop(2)
      @evaluation.push(operands[0].send(element, operands[1]))
    else
      print_error(element)
    end
  end
  print_result
end
evaluate_input() click to toggle source
# File lib/reverse_polish_calculator.rb, line 53
def evaluate_input
  case @expression
  when 'help'
    print_operation_guide
  when 'clear'
    clear_evaluation
  when 'example'
    run_example
  else
    evaluate_expression(expression_array)
  end
end
expression_array() click to toggle source
# File lib/reverse_polish_calculator.rb, line 89
def expression_array
  @expression.split(' ')
end
gather_input() click to toggle source
# File lib/reverse_polish_calculator.rb, line 44
def gather_input
  print 'input expression > '
  @expression = gets.strip.downcase
end
input_contains_valid_exit() click to toggle source
# File lib/reverse_polish_calculator.rb, line 49
def input_contains_valid_exit
  VALID_EXITS.include? @expression
end
print_result() click to toggle source
run() click to toggle source
# File lib/reverse_polish_calculator.rb, line 34
def run
  print_introduction
  evaluate until input_contains_valid_exit
end