Module: Daredevil::Responder::Actions

Included in:
Daredevil::Responder
Defined in:
lib/daredevil/responder/actions.rb

Constant Summary collapse

ACTIONS =
%w(index show create edit update destroy).freeze

Instance Method Summary collapse

Instance Method Details

#jbuilder_resource_render_optionsObject



46
47
48
# File 'lib/daredevil/responder/actions.rb', line 46

def jbuilder_resource_render_options
  render_options
end

#relation?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/daredevil/responder/actions.rb', line 73

def relation?
  resource.is_a?(ActiveRecord::Relation)
end

#render_resourceObject



38
39
40
# File 'lib/daredevil/responder/actions.rb', line 38

def render_resource
  controller.render(resource_render_options)
end

#resource_classObject



68
69
70
71
# File 'lib/daredevil/responder/actions.rb', line 68

def resource_class
  return resource.model if relation?
  resource.class
end

#resource_render_optionsObject



42
43
44
# File 'lib/daredevil/responder/actions.rb', line 42

def resource_render_options
  self.send(:"#{Daredevil.config.responder_type.to_s}_resource_render_options")
end

#respond_to_create_actionObject



13
14
15
16
17
18
19
20
21
# File 'lib/daredevil/responder/actions.rb', line 13

def respond_to_create_action
  if resource.persisted? && resource.valid?
    self.status ||= :created
    render_resource
  else
    self.status ||= :conflict
    render_error
  end
end

#respond_to_destroy_actionObject



33
34
35
36
# File 'lib/daredevil/responder/actions.rb', line 33

def respond_to_destroy_action
  self.status ||= :no_content
  controller.head(status, render_options)
end

#respond_to_update_actionObject



23
24
25
26
27
28
29
30
31
# File 'lib/daredevil/responder/actions.rb', line 23

def respond_to_update_action
  if resource.valid?
    self.status ||= :ok
    render_resource
  else
    self.status ||= :conflict
    render_error
  end
end

#responder_typeObject



77
78
79
80
81
# File 'lib/daredevil/responder/actions.rb', line 77

def responder_type
  supported_responders.each do |type, klass|
    return type.to_sym if defined?(klass.safe_constantize).eql?('constant')
  end
end

#serializer_classObject



59
60
61
62
63
64
65
66
# File 'lib/daredevil/responder/actions.rb', line 59

def serializer_class
  options[:serializer] ||=
    [
      namespace,
      "#{resource_class}Serializer"
    ].compact.join('::').safe_constantize
  options[:serializer] ||= "#{resource_class}Serializer".safe_constantize
end

#serializers_resource_render_optionsObject



50
51
52
53
54
55
56
57
# File 'lib/daredevil/responder/actions.rb', line 50

def serializers_resource_render_options
  serializer_key = relation? ? :each_serializer : :serializer

  render_options.merge(
    json: resource,
    serializer_key => serializer_class
  )
end

#supported_respondersObject



83
84
85
86
87
88
89
# File 'lib/daredevil/responder/actions.rb', line 83

def supported_responders
  {
    jbuilder: 'Jbuilder',
    serializers: 'ActiveModel::Serializers',
    rabl: 'RABL'
  }
end