module Her::JsonApi::Model

Public Class Methods

included(klass) click to toggle source
# File lib/castle-her/json_api/model.rb, line 5
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 |*args|
        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 { |request_body| 
        attrs = attributes.dup.symbolize_keys.tap { |filtered_attributes|
          if her_api.options[:send_only_modified_attributes]
            filtered_attributes = changes.symbolize_keys.keys.inject({}) do |hash, attribute|
              hash[attribute] = filtered_attributes[attribute]
              hash
            end
          end
        }
        request_body[:id] = attrs.delete(:id) if attrs[:id]
        request_body[:attributes] = attrs
      }
      { data: request_data }
    end

    def self.type(type_name)
      @type = type_name.to_s
    end
  end
end
parse(data) click to toggle source
# File lib/castle-her/json_api/model.rb, line 19
def self.parse(data)
  data.fetch(:attributes).merge(data.slice(:id))
end
to_params(attributes, changes={}) click to toggle source
# File lib/castle-her/json_api/model.rb, line 23
def self.to_params(attributes, changes={})
  request_data = { type: @type }.tap { |request_body| 
    attrs = attributes.dup.symbolize_keys.tap { |filtered_attributes|
      if her_api.options[:send_only_modified_attributes]
        filtered_attributes = changes.symbolize_keys.keys.inject({}) do |hash, attribute|
          hash[attribute] = filtered_attributes[attribute]
          hash
        end
      end
    }
    request_body[:id] = attrs.delete(:id) if attrs[:id]
    request_body[:attributes] = attrs
  }
  { data: request_data }
end
type(type_name) click to toggle source
# File lib/castle-her/json_api/model.rb, line 39
def self.type(type_name)
  @type = type_name.to_s
end