Class: Kalculator

Inherits:
Object
  • Object
show all
Defined in:
lib/kalculator/validator.rb,
lib/kalculator.rb,
lib/kalculator/lexer.rb,
lib/kalculator/types.rb,
lib/kalculator/errors.rb,
lib/kalculator/parser.rb,
lib/kalculator/formula.rb,
lib/kalculator/pointer.rb,
lib/kalculator/version.rb,
lib/kalculator/evaluator.rb,
lib/kalculator/transform.rb,
lib/kalculator/data_sources.rb,
lib/kalculator/type_sources.rb,
lib/kalculator/built_in_functions.rb

Overview

Author: Benjamin Walter Newhall, 12/17/19, github: bennewhall Explanation: much like the data sources class, this stores type data in the form “variable-name”=>String

Defined Under Namespace

Modules: Transform Classes: AnonymousPointer, Bool, Collection, Comparable, DataSources, Error, Evaluator, Formula, Lexer, List, MappedObject, Number, Parser, Percent, Pointer, String, Time, TypeError, TypeSources, UndefinedFunctionError, UndefinedVariableError, Validator

Constant Summary collapse

VERSION =
"1.0.0"
BUILT_IN_FUNCTIONS =
{
  ["contains", 2] => lambda { |collection, item|
      collection.include?(item)
  },
  ["count", 1] => lambda { |list|
    list.count
  },
  ["date", 1] => lambda { |str|
    Date.parse(str)
  },
  ["max", 2] => lambda { |left, right|
    [left, right].max
  },
  ["min", 2] => lambda { |left, right|
    [left, right].min
  },
  ["sum", 1] => lambda { |list|
    list.inject(0){|sum, num| sum + num}
  },
}.freeze

Class Method Summary collapse

Class Method Details

.evaluate(formula, data_source = {}, custom_functions = {}) ⇒ Object



22
23
24
# File 'lib/kalculator.rb', line 22

def self.evaluate(formula, data_source = {}, custom_functions = {})
  Kalculator::Formula.new(formula).evaluate(data_source, custom_functions)
end

.new(*args) ⇒ Object



28
29
30
# File 'lib/kalculator.rb', line 28

def self.new(*args)
  Kalculator::Formula.new(*args)
end

.parse(formula) ⇒ Object



32
33
34
# File 'lib/kalculator.rb', line 32

def self.parse(formula)
  Kalculator::Parser.parse(Kalculator::Lexer.lex(formula))
end

.validate(formula, type_source = Kalculator::TypeSources.new(Hash.new)) ⇒ Object



25
26
27
# File 'lib/kalculator.rb', line 25

def self.validate(formula,  type_source = Kalculator::TypeSources.new(Hash.new) )
  Kalculator::Formula.new(formula).validate(type_source)
end