joosy 0.1.0.RC2 → 0.1.0.RC3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. data/.codoopts +5 -0
  2. data/.gitignore +2 -0
  3. data/Gemfile.lock +4 -2
  4. data/README.md +10 -4
  5. data/app/assets/javascripts/joosy/core/application.js.coffee +3 -1
  6. data/app/assets/javascripts/joosy/core/form.js.coffee +69 -42
  7. data/app/assets/javascripts/joosy/core/helpers/view.js.coffee +30 -0
  8. data/app/assets/javascripts/joosy/core/joosy.js.coffee +125 -66
  9. data/app/assets/javascripts/joosy/core/layout.js.coffee +106 -1
  10. data/app/assets/javascripts/joosy/core/modules/container.js.coffee +41 -0
  11. data/app/assets/javascripts/joosy/core/modules/events.js.coffee +88 -1
  12. data/app/assets/javascripts/joosy/core/modules/filters.js.coffee +24 -0
  13. data/app/assets/javascripts/joosy/core/modules/log.js.coffee +18 -0
  14. data/app/assets/javascripts/joosy/core/modules/module.js.coffee +53 -1
  15. data/app/assets/javascripts/joosy/core/modules/renderer.js.coffee +22 -6
  16. data/app/assets/javascripts/joosy/core/modules/time_manager.js.coffee +21 -0
  17. data/app/assets/javascripts/joosy/core/modules/widgets_manager.js.coffee +26 -0
  18. data/app/assets/javascripts/joosy/core/page.js.coffee +225 -16
  19. data/app/assets/javascripts/joosy/core/preloader.js.coffee +8 -0
  20. data/app/assets/javascripts/joosy/core/resource/collection.js.coffee +52 -15
  21. data/app/assets/javascripts/joosy/core/resource/generic.js.coffee +78 -50
  22. data/app/assets/javascripts/joosy/core/resource/rest.js.coffee +39 -41
  23. data/app/assets/javascripts/joosy/core/resource/rest_collection.js.coffee +36 -27
  24. data/app/assets/javascripts/joosy/core/router.js.coffee +95 -19
  25. data/app/assets/javascripts/joosy/core/widget.js.coffee +42 -1
  26. data/app/assets/javascripts/joosy/preloaders/caching.js.coffee +39 -24
  27. data/app/assets/javascripts/joosy/preloaders/inline.js.coffee +9 -7
  28. data/app/helpers/joosy/sprockets_helper.rb +4 -1
  29. data/lib/joosy/rails/version.rb +1 -1
  30. data/spec/javascripts/joosy/core/application_spec.js.coffee +3 -3
  31. data/spec/javascripts/joosy/core/resource/rest_spec.js.coffee +0 -2
  32. data/spec/javascripts/joosy/core/router_spec.js.coffee +24 -24
  33. data/vendor/assets/javascripts/jquery.form.js +978 -963
  34. data/vendor/assets/javascripts/sugar.js +1 -1
  35. metadata +20 -20
  36. data/app/assets/javascripts/joosy/core/helpers.js.coffee +0 -16
  37. data/vendor/assets/javascripts/base64.js +0 -135
@@ -1,23 +1,77 @@
1
1
  #= require joosy/core/joosy
2
2
 
3
+ #
4
+ # Router. Reacts on a hash change event and loads proper pages
5
+ #
6
+ # Example:
7
+ # Joosy.Router.map
8
+ # 404 : (path) -> alert "Page '#{path}' was not found :("
9
+ # '/' : Welcome.IndexPage
10
+ # '/resources' :
11
+ # '/' : Resource.IndexPage
12
+ # '/:id' : Resource.ShowPage
13
+ # '/:id/edit' : Resource.EditPage
14
+ # '/new' : Resource.EditPage
15
+ #
16
+ # @module
17
+ #
3
18
  Joosy.Router =
19
+ #
20
+ # The Object containing route parts in keys and pages/lambdas in values
21
+ #
4
22
  rawRoutes: Object.extended()
23
+
24
+ #
25
+ # Flattern routes mapped to regexps (to check if current route is what we
26
+ # need) and actual executors
27
+ #
5
28
  routes: Object.extended()
6
29
 
30
+ #
31
+ # Clears the routes
32
+ #
7
33
  reset: ->
8
34
  @rawRoutes = Object.extended()
9
35
  @routes = Object.extended()
10
36
 
37
+ #
38
+ # Registers the set of raw routes
39
+ # This method will only store routes and will not make them act immediately
40
+ # Routes get registered only once at system initialization during #__setupRoutes call
41
+ #
42
+ # @param [Object] routes Set of routes in inner format (see class description)
43
+ #
11
44
  map: (routes) ->
12
45
  Joosy.Module.merge @rawRoutes, routes
13
46
 
14
- setupRoutes: ->
15
- @prepareRoutes @rawRoutes
16
- @respondRoute location.hash
17
- $(window).hashchange =>
18
- @respondRoute location.hash
47
+ #
48
+ # Changes current hash with shebang (#!) and therefore triggers new route loading
49
+ # to be loaded
50
+ #
51
+ # @param [String] to Route to navigate to
52
+ #
53
+ navigate: (to) ->
54
+ location.hash = '!' + to
19
55
 
20
- prepareRoutes: (routes, namespace='') ->
56
+ #
57
+ # Inits the routing system and loads the current route
58
+ # Binds the window hashchange event and therefore should only be called once
59
+ # during system startup
60
+ #
61
+ __setupRoutes: ->
62
+ @__prepareRoutes @rawRoutes
63
+ @__respondRoute location.hash
64
+ $(window).hashchange =>
65
+ @__respondRoute location.hash
66
+
67
+ #
68
+ # Compiles routes to map object
69
+ # Object will contain regexp string as key and lambda/Page to load as value
70
+ #
71
+ # @param [Object] routes Raw routes to prepare
72
+ # @param [String] namespace Inner cursor for recursion
73
+ #
74
+ __prepareRoutes: (routes, namespace='') ->
21
75
  if !namespace && routes[404]
22
76
  @wildcardAction = routes[404]
23
77
  delete routes[404]
@@ -25,11 +79,18 @@ Joosy.Router =
25
79
  Object.each routes, (path, response) =>
26
80
  path = (namespace + path).replace /\/{2,}/, '/'
27
81
  if response && (Object.isFunction(response) || response.prototype?)
28
- Joosy.Module.merge @routes, @prepareRoute(path, response)
82
+ Joosy.Module.merge @routes, @__prepareRoute(path, response)
29
83
  else
30
- @prepareRoutes response, path
31
-
32
- prepareRoute: (path, response) ->
84
+ @__prepareRoutes response, path
85
+
86
+ #
87
+ # Compiles one single route
88
+ #
89
+ # @param [String] path Full path from raw route
90
+ # @param [Joosy.Page] response Page that should be loaded at this route
91
+ # @param [Function] response Lambda to call at this route
92
+ #
93
+ __prepareRoute: (path, response) ->
33
94
  matchPath = path.replace(/\/:([^\/]+)/g, '/([^/]+)').replace(/^\/?/, '^/?').replace(/\/?$/, '/?$')
34
95
  result = Object.extended()
35
96
 
@@ -39,18 +100,23 @@ Joosy.Router =
39
100
  action: response
40
101
  result
41
102
 
42
- respondRoute: (hash) ->
103
+ #
104
+ # Searches the corresponding route through compiled routes
105
+ #
106
+ # @param [String] hash Hash value to search route for
107
+ #
108
+ __respondRoute: (hash) ->
43
109
  Joosy.Modules.Log.debug "Router> Answering '#{hash}'"
44
110
  fullPath = hash.replace /^#!?/, ''
45
111
  @currentPath = fullPath
46
112
  found = false
47
113
  queryArray = fullPath.split '&'
48
114
  path = queryArray.shift()
49
- urlParams = @paramsFromQueryArray queryArray
115
+ urlParams = @__paramsFromQueryArray queryArray
50
116
 
51
117
  for regex, route of @routes when @routes.hasOwnProperty regex
52
118
  if vals = path.match new RegExp(regex)
53
- params = @paramsFromRouteMatch(vals, route).merge urlParams
119
+ params = @__paramsFromRouteMatch(vals, route).merge urlParams
54
120
 
55
121
  if Joosy.Module.hasAncestor route.action, Joosy.Page
56
122
  Joosy.Application.setCurrentPage route.action, params
@@ -63,7 +129,14 @@ Joosy.Router =
63
129
  if !found && @wildcardAction?
64
130
  @wildcardAction path, urlParams
65
131
 
66
- paramsFromRouteMatch: (vals, route) ->
132
+ #
133
+ # Collects params from route placeholders (/foo/:placeholder)
134
+ #
135
+ # @param [Array] vals Array of value gathered by regexp
136
+ # @param [Object] route Compiled route
137
+ # @returns [Object] Hash of params
138
+ #
139
+ __paramsFromRouteMatch: (vals, route) ->
67
140
  params = Object.extended()
68
141
 
69
142
  vals.shift()
@@ -72,7 +145,13 @@ Joosy.Router =
72
145
 
73
146
  params
74
147
 
75
- paramsFromQueryArray: (queryArray) ->
148
+ #
149
+ # Collects params from query routes (/foo/&a=b)
150
+ #
151
+ # @param [Array] queryArray Array of query string split by '&' sign
152
+ # @returns [Object] Hash of params
153
+ #
154
+ __paramsFromQueryArray: (queryArray) ->
76
155
  params = Object.extended()
77
156
 
78
157
  if queryArray
@@ -81,7 +160,4 @@ Joosy.Router =
81
160
  pair = @split '='
82
161
  params[pair[0]] = pair[1]
83
162
 
84
- params
85
-
86
- navigate: (to) ->
87
- location.hash = '!' + to
163
+ params
@@ -6,6 +6,15 @@
6
6
  #= require joosy/core/modules/renderer
7
7
  #= require joosy/core/modules/filters
8
8
 
9
+ #
10
+ # Base class for all of your Joosy Layouts.
11
+ #
12
+ # @todo Add link to the 5th chapter of guides here.
13
+ #
14
+ # @example Sample widget
15
+ # class @FooWidget extends Joosy.Widget
16
+ # @view 'foo'
17
+ #
9
18
  class Joosy.Widget extends Joosy.Module
10
19
  @include Joosy.Modules.Log
11
20
  @include Joosy.Modules.Events
@@ -14,16 +23,41 @@ class Joosy.Widget extends Joosy.Module
14
23
  @include Joosy.Modules.Filters
15
24
  @include Joosy.Modules.TimeManager
16
25
 
26
+ #
27
+ # By default widget will not render on load
28
+ #
17
29
  __renderer: false
18
-
30
+
31
+ #
32
+ # Initial data that will be passed to view on load
33
+ # False (and not {}) by default to have a chance to check if data was loaded
34
+ #
19
35
  data: false
20
36
 
37
+ #
38
+ # Proxy to Joosy.Router#navigate
39
+ #
21
40
  navigate: (args...) ->
22
41
  Joosy.Router.navigate args...
23
42
 
43
+ #
44
+ # This is required by {Joosy.Modules.Renderer}
45
+ # Sets the base template dir to app_name/templates/widgets
46
+ #
24
47
  __renderSection: ->
25
48
  'widgets'
26
49
 
50
+ #
51
+ # Widget bootstrap proccess
52
+ #
53
+ # * Rendering (if required)
54
+ # * {Joosy.Modules.Container#refreshElements}
55
+ # * {Joosy.Modules.Container#__delegateEvents}
56
+ # * {Joosy.Modules.Filters#__runAfterLoads}
57
+ #
58
+ # @param [Joosy.Page, Joosy.Layout] Page or Layout to attach to
59
+ # @param [jQuery] container Container to attach to
60
+ #
27
61
  __load: (@parent, @container) ->
28
62
  if @__renderer
29
63
  @container.html @__renderer(@data || {})
@@ -33,6 +67,13 @@ class Joosy.Widget extends Joosy.Module
33
67
 
34
68
  this
35
69
 
70
+ #
71
+ # Layout destruction proccess.
72
+ #
73
+ # * {Joosy.Modules.TimeManager#__clearTime}
74
+ # * {Joosy.Modules.Renderer#__removeMetamorphs}
75
+ # * {Joosy.Modules.Filters#__runAfterUnloads}
76
+ #
36
77
  __unload: ->
37
78
  @__clearTime()
38
79
  @__removeMetamorphs()
@@ -1,18 +1,20 @@
1
- #= require base64
2
-
3
1
  #
4
2
  # Preloader for libraries with localStorage cache
5
3
  #
6
- # Example:
4
+ # @note The `start` callback will only be called if loading required.
5
+ # While working with cache, `complete` is the only callback that will be triggered.
6
+ #
7
+ # @example Basic usage
7
8
  # libraries = [['/test1.js', 100], ['/test2.js', 500]] #100, 500 - size in bytes
9
+ #
8
10
  # CachingPreloader.load libraries,
9
11
  # start: -> console.log 'preloading started'
10
12
  # progress: (percent) -> console.log "#{percent}% loaded"
11
13
  # complete: -> console.log 'preloading finished'
12
14
  #
13
- # @class CachingPreloader
15
+ # @module
14
16
  #
15
- @Preloader = @CachingPreloader =
17
+ @CachingPreloader =
16
18
  #
17
19
  # If set to true, localStorage cache will be avoided
18
20
  #
@@ -50,6 +52,7 @@
50
52
  @restore()
51
53
  else
52
54
  @start?.call window
55
+ @clean()
53
56
  @download libraries
54
57
 
55
58
  #
@@ -60,16 +63,21 @@
60
63
  for name, i in @libraries
61
64
  flag &&= window.localStorage.getItem(name)?
62
65
  flag
63
-
66
+
67
+ #
68
+ # Escapes non-printable terminal chars before storing to localStorage to prevent IE bug
69
+ #
70
+ # @param [String] String, that will be prepared for localStorage
71
+ #
72
+ escapeStr: (str) ->
73
+ str.replace(new RegExp("\u0001", 'g'), "\\u0001").replace(new RegExp("\u000B", 'g'), "\\u000B")
74
+
64
75
  #
65
76
  # Gets sources of scripts from localStorage and evals them
66
77
  #
67
78
  restore: ->
68
79
  for name, i in @libraries
69
- code = window.localStorage.getItem name
70
- if window.navigator.appName == "Microsoft Internet Explorer"
71
- code = Base64.decode code
72
- @evalGlobaly code
80
+ window.evalGlobaly window.localStorage.getItem name
73
81
  @complete?.call window, true
74
82
 
75
83
  #
@@ -89,12 +97,11 @@
89
97
  @ajax url, size, (xhr) =>
90
98
  code = xhr.responseText
91
99
  if window.navigator.appName == "Microsoft Internet Explorer"
92
- code = Base64.encode code
100
+ code = @escapeStr code
93
101
  window.localStorage.setItem @prefix+url, code
94
- @evalGlobaly xhr.responseText
102
+ window.evalGlobaly xhr.responseText
95
103
  @download libraries
96
104
  else
97
- @clean()
98
105
  @complete?.call window
99
106
 
100
107
  #
@@ -135,20 +142,28 @@
135
142
  #
136
143
  clean: ->
137
144
  i = 0
145
+
146
+ find = (arr, obj) ->
147
+ (return i if obj == x) for x in arr
148
+ return -1
138
149
 
139
150
  while i < window.localStorage.length && key = window.localStorage.key(i)
140
- if key.indexOf(@prefix) == 0 && @libraries.indexOf(key) < 0
151
+ if key.indexOf(@prefix) == 0 && find(@libraries, key) < 0
141
152
  window.localStorage.removeItem key
142
153
  else
143
154
  i += 1
144
155
 
145
- #
146
- # Evals source at a global scope
147
- #
148
- # @param [String] JS source to execute
149
- #
150
- evalGlobaly: (src) ->
151
- if window.execScript
152
- window.execScript src
153
- else
154
- window.eval src
156
+ #
157
+ # Evals source at a global scope
158
+ # Don't touch it! It should be window's property, or FF3.6 will execute scripts on preloader context.
159
+ #
160
+ # @param [String] JS source to execute
161
+ #
162
+ window.evalGlobaly = (src) ->
163
+ return if src.length == 0
164
+ if window.execScript
165
+ window.execScript src
166
+ else
167
+ window.eval src
168
+
169
+ @Preloader = @CachingPreloader
@@ -1,18 +1,18 @@
1
1
  #
2
- # Preloader for libraries using <script src> without any caching magic
2
+ # Preloader for libraries using `script src` without any caching magic
3
3
  #
4
- # Example:
4
+ # @example Basic usage
5
5
  # libraries = [['/test1.js'], ['/test2.js']]
6
+ #
6
7
  # InlinePreloader.load libraries,
7
8
  # start: -> console.log 'preloading started'
8
9
  # complete: -> console.log 'preloading finished'
9
10
  #
10
- # @class InlinePreloader
11
+ # @module
11
12
  #
12
- @Preloader = @InlinePreloader =
13
-
13
+ @InlinePreloader =
14
14
  #
15
- # Loads set of libraries by adding <script src> to DOM head
15
+ # Loads set of libraries by adding `script src` to DOM head
16
16
  # See class description for example of usage
17
17
  #
18
18
  # @param [Array] 2-levels array of libraries URLs i.e. [['/test1.js'],['/test2.js']]
@@ -30,7 +30,7 @@
30
30
  @complete?()
31
31
 
32
32
  #
33
- # Loads one script by adding <script src> to DOM head
33
+ # Loads one script by adding `script src` to DOM head
34
34
  #
35
35
  # @param [String] url to load script from
36
36
  # @param [Function] `() -> null` to call after script was loaded and executed
@@ -52,3 +52,5 @@
52
52
 
53
53
  head.appendChild script
54
54
  return undefined
55
+
56
+ @Preloader = @InlinePreloader
@@ -1,10 +1,13 @@
1
+ require 'uri'
2
+
1
3
  module Joosy::SprocketsHelper
2
4
  def extract_sources_and_sizes_from_include_tag(name)
3
5
  code = javascript_include_tag name
4
6
  resources = code.scan(/(?:href|src)=['"]([^'"]+)['"]/).flatten
5
7
 
6
8
  resources.map do |resource|
7
- path = ::Rails.root.to_s + "/public" + resource.split('?')[0]
9
+ uri = URI.parse resource
10
+ path = ::Rails.root.to_s + "/public" + uri.path
8
11
  size = File.size(path) rescue false
9
12
  [resource, size]
10
13
  end.to_json.html_safe
@@ -1,5 +1,5 @@
1
1
  module Joosy
2
2
  module Rails
3
- VERSION = "0.1.0.RC2"
3
+ VERSION = "0.1.0.RC3"
4
4
  end
5
5
  end
@@ -1,11 +1,11 @@
1
1
  describe "Joosy.Application", ->
2
2
 
3
3
  beforeEach ->
4
- sinon.stub(Joosy.Router, "setupRoutes")
4
+ sinon.stub(Joosy.Router, "__setupRoutes")
5
5
  @seedGround()
6
6
 
7
7
  afterEach ->
8
- Joosy.Router.setupRoutes.restore()
8
+ Joosy.Router.__setupRoutes.restore()
9
9
 
10
10
  it "should initialize", ->
11
11
  Joosy.Application.initialize 'app', '#application'
@@ -13,7 +13,7 @@ describe "Joosy.Application", ->
13
13
  expect(Joosy.Application.selector).toEqual '#application'
14
14
  expect(Joosy.Application.sandboxSelector).toMatch /#[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}/
15
15
  expect($(Joosy.Application.sandboxSelector).length).toEqual 1
16
- expect(Joosy.Router.setupRoutes.callCount).toEqual 1
16
+ expect(Joosy.Router.__setupRoutes.callCount).toEqual 1
17
17
  expect(Joosy.Application.name).toEqual 'app'
18
18
 
19
19
  it "should set container", ->
@@ -19,8 +19,6 @@ describe "Joosy.Resource.REST", ->
19
19
  expect(@Test.__buildSource()).toEqual 'uri/'
20
20
  @Test.primary 'uid'
21
21
  expect(@Test::__primaryKey).toEqual 'uid'
22
- @Test.beforeLoad 'function'
23
- expect(@Test::__beforeLoad).toEqual 'function'
24
22
 
25
23
  it "should build source url based on entity name", ->
26
24
  options =
@@ -26,20 +26,20 @@ describe "Joosy.Router", ->
26
26
  expect(Joosy.Router.rawRoutes).toEqual map
27
27
 
28
28
  it "should initialize on setup", ->
29
- sinon.stub Joosy.Router, 'prepareRoutes'
30
- sinon.stub Joosy.Router, 'respondRoute'
29
+ sinon.stub Joosy.Router, '__prepareRoutes'
30
+ sinon.stub Joosy.Router, '__respondRoute'
31
31
 
32
32
  Joosy.Router.map map
33
- Joosy.Router.setupRoutes()
34
- expect(Joosy.Router.prepareRoutes.callCount).toEqual 1
35
- expect(Joosy.Router.prepareRoutes.args[0][0]).toEqual map
36
- expect(Joosy.Router.respondRoute.callCount).toEqual 1
37
- expect(Joosy.Router.respondRoute.args[0][0]).toEqual location.hash
38
- Joosy.Router.prepareRoutes.restore()
39
- Joosy.Router.respondRoute.restore()
33
+ Joosy.Router.__setupRoutes()
34
+ expect(Joosy.Router.__prepareRoutes.callCount).toEqual 1
35
+ expect(Joosy.Router.__prepareRoutes.args[0][0]).toEqual map
36
+ expect(Joosy.Router.__respondRoute.callCount).toEqual 1
37
+ expect(Joosy.Router.__respondRoute.args[0][0]).toEqual location.hash
38
+ Joosy.Router.__prepareRoutes.restore()
39
+ Joosy.Router.__respondRoute.restore()
40
40
 
41
41
  it "should prepare route", ->
42
- route = Joosy.Router.prepareRoute "/such/a/long/long/url/:with/:plenty/:of/:params", "123"
42
+ route = Joosy.Router.__prepareRoute "/such/a/long/long/url/:with/:plenty/:of/:params", "123"
43
43
 
44
44
  expect(route).toEqual Object.extended
45
45
  '^/?such/a/long/long/url/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$':
@@ -47,10 +47,10 @@ describe "Joosy.Router", ->
47
47
  action: "123"
48
48
 
49
49
  it "should cook routes", ->
50
- sinon.stub Joosy.Router, 'respondRoute'
50
+ sinon.stub Joosy.Router, '__respondRoute'
51
51
 
52
52
  Joosy.Router.map map
53
- Joosy.Router.setupRoutes()
53
+ Joosy.Router.__setupRoutes()
54
54
 
55
55
  expect(Joosy.Router.routes).toEqual Object.extended
56
56
  '^/?/?$':
@@ -66,11 +66,11 @@ describe "Joosy.Router", ->
66
66
  capture: ['more']
67
67
  action: TestPage
68
68
 
69
- Joosy.Router.respondRoute.restore()
69
+ Joosy.Router.__respondRoute.restore()
70
70
 
71
71
  it "should get route params", ->
72
- route = Joosy.Router.prepareRoute "/such/a/long/long/url/:with/:plenty/:of/:params", "123"
73
- result = Joosy.Router.paramsFromRouteMatch ['full regex match here', 1, 2, 3, 4], route.values().first()
72
+ route = Joosy.Router.__prepareRoute "/such/a/long/long/url/:with/:plenty/:of/:params", "123"
73
+ result = Joosy.Router.__paramsFromRouteMatch ['full regex match here', 1, 2, 3, 4], route.values().first()
74
74
 
75
75
  expect(result).toEqual Object.extended
76
76
  'with': 1
@@ -79,37 +79,37 @@ describe "Joosy.Router", ->
79
79
  'params': 4
80
80
 
81
81
  it "should build query params", ->
82
- result = Joosy.Router.paramsFromQueryArray ["foo=bar", "bar=baz"]
82
+ result = Joosy.Router.__paramsFromQueryArray ["foo=bar", "bar=baz"]
83
83
 
84
84
  expect(result).toEqual Object.extended
85
85
  foo: 'bar'
86
86
  bar: 'baz'
87
87
 
88
88
  it "should respond routes", ->
89
- sinon.stub Joosy.Router, 'respondRoute'
89
+ sinon.stub Joosy.Router, '__respondRoute'
90
90
  sinon.stub Joosy.Application, 'setCurrentPage'
91
91
 
92
92
  Joosy.Router.map map
93
- Joosy.Router.setupRoutes()
93
+ Joosy.Router.__setupRoutes()
94
94
 
95
- Joosy.Router.respondRoute.restore()
95
+ Joosy.Router.__respondRoute.restore()
96
96
 
97
- Joosy.Router.respondRoute '/'
97
+ Joosy.Router.__respondRoute '/'
98
98
  expect(spies.root.callCount).toEqual 1
99
99
 
100
- Joosy.Router.respondRoute '/page'
100
+ Joosy.Router.__respondRoute '/page'
101
101
  expect(Joosy.Application.setCurrentPage.callCount).toEqual 1
102
102
  expect(Joosy.Application.setCurrentPage.args.last()).toEqual [TestPage, Object.extended()]
103
103
 
104
- Joosy.Router.respondRoute '/section/page/1'
104
+ Joosy.Router.__respondRoute '/section/page/1'
105
105
  expect(spies.section.callCount).toEqual 1
106
106
  expect(spies.section.args.last()).toEqual [Object.extended(id: '1')]
107
107
 
108
- Joosy.Router.respondRoute '/section/page2/1&a=b'
108
+ Joosy.Router.__respondRoute '/section/page2/1&a=b'
109
109
  expect(Joosy.Application.setCurrentPage.callCount).toEqual 2
110
110
  expect(Joosy.Application.setCurrentPage.args.last()).toEqual [TestPage, Object.extended(more: '1', a: 'b')]
111
111
 
112
- Joosy.Router.respondRoute '/thiswillneverbefound&a=b'
112
+ Joosy.Router.__respondRoute '/thiswillneverbefound&a=b'
113
113
  expect(spies.wildcard.callCount).toEqual 1
114
114
  expect(spies.wildcard.args.last()).toEqual ['/thiswillneverbefound', Object.extended(a: 'b')]
115
115