Sha256: cde257e259b42c7ce5deb05e3cf5787028005b9bef71fcb671608c64df55e4c2

Contents?: true

Size: 756 Bytes

Versions: 8

Compression:

Stored size: 756 Bytes

Contents

# frozen_string_literal: true

class Code
  class Object
    class RubyFunction < Function
      attr_reader :raw

      def initialize(raw)
        @raw = raw
      end

      def self.name
        "RubyFunction"
      end

      # TODO: fix / refactor
      def code_call(args:, globals:)
        regular_arguments =
          args
            .select(&:regular?)
            .map(&:value)
            .map { |argument| Ruby.from_code(argument) }

        keyword_arguments =
          args
            .select(&:keyword?)
            .map do |argument|
            [argument.name.to_sym, Ruby.from_code(argument.value)]
          end
            .to_h

        Ruby.to_code(raw.call(*regular_arguments, **keyword_arguments))
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
code-ruby-0.7.4 lib/code/object/ruby_function.rb
code-ruby-0.7.3 lib/code/object/ruby_function.rb
code-ruby-0.7.2 lib/code/object/ruby_function.rb
code-ruby-0.7.1 lib/code/object/ruby_function.rb
code-ruby-0.7.0 lib/code/object/ruby_function.rb
code-ruby-0.6.7 lib/code/object/ruby_function.rb
code-ruby-0.6.6 lib/code/object/ruby_function.rb
code-ruby-0.6.5 lib/code/object/ruby_function.rb