Sha256: 95874f48031b905f63cfcec4a0f6fffa10bf50565977fd1c0319026cbbefa43d

Contents?: true

Size: 1.83 KB

Versions: 13

Compression:

Stored size: 1.83 KB

Contents

# Author::    Eric Crane  (mailto:eric.crane@mac.com)
# Copyright:: Copyright (c) 2024 Eric Crane.  All rights reserved.
#
# Invoke a function from a script.
#

module Gloo
  module Verbs
    class Invoke < Gloo::Core::Verb

      KEYWORD = 'invoke'.freeze
      KEYWORD_SHORT = '~>'.freeze

      #
      # Run the verb.
      #
      def run
        if @tokens.token_count > 1
          ob = @tokens.first

          # Get the function object
          pn = Gloo::Core::Pn.new( @engine, @tokens.second ) 
          func = pn.resolve

          # Is the object a function?
          if func&.is_function?
            params = get_params_arr
          
            @engine.log.debug "invoking function: #{func.pn}"
            result = func.invoke( params ) 
            @engine.log.debug "function returned: #{result}"
            @engine.heap.it.set_to result
            return result
          end
        end
      end

      #
      # Get the Verb's keyword.
      #
      def self.keyword
        return KEYWORD
      end

      #
      # Get the Verb's keyword shortcut.
      #
      def self.keyword_shortcut
        return KEYWORD_SHORT
      end

      # ---------------------------------------------------------------------
      #    Private functions
      # ---------------------------------------------------------------------

      private

      #
      # Get params array.
      #
      def get_params_arr
        @engine.log.debug "token params: #{@tokens.params}"
        params = @tokens.params[1..-1]

        @engine.log.info "params: #{params}"
        evaluated_params = []

        params.each do |p|
          expr = Gloo::Expr::Expression.new( @engine, [ p ] )
          evaluated_params << expr.evaluate
        end

        @engine.log.debug "evaluated_params: #{evaluated_params}"

        return evaluated_params
      end

    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
gloo-3.10.1 lib/gloo/verbs/invoke.rb
gloo-3.10.0 lib/gloo/verbs/invoke.rb
gloo-3.9.1 lib/gloo/verbs/invoke.rb
gloo-3.9.0 lib/gloo/verbs/invoke.rb
gloo-3.8.0 lib/gloo/verbs/invoke.rb
gloo-3.7.0 lib/gloo/verbs/invoke.rb
gloo-3.6.2 lib/gloo/verbs/invoke.rb
gloo-3.6.1 lib/gloo/verbs/invoke.rb
gloo-3.6.0 lib/gloo/verbs/invoke.rb
gloo-3.5.0 lib/gloo/verbs/invoke.rb
gloo-3.4.1 lib/gloo/verbs/invoke.rb
gloo-3.4.0 lib/gloo/verbs/invoke.rb
gloo-3.3.0 lib/gloo/verbs/invoke.rb