class Graphiti::ResourceProxy
Attributes
Public Class Methods
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
Source
# File lib/graphiti/resource_proxy.rb, line 73 def as_graphql(options = {}) Renderer.new(self, options).as_graphql end
Source
# File lib/graphiti/resource_proxy.rb, line 61 def as_json(options = {}) Renderer.new(self, options).as_json end
Source
# File lib/graphiti/resource_proxy.rb, line 24 def cache? !!@cache end
Also aliased as: cached?
Source
# File lib/graphiti/resource_proxy.rb, line 210 def cache_key ActiveSupport::Cache.expand_cache_key([@scope.cache_key, @query.cache_key]) end
Source
# File lib/graphiti/resource_proxy.rb, line 214 def cache_key_with_version ActiveSupport::Cache.expand_cache_key([@scope.cache_key_with_version, @query.cache_key]) end
Source
# File lib/graphiti/resource_proxy.rb, line 77 def data @data ||= begin records = @scope.resolve raise Graphiti::Errors::RecordNotFound if records.empty? && raise_on_missing? records = records[0] if single? records end end
Also aliased as: to_a, resolve_data
Source
# File lib/graphiti/resource_proxy.rb, line 198 def debug_requested? query.debug_requested? end
Source
# File lib/graphiti/resource_proxy.rb, line 158 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
Source
# File lib/graphiti/resource_proxy.rb, line 102 def each(&blk) to_a.each(&blk) end
Source
# File lib/graphiti/resource_proxy.rb, line 206 def etag "W/#{ActiveSupport::Digest.hexdigest(cache_key_with_version.to_s)}" end
Source
# File lib/graphiti/resource_proxy.rb, line 194 def extra_fields query.extra_fields end
Source
# File lib/graphiti/resource_proxy.rb, line 89 def future_resolve_data @scope.future_resolve.then do |records| raise Graphiti::Errors::RecordNotFound if records.empty? && raise_on_missing? records = records[0] if single? @data = records end end
Source
# File lib/graphiti/resource_proxy.rb, line 183 def include_hash @include_hash ||= begin base = @payload ? @payload.include_hash : {} base.deep_merge(@query.include_hash) end end
Source
# File lib/graphiti/resource_proxy.rb, line 46 def jsonapi_render_options(opts = {}) opts[:expose] ||= {} opts[:expose][:context] = Graphiti.context[:object] opts end
Source
# File lib/graphiti/resource_proxy.rb, line 98 def meta @meta ||= data.respond_to?(:meta) ? data.meta : {} end
Source
# File lib/graphiti/resource_proxy.rb, line 124 def pagination @pagination ||= Delegates::Pagination.new(self) end
Source
# File lib/graphiti/resource_proxy.rb, line 34 def raise_on_missing? !!@raise_on_missing end
Source
# File lib/graphiti/resource_proxy.rb, line 128 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
Source
# File lib/graphiti/resource_proxy.rb, line 106 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
Source
# File lib/graphiti/resource_proxy.rb, line 69 def to_graphql(options = {}) Renderer.new(self, options).to_graphql end
Source
# File lib/graphiti/resource_proxy.rb, line 57 def to_json(options = {}) Renderer.new(self, options).to_json end
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
Source
# File lib/graphiti/resource_proxy.rb, line 65 def to_xml(options = {}) Renderer.new(self, options).to_xml end
Source
# File lib/graphiti/resource_proxy.rb, line 176 def update resolve_data save(action: :update) end
Also aliased as: update_attributes
Source
# File lib/graphiti/resource_proxy.rb, line 202 def updated_at @scope.updated_at end
Private Instance Methods
Source
# File lib/graphiti/resource_proxy.rb, line 220 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