Class: Graphiti::ResourceProxy
- Includes:
- Enumerable
- Defined in:
- lib/graphiti/resource_proxy.rb
Instance Attribute Summary collapse
-
#payload ⇒ Object
readonly
Returns the value of attribute payload.
-
#query ⇒ Object
readonly
Returns the value of attribute query.
-
#resource ⇒ Object
readonly
Returns the value of attribute resource.
-
#scope ⇒ Object
readonly
Returns the value of attribute scope.
Instance Method Summary collapse
- #[](val) ⇒ Object
- #as_graphql(options = {}) ⇒ Object
- #as_json(options = {}) ⇒ Object
- #data ⇒ Object (also: #to_a)
- #debug_requested? ⇒ Boolean
- #destroy ⇒ Object
- #each(&blk) ⇒ Object
- #errors ⇒ Object
- #extra_fields ⇒ Object
- #fields ⇒ Object
- #include_hash ⇒ Object
-
#initialize(resource, scope, query, payload: nil, single: false, raise_on_missing: false) ⇒ ResourceProxy
constructor
A new instance of ResourceProxy.
- #jsonapi_render_options(opts = {}) ⇒ Object
- #meta ⇒ Object
- #pagination ⇒ Object
- #raise_on_missing? ⇒ Boolean
- #save(action: :create) ⇒ Object
- #single? ⇒ Boolean
- #stats ⇒ Object
- #to_graphql(options = {}) ⇒ Object
- #to_json(options = {}) ⇒ Object
- #to_jsonapi(options = {}) ⇒ Object
- #to_xml(options = {}) ⇒ Object
- #update_attributes ⇒ Object
Constructor Details
#initialize(resource, scope, query, payload: nil, single: false, raise_on_missing: false) ⇒ ResourceProxy
Returns a new instance of ResourceProxy.
7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/graphiti/resource_proxy.rb', line 7 def initialize(resource, scope, query, payload: nil, single: false, raise_on_missing: false) @resource = resource @scope = scope @query = query @payload = payload @single = single @raise_on_missing = raise_on_missing end |
Instance Attribute Details
#payload ⇒ Object (readonly)
Returns the value of attribute payload.
5 6 7 |
# File 'lib/graphiti/resource_proxy.rb', line 5 def payload @payload end |
#query ⇒ Object (readonly)
Returns the value of attribute query.
5 6 7 |
# File 'lib/graphiti/resource_proxy.rb', line 5 def query @query end |
#resource ⇒ Object (readonly)
Returns the value of attribute resource.
5 6 7 |
# File 'lib/graphiti/resource_proxy.rb', line 5 def resource @resource end |
#scope ⇒ Object (readonly)
Returns the value of attribute scope.
5 6 7 |
# File 'lib/graphiti/resource_proxy.rb', line 5 def scope @scope end |
Instance Method Details
#[](val) ⇒ Object
31 32 33 |
# File 'lib/graphiti/resource_proxy.rb', line 31 def [](val) data[val] end |
#as_graphql(options = {}) ⇒ Object
62 63 64 |
# File 'lib/graphiti/resource_proxy.rb', line 62 def as_graphql( = {}) Renderer.new(self, ).as_graphql end |
#as_json(options = {}) ⇒ Object
50 51 52 |
# File 'lib/graphiti/resource_proxy.rb', line 50 def as_json( = {}) Renderer.new(self, ).as_json end |
#data ⇒ Object Also known as: to_a
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/graphiti/resource_proxy.rb', line 66 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 |
#debug_requested? ⇒ Boolean
170 171 172 |
# File 'lib/graphiti/resource_proxy.rb', line 170 def debug_requested? query.debug_requested? end |
#destroy ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/graphiti/resource_proxy.rb', line 132 def destroy data transaction_response = @resource.transaction do = {method: :destroy} model = @resource.destroy(@query.filters[:id], ) model.instance_variable_set(:@__serializer_klass, @resource.serializer) @resource.after_graph_persist(model, ) validator = ::Graphiti::Util::ValidationResponse.new \ model, @payload validator.validate! @resource.before_commit(model, ) {result: validator} end @data, success = transaction_response[:result].to_a success end |
#each(&blk) ⇒ Object
82 83 84 |
# File 'lib/graphiti/resource_proxy.rb', line 82 def each(&blk) to_a.each(&blk) end |
#errors ⇒ Object
27 28 29 |
# File 'lib/graphiti/resource_proxy.rb', line 27 def errors data.errors end |
#extra_fields ⇒ Object
166 167 168 |
# File 'lib/graphiti/resource_proxy.rb', line 166 def extra_fields query.extra_fields end |
#fields ⇒ Object
162 163 164 |
# File 'lib/graphiti/resource_proxy.rb', line 162 def fields query.fields end |
#include_hash ⇒ Object
155 156 157 158 159 160 |
# File 'lib/graphiti/resource_proxy.rb', line 155 def include_hash @include_hash ||= begin base = @payload ? @payload.include_hash : {} base.deep_merge(@query.include_hash) end end |
#jsonapi_render_options(opts = {}) ⇒ Object
35 36 37 38 39 |
# File 'lib/graphiti/resource_proxy.rb', line 35 def (opts = {}) opts[:expose] ||= {} opts[:expose][:context] = Graphiti.context[:object] opts end |
#meta ⇒ Object
78 79 80 |
# File 'lib/graphiti/resource_proxy.rb', line 78 def @meta ||= data.respond_to?(:meta) ? data. : {} end |
#pagination ⇒ Object
98 99 100 |
# File 'lib/graphiti/resource_proxy.rb', line 98 def pagination @pagination ||= Delegates::Pagination.new(self) end |
#raise_on_missing? ⇒ Boolean
23 24 25 |
# File 'lib/graphiti/resource_proxy.rb', line 23 def raise_on_missing? !!@raise_on_missing end |
#save(action: :create) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/graphiti/resource_proxy.rb', line 102 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.(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? ⇒ Boolean
19 20 21 |
# File 'lib/graphiti/resource_proxy.rb', line 19 def single? !!@single end |
#stats ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/graphiti/resource_proxy.rb', line 86 def stats @stats ||= if @query.hash[:stats] payload = Stats::Payload.new @resource, @query, @scope.unpaginated_object, data payload.generate else {} end end |
#to_graphql(options = {}) ⇒ Object
58 59 60 |
# File 'lib/graphiti/resource_proxy.rb', line 58 def to_graphql( = {}) Renderer.new(self, ).to_graphql end |
#to_json(options = {}) ⇒ Object
46 47 48 |
# File 'lib/graphiti/resource_proxy.rb', line 46 def to_json( = {}) Renderer.new(self, ).to_json end |
#to_jsonapi(options = {}) ⇒ Object
41 42 43 44 |
# File 'lib/graphiti/resource_proxy.rb', line 41 def to_jsonapi( = {}) = () Renderer.new(self, ).to_jsonapi end |
#to_xml(options = {}) ⇒ Object
54 55 56 |
# File 'lib/graphiti/resource_proxy.rb', line 54 def to_xml( = {}) Renderer.new(self, ).to_xml end |
#update_attributes ⇒ Object
150 151 152 153 |
# File 'lib/graphiti/resource_proxy.rb', line 150 def update_attributes data save(action: :update) end |