class InciScore::Computer

Constants

PERCENT
TOLERANCE

Public Class Methods

new(src:, catalog: Catalog.fetch, tolerance: TOLERANCE, rules: Normalizer::DEFAULT_RULES) click to toggle source
# File lib/inci_score/computer.rb, line 12
def initialize(src:, 
               catalog: Catalog.fetch, 
               tolerance: TOLERANCE, 
               rules: Normalizer::DEFAULT_RULES)
  @src = src
  @catalog = catalog
  @tolerance = Float(tolerance)
  @rules = rules
  @unrecognized = []
end

Public Instance Methods

call() click to toggle source
# File lib/inci_score/computer.rb, line 23
def call
  @response ||= Response.new(components: components.map(&:name),
                             unrecognized: @unrecognized,
                             score: score,
                             valid: valid?)
end

Private Instance Methods

components() click to toggle source
# File lib/inci_score/computer.rb, line 38
        def components
  @components ||= ingredients.map do |ingredient|
    Recognizer.new(ingredient, @catalog).call.tap do |component|
      @unrecognized << ingredient unless component
    end
  end.compact
end
ingredients() click to toggle source
# File lib/inci_score/computer.rb, line 34
        def ingredients
  @ingredients ||= Normalizer.new(src: @src, rules: @rules).call
end
score() click to toggle source
# File lib/inci_score/computer.rb, line 30
        def score
  Scorer.new(components.map(&:hazard)).call
end
valid?() click to toggle source
# File lib/inci_score/computer.rb, line 46
        def valid?
  @unrecognized.size / (ingredients.size / PERCENT) <= @tolerance
end