-
Notifications
You must be signed in to change notification settings - Fork 0
/
fcalc.rb
56 lines (46 loc) · 1.13 KB
/
fcalc.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# frozen_string_literal: true
# !/usr/bin/env ruby
# Needs: chmod +x fcalc.rb
require './fraction'
def main
if ARGV.length.zero?
interactive_mode
return
end
args = ARGV[0].split(' ')
puts process(args)
rescue ArgumentError
help
end
def interactive_mode
puts 'Interactive mode - type "exit" to quit.'
loop do
print '? '
str = gets.chomp
break if str.downcase == 'exit'
args = str.split(' ')
puts "=#{process(args)}"
end
end
def process(args = [])
raise ArgumentError unless args.length == 3
val_a = MixedNum.parse(args[0])
val_b = MixedNum.parse(args[2])
op = args[1].to_sym
raise ArgumentError, 'No Operator' unless %i[+ - / *].include?(op)
result = val_a.send(op, val_b)
MixedNum.to_string(result)
end
def help
puts 'Help:'
puts 'VALUE is in the format of "1_1/2"'
puts 'OP is one of "+, -, *, /"'
puts
puts 'ruby fcalc.rb "[VALUE OP VALUE]"'
puts 'runs once and returns the calulated value.'
puts
puts 'ruby fcalc.rb'
puts 'runs interactive mode and takes input in the form of VALUE OP VALUE'
puts 'and displays the calculated value. type "exit" to quit.'
end
main