Sha256: ac7c987f3843bee15c21ccca39b421cc47c4f5866c0c71b1a4d93ec06496c2fe

Contents?: true

Size: 943 Bytes

Versions: 1

Compression:

Stored size: 943 Bytes

Contents

# frozen_string_literal: true

module Grumlin
  module Shortcuts
    module InstanceMethods
      def with_shortcuts(obj)
        ShortcutProxy.new(obj, self.class.shortcuts, parent: self)
      end
    end

    def self.extended(base)
      base.include(InstanceMethods)
    end

    def inherited(subclass)
      super
      subclass.shortcuts_from(self)
    end

    def shortcut(name, &block)
      name = name.to_sym
      # TODO: blocklist of names to avoid conflicts with standard methods?
      raise ArgumentError, "cannot use names of standard gremlin steps" if Grumlin.supported_steps.include?(name)

      raise ArgumentError, "shortcut '#{name}' already exists" if shortcuts.key?(name)

      shortcuts[name] = block
    end

    def shortcuts_from(other_shortcuts)
      other_shortcuts.shortcuts.each do |name, block|
        shortcut(name, &block)
      end
    end

    def shortcuts
      @shortcuts ||= {}
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
grumlin-0.13.0 lib/grumlin/shortcuts.rb