Class: Graphiti::Scoping::DefaultFilter

Inherits:
Base show all
Includes:
Filterable
Defined in:
lib/graphiti/scoping/default_filter.rb

Overview

Default filters apply to every request, unless specifically overridden in the request.

Maybe we only want to show active posts:

class PostResource < ApplicationResource
  # ... code ...
  default_filter :active do |scope|
    scope.where(active: true)
  end
end

But if the user is an admin and specifically requests inactive posts:

class PostResource < ApplicationResource
  # ... code ...
  allow_filter :active, if: admin?

  default_filter :active do |scope|
    scope.where(active: true)
  end
end

# Now a GET /posts?filter[active]=false will return inactive posts
# if the user is an admin.

See Also:

  • Resource.default_filter
  • Resource.allow_filter

Instance Attribute Summary

Attributes inherited from Base

#query_hash, #resource

Instance Method Summary collapse

Methods included from Filterable

#dependent_filters, #filter_param, #find_filter, #find_filter!, #missing_dependent_filters, #missing_required_filters, #required_filters

Methods inherited from Base

#apply?, #apply_custom_scope, #apply_standard_scope, #initialize

Constructor Details

This class inherits a constructor from Graphiti::Scoping::Base

Instance Method Details

#applyObject

Apply the default filtering logic. Loop through each defined default filter, and apply the default proc unless an explicit override is requested

Returns:

  • scope the scope object we are chaining/modifying



38
39
40
41
42
43
44
45
# File 'lib/graphiti/scoping/default_filter.rb', line 38

def apply
  resource.default_filters.each_pair do |name, opts|
    next if overridden?(name)
    @scope = resource.instance_exec(@scope, resource.context, &opts[:filter])
  end

  @scope
end