class SimpleJsonapi::Rails::ActionController::JsonapiHelper
Attributes
controller[R]
pointers[R]
request_validator[R]
Public Class Methods
new(controller)
click to toggle source
# File lib/simple_jsonapi/rails/action_controller/jsonapi_helper.rb, line 11 def initialize(controller) @controller = controller @pointers = {} @request_validator = RequestValidator.new(request, params) end
Public Instance Methods
deserialize(jsonapi_data)
click to toggle source
def url_helpers
::Rails.application.routes.url_helpers
end
# File lib/simple_jsonapi/rails/action_controller/jsonapi_helper.rb, line 61 def deserialize(jsonapi_data) jsonapi_hash = case jsonapi_data when String then JSON.parse(jsonapi_data).deep_symbolize_keys when Hash then jsonapi_data.deep_symbolize_keys else jsonapi_data end data = jsonapi_hash[:data] return unless data result = {} pointers = {} result[:type] = data[:type] result[:id] = data[:id] pointers[:type] = "/data/type" pointers[:id] = "/data/id" if data[:attributes].present? data[:attributes].each do |name, value| result[name] = value pointers[name] = "/data/attributes/#{name}" end end if data[:relationships].present? data[:relationships].each do |name, value| related_data = value[:data] if related_data.is_a?(Array) singular_name = name.to_s.singularize result[:"#{singular_name}_types"] = related_data.pluck(:type) result[:"#{singular_name}_ids"] = related_data.pluck(:id) pointers[:"#{singular_name}_types"] = "/data/relationships/#{name}" pointers[:"#{name}_ids"] = "/data/relationships/#{name}" elsif related_data.is_a?(Hash) result[:"#{name}_type"] = related_data[:type] result[:"#{name}_id"] = related_data[:id] pointers[:"#{name}_type"] = "/data/relationships/#{name}" pointers[:"#{name}_id"] = "/data/relationships/#{name}" end end end @pointers = pointers result end
fields_params()
click to toggle source
# File lib/simple_jsonapi/rails/action_controller/jsonapi_helper.rb, line 21 def fields_params (params[:fields] || {}).transform_values { |f| f.split(/,/) } end
filter_param(param_name)
click to toggle source
# File lib/simple_jsonapi/rails/action_controller/jsonapi_helper.rb, line 25 def filter_param(param_name) (params[:filter] || {})[param_name] end
filter_param_list(param_name)
click to toggle source
# File lib/simple_jsonapi/rails/action_controller/jsonapi_helper.rb, line 29 def filter_param_list(param_name) param_value = filter_param(param_name) return nil unless param_value param_value.split(/,/) end
include_params()
click to toggle source
# File lib/simple_jsonapi/rails/action_controller/jsonapi_helper.rb, line 17 def include_params params[:include].to_s.split(/,/).presence end
render_bad_request(message)
click to toggle source
# File lib/simple_jsonapi/rails/action_controller/jsonapi_helper.rb, line 50 def render_bad_request(message) error = SimpleJsonapi::Errors::BadRequest.new(detail: message) render jsonapi_errors: [error], status: :bad_request end
render_model_errors(model)
click to toggle source
# File lib/simple_jsonapi/rails/action_controller/jsonapi_helper.rb, line 45 def render_model_errors(model) errors = SimpleJsonapi::Errors::ActiveModelError.from_errors(model.errors, pointers) render jsonapi_errors: errors, status: :unprocessable_entity end
render_record_not_found(error)
click to toggle source
@param error [ActiveRecord::RecordNotFound]
# File lib/simple_jsonapi/rails/action_controller/jsonapi_helper.rb, line 41 def render_record_not_found(error) render jsonapi_errors: error, status: :not_found end
validate_jsonapi_request_body()
click to toggle source
# File lib/simple_jsonapi/rails/action_controller/jsonapi_helper.rb, line 114 def validate_jsonapi_request_body unless request_validator.valid_request_body? raise InvalidJsonStructureError, "Not a valid jsonapi request body" end end
validate_jsonapi_request_headers()
click to toggle source
# File lib/simple_jsonapi/rails/action_controller/jsonapi_helper.rb, line 109 def validate_jsonapi_request_headers return head :unsupported_media_type unless request_validator.valid_content_type_header? head :not_acceptable unless request_validator.valid_accept_header? end