Sha256: eace7caf1792a88ccad2aefa9e85ba01d32ccf9711ffcdeafb98d83ae30f7ac0

Contents?: true

Size: 1.58 KB

Versions: 3

Compression:

Stored size: 1.58 KB

Contents

module Pione
  module Util
    # Evaluatable is a module for providing to ability to evaluate PIONE
    # expression string.
    module Evaluatable
      # Evaluate the string as a PIONE expression and get the result value as model object.
      #
      # @param str [String]
      #   a PIONE expression string
      # @param domain_info [DomainInfo]
      #   domain info
      # @return [BasicModel]
      #   the result of evaluation
      def val!(str, domain_info=nil)
        domain_info = load_domain_info unless domain_info
        env = domain_info.env
        option = {package_name: env.current_package_id, filename: "pione-eval"}
        Lang::DocumentTransformer.new.apply(
          Lang::DocumentParser.new.expr.parse(str), option
        ).eval(env)
      end

      # Evaluate the string as a PIONE expression and get the result value as a textized string.
      #
      # @param str [String]
      #   a PIONE expression string
      # @param domain_info [DomainInfo]
      #   domain info
      # @return [String]
      #   the result of evaluation as an embeddable string
      def val(str, domain_info=nil)
        domain_info = load_domain_info unless domain_info
        env = domain_info.env
        val!(str, domain_info).call_pione_method(env, "textize", []).first.value
      end

      private

      # Load default domain info file.
      def load_domain_info
        location = Location["./.domain.dump"]
        if location.exist?
          System::DomainInfo.read(location)
        else
          System::DomainInfo.new(Lang::Environment.new)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
pione-0.3.2 lib/pione/util/evaluatable.rb
pione-0.3.1 lib/pione/util/evaluatable.rb
pione-0.3.0 lib/pione/util/evaluatable.rb