Sha256: 6c3adb1ce29162ae3049b10688498eca3e9ec91956143384ac744ab826bbd284

Contents?: true

Size: 1.47 KB

Versions: 5

Compression:

Stored size: 1.47 KB

Contents

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

5 entries across 5 versions & 1 rubygems

Version Path
unitwise-0.8.1 lib/unitwise/expression.rb
unitwise-0.8.0 lib/unitwise/expression.rb
unitwise-0.7.1 lib/unitwise/expression.rb
unitwise-0.7.0 lib/unitwise/expression.rb
unitwise-0.6.2 lib/unitwise/expression.rb