lib/her/json_api/model.rb
module Her
module JsonApi
module Model
def self.included(klass)
klass.class_eval do
include Her::Model
[:parse_root_in_json, :include_root_in_json, :root_element, :primary_key].each do |method|
define_method method do |*_|
raise NoMethodError, "Her::JsonApi::Model does not support the #{method} configuration option"
end
end
method_for :update, :patch
@type = name.demodulize.tableize
def self.parse(data)
data.fetch(:attributes).merge(data.slice(:id))
end
def self.to_params(attributes, changes = {})
request_data = { type: @type }.tap do |request_body|
attrs = attributes.dup.symbolize_keys.tap do |filtered_attributes|
if her_api.options[:send_only_modified_attributes]
filtered_attributes.slice! *changes.keys.map(&:to_sym)
end
end
request_body[:id] = attrs.delete(:id) if attrs[:id]
request_body[:attributes] = attrs
end
{ data: request_data }
end
def self.type(type_name)
@type = type_name.to_s
end
end
end
end
end
end