class Graphiti::ResourceProxy
Attributes
cache[R]
cache_expires_in[R]
payload[R]
query[R]
resource[R]
scope[R]
Public Class Methods
new(resource, scope, query, payload: nil, single: false, raise_on_missing: false, cache: nil, cache_expires_in: nil)
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 7 def initialize(resource, scope, query, payload: nil, single: false, raise_on_missing: false, cache: nil, cache_expires_in: nil) @resource = resource @scope = scope @query = query @payload = payload @single = single @raise_on_missing = raise_on_missing @cache = cache @cache_expires_in = cache_expires_in end
Public Instance Methods
[](val)
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 42 def [](val) data[val] end
as_graphql(options = {})
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 73 def as_graphql(options = {}) Renderer.new(self, options).as_graphql end
as_json(options = {})
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 61 def as_json(options = {}) Renderer.new(self, options).as_json end
cache?()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 24 def cache? !!@cache end
Also aliased as: cached?
cache_key()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 202 def cache_key ActiveSupport::Cache.expand_cache_key([@scope.cache_key, @query.cache_key]) end
cache_key_with_version()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 206 def cache_key_with_version ActiveSupport::Cache.expand_cache_key([@scope.cache_key_with_version, @query.cache_key]) end
data()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 77 def data @data ||= begin records = @scope.resolve if records.empty? && raise_on_missing? raise Graphiti::Errors::RecordNotFound end records = records[0] if single? records end end
Also aliased as: to_a, resolve_data
debug_requested?()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 190 def debug_requested? query.debug_requested? end
destroy()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 150 def destroy resolve_data transaction_response = @resource.transaction do metadata = {method: :destroy} model = @resource.destroy(@query.filters[:id], metadata) model.instance_variable_set(:@__serializer_klass, @resource.serializer) @resource.after_graph_persist(model, metadata) validator = ::Graphiti::Util::ValidationResponse.new \ model, @payload validator.validate! @resource.before_commit(model, metadata) {result: validator} end @data, success = transaction_response[:result].to_a success end
each(&blk)
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 94 def each(&blk) to_a.each(&blk) end
errors()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 38 def errors data.errors end
etag()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 198 def etag "W/#{ActiveSupport::Digest.hexdigest(cache_key_with_version.to_s)}" end
extra_fields()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 186 def extra_fields query.extra_fields end
fields()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 182 def fields query.fields end
include_hash()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 175 def include_hash @include_hash ||= begin base = @payload ? @payload.include_hash : {} base.deep_merge(@query.include_hash) end end
jsonapi_render_options(opts = {})
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 46 def jsonapi_render_options(opts = {}) opts[:expose] ||= {} opts[:expose][:context] = Graphiti.context[:object] opts end
meta()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 90 def meta @meta ||= data.respond_to?(:meta) ? data.meta : {} end
pagination()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 116 def pagination @pagination ||= Delegates::Pagination.new(self) end
raise_on_missing?()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 34 def raise_on_missing? !!@raise_on_missing end
save(action: :create)
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 120 def save(action: :create) # TODO: remove this. Only used for persisting many-to-many with AR # (see activerecord adapter) original = Graphiti.context[:namespace] begin Graphiti.context[:namespace] = action ::Graphiti::RequestValidator.new(@resource, @payload.params, action).validate! validator = persist { @resource.persist_with_relationships \ @payload.meta(action: action), @payload.attributes, @payload.relationships } ensure Graphiti.context[:namespace] = original end @data, success = validator.to_a if success # If the context namespace is `update` or `create`, certain # adapters will cause N+1 validation calls, so lets explicitly # switch to a lookup context. Graphiti.with_context(Graphiti.context[:object], :show) do @scope.resolve_sideloads([@data]) end end success end
single?()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 30 def single? !!@single end
stats()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 98 def stats @stats ||= if @query.hash[:stats] scope = @scope.unpaginated_object if resource.adapter.can_group? if (group = @query.hash[:stats].delete(:group_by)) scope = resource.adapter.group(scope, group[0]) end end payload = Stats::Payload.new @resource, @query, scope, data payload.generate else {} end end
to_graphql(options = {})
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 69 def to_graphql(options = {}) Renderer.new(self, options).to_graphql end
to_json(options = {})
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 57 def to_json(options = {}) Renderer.new(self, options).to_json end
to_jsonapi(options = {})
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 52 def to_jsonapi(options = {}) options = jsonapi_render_options(options) Renderer.new(self, options).to_jsonapi end
to_xml(options = {})
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 65 def to_xml(options = {}) Renderer.new(self, options).to_xml end
update()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 168 def update resolve_data save(action: :update) end
Also aliased as: update_attributes
updated_at()
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 194 def updated_at @scope.updated_at end
Private Instance Methods
persist() { || ... }
click to toggle source
# File lib/graphiti/resource_proxy.rb, line 212 def persist transaction_response = @resource.transaction do ::Graphiti::Util::TransactionHooksRecorder.record do model = yield ::Graphiti::Util::TransactionHooksRecorder.run_graph_persist_hooks validator = ::Graphiti::Util::ValidationResponse.new \ model, @payload validator.validate! validator end end _data, success = transaction_response[:result].to_a if success transaction_response[:after_commit_hooks].each do |hook| hook.call end end transaction_response[:result] end