Skip to content

Commit e5cf559

Browse files
committed
provide fields parameter from request to operation and from operation to resource_klass.find or resource_klass.find_by_key (when fetching data)
1 parent 5e4fd81 commit e5cf559

2 files changed

Lines changed: 32 additions & 17 deletions

File tree

lib/jsonapi/operation.rb

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@ def apply
1414
end
1515

1616
class FindOperation < Operation
17-
attr_reader :filters, :include_directives, :sort_criteria, :paginator
17+
attr_reader :filters, :include_directives, :sort_criteria, :paginator, :fields
1818

1919
def initialize(resource_klass, options = {})
2020
super(resource_klass, options)
2121
@filters = options[:filters]
2222
@include_directives = options[:include_directives]
2323
@sort_criteria = options.fetch(:sort_criteria, [])
2424
@paginator = options[:paginator]
25+
@fields = options[:fields]
2526
@transactional = false
2627
end
2728

@@ -52,7 +53,8 @@ def apply
5253
context: @context,
5354
include_directives: @include_directives,
5455
sort_criteria: @sort_criteria,
55-
paginator: @paginator)
56+
paginator: @paginator,
57+
fields: @fields)
5658

5759
options = {}
5860
if JSONAPI.configuration.top_level_links_include_pagination
@@ -77,12 +79,13 @@ def apply
7779
end
7880

7981
class ShowOperation < Operation
80-
attr_reader :id, :include_directives
82+
attr_reader :id, :include_directives, :fields
8183

8284
def initialize(resource_klass, options = {})
8385
super(resource_klass, options)
8486
@id = options.fetch(:id)
8587
@include_directives = options[:include_directives]
88+
@fields = options[:fields]
8689
@transactional = false
8790
end
8891

@@ -91,7 +94,8 @@ def apply
9194

9295
resource_record = @resource_klass.find_by_key(key,
9396
context: @context,
94-
include_directives: @include_directives)
97+
include_directives: @include_directives,
98+
fields: @fields)
9599

96100
return JSONAPI::ResourceOperationResult.new(:ok, resource_record)
97101

@@ -123,18 +127,19 @@ def apply
123127
end
124128

125129
class ShowRelatedResourceOperation < Operation
126-
attr_reader :source_klass, :source_id, :relationship_type
130+
attr_reader :source_klass, :source_id, :relationship_type, :fields
127131

128132
def initialize(resource_klass, options = {})
129133
super(resource_klass, options)
130134
@source_klass = options.fetch(:source_klass)
131135
@source_id = options.fetch(:source_id)
132136
@relationship_type = options.fetch(:relationship_type)
137+
@fields = options[:fields]
133138
@transactional = false
134139
end
135140

136141
def apply
137-
source_resource = @source_klass.find_by_key(@source_id, context: @context)
142+
source_resource = @source_klass.find_by_key(@source_id, context: @context, fields: @fields)
138143

139144
related_resource = source_resource.public_send(@relationship_type)
140145

@@ -146,7 +151,7 @@ def apply
146151
end
147152

148153
class ShowRelatedResourcesOperation < Operation
149-
attr_reader :source_klass, :source_id, :relationship_type, :filters, :sort_criteria, :paginator
154+
attr_reader :source_klass, :source_id, :relationship_type, :filters, :sort_criteria, :paginator, :fields
150155

151156
def initialize(resource_klass, options = {})
152157
super(resource_klass, options)
@@ -156,6 +161,7 @@ def initialize(resource_klass, options = {})
156161
@filters = options[:filters]
157162
@sort_criteria = options[:sort_criteria]
158163
@paginator = options[:paginator]
164+
@fields = options[:fields]
159165
@transactional = false
160166
end
161167

@@ -170,7 +176,7 @@ def page_count
170176
end
171177

172178
def source_resource
173-
@_source_resource ||= @source_klass.find_by_key(@source_id, context: @context)
179+
@_source_resource ||= @source_klass.find_by_key(@source_id, context: @context, fields: @fields)
174180
end
175181

176182
def records
@@ -200,7 +206,8 @@ def apply
200206
related_resource = source_resource.public_send(@relationship_type,
201207
filters: @filters,
202208
sort_criteria: @sort_criteria,
203-
paginator: @paginator)
209+
paginator: @paginator,
210+
fields: @fields)
204211

205212
return JSONAPI::RelatedResourcesOperationResult.new(:ok, source_resource, @relationship_type, related_resource, options)
206213

@@ -210,11 +217,12 @@ def apply
210217
end
211218

212219
class CreateResourceOperation < Operation
213-
attr_reader :data
220+
attr_reader :data, :fields
214221

215222
def initialize(resource_klass, options = {})
216223
super(resource_klass, options)
217224
@data = options.fetch(:data)
225+
@fields = options[:fields]
218226
end
219227

220228
def apply
@@ -247,12 +255,13 @@ def apply
247255
end
248256

249257
class ReplaceFieldsOperation < Operation
250-
attr_reader :data, :resource_id
258+
attr_reader :data, :resource_id, :fields
251259

252260
def initialize(resource_klass, options = {})
253261
super(resource_klass, options)
254262
@resource_id = options.fetch(:resource_id)
255263
@data = options.fetch(:data)
264+
@fields = options[:fields]
256265
end
257266

258267
def apply

lib/jsonapi/request.rb

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,8 @@ def add_find_operation
295295
filters: @filters,
296296
include_directives: @include_directives,
297297
sort_criteria: @sort_criteria,
298-
paginator: @paginator
298+
paginator: @paginator,
299+
fields: @fields
299300
)
300301
end
301302

@@ -304,7 +305,8 @@ def add_show_operation
304305
@resource_klass,
305306
context: @context,
306307
id: @id,
307-
include_directives: @include_directives
308+
include_directives: @include_directives,
309+
fields: @fields
308310
)
309311
end
310312

@@ -323,7 +325,8 @@ def add_show_related_resource_operation(relationship_type)
323325
context: @context,
324326
relationship_type: relationship_type,
325327
source_klass: @source_klass,
326-
source_id: @source_id
328+
source_id: @source_id,
329+
fields: @fields
327330
)
328331
end
329332

@@ -336,7 +339,8 @@ def add_show_related_resources_operation(relationship_type)
336339
source_id: @source_id,
337340
filters: @source_klass.verify_filters(@filters, @context),
338341
sort_criteria: @sort_criteria,
339-
paginator: @paginator
342+
paginator: @paginator,
343+
fields: @fields
340344
)
341345
end
342346

@@ -359,7 +363,8 @@ def parse_add_operation(data)
359363
@operations.push JSONAPI::CreateResourceOperation.new(
360364
@resource_klass,
361365
context: @context,
362-
data: data
366+
data: data,
367+
fields: @fields
363368
)
364369
end
365370
rescue JSONAPI::Exceptions::Error => e
@@ -622,7 +627,8 @@ def parse_single_replace_operation(data, keys, id_key_presence_check_required: t
622627
@resource_klass,
623628
context: @context,
624629
resource_id: key,
625-
data: parse_params(data, updatable_fields)
630+
data: parse_params(data, updatable_fields),
631+
fields: @fields
626632
)
627633
end
628634

0 commit comments

Comments
 (0)