Sha256: 63af28a00062b2430e0b4c536e24214c26f3586fc0db0f8d489f4b1d7ef02c88

Contents?: true

Size: 1.55 KB

Versions: 77

Compression:

Stored size: 1.55 KB

Contents

module Graphiti
  # 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 Resource.default_filter
  # @see Resource.allow_filter
  class Scoping::DefaultFilter < Scoping::Base
    include Scoping::Filterable

    # Apply the default filtering logic.
    # Loop through each defined default filter, and apply the default
    # proc unless an explicit override is requested
    #
    # @return scope the scope object we are chaining/modifying
    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

    private

    def overridden?(name)
      if (found = find_filter(name))
        found_aliases = found[name][:aliases]
        filter_param.keys.any? { |k| found_aliases.include?(k.to_sym) }
      else
        false
      end
    end
  end
end

Version data entries

77 entries across 77 versions & 1 rubygems

Version Path
graphiti-1.8.1 lib/graphiti/scoping/default_filter.rb
graphiti-1.8.0 lib/graphiti/scoping/default_filter.rb
graphiti-1.7.9 lib/graphiti/scoping/default_filter.rb
graphiti-1.7.8 lib/graphiti/scoping/default_filter.rb
graphiti-1.7.7 lib/graphiti/scoping/default_filter.rb
graphiti-1.7.6 lib/graphiti/scoping/default_filter.rb
graphiti-1.7.5 lib/graphiti/scoping/default_filter.rb
graphiti-1.7.4 lib/graphiti/scoping/default_filter.rb
graphiti-1.7.3 lib/graphiti/scoping/default_filter.rb
graphiti-1.7.2 lib/graphiti/scoping/default_filter.rb
graphiti-1.7.1 lib/graphiti/scoping/default_filter.rb
graphiti-1.7.0 lib/graphiti/scoping/default_filter.rb
graphiti-1.6.4 lib/graphiti/scoping/default_filter.rb
graphiti-1.6.3 lib/graphiti/scoping/default_filter.rb
graphiti-1.6.2 lib/graphiti/scoping/default_filter.rb
graphiti-1.6.1 lib/graphiti/scoping/default_filter.rb
graphiti-1.6.0 lib/graphiti/scoping/default_filter.rb
graphiti-1.5.3 lib/graphiti/scoping/default_filter.rb
graphiti-1.5.2 lib/graphiti/scoping/default_filter.rb
graphiti-1.5.1 lib/graphiti/scoping/default_filter.rb