diff --git a/lib/jsonapi/processor.rb b/lib/jsonapi/processor.rb index 242680308..b1c6dc3d8 100644 --- a/lib/jsonapi/processor.rb +++ b/lib/jsonapi/processor.rb @@ -68,13 +68,15 @@ def find include_directives = params[:include_directives] sort_criteria = params.fetch(:sort_criteria, []) paginator = params[:paginator] + fields = params[:fields] verified_filters = resource_klass.verify_filters(filters, context) resource_records = resource_klass.find(verified_filters, context: context, include_directives: include_directives, sort_criteria: sort_criteria, - paginator: paginator) + paginator: paginator, + fields: fields) page_options = {} if (JSONAPI.configuration.top_level_meta_include_record_count || @@ -97,13 +99,15 @@ def find def show include_directives = params[:include_directives] + fields = params[:fields] id = params[:id] key = resource_klass.verify_key(id, context) resource_record = resource_klass.find_by_key(key, context: context, - include_directives: include_directives) + include_directives: include_directives, + fields: fields) return JSONAPI::ResourceOperationResult.new(:ok, resource_record) end @@ -123,8 +127,9 @@ def show_related_resource source_klass = params[:source_klass] source_id = params[:source_id] relationship_type = params[:relationship_type].to_sym + fields = params[:fields] - source_resource = source_klass.find_by_key(source_id, context: context) + source_resource = source_klass.find_by_key(source_id, context: context, fields: fields) related_resource = source_resource.public_send(relationship_type) @@ -138,13 +143,15 @@ def show_related_resources filters = params[:filters] sort_criteria = params[:sort_criteria] paginator = params[:paginator] + fields = params[:fields] - source_resource ||= source_klass.find_by_key(source_id, context: context) + source_resource ||= source_klass.find_by_key(source_id, context: context, fields: fields) related_resources = source_resource.public_send(relationship_type, filters: filters, sort_criteria: sort_criteria, - paginator: paginator) + paginator: paginator, + fields: fields) if ((JSONAPI.configuration.top_level_meta_include_record_count) || (paginator && paginator.class.requires_record_count) || @@ -182,7 +189,6 @@ def show_related_resources def create_resource data = params[:data] - resource = resource_klass.create(context) result = resource.replace_fields(data) diff --git a/lib/jsonapi/request_parser.rb b/lib/jsonapi/request_parser.rb index f03208c90..1c2668bec 100644 --- a/lib/jsonapi/request_parser.rb +++ b/lib/jsonapi/request_parser.rb @@ -295,7 +295,8 @@ def add_find_operation filters: @filters, include_directives: @include_directives, sort_criteria: @sort_criteria, - paginator: @paginator + paginator: @paginator, + fields: @fields ) end @@ -304,7 +305,8 @@ def add_show_operation @resource_klass, context: @context, id: @id, - include_directives: @include_directives + include_directives: @include_directives, + fields: @fields ) end @@ -323,7 +325,8 @@ def add_show_related_resource_operation(relationship_type) context: @context, relationship_type: relationship_type, source_klass: @source_klass, - source_id: @source_id + source_id: @source_id, + fields: @fields ) end @@ -336,7 +339,8 @@ def add_show_related_resources_operation(relationship_type) source_id: @source_id, filters: @source_klass.verify_filters(@filters, @context), sort_criteria: @sort_criteria, - paginator: @paginator + paginator: @paginator, + fields: @fields ) end @@ -359,7 +363,8 @@ def parse_add_operation(data) @operations.push JSONAPI::Operation.new(:create_resource, @resource_klass, context: @context, - data: data + data: data, + fields: @fields ) end rescue JSONAPI::Exceptions::Error => e @@ -619,7 +624,8 @@ def parse_single_replace_operation(data, keys, id_key_presence_check_required: t @resource_klass, context: @context, resource_id: key, - data: parse_params(data, updatable_fields) + data: parse_params(data, updatable_fields), + fields: @fields ) end