Sha256: d406e909291c192f5456d3077e1ca403347a32030cc71a84ab2f76688c10c4c3

Contents?: true

Size: 1.49 KB

Versions: 3

Compression:

Stored size: 1.49 KB

Contents

require 'parslet'

require 'unitwise/expression/matcher'
require 'unitwise/expression/parser'
require 'unitwise/expression/transformer'
require 'unitwise/expression/composer'
require 'unitwise/expression/decomposer'

module Unitwise
  # The Expression module encompases all functions around encoding and decoding
  # strings into Measurement::Units and vice-versa.
  module Expression
    class << self
      # Build a string representation of a collection of terms
      # @param terms [Array]
      # @return [String]
      # @example
      #   Unitwise::Expression.compose(terms) # => "m2/s2"
      # @api public
      def compose(terms)
        Composer.new(terms).expression
      end

      # Convert a string representation of a unit, and turn it into a
      # an array of terms
      # @param expression [String] The string you wish to convert
      # @return [Array]
      # @example
      #   Unitwise::Expression.decompose("m2/s2")
      #   # => [<Unitwise::Term m2>, <Unitwise::Term s-2>]
      # @api public
      def decompose(expression)
        expression = expression.to_s
        if decomposed.key?(expression)
          decomposed[expression]
        else
          decomposed[expression] = begin
            Decomposer.new(expression).terms
          rescue ExpressionError
            nil
          end
        end
      end

      private

      # A cache of decomposed strings.
      # @return [Hash]
      # @api private
      def decomposed
        @decomposed ||= {}
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
unitwise-0.6.1 lib/unitwise/expression.rb
unitwise-0.6.0 lib/unitwise/expression.rb
unitwise-0.5.1 lib/unitwise/expression.rb