Class: Graphiti::Runner

Inherits:
Object show all
Defined in:
lib/graphiti/runner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource_class, params, query = nil, action = nil) ⇒ Runner

Returns a new instance of Runner.



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

def initialize(resource_class, params, query = nil, action = nil)
  @resource_class = resource_class
  @params = params
  @query = query
  @action = action

  validator = RequestValidator.new(jsonapi_resource, params)

  validator.validate!

  @deserialized_payload = validator.deserialized_payload
end

Instance Attribute Details

#deserialized_payloadObject (readonly)

Returns the value of attribute deserialized_payload.



4
5
6
# File 'lib/graphiti/runner.rb', line 4

def deserialized_payload
  @deserialized_payload
end

#paramsObject (readonly)

Returns the value of attribute params.



3
4
5
# File 'lib/graphiti/runner.rb', line 3

def params
  @params
end

Instance Method Details

#jsonapi_contextObject

Typically, this is ‘self’ of a controller We’re overriding here so we can do stuff like

Graphiti.with_context my_context, {} do

Runner.new ...

end



29
30
31
# File 'lib/graphiti/runner.rb', line 29

def jsonapi_context
  Graphiti.context[:object]
end

#jsonapi_render_optionsObject



51
52
53
54
55
56
57
58
# File 'lib/graphiti/runner.rb', line 51

def jsonapi_render_options
  options = {}
  options.merge!(default_jsonapi_render_options)
  options[:meta] ||= {}
  options[:expose] ||= {}
  options[:expose][:context] = jsonapi_context
  options
end

#jsonapi_resourceObject



19
20
21
# File 'lib/graphiti/runner.rb', line 19

def jsonapi_resource
  @jsonapi_resource ||= @resource_class.new
end

#jsonapi_scope(scope, opts = {}) ⇒ Object



47
48
49
# File 'lib/graphiti/runner.rb', line 47

def jsonapi_scope(scope, opts = {})
  jsonapi_resource.build_scope(scope, query, opts)
end

#proxy(base = nil, opts = {}) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/graphiti/runner.rb', line 60

def proxy(base = nil, opts = {})
  base ||= jsonapi_resource.base_scope
  scope_opts = opts.slice :sideload_parent_length,
    :default_paginate,
    :after_resolve,
    :sideload,
    :parent,
    :params,
    :bypass_required_filters
  scope = jsonapi_scope(base, scope_opts)
  ResourceProxy.new jsonapi_resource,
    scope,
    query,
    payload: deserialized_payload,
    single: opts[:single],
    raise_on_missing: opts[:raise_on_missing]
end

#queryObject



33
34
35
# File 'lib/graphiti/runner.rb', line 33

def query
  @query ||= Query.new(jsonapi_resource, params, nil, nil, [], @action)
end

#query_hashObject



37
38
39
# File 'lib/graphiti/runner.rb', line 37

def query_hash
  @query_hash ||= query.hash
end

#wrap_contextObject



41
42
43
44
45
# File 'lib/graphiti/runner.rb', line 41

def wrap_context
  Graphiti.with_context(jsonapi_context, action_name.to_sym) do
    yield
  end
end