Module: Kumi::Core::Analyzer::ConstantFoldingHelpers

Defined in:
lib/kumi/core/analyzer/constant_folding_helpers.rb

Overview

This module provides pure Ruby implementations of primitive functions specifically for the ConstantEvaluator to use at compile time. This approach avoids all use of ‘eval` and is fast and secure. It is references by the functions data yamls, as folding_method

Class Method Summary collapse

Class Method Details

.add(a, b) ⇒ Object

:core :numeric



25
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 25

def add(a, b) = a + b

.all?(collection) ⇒ Boolean

:agg :booleans

Returns:

  • (Boolean)


14
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 14

def all?(collection) = collection.all?

.and(a, b) ⇒ Object

:core :booleans



33
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 33

def and(a, b) = a && b

.any?(collection) ⇒ Boolean

Returns:

  • (Boolean)


15
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 15

def any?(collection) = collection.any?

.at(collection, index) ⇒ Object



30
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 30

def at(collection, index) = collection[index]

.avg(collection) ⇒ Object



20
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 20

def avg(collection) = collection.sum.to_f / collection.size

.count(collection) ⇒ Object



19
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 19

def count(collection) = collection.size

.div(a, b) ⇒ Object



28
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 28

def div(a, b) = a.to_f / b

.eq?(a, b) ⇒ Boolean

Returns:

  • (Boolean)


41
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 41

def eq?(a, b)  = a == b

.gt?(a, b) ⇒ Boolean

Returns:

  • (Boolean)


39
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 39

def gt?(a, b) = a > b

.gte?(a, b) ⇒ Boolean

Returns:

  • (Boolean)


40
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 40

def gte?(a, b) = a >= b

.length(collection) ⇒ Object

:core :constructor



45
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 45

def length(collection) = collection.size

.lt?(a, b) ⇒ Boolean

:core :comparisons

Returns:

  • (Boolean)


38
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 38

def lt?(a, b) = a < b

.max(collection) ⇒ Object



22
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 22

def max(collection) = collection.max

.min(collection) ⇒ Object



21
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 21

def min(collection) = collection.min

.mod(a, b) ⇒ Object



29
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 29

def mod(a, b) = a % b

.mul(a, b) ⇒ Object



27
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 27

def mul(a, b) = a * b

.neq?(a, b) ⇒ Boolean

Returns:

  • (Boolean)


42
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 42

def neq?(a, b) = a != b

.not?(a) ⇒ Boolean

Returns:

  • (Boolean)


35
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 35

def not?(a) = !a

.or(a, b) ⇒ Object



34
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 34

def or(a, b)  = a || b

.select(condition_mask, value_when_true, value_when_false) ⇒ Object

:core :select



49
50
51
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 49

def select(condition_mask, value_when_true, value_when_false)
  condition_mask ? value_when_true : value_when_false
end

.sub(a, b) ⇒ Object



26
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 26

def sub(a, b) = a - b

.sum(collection) ⇒ Object

:agg :numeric



18
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 18

def sum(collection) = collection.sum

.tuple(*args) ⇒ Object



46
# File 'lib/kumi/core/analyzer/constant_folding_helpers.rb', line 46

def tuple(*args) = args