class SimpleJsonapi::Parameters::FieldsSpec

Represents the fields parameter as defined by the JSONAPI spec.

Public Class Methods

new(specs = {}) click to toggle source

@param specs [Hash{Symbol => String,Array<String>,Array<Symbol>}]

The hash keys are resource types, and the values are lists of field names to render in the output.
# File lib/simple_jsonapi/parameters/fields_spec.rb, line 16
def initialize(specs = {})
  @data = {}
  merge(specs) if specs.present?
end
wrap(fields) click to toggle source

Wraps a fields parameter in a {FieldsSpec} instance. @param fields [Hash{Symbol => String},FieldsSpec]

# File lib/simple_jsonapi/parameters/fields_spec.rb, line 6
def self.wrap(fields)
  if fields.is_a?(FieldsSpec)
    fields
  else
    FieldsSpec.new(fields)
  end
end

Public Instance Methods

[](type) click to toggle source

@param type [String,Symbol] @return [Array<Symbol>]

# File lib/simple_jsonapi/parameters/fields_spec.rb, line 36
def [](type)
  @data[type.to_sym]
end
all_fields?(type) click to toggle source

@param type [String,Symbol]

# File lib/simple_jsonapi/parameters/fields_spec.rb, line 41
def all_fields?(type)
  @data[type.to_sym].nil?
end
merge(specs = {}) click to toggle source

@param specs [Hash{Symbol => String,Array<String>,Array<Symbol>}]

The hash keys are resource types, and the values are lists of field names to render in the output.

@return [self]

# File lib/simple_jsonapi/parameters/fields_spec.rb, line 24
def merge(specs = {})
  specs.each do |type, fields|
    @data[type.to_sym] = Array
                         .wrap(fields)
                         .flat_map { |s| s.to_s.split(",") }
                         .map { |s| s.strip.to_sym }
  end
  self
end