Class: Jsonapi::QueryBuilder::BaseQuery

Inherits:
Object
  • Object
show all
Includes:
Mixins::Filter, Mixins::Include, Mixins::Paginate, Mixins::Sort
Defined in:
lib/jsonapi/query_builder/base_query.rb

Constant Summary

Constants included from Mixins::Sort

Mixins::Sort::UnpermittedSortParameters

Instance Attribute Summary collapse

Attributes included from Mixins::Paginate

#pagination_details

Instance Method Summary collapse

Methods included from Mixins::Sort

#sort

Methods included from Mixins::Paginate

#paginate

Methods included from Mixins::Include

#add_includes

Methods included from Mixins::Filter

#filter

Constructor Details

#initialize(collection, params) ⇒ BaseQuery

Returns a new instance of BaseQuery.

Parameters:

  • collection (ActiveRecord::Relation)
  • params (Hash)

    Json:Api query parameters



20
21
22
23
# File 'lib/jsonapi/query_builder/base_query.rb', line 20

def initialize(collection, params)
  @collection = collection
  @params = params.deep_symbolize_keys
end

Instance Attribute Details

#collectionObject

Returns the value of attribute collection.



16
17
18
# File 'lib/jsonapi/query_builder/base_query.rb', line 16

def collection
  @collection
end

#paramsObject

Returns the value of attribute params.



16
17
18
# File 'lib/jsonapi/query_builder/base_query.rb', line 16

def params
  @params
end

Instance Method Details

#find(id) ⇒ Object

Parameters:

  • id (integer, string)

Returns:

  • (Object)

Raises:

  • (ActiveRecord::RecordNotFound)

    if the record by the id is not found



39
40
41
# File 'lib/jsonapi/query_builder/base_query.rb', line 39

def find(id)
  find_by! id: id
end

#find_by!(**kwargs) ⇒ Object

Parameters:

  • kwargs (Hash)

    Attributes with required values

Returns:

  • (Object)

Raises:

  • (ActiveRecord::RecordNotFound)

    if the record by the arguments is not found



53
54
55
# File 'lib/jsonapi/query_builder/base_query.rb', line 53

def find_by!(**kwargs)
  add_includes(collection).find_by!(kwargs)
end

#recordObject

Finds the record by the id parameter the class is instantiated with

Returns:

  • (Object)

Raises:

  • (ActiveRecord::RecordNotFound)

    if the record by the id is not found



46
47
48
# File 'lib/jsonapi/query_builder/base_query.rb', line 46

def record
  find_by! id: params[:id]
end

#resultsActiveRecord::Relation

Note:

Pagination details are saved to an instance variable and can be accessed via the #pagination_details attribute reader

Returns A collection with eager loaded relationships based on include params, filtered, ordered and lastly, paginated.

Returns:

  • (ActiveRecord::Relation)

    A collection with eager loaded relationships based on include params, filtered, ordered and lastly, paginated.



28
29
30
31
32
33
34
# File 'lib/jsonapi/query_builder/base_query.rb', line 28

def results
  collection
    .yield_self(&method(:add_includes))
    .yield_self(&method(:sort))
    .yield_self(&method(:filter))
    .yield_self(&method(:paginate))
end