Sha256: 8d052f9e055a6c8f794bf0dc8c41944520aa1f22d31339b1274b49bb38b5f479

Contents?: true

Size: 1.59 KB

Versions: 19

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 NoMethodError, msg, caller
        end
      end

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

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
graphql-1.6.4 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.15 lib/graphql/define/defined_object_proxy.rb
graphql-1.6.3 lib/graphql/define/defined_object_proxy.rb
graphql-1.6.2 lib/graphql/define/defined_object_proxy.rb
graphql-1.6.1 lib/graphql/define/defined_object_proxy.rb
graphql-1.6.0 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.14 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.13 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.7.1 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.12 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.11 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.10 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.9 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.8 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.7 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.6 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.5 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.4 lib/graphql/define/defined_object_proxy.rb
graphql-1.5.3 lib/graphql/define/defined_object_proxy.rb