3
3
module Types
4
4
# :nodoc:
5
5
class OrganizationType < Types ::BaseObject
6
- field :id , ID , null : false
6
+ include Types ::MarcRecordsQuery
7
+
8
+ field :slug , ID , null : true
7
9
field :name , String , null : true
8
10
field :created_at , GraphQL ::Types ::ISO8601DateTime , null : false
9
11
field :updated_at , GraphQL ::Types ::ISO8601DateTime , null : false
@@ -13,7 +15,6 @@ class OrganizationType < Types::BaseObject
13
15
# field :normalization_steps, Types::JsonType, null: true
14
16
field :public , Boolean , null : true
15
17
field :name , String , null : true
16
- field :slug , String , null : true
17
18
field :records , [ MarcRecordType ] , null : true do
18
19
description 'Return all MARC records'
19
20
argument :filter , [ String ] , required : false
@@ -23,53 +24,7 @@ class OrganizationType < Types::BaseObject
23
24
def records ( limit : 25 , **args , &block )
24
25
return to_enum ( :records , **args , limit : limit ) unless block
25
26
26
- with_limit ( limit , **args , &block )
27
- end
28
-
29
- def with_limit ( limit , **args , &block )
30
- return filter_records ( **args , &block ) unless limit
31
-
32
- i = 0
33
-
34
- filter_records ( **args ) . each do |record |
35
- yield record
36
- i += 1
37
- break if i >= limit
38
- end
39
- end
40
-
41
- def each_record ( &block )
42
- return to_enum ( :each_record ) unless block
43
-
44
- object . default_stream . uploads . find_each do |upload |
45
- upload . each_marc_record_metadata ( &block )
46
- end
47
- end
48
-
49
- def filter_records ( filter : nil , &block )
50
- return to_enum ( :filter_records , filter : filter ) unless block
51
-
52
- return each_record ( &block ) unless filter
53
-
54
- each_record do |record |
55
- yield record if filter . all? { |f | evaluate_marcspec_filter ( record . marc , f ) }
56
- end
57
- end
58
-
59
- def evaluate_marcspec_filter ( record , filter )
60
- if filter . include? ( '$' )
61
- field , subfield = filter . split ( '$' , 2 )
62
-
63
- record . fields ( field ) . any? do |f |
64
- f [ subfield ]
65
- end
66
- elsif filter . match? ( /^\d {3}[a-z]$/ )
67
- field = filter [ 0 ..2 ]
68
- subfield = filter [ 3 ]
69
- evaluate_marcspec_filter ( record , "#{ field } $#{ subfield } " )
70
- else
71
- record . marc [ filter ]
72
- end
27
+ with_limit ( limit , :filter_records , organization : object , **args , &block )
73
28
end
74
29
end
75
30
end
0 commit comments