deep_unrest 0.1.20 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/deep_unrest/application_controller.rb +10 -2
- data/lib/deep_unrest.rb +44 -35
- data/lib/deep_unrest/concerns/map_temp_ids.rb +22 -0
- data/lib/deep_unrest/concerns/null_concern.rb +1 -0
- data/lib/deep_unrest/engine.rb +1 -0
- data/lib/deep_unrest/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d956b080370fba60df6de844edcb1346763aa98f
|
4
|
+
data.tar.gz: 0126de558b0326faf98280030b1e6b32f8c208c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 096bde94abae1571026d1664dfec6fd87feac55aab27fbd3c2eeac4267f69926f0738b717289f769ff11b1b1b59daf768920117b47606545deab60391f8ad268
|
7
|
+
data.tar.gz: d3574d96731e97b160dcf32c3dd1d6d75c5eace3abc8bbdad93e1ebc163e35803e998f5489d7743bbae7ba24bfaf924949ca9185290bfdc72c7dd1aa14fd66cf
|
@@ -1,7 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DeepUnrest
|
2
4
|
class ApplicationController < ActionController::API
|
3
5
|
include DeepUnrest.authentication_concern
|
4
6
|
|
7
|
+
@@temp_ids = {}
|
8
|
+
|
5
9
|
def context
|
6
10
|
{ current_user: current_user }
|
7
11
|
end
|
@@ -24,10 +28,12 @@ module DeepUnrest
|
|
24
28
|
end
|
25
29
|
|
26
30
|
def update
|
31
|
+
@@temp_ids[request.uuid] = {}
|
27
32
|
redirect = allowed_params[:redirect]
|
28
33
|
data = repair_nested_params(allowed_params)[:data]
|
29
|
-
results = DeepUnrest.perform_update(data, current_user)
|
30
|
-
resp = { destroyed: results[:destroyed]
|
34
|
+
results = DeepUnrest.perform_update(request.uuid, data, current_user)
|
35
|
+
resp = { destroyed: results[:destroyed],
|
36
|
+
tempIds: @@temp_ids[request.uuid] }
|
31
37
|
resp[:redirect] = results[:redirect_regex].call(redirect) if redirect
|
32
38
|
render json: resp, status: 200
|
33
39
|
rescue DeepUnrest::Unauthorized => err
|
@@ -36,6 +42,8 @@ module DeepUnrest
|
|
36
42
|
render json: err.message, status: 405
|
37
43
|
rescue DeepUnrest::Conflict => err
|
38
44
|
render json: err.message, status: 409
|
45
|
+
ensure
|
46
|
+
@@temp_ids.delete(request.uuid)
|
39
47
|
end
|
40
48
|
|
41
49
|
def current_user
|
data/lib/deep_unrest.rb
CHANGED
@@ -240,7 +240,7 @@ module DeepUnrest
|
|
240
240
|
end
|
241
241
|
|
242
242
|
scope[:ar_error_key] = increment_error_indices(path_info, err_path_memo)
|
243
|
-
scope[:dr_error_key] = path_info.map {|pair| pair.join('') }.join('.')
|
243
|
+
scope[:dr_error_key] = path_info.map { |pair| pair.join('') }.join('.')
|
244
244
|
|
245
245
|
case action
|
246
246
|
when :destroy
|
@@ -256,9 +256,13 @@ module DeepUnrest
|
|
256
256
|
cursor
|
257
257
|
end
|
258
258
|
|
259
|
-
def self.get_mutation_cursor(memo, cursor, addr, type, id, temp_id, scope_type)
|
259
|
+
def self.get_mutation_cursor(ctx, memo, cursor, addr, type, id, temp_id, scope_type)
|
260
260
|
if memo
|
261
261
|
record = { id: id || temp_id }
|
262
|
+
if temp_id
|
263
|
+
record[:deep_unrest_temp_id] = temp_id
|
264
|
+
record[:deep_unrest_context] = ctx
|
265
|
+
end
|
262
266
|
if plural?(type)
|
263
267
|
cursor[addr] = [record]
|
264
268
|
next_cursor = cursor[addr][0]
|
@@ -273,6 +277,8 @@ module DeepUnrest
|
|
273
277
|
klass = to_class(type)
|
274
278
|
body = {}
|
275
279
|
body[klass.primary_key.to_sym] = id if id
|
280
|
+
body[:deep_unrest_temp_id] = temp_id if temp_id
|
281
|
+
body[:deep_unrest_context] = ctx if temp_id
|
276
282
|
cursor[type_sym] = {
|
277
283
|
klass: klass
|
278
284
|
}
|
@@ -329,7 +335,7 @@ module DeepUnrest
|
|
329
335
|
mutations
|
330
336
|
end
|
331
337
|
|
332
|
-
def self.build_mutation_fragment(op, scopes, user, err_path_memo, rest = nil, memo = nil, cursor = nil, type = nil)
|
338
|
+
def self.build_mutation_fragment(ctx, op, scopes, user, err_path_memo, rest = nil, memo = nil, cursor = nil, type = nil)
|
333
339
|
rest ||= parse_path(op[:path])
|
334
340
|
|
335
341
|
if rest.empty?
|
@@ -343,7 +349,8 @@ module DeepUnrest
|
|
343
349
|
scope_type = get_scope_type(id_str, rest.blank?, op[:destroy])
|
344
350
|
temp_id = scope_type == :create ? id_str : nil
|
345
351
|
|
346
|
-
memo, next_cursor = get_mutation_cursor(
|
352
|
+
memo, next_cursor = get_mutation_cursor(ctx,
|
353
|
+
memo,
|
347
354
|
cursor,
|
348
355
|
addr,
|
349
356
|
type,
|
@@ -352,44 +359,46 @@ module DeepUnrest
|
|
352
359
|
scope_type)
|
353
360
|
|
354
361
|
next_cursor[:id] = id if id
|
355
|
-
build_mutation_fragment(op, scopes, user, err_path_memo, rest, memo, next_cursor, type)
|
362
|
+
build_mutation_fragment(ctx, op, scopes, user, err_path_memo, rest, memo, next_cursor, type)
|
356
363
|
end
|
357
364
|
|
358
|
-
def self.build_mutation_body(ops, scopes, user)
|
365
|
+
def self.build_mutation_body(ctx, ops, scopes, user)
|
359
366
|
err_path_memo = {}
|
360
367
|
ops.each_with_object(HashWithIndifferentAccess.new({})) do |op, memo|
|
361
|
-
memo.deeper_merge(build_mutation_fragment(op, scopes, user, err_path_memo))
|
368
|
+
memo.deeper_merge(build_mutation_fragment(ctx, op, scopes, user, err_path_memo))
|
362
369
|
end
|
363
370
|
end
|
364
371
|
|
365
372
|
def self.mutate(mutation, user)
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
.
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
.
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
373
|
+
ActiveRecord::Base.transaction do
|
374
|
+
mutation.map do |_, item|
|
375
|
+
item[:operations].map do |id, ops|
|
376
|
+
ops.map do |_, action|
|
377
|
+
record = case action[:method]
|
378
|
+
when :update_all
|
379
|
+
DeepUnrest.authorization_strategy
|
380
|
+
.get_authorized_scope(user, item[:klass])
|
381
|
+
.update(action[:body])
|
382
|
+
nil
|
383
|
+
when :destroy_all
|
384
|
+
DeepUnrest.authorization_strategy
|
385
|
+
.get_authorized_scope(user, item[:klass])
|
386
|
+
.destroy_all
|
387
|
+
nil
|
388
|
+
when :update
|
389
|
+
item[:klass].update(id, action[:body])
|
390
|
+
when :create
|
391
|
+
item[:klass].create(action[:body])
|
392
|
+
when :destroy
|
393
|
+
item[:klass].destroy(id)
|
394
|
+
end
|
395
|
+
result = { record: record }
|
396
|
+
if action[:temp_id]
|
397
|
+
result[:temp_ids] = {}
|
398
|
+
result[:temp_ids][action[:temp_id]] = record.id
|
399
|
+
end
|
400
|
+
result
|
391
401
|
end
|
392
|
-
result
|
393
402
|
end
|
394
403
|
end
|
395
404
|
end
|
@@ -470,7 +479,7 @@ module DeepUnrest
|
|
470
479
|
record&.errors&.messages
|
471
480
|
end
|
472
481
|
|
473
|
-
def self.perform_update(params, user)
|
482
|
+
def self.perform_update(ctx, params, user)
|
474
483
|
# reject new resources marked for destruction
|
475
484
|
viable_params = params.reject do |param|
|
476
485
|
temp_id?(param[:path]) && param[:destroy].present?
|
@@ -483,7 +492,7 @@ module DeepUnrest
|
|
483
492
|
DeepUnrest.authorization_strategy.authorize(scopes, user).flatten
|
484
493
|
|
485
494
|
# bulid update arguments
|
486
|
-
mutations = build_mutation_body(viable_params, scopes, user)
|
495
|
+
mutations = build_mutation_body(ctx, viable_params, scopes, user)
|
487
496
|
|
488
497
|
merge_siblings!(mutations)
|
489
498
|
remove_temp_ids!(mutations)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module DeepUnrest
|
2
|
+
module Concerns
|
3
|
+
module MapTempIds
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
attr_accessor :deep_unrest_context
|
8
|
+
attr_accessor :deep_unrest_temp_id
|
9
|
+
after_create :map_temp_id
|
10
|
+
end
|
11
|
+
|
12
|
+
def map_temp_id
|
13
|
+
# return unless @deep_unrest_temp_id
|
14
|
+
temp_id_map = DeepUnrest::ApplicationController.class_variable_get(
|
15
|
+
'@@temp_ids'
|
16
|
+
)
|
17
|
+
return unless temp_id_map && @deep_unrest_temp_id
|
18
|
+
temp_id_map[@deep_unrest_context][@deep_unrest_temp_id] = id
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/deep_unrest/engine.rb
CHANGED
@@ -2,6 +2,7 @@ require 'deep_unrest/authorization/base_strategy'
|
|
2
2
|
require 'deep_unrest/authorization/none_strategy'
|
3
3
|
require 'deep_unrest/authorization/pundit_strategy'
|
4
4
|
require 'deep_unrest/concerns/null_concern'
|
5
|
+
require 'deep_unrest/concerns/map_temp_ids'
|
5
6
|
require 'deep_merge/rails_compat'
|
6
7
|
|
7
8
|
module DeepUnrest
|
data/lib/deep_unrest/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deep_unrest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lynn Hurley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -173,6 +173,7 @@ files:
|
|
173
173
|
- lib/deep_unrest/authorization/base_strategy.rb
|
174
174
|
- lib/deep_unrest/authorization/none_strategy.rb
|
175
175
|
- lib/deep_unrest/authorization/pundit_strategy.rb
|
176
|
+
- lib/deep_unrest/concerns/map_temp_ids.rb
|
176
177
|
- lib/deep_unrest/concerns/null_concern.rb
|
177
178
|
- lib/deep_unrest/engine.rb
|
178
179
|
- lib/deep_unrest/version.rb
|