class InciScore::Recognizer

Constants

Component
DEFAULT_RULES

Attributes

applied[R]

Public Class Methods

new(ingredient, catalog, rules = DEFAULT_RULES, wrapper = Ingredient) click to toggle source
# File lib/inci_score/recognizer.rb, line 11
def initialize(ingredient, catalog, rules = DEFAULT_RULES, wrapper = Ingredient)
  @ingredient = wrapper.new(ingredient)
  @catalog = catalog
  @rules = rules
  @applied = []
end

Public Instance Methods

call() click to toggle source
# File lib/inci_score/recognizer.rb, line 18
def call
  return if @ingredient.to_s.empty?
  component = find_component
  return unless component
  Component.new(component, @catalog[component])
end

Private Instance Methods

apply(rule) click to toggle source
# File lib/inci_score/recognizer.rb, line 33
        def apply(rule)
  @ingredient.values.map do |value|
    rule.call(value, @catalog)
  end.find(&:itself)
end
find_component() click to toggle source
# File lib/inci_score/recognizer.rb, line 25
        def find_component
  @rules.reduce(nil) do |component, rule|
    break(component) if component
    applied << rule
    apply(rule)
  end
end