class Rubapi::Router
Attributes
routes[RW]
Public Class Methods
blank_resource(resource)
click to toggle source
# File lib/rubapi/router.rb, line 71 def blank_resource(resource) { name: resource, actions: { get: [], post: [], put: [], delete:[] }, nested: [], controller: nil, pagination: nil } end
controller(klass)
click to toggle source
# File lib/rubapi/router.rb, line 108 def controller(klass) @current_resource[:controller] = klass end
extract_params(uri_params, params)
click to toggle source
# File lib/rubapi/router.rb, line 40 def extract_params(uri_params, params) result = {} if params.any? for i in 1..(params.size) key = params[i-1] key[0]='' result[key] = uri_params[i*2] end end result end
fetch(path, verb)
click to toggle source
# File lib/rubapi/router.rb, line 20 def fetch(path, verb) paths = path.split("/") resources = paths.select{|pa| /([a-z]+)/.match pa }.map(&:to_sym) resources = find_resource(resources) return nil if resources.nil? resources[:actions][verb].each do |re| resource_path = re[:path].split("/") if paths.count == resource_path.count request = re.clone request[:controller] = resources[:controller] request[:pagination] = resources[:pagination] return request end end false end
find_resource(resources)
click to toggle source
# File lib/rubapi/router.rb, line 54 def find_resource(resources) self.routes ||= [] resource = resources.shift root = self.routes.select{|route| route[:name] == resource}.first while(resources.any?) resource = resources.shift if root[:nested].any? root = root[:nested].select {|route| route[:name] == resource}.first end end root end
pagination(options)
click to toggle source
# File lib/rubapi/router.rb, line 112 def pagination(options) @current_resource[:pagination] = options end
resource(resource) { || ... }
click to toggle source
# File lib/rubapi/router.rb, line 6 def resource(resource) self.routes ||= [] if @nested_resource @current_resource[:nested] << rest_resource(resource) else self.routes << rest_resource(resource) end @current_resource = find_resource([resource]) @nested_resource = true yield if block_given? @nested_resource = false end
rest_resource(resource)
click to toggle source
# File lib/rubapi/router.rb, line 86 def rest_resource(resource) path = "/#{resource}" if @nested_resource path = "/#{@current_resource[:name]}/:#{@current_resource[:name]}_id/#{resource}" end blank_resource(resource).tap do |rest| rest[:actions][:get] << { method: :index , path: "#{path}" } rest[:actions][:get] << { method: :show , path: "#{path}/:#{resource}_id" } rest[:actions][:post] << { method: :create , path: "#{path}" } rest[:actions][:put] << { method: :update , path: "#{path}/:#{resource}_id" } rest[:actions][:delete] << { method: :delete , path: "#{path}/:#{resource}_id" } end end
without(*actions)
click to toggle source
# File lib/rubapi/router.rb, line 100 def without(*actions) actions.first.each do |verb, actions| @current_resource[:actions] .select{|key,actions| verb == key }[verb] .delete_if{|action| actions.include?(action[:method]) } end end