Sha256: 1959e79910dc53f4168e0d8b237c927777c962ac2d28f927c26c975e468e3e4a

Contents?: true

Size: 1.26 KB

Versions: 5

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

module GraphQL
  class Field
    NoGuardError = Class.new(StandardError)

    def guard(*args)
      raise NoGuardError.new("Get your field by calling: Type.field_with_guard('#{name}')") unless @__guard_type
      guard_proc = @__guard_object.guard_proc(@__guard_type, self)
      raise NoGuardError.new("Guard lambda does not exist for #{@__guard_type}.#{name}") unless guard_proc

      guard_proc.call(*args)
    end

    def __policy_object=(policy_object)
      @__policy_object = policy_object
      @__guard_object = GraphQL::Guard.new(policy_object: policy_object)
    end

    def __guard_type=(guard_type)
      @__guard_type = guard_type
    end
  end

  class ObjectType
    def field_with_guard(field_name, policy_object = nil)
      field = get_field(field_name)
      return unless field

      field.clone.tap do |f|
        f.__policy_object = policy_object
        f.__guard_type = self
      end
    end
  end

  class Schema
    class Object
      def self.field_with_guard(field_name, policy_object = nil)
        field = fields[field_name]
        return unless field

        field.to_graphql.clone.tap do |f|
          f.__policy_object = policy_object
          f.__guard_type = self.to_graphql
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
graphql-guard-1.3.1 lib/graphql/guard/testing.rb
graphql-guard-1.3.0 lib/graphql/guard/testing.rb
graphql-guard-1.2.2 lib/graphql/guard/testing.rb
graphql-guard-1.2.1 lib/graphql/guard/testing.rb
graphql-guard-1.2.0 lib/graphql/guard/testing.rb