class Ruta::Router
Attributes
@!attribute [r] root @return [Array<Symbol>] root the initial context of the app
@!attribute [r] root @return [Array<Symbol>] root the initial context of the app
@!attribute [r,w] current_context
@return [Array<Symbol>] current_context
a list of contexts, the last being the current
Public Class Methods
@see (see Router#define)
# File lib/ruta/router.rb, line 15 def initialize block @current_context = [] Context.define(:no_context) instance_exec(&block) end
Private Class Methods
define a router, this can be called multiple times @example defining routes
Ruta::Router.define do for_context :main do for_context :info_view do map :i_switch, '/buttons/:switch_to', to: [:scroller,:buttons] map :sign_up, '/sign_up', context: :sign_up end end root_to :main end
@note please be aware that placing contexts within other contexts doesn’t actully do anything. @yield Use this block to define any routes
# File lib/ruta/router.rb, line 83 def define &block new block end
# File lib/ruta/router.rb, line 106 def find path Context.collection.each do |con_ref,context| context.routes.each do |r_ref,route| res = route.match(path) return res if res end end false end
# File lib/ruta/router.rb, line 91 def find_and_execute(path) path = if Ruta.config.context_prefix ( path == '/' || path == "") ? path : (path[/(?:\/.*?)(\/.*)/];$1) else path end res = find(path) if res navigate_to res else raise "no matching route for #{path}" end end
# File lib/ruta/router.rb, line 121 def route_for context, ref,params=nil Context.collection[context].routes[ref].get(params) end
# File lib/ruta/router.rb, line 87 def set_context_to context @current_context = context end
# File lib/ruta/router.rb, line 125 def set_root_to context @root = context Router.set_context_to root end
Public Instance Methods
set which Context
to map the following routes to
@param [Symbol] context to map routes to
# File lib/ruta/router.rb, line 24 def for_context context @current_context << context yield @current_context.pop end
map a route
@param [Symbol] ref to map route to for easy future reference
# File lib/ruta/router.rb, line 32 def map ref,route, options={} context = Context.collection[get_context] context.routes[ref]= Route.new(route, context,options) end
set the root context, this is the initial context that will be renered by the router
@note there is only ever one root, calling this multiple times will over right the original root @param [Symbol] reference to context
# File lib/ruta/router.rb, line 41 def root_to reference Router.set_root_to reference context = Context.collection[reference] context.routes[:root]= Route.new('/', context,{ context: reference}) end
Private Instance Methods
# File lib/ruta/router.rb, line 49 def get_context @current_context.last || :no_context end