Sha256: c05d0e7b8643bee1655c22e6b2409222c598d20f17d9abb24f7c4e2f98a351b1

Contents?: true

Size: 1012 Bytes

Versions: 6

Compression:

Stored size: 1012 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)
      base.include(Grumlin::Expressions)
    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

      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

6 entries across 6 versions & 1 rubygems

Version Path
grumlin-0.15.3 lib/grumlin/shortcuts.rb
grumlin-0.15.2 lib/grumlin/shortcuts.rb
grumlin-0.15.1 lib/grumlin/shortcuts.rb
grumlin-0.15.0 lib/grumlin/shortcuts.rb
grumlin-0.14.5 lib/grumlin/shortcuts.rb
grumlin-0.14.4 lib/grumlin/shortcuts.rb