class Tefil::Calculator
Public Class Methods
new(options = {})
click to toggle source
Calls superclass method
Tefil::TextFilterBase::new
# File lib/tefil/calculator.rb, line 8 def initialize(options = {}) @options = options @preserve = options[:preserve] @ruby = options[:ruby] super(options) end
Public Instance Methods
process_stream(in_io, out_io)
click to toggle source
# File lib/tefil/calculator.rb, line 15 def process_stream(in_io, out_io) in_io.each do |line| eq = line.chomp eq.gsub!(/\{/, '(' ) eq.gsub!(/\}/, ')' ) eq.gsub!(/\\times/, '*' ) if @ruby eq.gsub!(/\^/, '**' ) eq.gsub!(/sqrt/, 'Math::sqrt' ) eq.gsub!(/log\(/, 'Math::log(' ) eq.gsub!(/l\(/, 'Math::log(' ) eq.gsub!(/exp\(/, 'Math::exp(' ) eq.gsub!(/e\(/, 'Math::exp(' ) result = eval(eq) else eq.gsub!(/\(/, '\(' ) eq.gsub!(/\)/, '\)' ) eq.gsub!(/\*/, '\*' ) result = `echo #{eq} | bc -l`.chomp result.sub!(/^\./, '0.') result.sub!(/^-\./, '-0.') result.sub!(/^0$/, '0.0') end out_io.print line.chomp + " = " if @preserve out_io.puts result end end