class Controuter::Router
Public Class Methods
new(&block)
click to toggle source
# File lib/controuter.rb, line 48 def initialize(&block) @routes = {} instance_exec(&block) end
Public Instance Methods
call(env)
click to toggle source
# File lib/controuter.rb, line 42 def call(env) find(env) end
Private Instance Methods
find(env)
click to toggle source
# File lib/controuter.rb, line 53 def find(env) current_env = ->(env) {[404, {}, ['404']]} @routes[env['REQUEST_METHOD']].each { |(key,value)| regular_value = Regexp.new('\A' + key.gsub(/:[\w-]+/, '[\w-]+') + '\Z') current_env = get_controller_action(value) if regular_value=~env['REQUEST_PATH'] } current_env.call(env) end
get(path, rack_app)
click to toggle source
# File lib/controuter.rb, line 74 def get(path, rack_app) match('GET', path, rack_app) end
get_controller_action(str)
click to toggle source
# File lib/controuter.rb, line 61 def get_controller_action(str) controller_name, action_name = str.split('#') controller_name = to_upper_camel_case(controller_name) Kernel.const_get(controller_name).send(:action, action_name) end
match(http_method, path, rack_app)
click to toggle source
# File lib/controuter.rb, line 82 def match(http_method, path, rack_app) @routes[http_method] ||= {} @routes[http_method][path] = rack_app end
post(path, rack_app)
click to toggle source
# File lib/controuter.rb, line 78 def post(path, rack_app) match('POST', path, rack_app) end
to_upper_camel_case(str)
click to toggle source
# File lib/controuter.rb, line 67 def to_upper_camel_case(str) str .split('/') .map { |part| part.split('_').map(&:capitalize).join } .join('::') + 'Controller' end