1
- require 'jsonapi/active_relation_resource_finder/adapters/join_left_active_record_adapter'
2
-
3
1
module 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
10
4
5
+ class << self
11
6
# Finds Resources using the `filters`. Pagination and sort options are used when provided
12
7
#
13
8
# @param filters [Hash] the filters hash
@@ -19,9 +14,9 @@ module ClassMethods
19
14
def find ( filters , options = { } )
20
15
sort_criteria = options . fetch ( :sort_criteria ) { [ ] }
21
16
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 )
25
20
26
21
paginator = options [ :paginator ]
27
22
@@ -41,8 +36,8 @@ def find(filters, options = {})
41
36
#
42
37
# @return [Integer] the count
43
38
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 )
46
41
47
42
records = apply_request_settings_to_records ( records : records ( options ) ,
48
43
filters : filters ,
@@ -101,11 +96,11 @@ def find_fragments(filters, options = {})
101
96
102
97
sort_criteria = options . fetch ( :sort_criteria ) { [ ] }
103
98
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 )
109
104
110
105
paginator = options [ :paginator ]
111
106
@@ -234,9 +229,9 @@ def count_related(source_rid, relationship_name, options = {})
234
229
filters = options . fetch ( :filters , { } )
235
230
236
231
# 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 )
240
235
241
236
records = apply_request_settings_to_records ( records : records ( options ) ,
242
237
resource_klass : related_klass ,
@@ -252,7 +247,7 @@ def count_related(source_rid, relationship_name, options = {})
252
247
count_records ( records )
253
248
end
254
249
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
256
251
# retrieving models. From this relation filters, sorts and joins are applied as needed.
257
252
# Depending on which phase of the request processing different `records` methods will be called, giving the user
258
253
# 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
385
380
sort_criteria << { field : field , direction : sort [ :direction ] }
386
381
end
387
382
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 )
393
388
394
389
paginator = options [ :paginator ] if source_rids . count == 1
395
390
@@ -511,10 +506,10 @@ def find_related_polymorphic_fragments(source_rids, relationship, options, conne
511
506
end
512
507
end
513
508
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 )
518
513
519
514
paginator = options [ :paginator ] if source_rids . count == 1
520
515
@@ -672,14 +667,14 @@ def find_related_polymorphic_fragments(source_rids, relationship, options, conne
672
667
end
673
668
674
669
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 : { } )
683
678
684
679
opts = options . dup
685
680
records = resource_klass . apply_joins ( records , join_manager , opts )
0 commit comments