OSDN Git Service

save point
[pettanr/pettanr.git] / app / assets / javascripts / routes.js.coffee
index c692e92..a1600d5 100644 (file)
@@ -30,6 +30,19 @@ class Pettanr.Router extends Backbone.Router
       {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
@@ -116,7 +129,7 @@ class Pettanr.Router extends Backbone.Router
     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
@@ -137,6 +150,7 @@ class Pettanr.Router extends Backbone.Router
     params['action'] = action\r
     params\r
   \r
+  \r
 class Pettanr.GlobalRouter extends Pettanr.Router\r
   \r
   initialize: () ->\r
@@ -161,10 +175,64 @@ class Pettanr.LocalRouter extends Pettanr.Router
   \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