1- require 'jsonapi/active_relation_resource_finder/adapters/join_left_active_record_adapter'
2-
31module JSONAPI
4- module ActiveRelationResourceFinder
5- def self . included ( base )
6- base . extend ClassMethods
7- end
8-
9- module ClassMethods
2+ class ActiveRelationResource < BasicResource
3+ root_resource
104
5+ class << self
116 # Finds Resources using the `filters`. Pagination and sort options are used when provided
127 #
138 # @param filters [Hash] the filters hash
@@ -19,9 +14,9 @@ module ClassMethods
1914 def find ( filters , options = { } )
2015 sort_criteria = options . fetch ( :sort_criteria ) { [ ] }
2116
22- join_manager = JoinManager . new ( resource_klass : self ,
23- filters : filters ,
24- sort_criteria : sort_criteria )
17+ join_manager = ActiveRelation :: JoinManager . new ( resource_klass : self ,
18+ filters : filters ,
19+ sort_criteria : sort_criteria )
2520
2621 paginator = options [ :paginator ]
2722
@@ -41,8 +36,8 @@ def find(filters, options = {})
4136 #
4237 # @return [Integer] the count
4338 def count ( filters , options = { } )
44- join_manager = JoinManager . new ( resource_klass : self ,
45- filters : filters )
39+ join_manager = ActiveRelation :: JoinManager . new ( resource_klass : self ,
40+ filters : filters )
4641
4742 records = apply_request_settings_to_records ( records : records ( options ) ,
4843 filters : filters ,
@@ -101,11 +96,11 @@ def find_fragments(filters, options = {})
10196
10297 sort_criteria = options . fetch ( :sort_criteria ) { [ ] }
10398
104- join_manager = JoinManager . new ( resource_klass : resource_klass ,
105- source_relationship : nil ,
106- relationships : linkage_relationships ,
107- sort_criteria : sort_criteria ,
108- filters : filters )
99+ join_manager = ActiveRelation :: JoinManager . new ( resource_klass : resource_klass ,
100+ source_relationship : nil ,
101+ relationships : linkage_relationships ,
102+ sort_criteria : sort_criteria ,
103+ filters : filters )
109104
110105 paginator = options [ :paginator ]
111106
@@ -234,9 +229,9 @@ def count_related(source_rid, relationship_name, options = {})
234229 filters = options . fetch ( :filters , { } )
235230
236231 # Joins in this case are related to the related_klass
237- join_manager = JoinManager . new ( resource_klass : self ,
238- source_relationship : relationship ,
239- filters : filters )
232+ join_manager = ActiveRelation :: JoinManager . new ( resource_klass : self ,
233+ source_relationship : relationship ,
234+ filters : filters )
240235
241236 records = apply_request_settings_to_records ( records : records ( options ) ,
242237 resource_klass : related_klass ,
@@ -252,7 +247,7 @@ def count_related(source_rid, relationship_name, options = {})
252247 count_records ( records )
253248 end
254249
255- # This resource finder (ActiveRecordResourceFinder ) uses an `ActiveRecord::Relation` as the starting point for
250+ # This resource class (ActiveRelationResource ) uses an `ActiveRecord::Relation` as the starting point for
256251 # retrieving models. From this relation filters, sorts and joins are applied as needed.
257252 # Depending on which phase of the request processing different `records` methods will be called, giving the user
258253 # the opportunity to override them differently for performance and security reasons.
@@ -385,11 +380,11 @@ def find_related_monomorphic_fragments(source_rids, relationship, options, conne
385380 sort_criteria << { field : field , direction : sort [ :direction ] }
386381 end
387382
388- join_manager = JoinManager . new ( resource_klass : self ,
389- source_relationship : relationship ,
390- relationships : linkage_relationships ,
391- sort_criteria : sort_criteria ,
392- filters : filters )
383+ join_manager = ActiveRelation :: JoinManager . new ( resource_klass : self ,
384+ source_relationship : relationship ,
385+ relationships : linkage_relationships ,
386+ sort_criteria : sort_criteria ,
387+ filters : filters )
393388
394389 paginator = options [ :paginator ] if source_rids . count == 1
395390
@@ -511,10 +506,10 @@ def find_related_polymorphic_fragments(source_rids, relationship, options, conne
511506 end
512507 end
513508
514- join_manager = JoinManager . new ( resource_klass : self ,
515- source_relationship : relationship ,
516- relationships : linkage_relationships ,
517- filters : filters )
509+ join_manager = ActiveRelation :: JoinManager . new ( resource_klass : self ,
510+ source_relationship : relationship ,
511+ relationships : linkage_relationships ,
512+ filters : filters )
518513
519514 paginator = options [ :paginator ] if source_rids . count == 1
520515
@@ -672,14 +667,14 @@ def find_related_polymorphic_fragments(source_rids, relationship, options, conne
672667 end
673668
674669 def apply_request_settings_to_records ( records :,
675- join_manager : JoinManager . new ( resource_klass : self ) ,
676- resource_klass : self ,
677- filters : { } ,
678- primary_keys : nil ,
679- sort_criteria : nil ,
680- sort_primary : nil ,
681- paginator : nil ,
682- options : { } )
670+ join_manager : ActiveRelation :: JoinManager . new ( resource_klass : self ) ,
671+ resource_klass : self ,
672+ filters : { } ,
673+ primary_keys : nil ,
674+ sort_criteria : nil ,
675+ sort_primary : nil ,
676+ paginator : nil ,
677+ options : { } )
683678
684679 opts = options . dup
685680 records = resource_klass . apply_joins ( records , join_manager , opts )
0 commit comments