Module: Lanes::API::RequestWrapper

Defined in:
lib/lanes/api/request_wrapper.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.delete(*args) ⇒ Object



25
26
27
28
29
# File 'lib/lanes/api/request_wrapper.rb', line 25

def delete(*args)
    make_handler(*args) do |controller|
        controller.perform_destroy
    end
end

.get(*args) ⇒ Object



7
8
9
10
11
# File 'lib/lanes/api/request_wrapper.rb', line 7

def get(*args)
    make_handler(*args) do |controller|
        controller.perform_retrieval
    end
end

.make_handler(model, controller, parent_attribute) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/lanes/api/request_wrapper.rb', line 31

def make_handler(model, controller, parent_attribute)
    lambda do
        authentication = Lanes::API::AuthenticationProvider.new(
          request_type: request.request_method,
          session:      session,
          params:       params
        )
        authentication.wrap_request(model,self) do
            if parent_attribute
              params[:nested_attribute] = Hash[ parent_attribute,
                                               params[parent_attribute] ]
            end
            wrap_request(!request.get?) do
                yield controller.new(model, authentication, params, data)
            end
        end
    end
end

.post(*args) ⇒ Object



13
14
15
16
17
# File 'lib/lanes/api/request_wrapper.rb', line 13

def post(*args)
    make_handler(*args) do |controller|
        controller.perform_creation
    end
end

.update(*args) ⇒ Object



19
20
21
22
23
# File 'lib/lanes/api/request_wrapper.rb', line 19

def update(*args)
    make_handler(*args) do |controller|
        controller.perform_update
    end
end

Instance Method Details

#log_requestObject



51
52
53
# File 'lib/lanes/api/request_wrapper.rb', line 51

def log_request
    Lanes.logger.info "UserID: #{session['user_id']}, Params: #{request.params}"
end

#wrap_request(with_transaction = true) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/lanes/api/request_wrapper.rb', line 55

def wrap_request(with_transaction=true)
    response = { success: false, message: "No response was generated" }
    log_request
    if with_transaction
        Lanes::Model.transaction do
            response = yield
            raise ActiveRecord::StatementInvalid if request.env['X_ROLLBACK_AFTER_REQUEST']
        end
    else
        response = yield
    end
    if false == response[:success]
        status(406)
    end
    content_type 'application/json'
    Oj.dump(response, mode: :compat)
end