Module: Graphiti::Resource::Persistence
- Extended by:
- ActiveSupport::Concern
- Included in:
- Graphiti::Resource
- Defined in:
- lib/graphiti/resource/persistence.rb
Instance Attribute Summary collapse
-
#assigned_model ⇒ Object
readonly
The model built by a prior ResourceProxy#assign_attributes, present for the duration of the save that persists it.
Instance Method Summary collapse
-
#assign(assign_params, meta = nil, action_name = nil, model_instance: nil) ⇒ Object
model_instanceis the already-built model from a previous #assign (see ResourceProxy#assign_attributes). - #assign_attributes(model_instance, update_params, meta = nil) ⇒ Object
- #build(model, meta = nil) ⇒ Object
-
#create(create_params, meta = nil) ⇒ Object
Attributes are assigned before the persistence callbacks fire, so around_persistence receives the assigned model - its pre-yield position is the last chance to touch the model before save, inside the transaction.
- #decode_foreign_keys(assign_params) ⇒ Object
- #delete(model_instance, meta = nil) ⇒ Object
- #destroy(id, meta = nil) ⇒ Object
- #save(model_instance, meta = nil) ⇒ Object
- #unresolvable_id_errors(assign_params) ⇒ Object
- #update(update_params, meta = nil) ⇒ Object
- #with_assigned_model(model) ⇒ Object private
Instance Attribute Details
#assigned_model ⇒ Object (readonly)
The model built by a prior ResourceProxy#assign_attributes, present for the duration of the save that persists it
106 107 108 |
# File 'lib/graphiti/resource/persistence.rb', line 106 def assigned_model @assigned_model end |
Instance Method Details
#assign(assign_params, meta = nil, action_name = nil, model_instance: nil) ⇒ Object
model_instance is the already-built model from a previous #assign
(see ResourceProxy#assign_attributes). When given, attributes are
applied to it rather than to a freshly built/found model.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/graphiti/resource/persistence.rb', line 75 def assign(assign_params, = nil, action_name = nil, model_instance: nil) # Only update strips :id (it identifies the record to find) - a create # payload may legitimately carry a client-supplied id to assign. if action_name == :update id = assign_params[:id] assign_params = assign_params.except(:id) elsif assign_params.key?(:id) && (public_id = self.class.config[:public_id]) assign_params = assign_params.except(:id).merge(public_id => assign_params[:id]) elsif assign_params.key?(:id) && self.class.config[:public_id_decode] primary_key = self.class.decode_public_id(assign_params[:id]) raise Errors::ConflictRequest, unresolvable_id_errors(assign_params) if primary_key.nil? assign_params = assign_params.except(:id).merge(self.class.model_primary_key => primary_key) end assign_params = decode_foreign_keys(assign_params) run_callbacks :attributes, action_name, assign_params, do |params| model_instance ||= if action_name == :update self.class._find(id: id).data else (:build, model, ) end (:assign_attributes, model_instance, params, ) model_instance end model_instance end |
#assign_attributes(model_instance, update_params, meta = nil) ⇒ Object
181 182 183 |
# File 'lib/graphiti/resource/persistence.rb', line 181 def assign_attributes(model_instance, update_params, = nil) adapter.assign_attributes(model_instance, update_params) end |
#build(model, meta = nil) ⇒ Object
177 178 179 |
# File 'lib/graphiti/resource/persistence.rb', line 177 def build(model, = nil) adapter.build(model) end |
#create(create_params, meta = nil) ⇒ Object
Attributes are assigned before the persistence callbacks fire, so around_persistence receives the assigned model - its pre-yield position is the last chance to touch the model before save, inside the transaction. Modify attributes in before_attributes instead.
120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/graphiti/resource/persistence.rb', line 120 def create(create_params, = nil) model_instance = assigned_model || assign(create_params, , :create) run_callbacks :persistence, :create, model_instance, do run_callbacks :save, :create, model_instance, do model_instance = (:save, model_instance, ) end model_instance end model_instance end |
#decode_foreign_keys(assign_params) ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/graphiti/resource/persistence.rb', line 134 def decode_foreign_keys(assign_params) return assign_params unless Graphiti.public_ids_declared? assign_params.each_with_object({}) do |(name, value), decoded| source = (name == :id || value.nil?) ? nil : self.class.public_id_source_for(name) decoded[name] = if value.is_a?(Util::InternalParam) value.value elsif source source.decode_public_id(value.to_s) or raise Errors::RecordNotFound.new(source.type, value, name) else value end end end |
#delete(model_instance, meta = nil) ⇒ Object
189 190 191 |
# File 'lib/graphiti/resource/persistence.rb', line 189 def delete(model_instance, = nil) adapter.destroy(model_instance) end |
#destroy(id, meta = nil) ⇒ Object
169 170 171 172 173 174 175 |
# File 'lib/graphiti/resource/persistence.rb', line 169 def destroy(id, = nil) model_instance = self.class._find(id: id).data run_callbacks :destroy, :destroy, model_instance, do (:delete, model_instance, ) end model_instance end |
#save(model_instance, meta = nil) ⇒ Object
185 186 187 |
# File 'lib/graphiti/resource/persistence.rb', line 185 def save(model_instance, = nil) adapter.save(model_instance) end |
#unresolvable_id_errors(assign_params) ⇒ Object
149 150 151 152 153 |
# File 'lib/graphiti/resource/persistence.rb', line 149 def unresolvable_id_errors(assign_params) Util::SimpleErrors.new(assign_params).tap do |errors| errors.add("data.id", :unresolvable, message: "does not name a record of this resource") end end |
#update(update_params, meta = nil) ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/graphiti/resource/persistence.rb', line 155 def update(update_params, = nil) model_instance = assigned_model || assign(update_params, , :update) run_callbacks :persistence, :update, model_instance, do run_callbacks :save, :update, model_instance, do model_instance = (:save, model_instance, ) end model_instance end model_instance end |
#with_assigned_model(model) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
109 110 111 112 113 114 |
# File 'lib/graphiti/resource/persistence.rb', line 109 def with_assigned_model(model) @assigned_model = model yield ensure @assigned_model = nil end |