Module: JSONAPI::Param::InstanceMethods

Defined in:
lib/jsonapi-params/param.rb

Instance Method Summary collapse

Instance Method Details

#attributesHash

Handles parameters to return sanitized attributes and their relationships

Returns:

  • (Hash)


81
82
83
84
85
86
87
88
89
90
91
# File 'lib/jsonapi-params/param.rb', line 81

def attributes
  attributes = @data['attributes'] || {}
  attributes = attributes.slice(*self.class.whitelist_attributes)
  attributes = attributes.merge(relationships)
  collection_attributes = strong_parameters? ? attributes.to_unsafe_h : attributes.to_h

  collection_attributes.inject({}) do |attributes, (key, value)|
    attributes[key.to_s.underscore.to_sym] = value
    attributes
  end
end

#idObject



68
69
70
# File 'lib/jsonapi-params/param.rb', line 68

def id
  @data['id']
end

#initialize(params) ⇒ Object

Raises:



60
61
62
63
64
# File 'lib/jsonapi-params/param.rb', line 60

def initialize(params)
  raise InvalidParam, 'Data is required' if params.nil? || params['data'].nil?

  @data = params['data']
end

#relationshipsHash

Handles parameters to return relationships

Returns:

  • (Hash)

Raises:

  • (RuntimeError)

    if the relationship is a one-to-many relationship.



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/jsonapi-params/param.rb', line 97

def relationships
  relationships = @data['relationships'] || {}
  relationships = relationships.slice(*self.class.whitelist_relationships)

  relationships.to_h.inject({}) do |relationships, (relationship_key, relationship_object)|
    data = relationship_object['data']

    if data.is_a?(Array)
      raise 'One-to-many relationship is not supported'
    elsif data.is_a?(Hash)
      params = params_klass(relationship_key).new(relationship_object)

      relationships["#{relationship_key}_id".to_sym] = params.id
    end

    relationships
  end
end

#typeObject



74
75
76
# File 'lib/jsonapi-params/param.rb', line 74

def type
  @data['type']
end