jsonapi-resources 0.10.2 → 0.10.6
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/lib/jsonapi/active_relation/join_manager.rb +8 -2
- data/lib/jsonapi/active_relation_resource.rb +59 -25
- data/lib/jsonapi/basic_resource.rb +3 -3
- data/lib/jsonapi/cached_response_fragment.rb +2 -2
- data/lib/jsonapi/configuration.rb +21 -3
- data/lib/jsonapi/path_segment.rb +2 -2
- data/lib/jsonapi/processor.rb +4 -4
- data/lib/jsonapi/relationship.rb +11 -2
- data/lib/jsonapi/request_parser.rb +1 -1
- data/lib/jsonapi/resource_controller_metal.rb +2 -2
- data/lib/jsonapi/resources/version.rb +1 -1
- metadata +10 -10
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?
|
@@ -114,11 +114,11 @@ module JSONAPI
|
|
114
114
|
# This alias is going to be resolve down to the model's table name and will not actually be an alias
|
115
115
|
resource_table_alias = resource_klass._table_name
|
116
116
|
|
117
|
-
pluck_fields = [
|
117
|
+
pluck_fields = [sql_field_with_alias(resource_table_alias, resource_klass._primary_key)]
|
118
118
|
|
119
119
|
cache_field = attribute_to_model_field(:_cache_field) if options[:cache]
|
120
120
|
if cache_field
|
121
|
-
pluck_fields <<
|
121
|
+
pluck_fields << sql_field_with_alias(resource_table_alias, cache_field[:name])
|
122
122
|
end
|
123
123
|
|
124
124
|
linkage_fields = []
|
@@ -133,7 +133,7 @@ module JSONAPI
|
|
133
133
|
|
134
134
|
linkage_table_alias = join_manager.join_details_by_polymorphic_relationship(linkage_relationship, resource_type)[:alias]
|
135
135
|
primary_key = klass._primary_key
|
136
|
-
pluck_fields <<
|
136
|
+
pluck_fields << sql_field_with_alias(linkage_table_alias, primary_key)
|
137
137
|
end
|
138
138
|
else
|
139
139
|
klass = linkage_relationship.resource_klass
|
@@ -141,7 +141,7 @@ module JSONAPI
|
|
141
141
|
|
142
142
|
linkage_table_alias = join_manager.join_details_by_relationship(linkage_relationship)[:alias]
|
143
143
|
primary_key = klass._primary_key
|
144
|
-
pluck_fields <<
|
144
|
+
pluck_fields << sql_field_with_alias(linkage_table_alias, primary_key)
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
@@ -150,7 +150,7 @@ module JSONAPI
|
|
150
150
|
attributes.try(:each) do |attribute|
|
151
151
|
model_field = resource_klass.attribute_to_model_field(attribute)
|
152
152
|
model_fields[attribute] = model_field
|
153
|
-
pluck_fields <<
|
153
|
+
pluck_fields << sql_field_with_alias(resource_table_alias, model_field[:name])
|
154
154
|
end
|
155
155
|
|
156
156
|
sort_fields = options.dig(:_relation_helper_options, :sort_fields)
|
@@ -324,6 +324,11 @@ module JSONAPI
|
|
324
324
|
records = records.joins_left(relation_name)
|
325
325
|
end
|
326
326
|
end
|
327
|
+
|
328
|
+
if relationship.use_related_resource_records_for_joins
|
329
|
+
records = records.merge(self.records(options))
|
330
|
+
end
|
331
|
+
|
327
332
|
records
|
328
333
|
end
|
329
334
|
|
@@ -395,7 +400,7 @@ module JSONAPI
|
|
395
400
|
sort_criteria: sort_criteria,
|
396
401
|
filters: filters)
|
397
402
|
|
398
|
-
paginator = options[:paginator]
|
403
|
+
paginator = options[:paginator]
|
399
404
|
|
400
405
|
records = apply_request_settings_to_records(records: records_for_source_to_related(options),
|
401
406
|
resource_klass: resource_klass,
|
@@ -409,13 +414,13 @@ module JSONAPI
|
|
409
414
|
resource_table_alias = join_manager.join_details_by_relationship(relationship)[:alias]
|
410
415
|
|
411
416
|
pluck_fields = [
|
412
|
-
|
413
|
-
|
417
|
+
Arel.sql("#{_table_name}.#{_primary_key} AS \"source_id\""),
|
418
|
+
sql_field_with_alias(resource_table_alias, resource_klass._primary_key)
|
414
419
|
]
|
415
420
|
|
416
421
|
cache_field = resource_klass.attribute_to_model_field(:_cache_field) if options[:cache]
|
417
422
|
if cache_field
|
418
|
-
pluck_fields <<
|
423
|
+
pluck_fields << sql_field_with_alias(resource_table_alias, cache_field[:name])
|
419
424
|
end
|
420
425
|
|
421
426
|
linkage_fields = []
|
@@ -430,7 +435,7 @@ module JSONAPI
|
|
430
435
|
|
431
436
|
linkage_table_alias = join_manager.join_details_by_polymorphic_relationship(linkage_relationship, resource_type)[:alias]
|
432
437
|
primary_key = klass._primary_key
|
433
|
-
pluck_fields <<
|
438
|
+
pluck_fields << sql_field_with_alias(linkage_table_alias, primary_key)
|
434
439
|
end
|
435
440
|
else
|
436
441
|
klass = linkage_relationship.resource_klass
|
@@ -438,7 +443,7 @@ module JSONAPI
|
|
438
443
|
|
439
444
|
linkage_table_alias = join_manager.join_details_by_relationship(linkage_relationship)[:alias]
|
440
445
|
primary_key = klass._primary_key
|
441
|
-
pluck_fields <<
|
446
|
+
pluck_fields << sql_field_with_alias(linkage_table_alias, primary_key)
|
442
447
|
end
|
443
448
|
end
|
444
449
|
|
@@ -447,7 +452,7 @@ module JSONAPI
|
|
447
452
|
attributes.try(:each) do |attribute|
|
448
453
|
model_field = resource_klass.attribute_to_model_field(attribute)
|
449
454
|
model_fields[attribute] = model_field
|
450
|
-
pluck_fields <<
|
455
|
+
pluck_fields << sql_field_with_alias(resource_table_alias, model_field[:name])
|
451
456
|
end
|
452
457
|
|
453
458
|
sort_fields = options.dig(:_relation_helper_options, :sort_fields)
|
@@ -525,7 +530,7 @@ module JSONAPI
|
|
525
530
|
relationships: linkage_relationships,
|
526
531
|
filters: filters)
|
527
532
|
|
528
|
-
paginator = options[:paginator]
|
533
|
+
paginator = options[:paginator]
|
529
534
|
|
530
535
|
# Note: We will sort by the source table. Without using unions we can't sort on a polymorphic relationship
|
531
536
|
# in any manner that makes sense
|
@@ -543,9 +548,9 @@ module JSONAPI
|
|
543
548
|
related_type = concat_table_field(_table_name, relationship.polymorphic_type)
|
544
549
|
|
545
550
|
pluck_fields = [
|
546
|
-
Arel.sql("#{primary_key} AS #{_table_name
|
547
|
-
Arel.sql("#{related_key} AS #{_table_name
|
548
|
-
Arel.sql("#{related_type} AS #{_table_name
|
551
|
+
Arel.sql("#{primary_key} AS #{alias_table_field(_table_name, _primary_key)}"),
|
552
|
+
Arel.sql("#{related_key} AS #{alias_table_field(_table_name, relationship.foreign_key)}"),
|
553
|
+
Arel.sql("#{related_type} AS #{alias_table_field(_table_name, relationship.polymorphic_type)}")
|
549
554
|
]
|
550
555
|
|
551
556
|
# Get the additional fields from each relation. There's a limitation that the fields must exist in each relation
|
@@ -570,7 +575,7 @@ module JSONAPI
|
|
570
575
|
|
571
576
|
cache_offset = relation_index
|
572
577
|
if cache_field
|
573
|
-
pluck_fields <<
|
578
|
+
pluck_fields << sql_field_with_alias(table_alias, cache_field[:name])
|
574
579
|
relation_index+= 1
|
575
580
|
end
|
576
581
|
|
@@ -579,7 +584,7 @@ module JSONAPI
|
|
579
584
|
attributes.try(:each) do |attribute|
|
580
585
|
model_field = related_klass.attribute_to_model_field(attribute)
|
581
586
|
model_fields[attribute] = model_field
|
582
|
-
pluck_fields <<
|
587
|
+
pluck_fields << sql_field_with_alias(table_alias, model_field[:name])
|
583
588
|
relation_index+= 1
|
584
589
|
end
|
585
590
|
|
@@ -616,7 +621,7 @@ module JSONAPI
|
|
616
621
|
|
617
622
|
linkage_table_alias = join_manager.join_details_by_polymorphic_relationship(linkage_relationship, resource_type)[:alias]
|
618
623
|
primary_key = klass._primary_key
|
619
|
-
pluck_fields <<
|
624
|
+
pluck_fields << sql_field_with_alias(linkage_table_alias, primary_key)
|
620
625
|
end
|
621
626
|
else
|
622
627
|
klass = linkage_relationship.resource_klass
|
@@ -624,7 +629,7 @@ module JSONAPI
|
|
624
629
|
|
625
630
|
linkage_table_alias = join_manager.join_details_by_relationship(linkage_relationship)[:alias]
|
626
631
|
primary_key = klass._primary_key
|
627
|
-
pluck_fields <<
|
632
|
+
pluck_fields << sql_field_with_alias(linkage_table_alias, primary_key)
|
628
633
|
end
|
629
634
|
end
|
630
635
|
|
@@ -649,7 +654,7 @@ module JSONAPI
|
|
649
654
|
end
|
650
655
|
end
|
651
656
|
|
652
|
-
relation_position = relation_positions[row[2].
|
657
|
+
relation_position = relation_positions[row[2].underscore.pluralize]
|
653
658
|
model_fields = relation_position[:model_fields]
|
654
659
|
cache_field = relation_position[:cache_field]
|
655
660
|
cache_offset = relation_position[:cache_offset]
|
@@ -756,7 +761,7 @@ module JSONAPI
|
|
756
761
|
|
757
762
|
# Assumes ActiveRecord's counting. Override if you need a different counting method
|
758
763
|
def count_records(records)
|
759
|
-
if Rails::VERSION::MAJOR
|
764
|
+
if (Rails::VERSION::MAJOR == 5 && ActiveRecord::VERSION::MINOR >= 1) || Rails::VERSION::MAJOR >= 6
|
760
765
|
records.count(:all)
|
761
766
|
else
|
762
767
|
records.count
|
@@ -790,7 +795,31 @@ module JSONAPI
|
|
790
795
|
if table.blank? || field.to_s.include?('.')
|
791
796
|
# :nocov:
|
792
797
|
if quoted
|
793
|
-
|
798
|
+
quote(field)
|
799
|
+
else
|
800
|
+
field.to_s
|
801
|
+
end
|
802
|
+
# :nocov:
|
803
|
+
else
|
804
|
+
if quoted
|
805
|
+
"#{quote(table)}.#{quote(field)}"
|
806
|
+
else
|
807
|
+
# :nocov:
|
808
|
+
"#{table.to_s}.#{field.to_s}"
|
809
|
+
# :nocov:
|
810
|
+
end
|
811
|
+
end
|
812
|
+
end
|
813
|
+
|
814
|
+
def sql_field_with_alias(table, field, quoted = true)
|
815
|
+
Arel.sql("#{concat_table_field(table, field, quoted)} AS #{alias_table_field(table, field, quoted)}")
|
816
|
+
end
|
817
|
+
|
818
|
+
def alias_table_field(table, field, quoted = false)
|
819
|
+
if table.blank? || field.to_s.include?('.')
|
820
|
+
# :nocov:
|
821
|
+
if quoted
|
822
|
+
quote(field)
|
794
823
|
else
|
795
824
|
field.to_s
|
796
825
|
end
|
@@ -798,14 +827,19 @@ module JSONAPI
|
|
798
827
|
else
|
799
828
|
if quoted
|
800
829
|
# :nocov:
|
801
|
-
"
|
830
|
+
quote("#{table.to_s}_#{field.to_s}")
|
802
831
|
# :nocov:
|
803
832
|
else
|
804
|
-
"#{table.to_s}
|
833
|
+
"#{table.to_s}_#{field.to_s}"
|
805
834
|
end
|
806
835
|
end
|
807
836
|
end
|
808
837
|
|
838
|
+
def quote(field)
|
839
|
+
"\"#{field.to_s}\""
|
840
|
+
end
|
841
|
+
|
842
|
+
|
809
843
|
def apply_filters(records, filters, options = {})
|
810
844
|
if filters
|
811
845
|
filters.each do |filter, value|
|
@@ -873,7 +873,7 @@ module JSONAPI
|
|
873
873
|
if !_polymorphic
|
874
874
|
''
|
875
875
|
else
|
876
|
-
@_polymorphic_name ||= _model_name.to_s.
|
876
|
+
@_polymorphic_name ||= _model_name.to_s.underscore
|
877
877
|
end
|
878
878
|
end
|
879
879
|
|
@@ -927,7 +927,7 @@ module JSONAPI
|
|
927
927
|
next unless Module === klass
|
928
928
|
if klass < ActiveRecord::Base
|
929
929
|
klass.reflect_on_all_associations(:has_many).select{|r| r.options[:as] }.each do |reflection|
|
930
|
-
(hash[reflection.options[:as]] ||= []) << klass.name.
|
930
|
+
(hash[reflection.options[:as]] ||= []) << klass.name.underscore
|
931
931
|
end
|
932
932
|
end
|
933
933
|
end
|
@@ -1058,7 +1058,7 @@ module JSONAPI
|
|
1058
1058
|
end
|
1059
1059
|
|
1060
1060
|
def construct_order_options(sort_params)
|
1061
|
-
sort_params
|
1061
|
+
sort_params = default_sort if sort_params.blank?
|
1062
1062
|
|
1063
1063
|
return {} unless sort_params
|
1064
1064
|
|
@@ -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)
|
@@ -18,7 +18,7 @@ module JSONAPI
|
|
18
18
|
:default_paginator,
|
19
19
|
:default_page_size,
|
20
20
|
:maximum_page_size,
|
21
|
-
:
|
21
|
+
:default_processor_klass_name,
|
22
22
|
:use_text_errors,
|
23
23
|
:top_level_links_include_pagination,
|
24
24
|
:top_level_meta_include_record_count,
|
@@ -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
|
@@ -110,7 +111,7 @@ module JSONAPI
|
|
110
111
|
|
111
112
|
# The default Operation Processor to use if one is not defined specifically
|
112
113
|
# for a Resource.
|
113
|
-
self.
|
114
|
+
self.default_processor_klass_name = 'JSONAPI::Processor'
|
114
115
|
|
115
116
|
# Allows transactions for creating and updating records
|
116
117
|
# Set this to false if your backend does not support transactions (e.g. Mongodb)
|
@@ -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)
|
@@ -225,9 +231,19 @@ module JSONAPI
|
|
225
231
|
end
|
226
232
|
|
227
233
|
def default_processor_klass=(default_processor_klass)
|
234
|
+
ActiveSupport::Deprecation.warn('`default_processor_klass` has been replaced by `default_processor_klass_name`.')
|
228
235
|
@default_processor_klass = default_processor_klass
|
229
236
|
end
|
230
237
|
|
238
|
+
def default_processor_klass
|
239
|
+
@default_processor_klass ||= default_processor_klass_name.safe_constantize
|
240
|
+
end
|
241
|
+
|
242
|
+
def default_processor_klass_name=(default_processor_klass_name)
|
243
|
+
@default_processor_klass = nil
|
244
|
+
@default_processor_klass_name = default_processor_klass_name
|
245
|
+
end
|
246
|
+
|
231
247
|
def allow_include=(allow_include)
|
232
248
|
ActiveSupport::Deprecation.warn('`allow_include` has been replaced by `default_allow_include_to_one` and `default_allow_include_to_many` options.')
|
233
249
|
@default_allow_include_to_one = allow_include
|
@@ -289,6 +305,8 @@ module JSONAPI
|
|
289
305
|
attr_writer :resource_cache_usage_report_function
|
290
306
|
|
291
307
|
attr_writer :default_exclude_links
|
308
|
+
|
309
|
+
attr_writer :use_related_resource_records_for_joins
|
292
310
|
end
|
293
311
|
|
294
312
|
class << self
|
data/lib/jsonapi/path_segment.rb
CHANGED
@@ -30,7 +30,7 @@ module JSONAPI
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def eql?(other)
|
33
|
-
relationship == other.relationship && resource_klass == other.resource_klass
|
33
|
+
other.is_a?(JSONAPI::PathSegment::Relationship) && relationship == other.relationship && resource_klass == other.resource_klass
|
34
34
|
end
|
35
35
|
|
36
36
|
def hash
|
@@ -59,7 +59,7 @@ module JSONAPI
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def eql?(other)
|
62
|
-
field_name == other.field_name && resource_klass == other.resource_klass
|
62
|
+
other.is_a?(JSONAPI::PathSegment::Field) && field_name == other.field_name && resource_klass == other.resource_klass
|
63
63
|
end
|
64
64
|
|
65
65
|
def delegated_field_name
|
data/lib/jsonapi/processor.rb
CHANGED
@@ -392,7 +392,7 @@ module JSONAPI
|
|
392
392
|
primary_resource_id_tree = PrimaryResourceIdTree.new
|
393
393
|
primary_resource_id_tree.add_resource_fragments(fragments, include_related)
|
394
394
|
|
395
|
-
load_included(resource_klass, primary_resource_id_tree, include_related, options
|
395
|
+
load_included(resource_klass, primary_resource_id_tree, include_related, options)
|
396
396
|
|
397
397
|
primary_resource_id_tree
|
398
398
|
end
|
@@ -406,7 +406,7 @@ module JSONAPI
|
|
406
406
|
primary_resource_id_tree = PrimaryResourceIdTree.new
|
407
407
|
primary_resource_id_tree.add_resource_fragments(fragments, include_related)
|
408
408
|
|
409
|
-
load_included(resource_klass, primary_resource_id_tree, include_related, options
|
409
|
+
load_included(resource_klass, primary_resource_id_tree, include_related, options)
|
410
410
|
|
411
411
|
primary_resource_id_tree
|
412
412
|
end
|
@@ -422,7 +422,7 @@ module JSONAPI
|
|
422
422
|
primary_resource_id_tree = PrimaryResourceIdTree.new
|
423
423
|
primary_resource_id_tree.add_resource_fragments(fragments, include_related)
|
424
424
|
|
425
|
-
load_included(resource_klass, primary_resource_id_tree, include_related, options
|
425
|
+
load_included(resource_klass, primary_resource_id_tree, include_related, options)
|
426
426
|
|
427
427
|
primary_resource_id_tree
|
428
428
|
end
|
@@ -434,7 +434,7 @@ module JSONAPI
|
|
434
434
|
relationship = resource_klass._relationship(key)
|
435
435
|
relationship_name = relationship.name.to_sym
|
436
436
|
|
437
|
-
find_related_resource_options = options.
|
437
|
+
find_related_resource_options = options.except(:filters, :sort_criteria, :paginator)
|
438
438
|
find_related_resource_options[:sort_criteria] = relationship.resource_klass.default_sort
|
439
439
|
find_related_resource_options[:cache] = resource_klass.caching?
|
440
440
|
|
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]
|
@@ -63,7 +72,7 @@ module JSONAPI
|
|
63
72
|
next unless Module === klass
|
64
73
|
if ActiveRecord::Base > klass
|
65
74
|
klass.reflect_on_all_associations(:has_many).select{|r| r.options[:as] }.each do |reflection|
|
66
|
-
(hash[reflection.options[:as]] ||= []) << klass.name.
|
75
|
+
(hash[reflection.options[:as]] ||= []) << klass.name.underscore
|
67
76
|
end
|
68
77
|
end
|
69
78
|
end
|
@@ -418,7 +418,7 @@ module JSONAPI
|
|
418
418
|
sorts = sort_criteria
|
419
419
|
elsif sort_criteria.is_a?(String)
|
420
420
|
begin
|
421
|
-
raw = URI.
|
421
|
+
raw = URI.decode_www_form_component(sort_criteria)
|
422
422
|
sorts = CSV.parse_line(raw)
|
423
423
|
rescue CSV::MalformedCSVError
|
424
424
|
fail JSONAPI::Exceptions::InvalidSortCriteria.new(format_key(resource_klass._type), raw)
|
@@ -5,10 +5,10 @@ module JSONAPI
|
|
5
5
|
ActionController::Rendering,
|
6
6
|
ActionController::Renderers::All,
|
7
7
|
ActionController::StrongParameters,
|
8
|
-
ActionController::ForceSSL,
|
8
|
+
Gem::Requirement.new('< 6.1').satisfied_by?(ActionPack.gem_version) ? ActionController::ForceSSL : nil,
|
9
9
|
ActionController::Instrumentation,
|
10
10
|
JSONAPI::ActsAsResourceController
|
11
|
-
].freeze
|
11
|
+
].compact.freeze
|
12
12
|
|
13
13
|
# Note, the url_helpers are not loaded. This will prevent links from being generated for resources, and warnings
|
14
14
|
# will be emitted. Link support can be added by including `Rails.application.routes.url_helpers`, and links
|
metadata
CHANGED
@@ -1,30 +1,30 @@
|
|
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
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 1.17
|
20
|
+
version: '1.17'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 1.17
|
27
|
+
version: '1.17'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rake
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -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.
|
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: []
|