Module: Flapjack::Gateways::JSONAPI::Methods::ResourceDelete

Defined in:
lib/flapjack/gateways/jsonapi/methods/resource_delete.rb

Defined Under Namespace

Modules: Helpers

Class Method Summary collapse

Class Method Details

.registered(app) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/flapjack/gateways/jsonapi/methods/resource_delete.rb', line 31

def self.registered(app)
  app.helpers Flapjack::Gateways::JSONAPI::Helpers::Headers
  app.helpers Flapjack::Gateways::JSONAPI::Helpers::Miscellaneous
  app.helpers Flapjack::Gateways::JSONAPI::Helpers::Resources
  app.helpers Flapjack::Gateways::JSONAPI::Helpers::Serialiser
  app.helpers Flapjack::Gateways::JSONAPI::Methods::ResourceDelete::Helpers

  Flapjack::Gateways::JSONAPI::RESOURCE_CLASSES.each do |resource_class|

    jsonapi_method = resource_class.jsonapi_methods[:delete]

    unless jsonapi_method.nil?
      resource = resource_class.short_model_name.plural

      app.class_eval do
        single = resource_class.short_model_name.singular

        model_type = resource_class.short_model_name.name

        swagger_path "/#{resource}/{#{single}_id}" do
          operation :delete do
            key :description, jsonapi_method.descriptions[:singular]
            key :operationId, "delete_#{single}"
            key :consumes, [JSONAPI_MEDIA_TYPE]
            parameter do
              key :name, "#{single}_id".to_sym
              key :in, :path
              key :description, "Id of a #{single}"
              key :required, true
              key :type, :string
              key :format, :uuid
            end
            response 204 do
              key :description, "No Content; #{model_type} deletion success"
            end
            response 404 do
              key :description, "Not Found"
              schema do
                key :'$ref', :Errors
              end
            end
          end
        end

        swagger_path "/#{resource}" do
          operation :delete do
            key :description, jsonapi_method.descriptions[:multiple]
            key :operationId, "delete_#{resource}"
            key :consumes, [JSONAPI_MEDIA_TYPE_BULK]
            parameter do
              key :name, :data
              key :in, :body
              key :description, "#{resource} to delete"
              key :required, true
              schema do
                key :type, :array
                items do
                  key :"$ref", "#{model_type}Reference".to_sym
                end
              end
            end
            response 204 do
              key :description, "No Content; #{resource} deletion succeeded"
            end
            response 404 do
              key :description, "Not Found"
              schema do
                key :'$ref', :Error
              end
            end
          end
        end
      end

      app.delete %r{^/#{resource}(?:/(.+))?$} do
        resource_id = params[:captures].nil? ? nil :
                        params[:captures].first
        status 204

        resource_delete(resource_class, resource_id)
      end
    end
  end
end