module JSONAPI::Serialization::AttributesDeserialization

def attributes

def attributes
  attrs = extract_attributes_from_params
  attrs = attrs.transform_keys(&:to_sym) if attrs.respond_to?(:transform_keys)
  permitted_attrs = permitted_attributes_for_action
  attrs.slice(*permitted_attrs)
end

def extract_attributes_from_params

def extract_attributes_from_params
  @params.dig(:data, :attributes) || @params[:attributes] || {}
end

def permitted_attributes_for_action

def permitted_attributes_for_action
  fields = if @action == :create
             @definition.permitted_creatable_fields
           else
             @definition.permitted_updatable_fields
           end
  fields.map(&:to_sym)
end