class Gearhead::Actions::Index

Attributes

gear[R]
request[R]
scope[R]

Public Class Methods

build(gear, request) click to toggle source
# File lib/gearhead/actions/index.rb, line 6
def self.build(gear, request)
  new(gear, request).build
end
new(gear, request) click to toggle source
# File lib/gearhead/actions/index.rb, line 11
def initialize(gear, request)
  @gear = gear
  @request = request
  @collection = find_collection
  @serializer_options = {}
end

Public Instance Methods

build() click to toggle source
# File lib/gearhead/actions/index.rb, line 18
def build
  @collection = apply_includes
  @collection = apply_scope
  @collection = apply_query
  @collection = apply_pagination
  @collection = apply_serializer
  @collection.to_json
end

Private Instance Methods

apply_includes() click to toggle source
# File lib/gearhead/actions/index.rb, line 33
def apply_includes
  return @collection if @gear._gear_includes.nil?
  @collection.includes(@gear._gear_includes)
end
apply_pagination() click to toggle source
# File lib/gearhead/actions/index.rb, line 62
def apply_pagination
  return @collection unless @gear.paginate?

  paginator = ::Gearhead::Paginators::Paginator.paginate(@collection, self).call
  @collection = paginator.collection
  @serialization_options = paginator.serialization_options

  @collection
end
apply_query() click to toggle source
# File lib/gearhead/actions/index.rb, line 56
def apply_query
  return @collection unless params[:q].present?

  @collection.ransack(params[:q]).result
end
apply_scope() click to toggle source
# File lib/gearhead/actions/index.rb, line 38
def apply_scope
  return @collection unless valid_scope?(scope)
  if query = @gear._gear_defined_scopes[scope.to_sym].presence
    query.call(@collection)
  else
    @collection.send(scope)
  end
end
apply_serializer() click to toggle source
# File lib/gearhead/actions/index.rb, line 72
def apply_serializer
  @gear.collection_serializer.for(@collection, @gear.serializer_class, serialization_options)
end
find_collection() click to toggle source
# File lib/gearhead/actions/index.rb, line 29
def find_collection
  @gear.resource.all
end
serialization_options() click to toggle source
# File lib/gearhead/actions/index.rb, line 76
def serialization_options
  {
      links: {
          first: @serialization_options[:first_url],
          last: @serialization_options[:last_url],
          prev: @serialization_options[:prev_url],
          next: @serialization_options[:next_url]
      }
  }
end
valid_scope?(scope) click to toggle source
# File lib/gearhead/actions/index.rb, line 51
def valid_scope?(scope)
  return false if scope.nil?
  @gear._gear_defined_scopes.key?(scope.to_sym)
end