class Reflekt::RuleSet

Attributes

rules[RW]

Public Class Methods

new(meta_map) click to toggle source

@param meta_map [Hash] The rules to apply to each data type.

# File lib/rule_set.rb, line 26
def initialize(meta_map)

  # The rules that apply to meta types.
  @meta_map = meta_map

  # The types of meta this rule set applies to.
  # Rules are only validated on their supported meta type.
  @meta_types = Set.new()

  @rules = {}

end

Public Instance Methods

result() click to toggle source

Get the results of the rules.

@return [Array] The rules.

# File lib/rule_set.rb, line 97
def result()

  rules = {}

  @rules.each do |key, rule|
    rules[rule.class] = rule.result()
  end

  return rules

end
test(value) click to toggle source

@param value [Dynamic]

# File lib/rule_set.rb, line 70
def test(value)

  result = true
  meta_type = MetaBuilder.data_type_to_meta_type(value)

  # Fail if value's meta type not testable by rule set.
  unless @meta_types.include? meta_type
    return false
  end

  @rules.each do |klass, rule|
    if (rule.type == meta_type)
      unless rule.test(value)
         result = false
      end
    end
  end

  return result

end
train(meta) click to toggle source

Train rule set on metadata.

@param meta [Hash] The metadata to train on.

# File lib/rule_set.rb, line 44
def train(meta)

  # Track supported meta types.
  meta_type = meta[:type]
  @meta_types << meta_type

  # Get rule types for this meta type.
  if @meta_map.key? meta_type
    @meta_map[meta_type].each do |rule_type|

      # Ensure rule exists.
      if @rules[rule_type].nil?
        @rules[rule_type] = rule_type.new()
      end

      # Train rule.
      @rules[rule_type].train(meta)

    end
  end

end