RiverGlide/CukeSalad

View on GitHub
Examples/Calculator/lib/web_calculator.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'sinatra/base'
require 'erb'

$:.unshift(File.dirname(__FILE__), '.')
require 'calculator'

class WebCalculator < Sinatra::Base

  use Rack::Session::Pool

  configure :development, :test do
      require 'sinatra/reloader'
  end

  helpers do
    def available_operations
      Calculator::OPERATIONS
    end

    def operate_with operation
      available_operations[operation.to_sym]
    end

    def persist calc
      session[:calc] = calc
    end

    def display_result_from calc
      @display = calc.display
      @operations = available_operations
      erb :index
    end

    def user_input
      params[:number].to_i
    end

    def selected_operator
      params[:operator]
    end

    def display_result_from_session
      @display = session[:calc].display ||= 0
      @operations = available_operations
      erb :index
    end

    def input_entered?
      not params[:number].empty?
    end

    def equals_pressed?
      selected_operator == "equals"
    end

    def load_calculator
      session[:calc] ||= Calculator.new
    end
  
  end

  get '/' do
    load_calculator
    display_result_from_session
  end

  post '/' do
    calculator = load_calculator 
    calculator.enter user_input if input_entered?
    if equals_pressed?
      calculator.equals
    else
      calculator.get_ready_to operate_with(selected_operator)
    end
    persist calculator
    display_result_from calculator
  end
end