Module: JsonApiToolbox::Renderizable

Defined in:
lib/renderizable.rb

Instance Method Summary collapse

Instance Method Details

#default_includes_params ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/renderizable.rb', line 33

def default_includes_params
  model_relationships =
    model_name.reflect_on_all_associations(:has_one).map(&:name)
  model_relationships +=
    model_name.reflect_on_all_associations(:has_many).map(&:name)

  # This line exists to exclude from default_includes_params a relationship
  # with 'versions' (see gem paper_trail)
  model_relationships.delete(:versions)      

  params.merge!(includes: model_relationships)
end

#includes_params ⇒ Object



23
24
25
# File 'lib/renderizable.rb', line 23

def includes_params
  params.fetch(:includes, {})
end

#permitted_params ⇒ Object



27
28
29
30
31
# File 'lib/renderizable.rb', line 27

def permitted_params
  model = controller_name.singularize
  parsed_params = params.require(model).permit(permitted_attributes).to_h
  JsonApiToolbox::Postable.normalize_post(parsed_params, model_name)
end

#render_object(object) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/renderizable.rb', line 15

def render_object(object)
  if object.respond_to?(:valid?) && !object.valid?
    render_with_errors(object.errors)
  else
    render jsonapi: object, include: includes_params
  end
end

#render_with_errors(object_errors) ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/renderizable.rb', line 5

def render_with_errors(object_errors)
  errors = object_errors.details.map do |field, error_details|
    error_details.each_with_index.map do |item, error_i|
      build_line(item[:error], field, object_errors.messages[field][error_i])
    end
  end

  render json: { errors: errors }, status: 422
end