jsonapi-authorization 1.0.0.alpha5 → 1.0.0.alpha6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 38df18640b26a88119c4c253745a5b78bf549f16
4
- data.tar.gz: 1e3676e726ba546d80ed364d1a16673a2c78ebd2
3
+ metadata.gz: 1740e99c89b7ed5a7872ac09f90e25de714f2b3c
4
+ data.tar.gz: 4c7d58578b5814ba853ff871917df33904c61eb8
5
5
  SHA512:
6
- metadata.gz: 41b360cfcee0708244121f9b1debea24e1414776c89346b7ede2e57c0b2e1178a0587f39a838ca8b2641e555c529cbbdc0f9505467aa30dfd022bc62f1a07422
7
- data.tar.gz: c0ba742a117a18b2273ed7662187d70a65e404f3c09b1bb48e37801ebbe7396ba39dd1348508e6ecee7b0a14dfd7ddbd1639f7e73afcbab7b84ca2d1f5bb974a
6
+ metadata.gz: 5b0202b9e8f5a0fa11f594ff35f62173ae7e4c326dff6011783c4300ac0165b0be779beb1d5e8268000fa597417ebf9bd2c48fc59975eef95ecbb769a53236d1
7
+ data.tar.gz: 6846fa8b449885c8addfbfa11e36ab5fd4e6f4f62249bbabe70772a5ecad4d65ad5c5005b739f90812cb1e2ecd0d7e8ac39bf6b1cb4d539199083d24186ab4b6
@@ -16,6 +16,11 @@ module JSONAPI
16
16
  set_callback :create_to_many_relationships, :before, :authorize_create_to_many_relationships
17
17
  set_callback :replace_to_many_relationships, :before, :authorize_replace_to_many_relationships
18
18
  set_callback :remove_to_many_relationships, :before, :authorize_remove_to_many_relationships
19
+ set_callback(
20
+ :replace_polymorphic_to_one_relationship,
21
+ :before,
22
+ :authorize_replace_polymorphic_to_one_relationship
23
+ )
19
24
 
20
25
  [
21
26
  :find,
@@ -216,6 +221,39 @@ module JSONAPI
216
221
  authorizer.remove_to_one_relationship(source_record, relationship_type)
217
222
  end
218
223
 
224
+ def authorize_replace_polymorphic_to_one_relationship
225
+ return authorize_remove_to_one_relationship if params[:key_value].nil?
226
+
227
+ source_resource = @resource_klass.find_by_key(
228
+ params[:resource_id],
229
+ context: context
230
+ )
231
+ source_record = source_resource._model
232
+
233
+ # Fetch the name of the new class based on the incoming polymorphic
234
+ # "type" value. This will fail if there is no associated resource for the
235
+ # incoming "type" value so this shouldn't leak constants
236
+ related_record_class_name = source_resource
237
+ .send(:_model_class_name, params[:key_type])
238
+
239
+ # Fetch the underlying Resource class for the new record to-be-associated
240
+ related_resource_klass = @resource_klass.resource_for(related_record_class_name)
241
+
242
+ new_related_resource = related_resource_klass
243
+ .find_by_key(
244
+ params[:key_value],
245
+ context: context
246
+ )
247
+ new_related_record = new_related_resource._model unless new_related_resource.nil?
248
+
249
+ relationship_type = params[:relationship_type].to_sym
250
+ authorizer.replace_to_one_relationship(
251
+ source_record,
252
+ new_related_record,
253
+ relationship_type
254
+ )
255
+ end
256
+
219
257
  private
220
258
 
221
259
  def authorizer
@@ -309,7 +347,7 @@ module JSONAPI
309
347
  next_resource_klass = relationship.resource_klass
310
348
  Array.wrap(
311
349
  source_record.public_send(
312
- relationship.relation_name(context)
350
+ relationship.relation_name(context: context)
313
351
  )
314
352
  ).each do |next_source_record|
315
353
  deep.each do |next_include_item|
@@ -326,7 +364,7 @@ module JSONAPI
326
364
  case relationship
327
365
  when JSONAPI::Relationship::ToOne
328
366
  related_record = source_record.public_send(
329
- relationship.relation_name(context)
367
+ relationship.relation_name(context: context)
330
368
  )
331
369
  return if related_record.nil?
332
370
  authorizer.include_has_one_resource(source_record, related_record)
@@ -31,7 +31,7 @@ module JSONAPI
31
31
 
32
32
  def fetch_relationship(association_name)
33
33
  relationships = self.class._relationships.select do |_k, v|
34
- v.relation_name({}) == association_name
34
+ v.relation_name(context: context) == association_name
35
35
  end
36
36
  if relationships.empty?
37
37
  nil
@@ -1,5 +1,5 @@
1
1
  module JSONAPI
2
2
  module Authorization
3
- VERSION = "1.0.0.alpha5".freeze
3
+ VERSION = "1.0.0.alpha6".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi-authorization
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha5
4
+ version: 1.0.0.alpha6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vesa Laakso
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-06-04 00:00:00.000000000 Z
12
+ date: 2017-09-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jsonapi-resources