module JsonApiable

Constants

JSONAPI_CONTENT_TYPE
VERSION

Attributes

configuration[W]
jsonapi_assign_params[R]
jsonapi_build_params[R]
jsonapi_default_page_size[R]
jsonapi_exclude_attributes[R]
jsonapi_exclude_relationships[R]
jsonapi_filter_class[R]
jsonapi_filter_hash[R]
jsonapi_include_array[R]
jsonapi_page_hash[R]

Public Class Methods

configuration() click to toggle source
# File lib/json_apiable/json_apiable.rb, line 35
def self.configuration
  @configuration ||= Configuration.new
end
configure() { |configuration| ... } click to toggle source
# File lib/json_apiable/json_apiable.rb, line 43
def self.configure
  yield(configuration)
end
reset() click to toggle source
# File lib/json_apiable/json_apiable.rb, line 39
def self.reset
  @configuration = Configuration.new
end

Public Instance Methods

ensure_jsonapi_content_type() click to toggle source
# File lib/json_apiable/json_apiable.rb, line 123
def ensure_jsonapi_content_type
  respond_to_unsupported_media_type unless supported_media_type?
end
ensure_jsonapi_valid_query_params() click to toggle source
# File lib/json_apiable/json_apiable.rb, line 127
def ensure_jsonapi_valid_query_params
  invalid_params = request.query_parameters.keys.reject { |k| JsonApiable.configuration.valid_query_params.include?(k) }
  respond_to_bad_argument(invalid_params.first) if invalid_params.present?
end
jsonapi_allowed_attributes() click to toggle source

Should be overwritten in specific controllers

# File lib/json_apiable/json_apiable.rb, line 114
def jsonapi_allowed_attributes
  %i[]
end
jsonapi_allowed_relationships() click to toggle source

Should be overwritten in specific controllers

# File lib/json_apiable/json_apiable.rb, line 119
def jsonapi_allowed_relationships
  %i[]
end
jsonapi_attribute(attrib_key) click to toggle source
# File lib/json_apiable/json_apiable.rb, line 47
def jsonapi_attribute(attrib_key)
  jsonapi_build_params.dig(:data, :attributes, attrib_key)
end
jsonapi_attribute_present?(attrib_key) click to toggle source
# File lib/json_apiable/json_apiable.rb, line 51
def jsonapi_attribute_present?(attrib_key)
  jsonapi_attribute(attrib_key).present?
end
jsonapi_exclude_attribute(attrib_key) click to toggle source
# File lib/json_apiable/json_apiable.rb, line 88
def jsonapi_exclude_attribute(attrib_key)
  @jsonapi_exclude_attributes ||= []
  @jsonapi_exclude_attributes << attrib_key.to_sym
  @invalidate_assign_params = true
  jsonapi_build_params.dig(:data, :attributes, attrib_key)
end
jsonapi_exclude_relationship(rel_key) click to toggle source
# File lib/json_apiable/json_apiable.rb, line 95
def jsonapi_exclude_relationship(rel_key)
  @jsonapi_exclude_relationships ||= []
  @jsonapi_exclude_relationships << rel_key.to_sym
  @invalidate_assign_params = true
  jsonapi_build_params.dig(:data, :relationships, rel_key)
end
jsonapi_relationship(attrib_key) click to toggle source
# File lib/json_apiable/json_apiable.rb, line 55
def jsonapi_relationship(attrib_key)
  jsonapi_build_params.dig(:data, :relationships, attrib_key)
end
jsonapi_relationship_attribute(relationship, attribute) click to toggle source
# File lib/json_apiable/json_apiable.rb, line 67
def jsonapi_relationship_attribute(relationship, attribute)
  if [:id, :type].include?(attribute.to_sym)
    jsonapi_relationship_data(relationship)&.dig(attribute)
  else
    jsonapi_relationship_data(relationship)&.dig(:attributes, attribute)
  end
end
jsonapi_relationship_data(attrib_key) click to toggle source
# File lib/json_apiable/json_apiable.rb, line 59
def jsonapi_relationship_data(attrib_key)
  jsonapi_build_params.dig(:data, :relationships, attrib_key, :data)
end
jsonapi_relationship_present?(attrib_key) click to toggle source
# File lib/json_apiable/json_apiable.rb, line 63
def jsonapi_relationship_present?(attrib_key)
  jsonapi_relationship(attrib_key).present?
end
parse_jsonapi_include() click to toggle source
# File lib/json_apiable/json_apiable.rb, line 153
def parse_jsonapi_include
  @jsonapi_include_array = query_params[:include].presence&.gsub(/ /, '')&.split(',')&.map(&:to_sym).to_a
end
parse_jsonapi_pagination() click to toggle source
# File lib/json_apiable/json_apiable.rb, line 149
def parse_jsonapi_pagination
  @jsonapi_page_hash = PaginationParser.parse_pagination!(query_params, jsonapi_default_page_size)
end
query_params() click to toggle source
# File lib/json_apiable/json_apiable.rb, line 157
def query_params
  request.query_parameters
end
set_jsonapi_content_type() click to toggle source
# File lib/json_apiable/json_apiable.rb, line 145
def set_jsonapi_content_type
  response.headers['Content-Type'] = JSONAPI_CONTENT_TYPE
end
set_jsonapi_filter(filter_class) click to toggle source
# File lib/json_apiable/json_apiable.rb, line 140
def set_jsonapi_filter(filter_class)
  @jsonapi_filter_class = filter_class
  @jsonapi_filter_hash = FilterParser.parse_filters!(jsonapi_build_params, filter_class)
end
supported_media_type?() click to toggle source
# File lib/json_apiable/json_apiable.rb, line 132
def supported_media_type?
  if JsonApiable.configuration.supported_media_type_proc.present?
    JsonApiable.configuration.supported_media_type_proc.call(request)
  else
    request.content_type == JSONAPI_CONTENT_TYPE
  end
end