Class: Graphiti::Runner

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

Direct Known Subclasses

SpecHelpers::TestRunner

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource_class, params, *positional, query: nil, action: nil) ⇒ Runner

Returns a new instance of Runner.



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

def initialize(resource_class, params, *positional, query: nil, action: nil)
  if positional.any?
    Graphiti::DEPRECATOR.warn("Passing query/action to Runner.new positionally is deprecated. Use query:/action: keywords.")
    query ||= positional[0]
    action ||= positional[1]
  end

  @resource_class = resource_class
  @params = params
  @query = query
  @action = action
  validator = RequestValidator.new(jsonapi_resource, params, action)
  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



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

def jsonapi_context
  Graphiti.context[:object]
end

#jsonapi_render_optionsObject



55
56
57
58
59
60
61
62
# File 'lib/graphiti/runner.rb', line 55

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

#jsonapi_resourceObject



23
24
25
# File 'lib/graphiti/runner.rb', line 23

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

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



51
52
53
# File 'lib/graphiti/runner.rb', line 51

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

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



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/graphiti/runner.rb', line 64

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)

  ::Graphiti::ResourceProxy.new(
    jsonapi_resource,
    scope,
    query,
    payload: deserialized_payload,
    single: opts[:single],
    raise_on_missing: opts[:raise_on_missing],
    assign_action: opts[:assign_action],
    cache: opts[:cache],
    cache_expires_in: opts[:cache_expires_in],
    cache_tag: opts[:cache_tag]
  )
end

#queryObject



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

def query
  @query ||= Query.new(jsonapi_resource, params, action: @action)
end

#query_hashObject



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

def query_hash
  @query_hash ||= query.hash
end

#wrap_contextObject



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

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