Sha256: ba8e0ce7a3cdd1bdc9559fef119aadaf12cfcbb692f4232ad2bc7b3afaac56da

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

module Grumlin
  class AnonymousStep
    attr_reader :name, :previous_step, :configuration_steps

    # TODO: add other steps
    SUPPORTED_STEPS = %i[E V addE addV aggregate and as both bothE by choose coalesce count dedup drop elementMap emit
                         fold from group groupCount has hasId hasLabel hasNot id in inE inV is label limit not or order
                         out outE path project properties property range repeat sack select sideEffect skip sum tail to
                         unfold union until valueMap values where with].freeze

    def initialize(name, *args, configuration_steps: [], previous_step: nil, **params)
      @name = name
      @previous_step = previous_step
      @args = args
      @params = params
      @configuration_steps = configuration_steps
    end

    SUPPORTED_STEPS.each do |step|
      define_method(step) do |*args, **params|
        step(step, *args, **params)
      end
    end

    def step(name, *args, **params)
      self.class.new(name, *args, previous_step: self, configuration_steps: configuration_steps, **params)
    end

    def inspect
      bytecode.inspect
    end

    def to_s
      inspect
    end

    def bytecode(no_return: false)
      @bytecode ||= Bytecode.new(self, no_return: no_return)
    end

    def args
      [*@args, @params.any? ? @params : nil].compact
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
grumlin-0.15.1 lib/grumlin/anonymous_step.rb
grumlin-0.15.0 lib/grumlin/anonymous_step.rb