From 6ae20cf312d79029435bea7b6ce5f4ff7eb89af1 Mon Sep 17 00:00:00 2001 From: Lucas Hosseini Date: Sun, 20 Nov 2016 18:15:16 +0100 Subject: [PATCH] Allow `fields` option to be passed with string keys. --- lib/jsonapi/renderer.rb | 11 ++++++----- lib/jsonapi/renderer/document.rb | 8 +++++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/jsonapi/renderer.rb b/lib/jsonapi/renderer.rb index 31e816b..2927b1e 100644 --- a/lib/jsonapi/renderer.rb +++ b/lib/jsonapi/renderer.rb @@ -7,13 +7,14 @@ module JSONAPI # # @param [Hash] params # @option [(#jsonapi_id, #jsonapi_type, #jsonapi_related, #as_jsonapi), - # Array<(#jsonapi_id, #jsonapi_type, #jsonapi_related, #as_jsonapi)>, + # Array<(#jsonapi_id, #jsonapi_type, #jsonapi_related, + # #as_jsonapi)>, # nil] data Primary resource(s) to be rendered. # @option [Array<#jsonapi_id>] errors Errors to be rendered. - # @option [String, Hash{Symbol => Hash}] include Relationships to be - # included. - # @option [Hash{Symbol, Array}] fields List of requested fields - # for some or all of the resource types. + # @option include Relationships to be included. See + # JSONAPI::IncludeDirective. + # @option [Hash{Symbol, Array}, Hash{String, Array}] fields + # List of requested fields for some or all of the resource types. # @option [Hash] meta Non-standard top-level meta information to be # included. # @option [Hash] links Top-level links to be included. diff --git a/lib/jsonapi/renderer/document.rb b/lib/jsonapi/renderer/document.rb index 7c446f0..a8cdb91 100644 --- a/lib/jsonapi/renderer/document.rb +++ b/lib/jsonapi/renderer/document.rb @@ -9,7 +9,7 @@ def initialize(params = {}) @errors = params.fetch(:errors, []) @meta = params.fetch(:meta, nil) @links = params.fetch(:links, {}) - @fields = params.fetch(:fields, {}) + @fields = _symbolize_fields(params.fetch(:fields, {})) @jsonapi = params.fetch(:jsonapi, nil) @include = JSONAPI::IncludeDirective.new(params.fetch(:include, {})) end @@ -48,6 +48,12 @@ def errors_hash hash[:errors] = @errors.map(&:as_jsonapi) end end + + def _symbolize_fields(fields) + fields.each_with_object({}) do |(k, v), h| + h[k.to_sym] = v.map(&:to_sym) + end + end end end end