{route: ':controller', callback: 'c'}, \r
]\r
\r
+ find_route: (url) ->\r
+ r = null\r
+ _.any @peta_routes(), (route) =>\r
+ route.regex = @_routeToRegExp(route.route)\r
+ if route.regex.test(url)\r
+ r = route\r
+ r\r
+ \r
+ url_to_params: (url) ->\r
+ if route = @find_route(url)\r
+ n = route.callback # callback function name by string\r
+ this[n + '_params'].apply(this, args) # call to c_i_a_params, c_i_params, c_params\r
+ \r
# render App(render:all)\r
home: () ->\r
params = @home_params()\r
params\r
\r
user_sessions_a: (action, query_string) ->\r
- params = @users_a_params(action, query_string)\r
+ params = @user_sessions_a_params(action, query_string)\r
@trigger('fire', params)\r
\r
user_sessions_a_params: (action, query_string) ->\r
params['action'] = action\r
params\r
\r
+ \r
class Pettanr.GlobalRouter extends Pettanr.Router\r
\r
initialize: () ->\r
\r
# selfish navigate\r
navigate: (url) ->\r
- _.any @peta_routes(), (r) =>\r
- route = @_routeToRegExp(r.route)\r
- if route.test(url)\r
- args = @_extractParameters(route, url)\r
- n = r.callback\r
- this[n].apply(this, args) # call to c_i_a, c_i, c\r
+ if route = @find_route(url)\r
+ args = @_extractParameters(route.regex, url)\r
+ n = route.callback # callback function name by string\r
+ this[n].apply(this, args) # call to c_i_a, c_i, c\r
+ \r
+class Pettanr.RouterFilter\r
+ \r
+ filters: () ->\r
+ if Pettanr.is_sns()\r
+ Pettanr.ActionFilter.sns_filters()\r
+ else\r
+ Pettanr.ActionFilter.blog_filters()\r
+ \r
+ my_filters: (role, params) ->\r
+ f = @filters()\r
+ c = f[params['controller']] || {}\r
+ r = c[role]\r
+ r\r
+ \r
+ authenticate: (role, params, operators) ->\r
+ if not operators[('is_' + role)]() # ex: operators.is_user()\r
+ filter = @my_filters(role, params)\r
+ if Pettanr.before_filter(params['action'], filter)\r
+ return true\r
+ false\r
+ \r
+class Pettanr.HeaderRouter extends Pettanr.LocalRouter\r
+ \r
+ initialize: () ->\r
+ super()\r
+ _.extend(this, Pettanr.RouterFilter)\r
+ \r
+class Pettanr.BodyRouter extends Pettanr.GlobalRouter\r
+ \r
+ initialize: () ->\r
+ super()\r
+ _.extend(this, Pettanr.RouterFilter)\r
+ \r
+ navigate: (url, operators) ->\r
+ safe_url = @block(url, operators) || url\r
+ super(safe_url)\r
+ \r
+ # access block\r
+ # return sign in form if invalid url\r
+ # return null if url is valid\r
+ block: (url, operators) ->\r
+ params = @url_to_params(url)\r
+ return @guest_url() if @authenticate('reader', params, operators) or @authenticate('resource_reader', params, operators) or @authenticate('user', params, operators)\r
+ return @new_author_url() if @authenticate('author', params, operators)\r
+ return @new_artist_url() if @authenticate('artist', params, operators)\r
+ null\r
+ \r
+ guest_url: () ->\r
+ 'user_seeeions/new'\r
+ \r
+ new_author_url: () ->\r
+ 'authors/new'\r
+ \r
+ new_artist_url: () ->\r
+ 'artists/new'\r
\r