module GraphQR::BaseResolvers

The `BaseResolvers` module defines methods used by other extensions to define resolver classes. All resolvers defined by this module's methods inherit from `GraphQR::BaseResolver`.

Public Instance Methods

base_collection_resolver(type_class, scope_class) click to toggle source

The method defines and returns a resolver class meant for resolving a paginated ActiveRecordRelation. The returned class implements authorization, running the `PolicyProvider`'s' `index?` action and `authorized_records` scope.

The defined resolver does not implement `#unscoped_collection`. Define it before adding the query to the schema**

### Params:

type_class: the `GraphQL::Schema::Object` of the ActiveRecordRelation

scope_class: a `GraphQL::Schema::InputObject` which defines arguments to be used by `ApplyScopes` #### Example:

```
class ObjectScope < GraphQL::Schema::InputObject
  argument :with_relation_id, ID, required: false
  ...
end
```

### Example:

“` base_collection_resolver(ObjectType, ObjectScope) “`

# File lib/graphqr/base_resolvers.rb, line 33
def base_collection_resolver(type_class, scope_class)
  Class.new(GraphQR::BaseResolver) do
    type type_class.pagination_type, null: false

    argument :filter, scope_class, required: false if scope_class.present?

    def resolve(filter: {})
      authorize_graphql unscoped_collection, :index?

      collection = apply_scopes(unscoped_collection, filter)
      context[:policy_provider].authorized_records(records: collection)
    end

    def unscoped_collection
      raise NotImplementedError
    end
  end
end
base_resource_resolver(type_class) click to toggle source

The method defines and returns a resolver class meant for resolving a single ActiveRecord The returned class implements authorization, running the `PolicyProvider`'s' `show`

The defined resolver does not implement `#record`. Define it before adding the query to the schema**

### Params:

type_class: the `GraphQL::Schema::Object` of the ActiveRecord

### Example:

“` base_resource_resolver(ObjectType) “`

# File lib/graphqr/base_resolvers.rb, line 67
def base_resource_resolver(type_class)
  Class.new(GraphQR::BaseResolver) do
    type type_class, null: false

    def resolve
      context[:policy_provider].allowed?(action: :show?, record: record)

      record
    end

    def record
      raise NotImplementedError
    end
  end
end
record() click to toggle source
# File lib/graphqr/base_resolvers.rb, line 77
def record
  raise NotImplementedError
end
resolve(filter: {}) click to toggle source
# File lib/graphqr/base_resolvers.rb, line 39
def resolve(filter: {})
  authorize_graphql unscoped_collection, :index?

  collection = apply_scopes(unscoped_collection, filter)
  context[:policy_provider].authorized_records(records: collection)
end
unscoped_collection() click to toggle source
# File lib/graphqr/base_resolvers.rb, line 46
def unscoped_collection
  raise NotImplementedError
end