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)


75
76
77
78
79
80
# File 'lib/jsonapi-params/param.rb', line 75

def attributes
  attributes = @data['attributes'] || {}
  attributes = attributes.slice(*self.class.whitelist_attributes)
  attributes = attributes.merge(relationships)
  attributes
end

#idObject



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

def id
  @data['id']
end

#initialize(params) ⇒ Object

Raises:



54
55
56
57
58
# File 'lib/jsonapi-params/param.rb', line 54

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.



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/jsonapi-params/param.rb', line 86

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

  relationships.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"] = params.id
    end

    relationships
  end
end

#typeObject



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

def type
  @data['type']
end