joosy 0.1.0.RC3 → 0.1.0.alpha
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +0 -2
- data/Gemfile +2 -13
- data/Gemfile.lock +62 -80
- data/Guardfile +15 -21
- data/MIT-LICENSE +2 -2
- data/README.rdoc +3 -0
- data/app/helpers/joosy/sprockets_helper.rb +11 -23
- data/joosy.gemspec +3 -3
- data/lib/joosy/forms.rb +12 -2
- data/lib/joosy/rails/engine.rb +1 -9
- data/lib/joosy/rails/version.rb +2 -2
- data/lib/joosy-rails.rb +5 -0
- data/lib/rails/generators/joosy/application_generator.rb +3 -13
- data/lib/rails/generators/joosy/joosy_base.rb +2 -2
- data/lib/rails/generators/joosy/layout_generator.rb +1 -8
- data/lib/rails/generators/joosy/page_generator.rb +6 -21
- data/lib/rails/generators/joosy/preloader_generator.rb +7 -14
- data/lib/rails/generators/joosy/templates/app/layouts/application.js.coffee +0 -1
- data/lib/rails/generators/joosy/templates/app/layouts/template.js.coffee +1 -1
- data/lib/rails/generators/joosy/templates/app/pages/application.js.coffee +1 -1
- data/lib/rails/generators/joosy/templates/app/pages/template.js.coffee +3 -3
- data/lib/rails/generators/joosy/templates/app/routes.js.coffee +1 -7
- data/lib/rails/generators/joosy/templates/app/widgets/template.js.coffee +2 -2
- data/lib/rails/generators/joosy/templates/app.js.coffee +0 -3
- data/lib/rails/generators/joosy/templates/app_preloader.js.coffee.erb +12 -9
- data/lib/rails/generators/joosy/templates/preload.html.erb +6 -5
- data/lib/rails/generators/joosy/templates/preload.html.haml +5 -3
- data/lib/rails/generators/joosy/templates/preload.html.slim +21 -0
- data/lib/rails/generators/joosy/widget_generator.rb +1 -8
- data/spec/javascripts/helpers/spec_helper.js.coffee +0 -20
- data/spec/javascripts/joosy/core/modules/container_spec.js.coffee +27 -24
- data/spec/javascripts/joosy/core/modules/events_spec.js.coffee +18 -42
- data/spec/javascripts/joosy/core/modules/filters_spec.js.coffee +27 -27
- data/spec/javascripts/joosy/core/modules/log_spec.js.coffee +3 -3
- data/spec/javascripts/joosy/core/modules/module_spec.js.coffee +15 -6
- data/spec/javascripts/joosy/core/modules/time_manager_spec.js.coffee +7 -12
- data/spec/javascripts/joosy/core/modules/widget_manager_spec.js.coffee +17 -31
- data/tmp/javascripts/.gitignore +1 -0
- data/tmp/spec/javascripts/helpers/.gitignore +1 -0
- data/vendor/assets/javascripts/base64.js +135 -0
- data/vendor/assets/javascripts/joosy/core/application.js.coffee +26 -0
- data/vendor/assets/javascripts/joosy/core/form.js.coffee +87 -0
- data/vendor/assets/javascripts/joosy/core/joosy.js.coffee +62 -0
- data/vendor/assets/javascripts/joosy/core/layout.js.coffee +38 -0
- data/vendor/assets/javascripts/joosy/core/modules/container.js.coffee +51 -0
- data/vendor/assets/javascripts/joosy/core/modules/events.js.coffee +17 -0
- data/vendor/assets/javascripts/joosy/core/modules/filters.js.coffee +39 -0
- data/vendor/assets/javascripts/joosy/core/modules/log.js.coffee +12 -0
- data/vendor/assets/javascripts/joosy/core/modules/module.js.coffee +28 -0
- data/vendor/assets/javascripts/joosy/core/modules/time_manager.js.coffee +23 -0
- data/vendor/assets/javascripts/joosy/core/modules/widgets_manager.js.coffee +45 -0
- data/vendor/assets/javascripts/joosy/core/page.js.coffee +136 -0
- data/vendor/assets/javascripts/joosy/core/resource/rest.js.coffee +69 -0
- data/vendor/assets/javascripts/joosy/core/resource/rest_collection.js.coffee +42 -0
- data/vendor/assets/javascripts/joosy/core/router.js.coffee +75 -0
- data/vendor/assets/javascripts/joosy/core/widget.js.coffee +35 -0
- data/vendor/assets/javascripts/joosy/preloader/development.js.coffee +27 -0
- data/vendor/assets/javascripts/joosy/preloader/production.js.coffee +84 -0
- data/{app → vendor}/assets/javascripts/joosy.js.coffee +0 -0
- data/vendor/assets/javascripts/jquery.form.js +963 -978
- data/vendor/assets/javascripts/sugar.js +1 -1
- metadata +48 -77
- data/.codoopts +0 -5
- data/README.md +0 -95
- data/app/assets/javascripts/joosy/core/application.js.coffee +0 -50
- data/app/assets/javascripts/joosy/core/form.js.coffee +0 -304
- data/app/assets/javascripts/joosy/core/helpers/view.js.coffee +0 -30
- data/app/assets/javascripts/joosy/core/joosy.js.coffee +0 -129
- data/app/assets/javascripts/joosy/core/layout.js.coffee +0 -162
- data/app/assets/javascripts/joosy/core/modules/container.js.coffee +0 -104
- data/app/assets/javascripts/joosy/core/modules/events.js.coffee +0 -123
- data/app/assets/javascripts/joosy/core/modules/filters.js.coffee +0 -67
- data/app/assets/javascripts/joosy/core/modules/log.js.coffee +0 -36
- data/app/assets/javascripts/joosy/core/modules/module.js.coffee +0 -105
- data/app/assets/javascripts/joosy/core/modules/renderer.js.coffee +0 -195
- data/app/assets/javascripts/joosy/core/modules/time_manager.js.coffee +0 -46
- data/app/assets/javascripts/joosy/core/modules/widgets_manager.js.coffee +0 -84
- data/app/assets/javascripts/joosy/core/page.js.coffee +0 -375
- data/app/assets/javascripts/joosy/core/preloader.js.coffee +0 -13
- data/app/assets/javascripts/joosy/core/resource/collection.js.coffee +0 -174
- data/app/assets/javascripts/joosy/core/resource/generic.js.coffee +0 -254
- data/app/assets/javascripts/joosy/core/resource/rest.js.coffee +0 -197
- data/app/assets/javascripts/joosy/core/resource/rest_collection.js.coffee +0 -125
- data/app/assets/javascripts/joosy/core/router.js.coffee +0 -163
- data/app/assets/javascripts/joosy/core/templaters/rails_jst.js.coffee +0 -36
- data/app/assets/javascripts/joosy/core/widget.js.coffee +0 -80
- data/app/assets/javascripts/joosy/preloaders/caching.js.coffee +0 -169
- data/app/assets/javascripts/joosy/preloaders/inline.js.coffee +0 -56
- data/lib/joosy.rb +0 -9
- data/lib/rails/generators/joosy/resource_generator.rb +0 -29
- data/lib/rails/generators/joosy/templates/app/helpers/application.js.coffee +0 -4
- data/lib/rails/generators/joosy/templates/app/pages/welcome/index.js.coffee +0 -22
- data/lib/rails/generators/joosy/templates/app/resources/template.js.coffee +0 -2
- data/lib/rails/generators/joosy/templates/app/templates/layouts/application.jst.hamlc +0 -2
- data/lib/rails/generators/joosy/templates/app/templates/pages/welcome/index.jst.hamlc +0 -7
- data/spec/javascripts/joosy/core/application_spec.js.coffee +0 -40
- data/spec/javascripts/joosy/core/form_spec.js.coffee +0 -184
- data/spec/javascripts/joosy/core/joosy_spec.js.coffee +0 -72
- data/spec/javascripts/joosy/core/layout_spec.js.coffee +0 -50
- data/spec/javascripts/joosy/core/modules/renderer_spec.js.coffee +0 -185
- data/spec/javascripts/joosy/core/page_spec.js.coffee +0 -178
- data/spec/javascripts/joosy/core/resource/collection_spec.js.coffee +0 -84
- data/spec/javascripts/joosy/core/resource/generic_spec.js.coffee +0 -118
- data/spec/javascripts/joosy/core/resource/rest_collection_spec.js.coffee +0 -58
- data/spec/javascripts/joosy/core/resource/rest_spec.js.coffee +0 -129
- data/spec/javascripts/joosy/core/router_spec.js.coffee +0 -123
- data/spec/javascripts/joosy/core/templaters/rails_jst_spec.js.coffee +0 -25
- data/spec/javascripts/joosy/core/widget_spec.js.coffee +0 -40
- data/spec/javascripts/joosy/preloaders/caching_spec.js.coffee +0 -36
- data/spec/javascripts/joosy/preloaders/inline_spec.js.coffee +0 -16
- data/spec/javascripts/support/assets/coolface.jpg +0 -0
- data/spec/javascripts/support/assets/okay.jpg +0 -0
- data/spec/javascripts/support/assets/test.js +0 -1
- data/spec/javascripts/support/sinon-ie-1.3.1.js +0 -82
- data/vendor/assets/javascripts/metamorph.js +0 -409
@@ -1,21 +1,22 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html>
|
3
3
|
<head>
|
4
|
-
<title
|
4
|
+
<title>Loading...</title>
|
5
5
|
|
6
6
|
<script type="text/javascript">
|
7
|
-
window.
|
8
|
-
libraries:
|
9
|
-
|
7
|
+
window.preload = {
|
8
|
+
libraries: <%= "<%= extract_sources_and_sizes_from_include_tag('#{file_path}') %"+">" %>,
|
9
|
+
development: <%= "<%= Rails.env.development? %"+">" %>
|
10
10
|
};
|
11
11
|
</script>
|
12
12
|
|
13
13
|
<%= "<%= stylesheet_link_tag 'application' %"+">" %>
|
14
|
+
<%= "<%= javascript_include_tag 'application' %"+">" %>
|
15
|
+
<%= "<%= javascript_include_tag '#{file_path}_preloader' %"+">" %>
|
14
16
|
<%= "<%= csrf_meta_tags %"+">" %>
|
15
17
|
</head>
|
16
18
|
|
17
19
|
<body>
|
18
|
-
<%= "<%= javascript_include_tag '#{file_path}_preloader' %"+">" %>
|
19
20
|
<div id="application">
|
20
21
|
<div id="preloader">
|
21
22
|
Loading application...
|
@@ -1,18 +1,20 @@
|
|
1
1
|
!!! 5
|
2
2
|
%html
|
3
3
|
%head
|
4
|
-
%title>
|
4
|
+
%title> Loading...
|
5
5
|
|
6
6
|
javascript:
|
7
7
|
window.preload = {
|
8
|
-
libraries:
|
8
|
+
libraries: #{extract_sources_and_sizes_from_include_tag('<%= file_path %>')},
|
9
|
+
development: #{Rails.env.development?}
|
9
10
|
};
|
10
11
|
|
11
12
|
= stylesheet_link_tag 'application'
|
13
|
+
= javascript_include_tag 'application'
|
14
|
+
= javascript_include_tag '<%= file_path %>_preloader'
|
12
15
|
= csrf_meta_tags
|
13
16
|
|
14
17
|
%body
|
15
|
-
= javascript_include_tag '<%= file_path %>_preloader'
|
16
18
|
#application
|
17
19
|
#preloader
|
18
20
|
Loading application...
|
@@ -0,0 +1,21 @@
|
|
1
|
+
doctype html
|
2
|
+
html
|
3
|
+
head
|
4
|
+
title Loading...
|
5
|
+
|
6
|
+
javascript:
|
7
|
+
window.preload = {
|
8
|
+
libraries: #{extract_sources_and_sizes_from_include_tag('<%= file_path %>')},
|
9
|
+
development: #{Rails.env.development?}
|
10
|
+
};
|
11
|
+
|
12
|
+
= stylesheet_link_tag 'application'
|
13
|
+
= javascript_include_tag 'application'
|
14
|
+
= javascript_include_tag '<%= file_path %>_preloader'
|
15
|
+
= csrf_meta_tags
|
16
|
+
|
17
|
+
body
|
18
|
+
#application
|
19
|
+
#preloader
|
20
|
+
| Loading application...
|
21
|
+
span#percents 0%
|
@@ -18,14 +18,7 @@ module Joosy
|
|
18
18
|
protected
|
19
19
|
|
20
20
|
def app_path
|
21
|
-
|
22
|
-
puts <<HELP
|
23
|
-
Usage: rails generate joosy:widget joosy_app_name/widget_name
|
24
|
-
Tip: do not add Widget suffix to widget_name
|
25
|
-
HELP
|
26
|
-
exit 1
|
27
|
-
end
|
28
|
-
class_path[0]
|
21
|
+
File.join class_path
|
29
22
|
end
|
30
23
|
end
|
31
24
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
beforeEach ->
|
2
|
-
window.JST = {}
|
3
2
|
$('body').append('<div id="ground">')
|
4
3
|
@ground = $('body #ground')
|
5
4
|
@seedGround = ->
|
@@ -20,25 +19,6 @@ beforeEach ->
|
|
20
19
|
<div id="footer" class="footer" />
|
21
20
|
</div>
|
22
21
|
')
|
23
|
-
@addMatchers
|
24
|
-
toBeSequenced: () ->
|
25
|
-
if !Object.isArray(@actual) || @actual.length == 0
|
26
|
-
console.log 'toBeSequenced: not array or empty array given'
|
27
|
-
return false
|
28
|
-
i = 0
|
29
|
-
for spy in @actual
|
30
|
-
unless spy.callCount == 1
|
31
|
-
console.log "toBeSequenced: spy ##{i} was called #{spy.callCount} times"
|
32
|
-
return false
|
33
|
-
i++
|
34
|
-
if @actual.length > 1
|
35
|
-
for spy in @actual.from(1)
|
36
|
-
i = @actual.indexOf spy
|
37
|
-
previous = @actual[i - 1]
|
38
|
-
unless spy.calledAfter previous
|
39
|
-
console.log "toBeSequenced: spy ##{i} wasn't called after spy ##{i - 1}"
|
40
|
-
return false
|
41
|
-
return true
|
42
22
|
|
43
23
|
afterEach ->
|
44
24
|
@ground.remove() unless @polluteGround
|
@@ -15,22 +15,23 @@ describe "Joosy.Modules.Container", ->
|
|
15
15
|
it "should have property named per declared element in container", ->
|
16
16
|
@ground.prepend('<div class="footer" />') # out of container
|
17
17
|
@box.refreshElements()
|
18
|
-
target = @box.footer.get
|
18
|
+
target = @box.footer.get(0)
|
19
19
|
expect(target).toBeTruthy()
|
20
|
-
expect(target).toBe
|
21
|
-
expect(target).toBe
|
20
|
+
expect(target).toBe($('.footer', @box.container).get(0))
|
21
|
+
expect(target).toBe(@box.$('.footer').get(0))
|
22
22
|
|
23
23
|
it "should reinitialize container", ->
|
24
24
|
old_container = @box.container
|
25
25
|
parent = old_container.parent()
|
26
26
|
callback = sinon.spy()
|
27
|
-
old_container.bind
|
28
|
-
old_container.trigger
|
29
|
-
new_container = Joosy.Modules.Container.swapContainer
|
30
|
-
new_container.trigger
|
31
|
-
expect(new_container.html()).toEqual
|
32
|
-
expect(new_container.parent().get(0)).toBe
|
33
|
-
expect(
|
27
|
+
old_container.bind('test', callback)
|
28
|
+
old_container.trigger('test')
|
29
|
+
new_container = Joosy.Modules.Container.swapContainer(old_container, 'new content')
|
30
|
+
new_container.trigger('test')
|
31
|
+
expect(new_container.html()).toEqual('new content')
|
32
|
+
expect(new_container.parent().get(0)).toBe(parent.get(0))
|
33
|
+
expect(old_container.parent().get(0)).toBeUndefined()
|
34
|
+
expect(callback.callCount).toEqual(1)
|
34
35
|
|
35
36
|
it "should inherit element declarations", ->
|
36
37
|
class SubContainerA extends @TestContainer
|
@@ -43,17 +44,18 @@ describe "Joosy.Modules.Container", ->
|
|
43
44
|
third: 'third'
|
44
45
|
subBox = new SubContainerB()
|
45
46
|
target = subBox.__collectElements()
|
46
|
-
expect(target).toEqual
|
47
|
+
expect(target).toEqual(
|
47
48
|
first: 'overrided'
|
48
49
|
second: 'second'
|
49
50
|
third: 'third'
|
50
51
|
footer: '.footer'
|
52
|
+
)
|
51
53
|
target = (new @TestContainer()).__collectElements()
|
52
|
-
expect(target).toEqual
|
54
|
+
expect(target).toEqual(footer: '.footer')
|
53
55
|
|
54
56
|
it "should resolve element selector", ->
|
55
|
-
target = @box.__extractSelector
|
56
|
-
expect(target).toEqual
|
57
|
+
target = @box.__extractSelector('$footer')
|
58
|
+
expect(target).toEqual('.footer')
|
57
59
|
|
58
60
|
it "should inherit event declarations", ->
|
59
61
|
class SubContainerA extends @TestContainer
|
@@ -66,26 +68,27 @@ describe "Joosy.Modules.Container", ->
|
|
66
68
|
'custom' : 'overrided'
|
67
69
|
subBox = new SubContainerB()
|
68
70
|
target = subBox.__collectEvents()
|
69
|
-
expect(target).toEqual
|
71
|
+
expect(target).toEqual(
|
70
72
|
'test': 'onContainerTest'
|
71
73
|
'test .post': 'callback2'
|
72
74
|
'test $footer': 'onFooterTest'
|
73
75
|
'custom' : 'overrided'
|
76
|
+
)
|
74
77
|
target = (new @TestContainer()).__collectEvents()
|
75
|
-
expect(target).toEqual
|
78
|
+
expect(target).toEqual('test': 'onContainerTest')
|
76
79
|
|
77
80
|
it "should delegate events", ->
|
78
81
|
callback = 1.upto(3).map -> sinon.spy()
|
79
|
-
@box.events = Object.extended(@box.events).merge
|
82
|
+
@box.events = Object.extended(@box.events).merge(
|
80
83
|
'test .post': callback[2]
|
81
84
|
'test $footer': 'onFooterTest'
|
82
|
-
|
85
|
+
)
|
83
86
|
@box.onContainerTest = callback[0]
|
84
87
|
@box.onFooterTest = callback[1]
|
85
88
|
@box.__delegateEvents()
|
86
|
-
@box.container.trigger
|
87
|
-
$('.footer', @box.container).trigger
|
88
|
-
$('.post', @box.container).trigger
|
89
|
-
expect(callback[0].callCount).toEqual
|
90
|
-
expect(callback[1].callCount).toEqual
|
91
|
-
expect(callback[2].callCount).toEqual
|
89
|
+
@box.container.trigger('test')
|
90
|
+
$('.footer', @box.container).trigger('test')
|
91
|
+
$('.post', @box.container).trigger('test')
|
92
|
+
expect(callback[0].callCount).toEqual(5)
|
93
|
+
expect(callback[1].callCount).toEqual(1)
|
94
|
+
expect(callback[2].callCount).toEqual(3)
|
@@ -3,51 +3,27 @@ describe "Joosy.Modules.Events", ->
|
|
3
3
|
beforeEach ->
|
4
4
|
class @TestEvents extends Joosy.Module
|
5
5
|
@include Joosy.Modules.Events
|
6
|
-
class @SubTestEvents extends @TestEvents
|
7
|
-
@include Joosy.Modules.Events
|
8
6
|
@box = new @TestEvents()
|
9
|
-
@sub = new @SubTestEvents()
|
10
|
-
|
11
|
-
it "should run callback once when the all listed events have occurred", ->
|
12
|
-
callback = sinon.spy()
|
13
7
|
|
14
|
-
@box.wait 'events list', callback
|
15
8
|
|
16
|
-
|
17
|
-
expect(
|
18
|
-
@box.trigger 'list'
|
19
|
-
expect(callback.callCount).toEqual 1
|
20
|
-
|
21
|
-
@box.trigger 'events'
|
22
|
-
expect(callback.callCount).toEqual 1
|
23
|
-
@box.trigger 'list'
|
24
|
-
expect(callback.callCount).toEqual 1
|
25
|
-
|
26
|
-
it "should allow for binding and unbinding to events", ->
|
9
|
+
it "should create the events waiters list", ->
|
10
|
+
expect(@box.__eventWaiters).toBeUndefined()
|
27
11
|
callback = sinon.spy()
|
12
|
+
@box.wait('events list', callback)
|
13
|
+
expect(@box.__eventWaiters).toEqual([[['events', '', 'list'], callback]])
|
14
|
+
expect(callback.callCount).toEqual(0)
|
28
15
|
|
29
|
-
|
30
|
-
|
31
|
-
@box.trigger 'other-event'
|
32
|
-
expect(callback.callCount).toEqual 0
|
33
|
-
@box.trigger 'event'
|
34
|
-
expect(callback.callCount).toEqual 1
|
35
|
-
@box.trigger 'event'
|
36
|
-
expect(callback.callCount).toEqual 2
|
37
|
-
|
38
|
-
@box.unbind 'other-event'
|
39
|
-
|
40
|
-
@box.trigger 'event'
|
41
|
-
expect(callback.callCount).toEqual 3
|
42
|
-
|
43
|
-
@box.unbind callback
|
44
|
-
|
45
|
-
@box.trigger 'event'
|
46
|
-
expect(callback.callCount).toEqual 3
|
47
|
-
|
48
|
-
it "should handle inheritance well", ->
|
16
|
+
it "should run callback once when the all listed events have occurred", ->
|
49
17
|
callback = sinon.spy()
|
50
|
-
@
|
51
|
-
|
52
|
-
expect(
|
53
|
-
|
18
|
+
@box.wait('events list', callback)
|
19
|
+
@box.trigger('events')
|
20
|
+
expect(callback.callCount).toEqual(0)
|
21
|
+
@box.trigger('list')
|
22
|
+
expect(callback.callCount).toEqual(0)
|
23
|
+
@box.trigger('')
|
24
|
+
expect(callback.callCount).toEqual(0)
|
25
|
+
@box.trigger('')
|
26
|
+
expect(callback.callCount).toEqual(1)
|
27
|
+
expect(@box.__eventWaiters).toEqual([])
|
28
|
+
@box.trigger('events')
|
29
|
+
expect(callback.callCount).toEqual(1)
|
@@ -16,13 +16,13 @@ describe "Joosy.Modules.Filters", ->
|
|
16
16
|
@afterLoad 'filter5'
|
17
17
|
@afterUnload 'filter6'
|
18
18
|
target = new SubFiltersB()
|
19
|
-
expect(target.__beforeLoads).toEqual
|
20
|
-
expect(target.__afterLoads).toEqual
|
21
|
-
expect(target.__afterUnloads).toEqual
|
19
|
+
expect(target.__beforeLoads).toEqual(['filter1', 'filter4'])
|
20
|
+
expect(target.__afterLoads).toEqual(['filter2', 'filter5'])
|
21
|
+
expect(target.__afterUnloads).toEqual(['filter3', 'filter6'])
|
22
22
|
target = new SubFiltersA()
|
23
|
-
expect(target.__beforeLoads).toEqual
|
24
|
-
expect(target.__afterLoads).toEqual
|
25
|
-
expect(target.__afterUnloads).toEqual
|
23
|
+
expect(target.__beforeLoads).toEqual(['filter1'])
|
24
|
+
expect(target.__afterLoads).toEqual(['filter2'])
|
25
|
+
expect(target.__afterUnloads).toEqual(['filter3'])
|
26
26
|
target = new @TestFilters()
|
27
27
|
expect(target.__beforeLoads).toBeUndefined()
|
28
28
|
expect(target.__afterLoads).toBeUndefined()
|
@@ -30,42 +30,42 @@ describe "Joosy.Modules.Filters", ->
|
|
30
30
|
|
31
31
|
it "should run callbacks", ->
|
32
32
|
callback = 0.upto(2).map -> sinon.spy()
|
33
|
-
@box.constructor.beforeLoad
|
34
|
-
@box.constructor.afterLoad
|
35
|
-
@box.constructor.afterUnload
|
36
|
-
@box.__runBeforeLoads
|
37
|
-
@box.__runAfterLoads
|
38
|
-
@box.__runAfterUnloads
|
33
|
+
@box.constructor.beforeLoad(callback[0])
|
34
|
+
@box.constructor.afterLoad(callback[1])
|
35
|
+
@box.constructor.afterUnload(callback[2])
|
36
|
+
@box.__runBeforeLoads(1, 2)
|
37
|
+
@box.__runAfterLoads(1, 2)
|
38
|
+
@box.__runAfterUnloads(1, 2)
|
39
39
|
for i in 0.upto(2)
|
40
|
-
expect(callback[i].callCount).toEqual
|
41
|
-
expect(callback[i].alwaysCalledWithExactly
|
40
|
+
expect(callback[i].callCount).toEqual(1)
|
41
|
+
expect(callback[i].alwaysCalledWithExactly(1, 2)).toBeTruthy()
|
42
42
|
|
43
43
|
it "should chain beforeLoad filters", ->
|
44
44
|
callback = 0.upto(2).map -> sinon.stub()
|
45
|
-
callback[0].returns
|
46
|
-
@box.constructor.beforeLoad(callback[i]) for i in 0.upto
|
45
|
+
callback[0].returns(true)
|
46
|
+
@box.constructor.beforeLoad(callback[i]) for i in 0.upto(2)
|
47
47
|
expect(@box.__runBeforeLoads()).toBeFalsy()
|
48
|
-
expect(callback[0].callCount).toEqual
|
49
|
-
expect(callback[1].callCount).toEqual
|
50
|
-
expect(callback[2].callCount).toEqual
|
48
|
+
expect(callback[0].callCount).toEqual(1)
|
49
|
+
expect(callback[1].callCount).toEqual(1)
|
50
|
+
expect(callback[2].callCount).toEqual(0)
|
51
51
|
|
52
52
|
it "should chain beforeLoad filters", ->
|
53
53
|
callback = 0.upto(1).map -> sinon.stub()
|
54
|
-
callback[0].returns
|
55
|
-
callback[1].returns
|
54
|
+
callback[0].returns(true)
|
55
|
+
callback[1].returns(true)
|
56
56
|
@box.constructor.beforeLoad(callback[i]) for i in 0.upto(1)
|
57
57
|
expect(@box.__runBeforeLoads()).toBeTruthy()
|
58
|
-
expect(callback[0].callCount).toEqual
|
59
|
-
expect(callback[1].callCount).toEqual
|
58
|
+
expect(callback[0].callCount).toEqual(1)
|
59
|
+
expect(callback[1].callCount).toEqual(1)
|
60
60
|
|
61
61
|
it "should accept callback names", ->
|
62
|
-
@box.constructor.beforeLoad
|
63
|
-
@box.constructor.afterLoad
|
64
|
-
@box.constructor.afterUnload
|
62
|
+
@box.constructor.beforeLoad('callback0')
|
63
|
+
@box.constructor.afterLoad('callback1')
|
64
|
+
@box.constructor.afterUnload('callback2')
|
65
65
|
for i in 0.upto(2)
|
66
66
|
@box['callback' + i] = sinon.spy()
|
67
67
|
@box.__runBeforeLoads()
|
68
68
|
@box.__runAfterLoads()
|
69
69
|
@box.__runAfterUnloads()
|
70
70
|
for i in 0.upto(2)
|
71
|
-
expect(@box['callback' + i].callCount).toEqual
|
71
|
+
expect(@box['callback' + i].callCount).toEqual(1)
|
@@ -6,10 +6,10 @@ describe "Joosy.Modules.Log", ->
|
|
6
6
|
@box = new @TestLog()
|
7
7
|
|
8
8
|
it "should log into console", ->
|
9
|
-
@box.log
|
9
|
+
@box.log('message', 'appendix')
|
10
10
|
|
11
11
|
it "should log debug messages into console", ->
|
12
12
|
Joosy.debug = true
|
13
|
-
@box.debug
|
13
|
+
@box.debug('debug message')
|
14
14
|
Joosy.debug = false
|
15
|
-
@box.debug
|
15
|
+
@box.debug('unseen debug message')
|
@@ -19,15 +19,15 @@ describe "Joosy.Module", ->
|
|
19
19
|
property: 'value'
|
20
20
|
class Klass extends Joosy.Module
|
21
21
|
@include TestModule
|
22
|
-
expect(Klass::property).toEqual
|
23
|
-
expect((new Klass()).property).toEqual
|
22
|
+
expect(Klass::property).toEqual('value')
|
23
|
+
expect((new Klass()).property).toEqual('value')
|
24
24
|
|
25
25
|
it "should extend object", ->
|
26
26
|
TestModule =
|
27
27
|
property: 'value'
|
28
28
|
class Klass extends Joosy.Module
|
29
29
|
@extend TestModule
|
30
|
-
expect(Klass.property).toEqual
|
30
|
+
expect(Klass.property).toEqual('value')
|
31
31
|
expect((new Klass()).property).toBeUndefined()
|
32
32
|
|
33
33
|
it "should run callbacks on include and extend", ->
|
@@ -39,9 +39,18 @@ describe "Joosy.Module", ->
|
|
39
39
|
@include TestModule
|
40
40
|
@extend TestModule
|
41
41
|
for callback in ['included', 'extended']
|
42
|
-
expect(TestModule[callback].callCount).toEqual
|
42
|
+
expect(TestModule[callback].callCount).toEqual(1)
|
43
43
|
expect(TestModule[callback].getCall(0).calledOn(Klass)).toBeTruthy()
|
44
44
|
|
45
|
+
it "should run init hook", ->
|
46
|
+
class Klass extends Joosy.Module
|
47
|
+
init: sinon.spy()
|
48
|
+
target = (new Klass(1, 2)).init
|
49
|
+
expect(target.callCount).toEqual(1)
|
50
|
+
expect(target.alwaysCalledWithExactly(1, 2)).toBeTruthy()
|
51
|
+
|
45
52
|
it "should have minimal set of properties", ->
|
46
|
-
expect(Object.extended(Joosy.Module).keys())
|
47
|
-
|
53
|
+
expect(Object.extended(Joosy.Module).keys())
|
54
|
+
.toEqual(['hasAncestor', 'include', 'extend'])
|
55
|
+
expect(Object.extended(Joosy.Module.prototype).keys())
|
56
|
+
.toEqual([])
|
@@ -7,19 +7,14 @@ describe "Joosy.Modules.TimeManager", ->
|
|
7
7
|
|
8
8
|
|
9
9
|
it "should keep timeouts list", ->
|
10
|
-
timer = @box.setTimeout
|
11
|
-
expect(@box.__timeouts).toEqual
|
12
|
-
window.clearTimeout
|
10
|
+
timer = @box.setTimeout(10000, (->))
|
11
|
+
expect(@box.__timeouts).toEqual([timer])
|
12
|
+
window.clearTimeout(timer)
|
13
13
|
|
14
14
|
it "should keep intervals list", ->
|
15
|
-
timer = @box.setInterval
|
16
|
-
expect(@box.__intervals).toEqual
|
17
|
-
window.clearInterval
|
15
|
+
timer = @box.setInterval(10000, (->))
|
16
|
+
expect(@box.__intervals).toEqual([timer])
|
17
|
+
window.clearInterval(timer)
|
18
18
|
|
19
19
|
it "should stop intervals and timeouts", ->
|
20
|
-
|
21
|
-
runs ->
|
22
|
-
@box.setTimeout 10, callback
|
23
|
-
@box.__clearTime()
|
24
|
-
waits(10)
|
25
|
-
runs -> expect(callback.callCount).toEqual(0)
|
20
|
+
@box.clearTime()
|
@@ -4,26 +4,27 @@ describe "Joosy.Modules.WidgetsManager", ->
|
|
4
4
|
class @TestWidgetManager extends Joosy.Module
|
5
5
|
@include Joosy.Modules.WidgetsManager
|
6
6
|
@box = new @TestWidgetManager()
|
7
|
-
@
|
7
|
+
@widget_mock = Object.extended(
|
8
8
|
__load: sinon.stub()
|
9
9
|
__unload: sinon.spy()
|
10
10
|
)
|
11
|
-
@
|
11
|
+
@widget_mock.__load.returns(@widget_mock)
|
12
12
|
|
13
13
|
|
14
14
|
it "should register and unregister widget", ->
|
15
|
-
expect(@box.registerWidget
|
16
|
-
expect(@box.__activeWidgets).toEqual
|
17
|
-
expect(@
|
15
|
+
expect(@box.registerWidget(@ground, @widget_mock)).toBe(@widget_mock)
|
16
|
+
expect(@box.__activeWidgets).toEqual([@widget_mock])
|
17
|
+
expect(@widget_mock.__load.callCount).toEqual(1)
|
18
18
|
|
19
|
-
expect(@box.unregisterWidget
|
20
|
-
expect(@box.__activeWidgets).toEqual
|
21
|
-
expect(@
|
19
|
+
expect(@box.unregisterWidget(@widget_mock)).toBeTruthy()
|
20
|
+
expect(@box.__activeWidgets).toEqual([undefined])
|
21
|
+
expect(@widget_mock.__unload.callCount).toEqual(1)
|
22
22
|
|
23
23
|
it "should unload all widgets", ->
|
24
|
-
0.upto(2).each =>
|
24
|
+
0.upto(2).each =>
|
25
|
+
@box.registerWidget(@ground, @widget_mock)
|
25
26
|
@box.__unloadWidgets()
|
26
|
-
expect(@
|
27
|
+
expect(@widget_mock.__unload.callCount).toEqual(3)
|
27
28
|
|
28
29
|
it "should inherit widget declarations", ->
|
29
30
|
@box.container = @ground
|
@@ -38,10 +39,11 @@ describe "Joosy.Modules.WidgetsManager", ->
|
|
38
39
|
'selector': 'overriden'
|
39
40
|
subBox = new SubWidgetManagerB()
|
40
41
|
target = subBox.__collectWidgets()
|
41
|
-
expect(target).toEqual
|
42
|
+
expect(target).toEqual(
|
42
43
|
'test': 'widget'
|
43
44
|
'widgets': 'widget'
|
44
45
|
'selector': 'overriden'
|
46
|
+
)
|
45
47
|
|
46
48
|
it "should register widgets per declaration", ->
|
47
49
|
@seedGround()
|
@@ -51,25 +53,9 @@ describe "Joosy.Modules.WidgetsManager", ->
|
|
51
53
|
'$container': Joosy.Widget
|
52
54
|
'$footer': Joosy.Widget
|
53
55
|
'.post': sinon.stub()
|
54
|
-
@box.widgets['.post'].returns
|
55
|
-
@box.__setupWidgets()
|
56
|
-
expect(@box.__activeWidgets.length).toEqual 5
|
57
|
-
expect(@box.widgets['.post'].callCount).toEqual 3
|
58
|
-
expect(@box.widgets['.post'].getCall(0).calledOn @box).toBeTruthy()
|
59
|
-
|
60
|
-
it "should bootstrap widget properly", ->
|
61
|
-
class TextWidget extends Joosy.Widget
|
62
|
-
@view -> 'fluffy'
|
63
|
-
constructor: (@tester) ->
|
64
|
-
|
65
|
-
@seedGround()
|
66
|
-
@box.container = $('#application')
|
67
|
-
@box.widgets =
|
68
|
-
'.post:first': TextWidget
|
69
|
-
'.widget:first': (i) -> new TextWidget i
|
56
|
+
@box.widgets['.post'].returns(@widget_mock)
|
70
57
|
@box.__setupWidgets()
|
58
|
+
expect(@box.__activeWidgets.length).toEqual(5)
|
59
|
+
expect(@box.widgets['.post'].callCount).toEqual(3)
|
60
|
+
expect(@box.widgets['.post'].getCall(0).calledOn(@box))
|
71
61
|
|
72
|
-
expect(@ground.find('.post').html()).toEqual 'fluffy'
|
73
|
-
expect(@ground.find('.widget').html()).toEqual 'fluffy'
|
74
|
-
expect(@box.__activeWidgets[0].tester).toBeUndefined()
|
75
|
-
expect(@box.__activeWidgets[1].tester).toEqual 0
|
@@ -0,0 +1 @@
|
|
1
|
+
*.js
|
@@ -0,0 +1 @@
|
|
1
|
+
*.js
|