Class: JsonapiCompliable::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/jsonapi_compliable/query.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource, params) ⇒ Query

Returns a new instance of Query.



19
20
21
22
# File 'lib/jsonapi_compliable/query.rb', line 19

def initialize(resource, params)
  @resource = resource
  @params = params
end

Instance Attribute Details

#paramsObject (readonly)

Returns the value of attribute params.



5
6
7
# File 'lib/jsonapi_compliable/query.rb', line 5

def params
  @params
end

#resourceObject (readonly)

Returns the value of attribute resource.



5
6
7
# File 'lib/jsonapi_compliable/query.rb', line 5

def resource
  @resource
end

Class Method Details

.default_hashObject



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/jsonapi_compliable/query.rb', line 7

def self.default_hash
  {
    filter: {},
    sort: [],
    page: {},
    include: {},
    stats: {},
    fields: {},
    extra_fields: {}
  }
end

Instance Method Details

#association_namesObject



39
40
41
# File 'lib/jsonapi_compliable/query.rb', line 39

def association_names
  @association_names ||= Util::Hash.keys(include_hash)
end

#include_directiveObject



24
25
26
# File 'lib/jsonapi_compliable/query.rb', line 24

def include_directive
  @include_directive ||= JSONAPI::IncludeDirective.new(params[:include])
end

#include_hashObject



28
29
30
31
32
33
34
35
36
37
# File 'lib/jsonapi_compliable/query.rb', line 28

def include_hash
  @include_hash ||= begin
    requested     = include_directive.to_hash
    all_allowed   = resource.sideloading.to_hash[:base]
    whitelist     = resource.sideload_whitelist.values.reduce(:merge)
    allowed       = whitelist ? Util::IncludeParams.scrub(all_allowed, whitelist) : all_allowed

    Util::IncludeParams.scrub(requested, allowed)
  end
end

#to_hashObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/jsonapi_compliable/query.rb', line 43

def to_hash
  hash = { resource.type => self.class.default_hash }

  association_names.each do |name|
    hash[name] = self.class.default_hash
  end

  fields = parse_fields({}, :fields)
  extra_fields = parse_fields({}, :extra_fields)
  hash.each_pair do |type, query_hash|
    hash[type][:fields] = fields
    hash[type][:extra_fields] = extra_fields
  end

  parse_filter(hash)
  parse_sort(hash)
  parse_pagination(hash)

  parse_include(hash, include_hash, resource.type)
  parse_stats(hash)

  hash
end

#zero_results?Boolean

Returns:

  • (Boolean)


67
68
69
70
71
# File 'lib/jsonapi_compliable/query.rb', line 67

def zero_results?
  !@params[:page].nil? &&
    !@params[:page][:size].nil? &&
    @params[:page][:size].to_i == 0
end