Sha256: 086a2b2d02ebffcdf08793b7176147010fbba0e54a0f01aba0a9df6f7d8b0826

Contents?: true

Size: 1.53 KB

Versions: 65

Compression:

Stored size: 1.53 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 = opts[:filter].call(@scope, resource.context)
      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

65 entries across 65 versions & 2 rubygems

Version Path
graphiti-1.0.rc.21 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.19 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.18 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.17 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.16 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.15 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.14 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.12 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.11 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.10 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.9 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.8 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.7 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.6 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.5 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.4 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.3 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.2 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.rc.1 lib/graphiti/scoping/default_filter.rb
graphiti-1.0.beta.23 lib/graphiti/scoping/default_filter.rb