jsonapi-resources 0.10.0.beta9 → 0.10.4
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_resource.rb +28 -14
- data/lib/jsonapi/acts_as_resource_controller.rb +1 -1
- data/lib/jsonapi/configuration.rb +12 -2
- data/lib/jsonapi/processor.rb +5 -4
- data/lib/jsonapi/request_parser.rb +1 -1
- data/lib/jsonapi/resource_controller_metal.rb +2 -2
- data/lib/jsonapi/resource_set.rb +0 -1
- data/lib/jsonapi/resources/version.rb +1 -1
- metadata +9 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0373c84cc7d1e7fa2da86da83b30db06192824ecd5261718d167ddcbd7d3c3d
|
4
|
+
data.tar.gz: 4f2667a8a42ed1a4c91100979e047a0fafedc0467d84bd13e487fc7cb8baf60d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d080b0c4fcd192780be59c59158149081d7873301e36870335df9e362cc025d58b471d5677c7ba53c0d1b90c299cd41dea8975239fbd0510cdf0a9eb6a39cfb
|
7
|
+
data.tar.gz: 726d7c41751b41f79e1dfa6c6e6f4cd85d35c2a4e713d6836f8e1e8e8b275c74c62053fb1e95b278e6821732e81159cacdd6424482a182bc577ff56c0af767df
|
@@ -153,6 +153,11 @@ module JSONAPI
|
|
153
153
|
pluck_fields << Arel.sql("#{concat_table_field(resource_table_alias, model_field[:name])} AS #{resource_table_alias}_#{model_field[:name]}")
|
154
154
|
end
|
155
155
|
|
156
|
+
sort_fields = options.dig(:_relation_helper_options, :sort_fields)
|
157
|
+
sort_fields.try(:each) do |field|
|
158
|
+
pluck_fields << Arel.sql(field)
|
159
|
+
end
|
160
|
+
|
156
161
|
fragments = {}
|
157
162
|
rows = records.pluck(*pluck_fields)
|
158
163
|
rows.each do |row|
|
@@ -390,7 +395,7 @@ module JSONAPI
|
|
390
395
|
sort_criteria: sort_criteria,
|
391
396
|
filters: filters)
|
392
397
|
|
393
|
-
paginator = options[:paginator]
|
398
|
+
paginator = options[:paginator]
|
394
399
|
|
395
400
|
records = apply_request_settings_to_records(records: records_for_source_to_related(options),
|
396
401
|
resource_klass: resource_klass,
|
@@ -445,6 +450,11 @@ module JSONAPI
|
|
445
450
|
pluck_fields << Arel.sql("#{concat_table_field(resource_table_alias, model_field[:name])} AS #{resource_table_alias}_#{model_field[:name]}")
|
446
451
|
end
|
447
452
|
|
453
|
+
sort_fields = options.dig(:_relation_helper_options, :sort_fields)
|
454
|
+
sort_fields.try(:each) do |field|
|
455
|
+
pluck_fields << Arel.sql(field)
|
456
|
+
end
|
457
|
+
|
448
458
|
fragments = {}
|
449
459
|
rows = records.distinct.pluck(*pluck_fields)
|
450
460
|
rows.each do |row|
|
@@ -515,7 +525,7 @@ module JSONAPI
|
|
515
525
|
relationships: linkage_relationships,
|
516
526
|
filters: filters)
|
517
527
|
|
518
|
-
paginator = options[:paginator]
|
528
|
+
paginator = options[:paginator]
|
519
529
|
|
520
530
|
# Note: We will sort by the source table. Without using unions we can't sort on a polymorphic relationship
|
521
531
|
# in any manner that makes sense
|
@@ -680,24 +690,23 @@ module JSONAPI
|
|
680
690
|
paginator: nil,
|
681
691
|
options: {})
|
682
692
|
|
683
|
-
|
684
|
-
|
693
|
+
options[:_relation_helper_options] = { join_manager: join_manager, sort_fields: [] }
|
694
|
+
|
695
|
+
records = resource_klass.apply_joins(records, join_manager, options)
|
685
696
|
|
686
697
|
if primary_keys
|
687
698
|
records = records.where(_primary_key => primary_keys)
|
688
699
|
end
|
689
700
|
|
690
|
-
opts[:join_manager] = join_manager
|
691
|
-
|
692
701
|
unless filters.empty?
|
693
|
-
records = resource_klass.filter_records(records, filters,
|
702
|
+
records = resource_klass.filter_records(records, filters, options)
|
694
703
|
end
|
695
704
|
|
696
705
|
if sort_primary
|
697
706
|
records = records.order(_primary_key => :asc)
|
698
707
|
else
|
699
708
|
order_options = resource_klass.construct_order_options(sort_criteria)
|
700
|
-
records = resource_klass.sort_records(records, order_options,
|
709
|
+
records = resource_klass.sort_records(records, order_options, options)
|
701
710
|
end
|
702
711
|
|
703
712
|
if paginator
|
@@ -731,19 +740,23 @@ module JSONAPI
|
|
731
740
|
|
732
741
|
strategy = _allowed_sort.fetch(field.to_sym, {})[:apply]
|
733
742
|
|
743
|
+
options[:_relation_helper_options] ||= {}
|
744
|
+
options[:_relation_helper_options][:sort_fields] ||= []
|
745
|
+
|
734
746
|
if strategy
|
735
747
|
records = call_method_or_proc(strategy, records, direction, context)
|
736
748
|
else
|
737
|
-
join_manager = options
|
738
|
-
|
739
|
-
|
749
|
+
join_manager = options.dig(:_relation_helper_options, :join_manager)
|
750
|
+
sort_field = join_manager ? get_aliased_field(field, join_manager) : field
|
751
|
+
options[:_relation_helper_options][:sort_fields].push("#{sort_field}")
|
752
|
+
records = records.order(Arel.sql("#{sort_field} #{direction}"))
|
740
753
|
end
|
741
754
|
records
|
742
755
|
end
|
743
756
|
|
744
757
|
# Assumes ActiveRecord's counting. Override if you need a different counting method
|
745
758
|
def count_records(records)
|
746
|
-
if Rails::VERSION::MAJOR
|
759
|
+
if (Rails::VERSION::MAJOR == 5 && ActiveRecord::VERSION::MINOR >= 1) || Rails::VERSION::MAJOR >= 6
|
747
760
|
records.count(:all)
|
748
761
|
else
|
749
762
|
records.count
|
@@ -825,8 +838,9 @@ module JSONAPI
|
|
825
838
|
if strategy
|
826
839
|
records = call_method_or_proc(strategy, records, value, options)
|
827
840
|
else
|
828
|
-
join_manager = options
|
829
|
-
|
841
|
+
join_manager = options.dig(:_relation_helper_options, :join_manager)
|
842
|
+
field = join_manager ? get_aliased_field(filter, join_manager) : filter
|
843
|
+
records = records.where(Arel.sql(field) => value)
|
830
844
|
end
|
831
845
|
|
832
846
|
records
|
@@ -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,
|
@@ -110,7 +110,7 @@ module JSONAPI
|
|
110
110
|
|
111
111
|
# The default Operation Processor to use if one is not defined specifically
|
112
112
|
# for a Resource.
|
113
|
-
self.
|
113
|
+
self.default_processor_klass_name = 'JSONAPI::Processor'
|
114
114
|
|
115
115
|
# Allows transactions for creating and updating records
|
116
116
|
# Set this to false if your backend does not support transactions (e.g. Mongodb)
|
@@ -225,9 +225,19 @@ module JSONAPI
|
|
225
225
|
end
|
226
226
|
|
227
227
|
def default_processor_klass=(default_processor_klass)
|
228
|
+
ActiveSupport::Deprecation.warn('`default_processor_klass` has been replaced by `default_processor_klass_name`.')
|
228
229
|
@default_processor_klass = default_processor_klass
|
229
230
|
end
|
230
231
|
|
232
|
+
def default_processor_klass
|
233
|
+
@default_processor_klass ||= default_processor_klass_name.safe_constantize
|
234
|
+
end
|
235
|
+
|
236
|
+
def default_processor_klass_name=(default_processor_klass_name)
|
237
|
+
@default_processor_klass = nil
|
238
|
+
@default_processor_klass_name = default_processor_klass_name
|
239
|
+
end
|
240
|
+
|
231
241
|
def allow_include=(allow_include)
|
232
242
|
ActiveSupport::Deprecation.warn('`allow_include` has been replaced by `default_allow_include_to_one` and `default_allow_include_to_many` options.')
|
233
243
|
@default_allow_include_to_one = allow_include
|
data/lib/jsonapi/processor.rb
CHANGED
@@ -101,6 +101,7 @@ module JSONAPI
|
|
101
101
|
include_directives,
|
102
102
|
find_options)
|
103
103
|
|
104
|
+
fail JSONAPI::Exceptions::RecordNotFound.new(id) if resource_set.resource_klasses.empty?
|
104
105
|
resource_set.populate!(serializer, context, find_options)
|
105
106
|
|
106
107
|
return JSONAPI::ResourceSetOperationResult.new(:ok, resource_set, result_options)
|
@@ -391,7 +392,7 @@ module JSONAPI
|
|
391
392
|
primary_resource_id_tree = PrimaryResourceIdTree.new
|
392
393
|
primary_resource_id_tree.add_resource_fragments(fragments, include_related)
|
393
394
|
|
394
|
-
load_included(resource_klass, primary_resource_id_tree, include_related, options
|
395
|
+
load_included(resource_klass, primary_resource_id_tree, include_related, options)
|
395
396
|
|
396
397
|
primary_resource_id_tree
|
397
398
|
end
|
@@ -405,7 +406,7 @@ module JSONAPI
|
|
405
406
|
primary_resource_id_tree = PrimaryResourceIdTree.new
|
406
407
|
primary_resource_id_tree.add_resource_fragments(fragments, include_related)
|
407
408
|
|
408
|
-
load_included(resource_klass, primary_resource_id_tree, include_related, options
|
409
|
+
load_included(resource_klass, primary_resource_id_tree, include_related, options)
|
409
410
|
|
410
411
|
primary_resource_id_tree
|
411
412
|
end
|
@@ -421,7 +422,7 @@ module JSONAPI
|
|
421
422
|
primary_resource_id_tree = PrimaryResourceIdTree.new
|
422
423
|
primary_resource_id_tree.add_resource_fragments(fragments, include_related)
|
423
424
|
|
424
|
-
load_included(resource_klass, primary_resource_id_tree, include_related, options
|
425
|
+
load_included(resource_klass, primary_resource_id_tree, include_related, options)
|
425
426
|
|
426
427
|
primary_resource_id_tree
|
427
428
|
end
|
@@ -433,7 +434,7 @@ module JSONAPI
|
|
433
434
|
relationship = resource_klass._relationship(key)
|
434
435
|
relationship_name = relationship.name.to_sym
|
435
436
|
|
436
|
-
find_related_resource_options = options.
|
437
|
+
find_related_resource_options = options.except(:filters, :sort_criteria, :paginator)
|
437
438
|
find_related_resource_options[:sort_criteria] = relationship.resource_klass.default_sort
|
438
439
|
find_related_resource_options[:cache] = resource_klass.caching?
|
439
440
|
|
@@ -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
|
data/lib/jsonapi/resource_set.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Gebhardt
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-02-05 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
|
@@ -243,12 +243,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
243
243
|
version: '2.3'
|
244
244
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
245
245
|
requirements:
|
246
|
-
- - "
|
246
|
+
- - ">="
|
247
247
|
- !ruby/object:Gem::Version
|
248
|
-
version:
|
248
|
+
version: '0'
|
249
249
|
requirements: []
|
250
|
-
|
251
|
-
rubygems_version: 2.7.6
|
250
|
+
rubygems_version: 3.0.3
|
252
251
|
signing_key:
|
253
252
|
specification_version: 4
|
254
253
|
summary: Easily support JSON API in Rails.
|