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