jsonapi-resources 0.10.5 → 0.10.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/jsonapi/active_relation/join_manager.rb +8 -2
- data/lib/jsonapi/active_relation_resource.rb +5 -0
- data/lib/jsonapi/cached_response_fragment.rb +2 -2
- data/lib/jsonapi/configuration.rb +9 -1
- data/lib/jsonapi/relationship.rb +10 -1
- data/lib/jsonapi/resources/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '091836afd689ed975ab1ad2cee54a467a0771cb5ea5b0bfa2055e25531809f74'
|
4
|
+
data.tar.gz: 96d46c67f8c88fa3e6d298eac85dc3862bef6feacbe8eddde1515b80e7c8e5a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4dfc6fd61f4a7d27a291626b00c6e5c13cad32be0b73b66e239f254800d73557168470191923cd5bcf29869bfdb1e93a11c4a8b6e3eca25411b1ac8dbc4e24d
|
7
|
+
data.tar.gz: e6c699748872330b22ae151082595e48bed10665e9c61c3ba902f585747090e19ab9319776d189bc06fe9ca7797f00467fb08a3e863a4ce7e3b740fd85bc2fe8
|
@@ -147,9 +147,15 @@ module JSONAPI
|
|
147
147
|
related_resource_klass = join_details[:related_resource_klass]
|
148
148
|
join_type = relationship_details[:join_type]
|
149
149
|
|
150
|
+
join_options = {
|
151
|
+
relationship: relationship,
|
152
|
+
relationship_details: relationship_details,
|
153
|
+
related_resource_klass: related_resource_klass,
|
154
|
+
}
|
155
|
+
|
150
156
|
if relationship == :root
|
151
157
|
unless source_relationship
|
152
|
-
add_join_details('', {alias: resource_klass._table_name, join_type: :root})
|
158
|
+
add_join_details('', {alias: resource_klass._table_name, join_type: :root, join_options: join_options})
|
153
159
|
end
|
154
160
|
next
|
155
161
|
end
|
@@ -163,7 +169,7 @@ module JSONAPI
|
|
163
169
|
options: options)
|
164
170
|
}
|
165
171
|
|
166
|
-
details = {alias: self.class.alias_from_arel_node(join_node), join_type: join_type}
|
172
|
+
details = {alias: self.class.alias_from_arel_node(join_node), join_type: join_type, join_options: join_options}
|
167
173
|
|
168
174
|
if relationship == source_relationship
|
169
175
|
if relationship.polymorphic? && relationship.belongs_to?
|
@@ -51,8 +51,8 @@ module JSONAPI
|
|
51
51
|
@fetchable_fields = Set.new(fetchable_fields)
|
52
52
|
|
53
53
|
# Relationships left uncompiled because we'll often want to insert included ids on retrieval
|
54
|
-
|
55
|
-
|
54
|
+
# Remove the data since that should not be cached
|
55
|
+
@relationships = relationships&.transform_values {|v| v.delete_if {|k, _v| k == 'data'} }
|
56
56
|
@links_json = CompiledJson.of(links_json)
|
57
57
|
@attributes_json = CompiledJson.of(attributes_json)
|
58
58
|
@meta_json = CompiledJson.of(meta_json)
|
@@ -39,7 +39,8 @@ module JSONAPI
|
|
39
39
|
:default_resource_cache_field,
|
40
40
|
:resource_cache_digest_function,
|
41
41
|
:resource_cache_usage_report_function,
|
42
|
-
:default_exclude_links
|
42
|
+
:default_exclude_links,
|
43
|
+
:use_related_resource_records_for_joins
|
43
44
|
|
44
45
|
def initialize
|
45
46
|
#:underscored_key, :camelized_key, :dasherized_key, or custom
|
@@ -158,6 +159,11 @@ module JSONAPI
|
|
158
159
|
# and relationships. Accepts either `:default`, `:none`, or array containing the
|
159
160
|
# specific default links to exclude, which may be `:self` and `:related`.
|
160
161
|
self.default_exclude_links = :none
|
162
|
+
|
163
|
+
# Use a related resource's `records` when performing joins. This setting allows included resources to account for
|
164
|
+
# permission scopes. It can be overridden explicitly per relationship. Furthermore, specifying a `relation_name`
|
165
|
+
# on a relationship will cause this setting to be ignored.
|
166
|
+
self.use_related_resource_records_for_joins = true
|
161
167
|
end
|
162
168
|
|
163
169
|
def cache_formatters=(bool)
|
@@ -299,6 +305,8 @@ module JSONAPI
|
|
299
305
|
attr_writer :resource_cache_usage_report_function
|
300
306
|
|
301
307
|
attr_writer :default_exclude_links
|
308
|
+
|
309
|
+
attr_writer :use_related_resource_records_for_joins
|
302
310
|
end
|
303
311
|
|
304
312
|
class << self
|
data/lib/jsonapi/relationship.rb
CHANGED
@@ -3,7 +3,7 @@ module JSONAPI
|
|
3
3
|
attr_reader :acts_as_set, :foreign_key, :options, :name,
|
4
4
|
:class_name, :polymorphic, :always_include_optional_linkage_data,
|
5
5
|
:parent_resource, :eager_load_on_include, :custom_methods,
|
6
|
-
:inverse_relationship, :allow_include
|
6
|
+
:inverse_relationship, :allow_include, :use_related_resource_records_for_joins
|
7
7
|
|
8
8
|
attr_writer :allow_include
|
9
9
|
|
@@ -23,6 +23,15 @@ module JSONAPI
|
|
23
23
|
@polymorphic_types ||= options[:polymorphic_relations]
|
24
24
|
end
|
25
25
|
|
26
|
+
use_related_resource_records_for_joins_default = if options[:relation_name]
|
27
|
+
false
|
28
|
+
else
|
29
|
+
JSONAPI.configuration.use_related_resource_records_for_joins
|
30
|
+
end
|
31
|
+
|
32
|
+
@use_related_resource_records_for_joins = options.fetch(:use_related_resource_records_for_joins,
|
33
|
+
use_related_resource_records_for_joins_default) == true
|
34
|
+
|
26
35
|
@always_include_optional_linkage_data = options.fetch(:always_include_optional_linkage_data, false) == true
|
27
36
|
@eager_load_on_include = options.fetch(:eager_load_on_include, false) == true
|
28
37
|
@allow_include = options[:allow_include]
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonapi-resources
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Gebhardt
|
8
8
|
- Larry Gebhardt
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-02-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -232,7 +232,7 @@ homepage: https://github.com/cerebris/jsonapi-resources
|
|
232
232
|
licenses:
|
233
233
|
- MIT
|
234
234
|
metadata: {}
|
235
|
-
post_install_message:
|
235
|
+
post_install_message:
|
236
236
|
rdoc_options: []
|
237
237
|
require_paths:
|
238
238
|
- lib
|
@@ -247,8 +247,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
247
247
|
- !ruby/object:Gem::Version
|
248
248
|
version: '0'
|
249
249
|
requirements: []
|
250
|
-
rubygems_version: 3.1.
|
251
|
-
signing_key:
|
250
|
+
rubygems_version: 3.1.6
|
251
|
+
signing_key:
|
252
252
|
specification_version: 4
|
253
253
|
summary: Easily support JSON API in Rails.
|
254
254
|
test_files: []
|