Skip to content

Commit bbacf6f

Browse files
committed
Ensure callbacks are run, add new :assign callback key for attributes callback
1 parent 11358b7 commit bbacf6f

File tree

5 files changed

+28
-27
lines changed

5 files changed

+28
-27
lines changed

lib/graphiti/resource/interface.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,14 @@ def build(params, base_scope = nil)
5050
validate_request!(params)
5151
runner = Runner.new(self, params)
5252
runner.proxy(base_scope, single: true, raise_on_missing: true).tap do |instance|
53-
instance.assign_attributes # assign the params to the underlying model
53+
instance.assign_attributes(params) # assign the params to the underlying model
54+
end
55+
end
56+
57+
def load(models, base_scope = nil)
58+
runner = Runner.new(self, {}, base_scope, :find)
59+
runner.proxy(nil, bypass_required_filters: true).tap do |r|
60+
r.data = models
5461
end
5562
end
5663

lib/graphiti/resource/persistence.rb

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ module Persistence
44
extend ActiveSupport::Concern
55

66
class_methods do
7-
def before_attributes(method = nil, only: [:create, :update], &blk)
7+
def before_attributes(method = nil, only: [:create, :update, :assign], &blk)
88
add_callback(:attributes, :before, method, only, &blk)
99
end
1010

11-
def after_attributes(method = nil, only: [:create, :update], &blk)
11+
def after_attributes(method = nil, only: [:create, :update, :assign], &blk)
1212
add_callback(:attributes, :after, method, only, &blk)
1313
end
1414

@@ -69,13 +69,13 @@ def add_callback(kind, lifecycle, method, only, &blk)
6969
end
7070
end
7171

72-
def assign(assign_params, meta = nil)
72+
def assign(assign_params, meta = nil, action_name = nil)
7373
id = assign_params[:id]
7474
assign_params = assign_params.except(:id)
7575
model_instance = nil
7676

77-
run_callbacks :attributes, :assign, assign_params, meta do |params|
78-
model_instance = if meta[:method] == :update && id
77+
run_callbacks :attributes, action_name, assign_params, meta do |params|
78+
model_instance = if action_name != :create && id
7979
self.class._find(id: id).data
8080
else
8181
call_with_meta(:build, model, meta)
@@ -91,11 +91,7 @@ def create(create_params, meta = nil)
9191
model_instance = nil
9292

9393
run_callbacks :persistence, :create, create_params, meta do
94-
run_callbacks :attributes, :create, create_params, meta do |params|
95-
model_instance = call_with_meta(:build, model, meta)
96-
call_with_meta(:assign_attributes, model_instance, params, meta)
97-
model_instance
98-
end
94+
model_instance = assign(create_params, meta, :create)
9995

10096
run_callbacks :save, :create, model_instance, meta do
10197
model_instance = call_with_meta(:save, model_instance, meta)
@@ -107,15 +103,9 @@ def create(create_params, meta = nil)
107103

108104
def update(update_params, meta = nil)
109105
model_instance = nil
110-
id = update_params[:id]
111-
update_params = update_params.except(:id)
112106

113107
run_callbacks :persistence, :update, update_params, meta do
114-
run_callbacks :attributes, :update, update_params, meta do |params|
115-
model_instance = self.class._find(id: id).data
116-
call_with_meta(:assign_attributes, model_instance, params, meta)
117-
model_instance
118-
end
108+
model_instance = assign(update_params, meta, :update)
119109

120110
run_callbacks :save, :update, model_instance, meta do
121111
model_instance = call_with_meta(:save, model_instance, meta)

lib/graphiti/resource_proxy.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ def initialize(resource, scope, query,
99
single: false,
1010
raise_on_missing: false,
1111
cache: nil,
12-
cache_expires_in: nil)
12+
cache_expires_in: nil,
13+
data: nil)
1314

1415
@resource = resource
1516
@scope = scope
@@ -74,6 +75,11 @@ def as_graphql(options = {})
7475
Renderer.new(self, options).as_graphql
7576
end
7677

78+
def data=(models)
79+
@data = data
80+
[@data].flatten.compact.each { |r| @resource.decorate_record(r) }
81+
end
82+
7783
def data
7884
@data ||= begin
7985
records = @scope.resolve
@@ -123,7 +129,7 @@ def assign_attributes(params = nil)
123129
@data = @resource.assign_with_relationships(
124130
@payload.meta,
125131
@payload.attributes,
126-
@payload.relationships,
132+
@payload.relationships
127133
)
128134
end
129135

@@ -177,7 +183,6 @@ def destroy
177183

178184
def update
179185
resolve_data
180-
assign_attributes
181186
save(action: :update)
182187
end
183188

lib/graphiti/runner.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ def proxy(base = nil, opts = {})
7272
single: opts[:single],
7373
raise_on_missing: opts[:raise_on_missing],
7474
cache: opts[:cache],
75-
cache_expires_in: opts[:cache_expires_in]
75+
cache_expires_in: opts[:cache_expires_in],
76+
data: opts[:data]
7677
end
7778
end
7879
end

lib/graphiti/util/persistence.rb

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ def initialize(resource, meta, attributes, relationships, caller_model, foreign_
2626

2727
def assign
2828
attributes = @adapter.persistence_attributes(self, @attributes)
29-
@assigned = call_resource_method(:assign, attributes, @caller_model)
30-
@resource.decorate_record(@assigned)
29+
assigned = @resource.assign(attributes, @meta, :assign)
30+
@resource.decorate_record(assigned)
3131

32-
@assigned
32+
assigned
3333
end
3434

3535
# Perform the actual save logic.
@@ -58,8 +58,6 @@ def run
5858
persisted = persist_object(@meta[:method], attributes)
5959
@resource.decorate_record(persisted)
6060

61-
return persisted if @meta[:method] == :assign
62-
6361
assign_temp_id(persisted, @meta[:temp_id])
6462
associate_parents(persisted, parents)
6563

0 commit comments

Comments
 (0)