Sha256: 7cbced622ce388ad3ad8536bb999dce0f0df1fed5b9d44993d03c36f2c53b0b7

Contents?: true

Size: 1.59 KB

Versions: 74

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true
module GraphQL
  module Define
    # This object delegates most methods to a dictionary of functions, {@dictionary}.
    # {@target} is passed to the specified function, along with any arguments and block.
    # This allows a method-based DSL without adding methods to the defined class.
    class DefinedObjectProxy
      # The object which will be defined by definition functions
      attr_reader :target

      def initialize(target)
        @target = target
        @dictionary = target.class.dictionary
      end

      # Provides shorthand access to GraphQL's built-in types
      def types
        GraphQL::Define::TypeDefiner.instance
      end

      # Allow `plugin` to perform complex initialization on the definition.
      # Calls `plugin.use(defn, **kwargs)`.
      # @param plugin [<#use(defn, **kwargs)>] A plugin object
      # @param kwargs [Hash] Any options for the plugin
      def use(plugin, **kwargs)
        # https://bugs.ruby-lang.org/issues/10708
        if kwargs == {}
          plugin.use(self)
        else
          plugin.use(self, **kwargs)
        end
      end

      # Lookup a function from the dictionary and call it if it's found.
      def method_missing(name, *args, &block)
        definition = @dictionary[name]
        if definition
          definition.call(@target, *args, &block)
        else
          msg = "#{@target.class.name} can't define '#{name}'"
          raise NoDefinitionError, msg, caller
        end
      end

      def respond_to_missing?(name, include_private = false)
        @dictionary[name] || super
      end
    end
  end
end

Version data entries

74 entries across 74 versions & 1 rubygems

Version Path
graphql-1.8.17 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.16 lib/graphql/define/defined_object_proxy.rb
graphql-1.9.1 lib/graphql/define/defined_object_proxy.rb
graphql-1.9.0 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.15 lib/graphql/define/defined_object_proxy.rb
graphql-1.9.0.pre4 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.14 lib/graphql/define/defined_object_proxy.rb
graphql-1.9.0.pre3 lib/graphql/define/defined_object_proxy.rb
graphql-1.9.0.pre2 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.13 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.12 lib/graphql/define/defined_object_proxy.rb
graphql-1.9.0.pre1 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.11 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.10 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.9 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.8 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.7 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.6 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.5 lib/graphql/define/defined_object_proxy.rb
graphql-1.8.4 lib/graphql/define/defined_object_proxy.rb