Sha256: 8036ba5e0acd804cff3ea6851918a24f7577f63b5e99ef2e313145fc39520502
Contents?: true
Size: 1008 Bytes
Versions: 6
Compression:
Stored size: 1008 Bytes
Contents
module Unitwise module Expression class Decomposer METHODS = [:primary_code, :secondary_code, :names, :slugs, :symbol] PARSERS = METHODS.reduce({}) do |hash, method| hash[method] = Parser.new(method); hash end TRANSFORMER = Transformer.new attr_reader :expression def initialize(expression) @expression = expression.to_s if terms.nil? || terms.empty? raise ExpressionError, "Could not evaluate '#{@expression}'." end end def transform PARSERS.reduce(nil) do |foo, (method, parser)| if parsed = parser.parse(expression) rescue next return TRANSFORMER.apply(parsed, key: method) end end end def terms @terms ||= begin transformation = transform if transformation.respond_to?(:terms) transformation.terms else Array(transformation) end end end end end end
Version data entries
6 entries across 6 versions & 1 rubygems