class Lanes::API::RoutingBlock

Public Class Methods

new(ext_id) click to toggle source
# File lib/lanes/api/routing.rb, line 15
def initialize(ext_id)
    Lanes::Extensions.for_identifier(ext_id) ||
        raise( "Unable to find extension '#{ext_id}' for screen group")
    @ext_id = ext_id
end

Public Instance Methods

enable_cors(path_suffix, options = {origins: '*', methods: [:get]}) click to toggle source
# File lib/lanes/api/routing.rb, line 27
def enable_cors(path_suffix, options = {origins: '*', methods: [:get]})
    API::Root::CORS_PATHS[make_path(path_suffix)] = options
end
resources(model, options = {}) click to toggle source
# File lib/lanes/api/routing.rb, line 31
def resources(model, options = {})
    path = options[:path] || model.api_path
    controller = options[:controller] || Lanes::API::GenericController
    format = options[:format] || '.json'
    if options[:under]
        options[:parent_attribute] = options[:under].underscore.singularize+'_id'
    end

    prefix = options[:parent_attribute] ? options[:parent_attribute] + '/' : ''

    configured_routes = Hash.new{|hsh, key| hsh[key] = []}

    bind = lambda{ |method, route, wrapper_method = method|
        route = route + format
        configured_routes[route].push(method)
        self.send( method, route,
                   &RequestWrapper.send(wrapper_method, model, controller, options) )
    }

    # show
    if controller.method_defined?(:show)
        bind[:get, "#{prefix}#{path}/?:id?"]
    end

    # create
    if controller.method_defined?(:create)
        bind[:post, "#{prefix}#{path}"]
    end

    unless options[:immutable]

        # update
        if controller.method_defined?(:update)
            bind[:patch, "#{prefix}#{path}/?:id?", :update]
            bind[:put,   "#{prefix}#{path}/?:id?", :update]
        end

        # destroy
        if controller.method_defined?(:destroy) and not options[:indestructible]
            bind[:delete, "#{prefix}#{path}/?:id?"]
        end

    end

    if options[:cors]
        cors = options[:cors].is_a?(Hash) ? otions[:cors] : {origins: options[:cors]}

        configured_routes.each do | route, methods |
            enable_cors route, cors.merge(methods: methods)
        end

    end

end

Private Instance Methods

make_path(path) click to toggle source
# File lib/lanes/api/routing.rb, line 88
def make_path(path)
    path = Lanes.config.api_path + '/' + @ext_id + '/' + path
    Lanes.logger.debug("[route]: #{path}")
    path
end