Sha256: 8d9597f4b746769dd5cc22cafea4b244986cb7ddd8c0cf2d2d3c438b49548378

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

module Lanes
    module API

        module RequestWrapper
            class << self

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

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

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

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

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

            def wrap_json_reply
                response = yield
                if false == response[:success]
                    status(406)
                end
                Oj.dump(response, mode: :compat)
            end

        end


    end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lanes-0.0.5 lib/lanes/api/request_wrapper.rb