Class: RpnCalculator::RPN

Inherits:
Object
  • Object
show all
Defined in:
lib/rpn_calculator/rpn.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(numbers, operators) ⇒ RPN

Returns a new instance of RPN.

Raises:

  • (ArgumentError)


3
4
5
6
7
8
9
10
# File 'lib/rpn_calculator/rpn.rb', line 3

def initialize(numbers,operators)
  @numbers   = numbers
  @operators = operators
  raise ArgumentError, 'A minimum of two numbers is required' if numbers.count < 2
  raise ArgumentError, 'The number of operators must be exactly one less than number of numbers' unless (numbers.count - 1) == operators.count
  raise ArgumentError, 'Only valid numbers allowed' unless are_numbers?
  raise ArgumentError, 'Only valid numbers allowed' unless are_operators?
end

Instance Attribute Details

#numbersObject

Returns the value of attribute numbers.



11
12
13
# File 'lib/rpn_calculator/rpn.rb', line 11

def numbers
  @numbers
end

#operatorsObject

Returns the value of attribute operators.



11
12
13
# File 'lib/rpn_calculator/rpn.rb', line 11

def operators
  @operators
end

Class Method Details

.calculate(str) ⇒ Object



14
# File 'lib/rpn_calculator/rpn.rb', line 14

def self.calculate(str) RPNParser.parse(str) end

.evaluate(args) ⇒ Object



13
# File 'lib/rpn_calculator/rpn.rb', line 13

def self.evaluate(args) new(args[0],args[1]).evaluate end

Instance Method Details

#evaluateObject



15
16
17
18
19
20
21
# File 'lib/rpn_calculator/rpn.rb', line 15

def evaluate
  evaluated = numbers.shift
  while numbers.count > 0
    evaluated = Float(evaluated).send(operators.shift,Float(numbers.shift))
  end
  return evaluated
end