Class: JSONAPI::FindOperation

Inherits:
Operation show all
Defined in:
lib/jsonapi/operation.rb

Instance Attribute Summary collapse

Attributes inherited from Operation

#options, #resource_klass, #transactional

Instance Method Summary collapse

Constructor Details

#initialize(resource_klass, options = {}) ⇒ FindOperation

Returns a new instance of FindOperation.



19
20
21
22
23
24
25
26
# File 'lib/jsonapi/operation.rb', line 19

def initialize(resource_klass, options = {})
  @filters = options[:filters]
  @include_directives = options[:include_directives]
  @sort_criteria = options.fetch(:sort_criteria, [])
  @paginator = options[:paginator]
  @transactional = false
  super(resource_klass, options)
end

Instance Attribute Details

#filtersObject (readonly)

Returns the value of attribute filters.



17
18
19
# File 'lib/jsonapi/operation.rb', line 17

def filters
  @filters
end

#include_directivesObject (readonly)

Returns the value of attribute include_directives.



17
18
19
# File 'lib/jsonapi/operation.rb', line 17

def include_directives
  @include_directives
end

#paginatorObject (readonly)

Returns the value of attribute paginator.



17
18
19
# File 'lib/jsonapi/operation.rb', line 17

def paginator
  @paginator
end

#sort_criteriaObject (readonly)

Returns the value of attribute sort_criteria.



17
18
19
# File 'lib/jsonapi/operation.rb', line 17

def sort_criteria
  @sort_criteria
end

Instance Method Details

#applyObject



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

def apply
  resource_records = @resource_klass.find(@resource_klass.verify_filters(@filters, @context),
                                         context: @context,
                                         include_directives: @include_directives,
                                         sort_criteria: @sort_criteria,
                                         paginator: @paginator)

  options = {}
  if JSONAPI.configuration.top_level_links_include_pagination
    options[:pagination_params] = pagination_params
  end

  if JSONAPI.configuration.top_level_meta_include_record_count
    options[:record_count] = record_count
  end

  return JSONAPI::ResourcesOperationResult.new(:ok,
                                               resource_records,
                                               options)

rescue JSONAPI::Exceptions::Error => e
  return JSONAPI::ErrorsOperationResult.new(e.errors[0].code, e.errors)
end

#pagination_paramsObject



34
35
36
37
38
39
40
41
42
# File 'lib/jsonapi/operation.rb', line 34

def pagination_params
  if @paginator && JSONAPI.configuration.top_level_links_include_pagination
    options = {}
    options[:record_count] = record_count if @paginator.class.requires_record_count
    return @paginator.links_page_params(options)
  else
    return {}
  end
end

#record_countObject



28
29
30
31
32
# File 'lib/jsonapi/operation.rb', line 28

def record_count
  @_record_count ||= @resource_klass.find_count(@resource_klass.verify_filters(@filters, @context),
                                                 context: @context,
                                                 include_directives: @include_directives)
end