joosy 0.1.0.RC3 → 0.1.0.alpha

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 (115) hide show
  1. data/.gitignore +0 -2
  2. data/Gemfile +2 -13
  3. data/Gemfile.lock +62 -80
  4. data/Guardfile +15 -21
  5. data/MIT-LICENSE +2 -2
  6. data/README.rdoc +3 -0
  7. data/app/helpers/joosy/sprockets_helper.rb +11 -23
  8. data/joosy.gemspec +3 -3
  9. data/lib/joosy/forms.rb +12 -2
  10. data/lib/joosy/rails/engine.rb +1 -9
  11. data/lib/joosy/rails/version.rb +2 -2
  12. data/lib/joosy-rails.rb +5 -0
  13. data/lib/rails/generators/joosy/application_generator.rb +3 -13
  14. data/lib/rails/generators/joosy/joosy_base.rb +2 -2
  15. data/lib/rails/generators/joosy/layout_generator.rb +1 -8
  16. data/lib/rails/generators/joosy/page_generator.rb +6 -21
  17. data/lib/rails/generators/joosy/preloader_generator.rb +7 -14
  18. data/lib/rails/generators/joosy/templates/app/layouts/application.js.coffee +0 -1
  19. data/lib/rails/generators/joosy/templates/app/layouts/template.js.coffee +1 -1
  20. data/lib/rails/generators/joosy/templates/app/pages/application.js.coffee +1 -1
  21. data/lib/rails/generators/joosy/templates/app/pages/template.js.coffee +3 -3
  22. data/lib/rails/generators/joosy/templates/app/routes.js.coffee +1 -7
  23. data/lib/rails/generators/joosy/templates/app/widgets/template.js.coffee +2 -2
  24. data/lib/rails/generators/joosy/templates/app.js.coffee +0 -3
  25. data/lib/rails/generators/joosy/templates/app_preloader.js.coffee.erb +12 -9
  26. data/lib/rails/generators/joosy/templates/preload.html.erb +6 -5
  27. data/lib/rails/generators/joosy/templates/preload.html.haml +5 -3
  28. data/lib/rails/generators/joosy/templates/preload.html.slim +21 -0
  29. data/lib/rails/generators/joosy/widget_generator.rb +1 -8
  30. data/spec/javascripts/helpers/spec_helper.js.coffee +0 -20
  31. data/spec/javascripts/joosy/core/modules/container_spec.js.coffee +27 -24
  32. data/spec/javascripts/joosy/core/modules/events_spec.js.coffee +18 -42
  33. data/spec/javascripts/joosy/core/modules/filters_spec.js.coffee +27 -27
  34. data/spec/javascripts/joosy/core/modules/log_spec.js.coffee +3 -3
  35. data/spec/javascripts/joosy/core/modules/module_spec.js.coffee +15 -6
  36. data/spec/javascripts/joosy/core/modules/time_manager_spec.js.coffee +7 -12
  37. data/spec/javascripts/joosy/core/modules/widget_manager_spec.js.coffee +17 -31
  38. data/tmp/javascripts/.gitignore +1 -0
  39. data/tmp/spec/javascripts/helpers/.gitignore +1 -0
  40. data/vendor/assets/javascripts/base64.js +135 -0
  41. data/vendor/assets/javascripts/joosy/core/application.js.coffee +26 -0
  42. data/vendor/assets/javascripts/joosy/core/form.js.coffee +87 -0
  43. data/vendor/assets/javascripts/joosy/core/joosy.js.coffee +62 -0
  44. data/vendor/assets/javascripts/joosy/core/layout.js.coffee +38 -0
  45. data/vendor/assets/javascripts/joosy/core/modules/container.js.coffee +51 -0
  46. data/vendor/assets/javascripts/joosy/core/modules/events.js.coffee +17 -0
  47. data/vendor/assets/javascripts/joosy/core/modules/filters.js.coffee +39 -0
  48. data/vendor/assets/javascripts/joosy/core/modules/log.js.coffee +12 -0
  49. data/vendor/assets/javascripts/joosy/core/modules/module.js.coffee +28 -0
  50. data/vendor/assets/javascripts/joosy/core/modules/time_manager.js.coffee +23 -0
  51. data/vendor/assets/javascripts/joosy/core/modules/widgets_manager.js.coffee +45 -0
  52. data/vendor/assets/javascripts/joosy/core/page.js.coffee +136 -0
  53. data/vendor/assets/javascripts/joosy/core/resource/rest.js.coffee +69 -0
  54. data/vendor/assets/javascripts/joosy/core/resource/rest_collection.js.coffee +42 -0
  55. data/vendor/assets/javascripts/joosy/core/router.js.coffee +75 -0
  56. data/vendor/assets/javascripts/joosy/core/widget.js.coffee +35 -0
  57. data/vendor/assets/javascripts/joosy/preloader/development.js.coffee +27 -0
  58. data/vendor/assets/javascripts/joosy/preloader/production.js.coffee +84 -0
  59. data/{app → vendor}/assets/javascripts/joosy.js.coffee +0 -0
  60. data/vendor/assets/javascripts/jquery.form.js +963 -978
  61. data/vendor/assets/javascripts/sugar.js +1 -1
  62. metadata +48 -77
  63. data/.codoopts +0 -5
  64. data/README.md +0 -95
  65. data/app/assets/javascripts/joosy/core/application.js.coffee +0 -50
  66. data/app/assets/javascripts/joosy/core/form.js.coffee +0 -304
  67. data/app/assets/javascripts/joosy/core/helpers/view.js.coffee +0 -30
  68. data/app/assets/javascripts/joosy/core/joosy.js.coffee +0 -129
  69. data/app/assets/javascripts/joosy/core/layout.js.coffee +0 -162
  70. data/app/assets/javascripts/joosy/core/modules/container.js.coffee +0 -104
  71. data/app/assets/javascripts/joosy/core/modules/events.js.coffee +0 -123
  72. data/app/assets/javascripts/joosy/core/modules/filters.js.coffee +0 -67
  73. data/app/assets/javascripts/joosy/core/modules/log.js.coffee +0 -36
  74. data/app/assets/javascripts/joosy/core/modules/module.js.coffee +0 -105
  75. data/app/assets/javascripts/joosy/core/modules/renderer.js.coffee +0 -195
  76. data/app/assets/javascripts/joosy/core/modules/time_manager.js.coffee +0 -46
  77. data/app/assets/javascripts/joosy/core/modules/widgets_manager.js.coffee +0 -84
  78. data/app/assets/javascripts/joosy/core/page.js.coffee +0 -375
  79. data/app/assets/javascripts/joosy/core/preloader.js.coffee +0 -13
  80. data/app/assets/javascripts/joosy/core/resource/collection.js.coffee +0 -174
  81. data/app/assets/javascripts/joosy/core/resource/generic.js.coffee +0 -254
  82. data/app/assets/javascripts/joosy/core/resource/rest.js.coffee +0 -197
  83. data/app/assets/javascripts/joosy/core/resource/rest_collection.js.coffee +0 -125
  84. data/app/assets/javascripts/joosy/core/router.js.coffee +0 -163
  85. data/app/assets/javascripts/joosy/core/templaters/rails_jst.js.coffee +0 -36
  86. data/app/assets/javascripts/joosy/core/widget.js.coffee +0 -80
  87. data/app/assets/javascripts/joosy/preloaders/caching.js.coffee +0 -169
  88. data/app/assets/javascripts/joosy/preloaders/inline.js.coffee +0 -56
  89. data/lib/joosy.rb +0 -9
  90. data/lib/rails/generators/joosy/resource_generator.rb +0 -29
  91. data/lib/rails/generators/joosy/templates/app/helpers/application.js.coffee +0 -4
  92. data/lib/rails/generators/joosy/templates/app/pages/welcome/index.js.coffee +0 -22
  93. data/lib/rails/generators/joosy/templates/app/resources/template.js.coffee +0 -2
  94. data/lib/rails/generators/joosy/templates/app/templates/layouts/application.jst.hamlc +0 -2
  95. data/lib/rails/generators/joosy/templates/app/templates/pages/welcome/index.jst.hamlc +0 -7
  96. data/spec/javascripts/joosy/core/application_spec.js.coffee +0 -40
  97. data/spec/javascripts/joosy/core/form_spec.js.coffee +0 -184
  98. data/spec/javascripts/joosy/core/joosy_spec.js.coffee +0 -72
  99. data/spec/javascripts/joosy/core/layout_spec.js.coffee +0 -50
  100. data/spec/javascripts/joosy/core/modules/renderer_spec.js.coffee +0 -185
  101. data/spec/javascripts/joosy/core/page_spec.js.coffee +0 -178
  102. data/spec/javascripts/joosy/core/resource/collection_spec.js.coffee +0 -84
  103. data/spec/javascripts/joosy/core/resource/generic_spec.js.coffee +0 -118
  104. data/spec/javascripts/joosy/core/resource/rest_collection_spec.js.coffee +0 -58
  105. data/spec/javascripts/joosy/core/resource/rest_spec.js.coffee +0 -129
  106. data/spec/javascripts/joosy/core/router_spec.js.coffee +0 -123
  107. data/spec/javascripts/joosy/core/templaters/rails_jst_spec.js.coffee +0 -25
  108. data/spec/javascripts/joosy/core/widget_spec.js.coffee +0 -40
  109. data/spec/javascripts/joosy/preloaders/caching_spec.js.coffee +0 -36
  110. data/spec/javascripts/joosy/preloaders/inline_spec.js.coffee +0 -16
  111. data/spec/javascripts/support/assets/coolface.jpg +0 -0
  112. data/spec/javascripts/support/assets/okay.jpg +0 -0
  113. data/spec/javascripts/support/assets/test.js +0 -1
  114. data/spec/javascripts/support/sinon-ie-1.3.1.js +0 -82
  115. data/vendor/assets/javascripts/metamorph.js +0 -409
@@ -1,21 +1,22 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <title><%= file_path %></title>
4
+ <title>Loading...</title>
5
5
 
6
6
  <script type="text/javascript">
7
- window.joosy = {
8
- libraries: <%= "<%= extract_sources_and_sizes_from_include_tag('#{file_path}') %"+">" %>,
9
- environment: '<%= "<%= Rails.env.to_s %"+">" %>'
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> <%= file_path %>
4
+ %title> Loading...
5
5
 
6
6
  javascript:
7
7
  window.preload = {
8
- libraries: #{extract_sources_and_sizes_from_include_tag('<%= file_path %>')}
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
- unless class_path.size == 1
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 0
18
+ target = @box.footer.get(0)
19
19
  expect(target).toBeTruthy()
20
- expect(target).toBe $('.footer', @box.container).get 0
21
- expect(target).toBe @box.$('.footer').get 0
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 '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(callback.callCount).toEqual 1
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 Object.extended
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 Object.extended(footer: '.footer')
54
+ expect(target).toEqual(footer: '.footer')
53
55
 
54
56
  it "should resolve element selector", ->
55
- target = @box.__extractSelector '$footer'
56
- expect(target).toEqual '.footer'
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 Object.extended
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 Object.extended('test': 'onContainerTest')
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 'test'
87
- $('.footer', @box.container).trigger 'test'
88
- $('.post', @box.container).trigger 'test'
89
- expect(callback[0].callCount).toEqual 5
90
- expect(callback[1].callCount).toEqual 1
91
- expect(callback[2].callCount).toEqual 3
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
- @box.trigger 'events'
17
- expect(callback.callCount).toEqual 0
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
- @box.bind 'event', callback
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
- @sub.wait 'foo', callback
51
-
52
- expect(@sub.__oneShotEvents).toEqual [[['foo'], callback]]
53
- expect(@box.__oneShotEvents).toBeUndefined()
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 ['filter1', 'filter4']
20
- expect(target.__afterLoads).toEqual ['filter2', 'filter5']
21
- expect(target.__afterUnloads).toEqual ['filter3', 'filter6']
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 ['filter1']
24
- expect(target.__afterLoads).toEqual ['filter2']
25
- expect(target.__afterUnloads).toEqual ['filter3']
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 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
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 1
41
- expect(callback[i].alwaysCalledWithExactly 1, 2).toBeTruthy()
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 true
46
- @box.constructor.beforeLoad(callback[i]) for i in 0.upto 2
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 1
49
- expect(callback[1].callCount).toEqual 1
50
- expect(callback[2].callCount).toEqual 0
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 true
55
- callback[1].returns true
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 1
59
- expect(callback[1].callCount).toEqual 1
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 'callback0'
63
- @box.constructor.afterLoad 'callback1'
64
- @box.constructor.afterUnload 'callback2'
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 1
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 'message', 'appendix'
9
+ @box.log('message', 'appendix')
10
10
 
11
11
  it "should log debug messages into console", ->
12
12
  Joosy.debug = true
13
- @box.debug 'debug message'
13
+ @box.debug('debug message')
14
14
  Joosy.debug = false
15
- @box.debug 'unseen debug message'
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 'value'
23
- expect((new Klass()).property).toEqual 'value'
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 'value'
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 1
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()).toEqual ['__namespace__', '__className', 'hasAncestor', 'merge', 'include', 'extend']
47
- expect(Object.extended(Joosy.Module.prototype).keys()).toEqual []
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 10000, ->
11
- expect(@box.__timeouts).toEqual [timer]
12
- window.clearTimeout timer
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 10000, ->
16
- expect(@box.__intervals).toEqual [timer]
17
- window.clearInterval timer
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
- callback = sinon.spy()
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
- @widgetMock = Object.extended(
7
+ @widget_mock = Object.extended(
8
8
  __load: sinon.stub()
9
9
  __unload: sinon.spy()
10
10
  )
11
- @widgetMock.__load.returns @widgetMock
11
+ @widget_mock.__load.returns(@widget_mock)
12
12
 
13
13
 
14
14
  it "should register and unregister widget", ->
15
- expect(@box.registerWidget @ground, @widgetMock).toBe @widgetMock
16
- expect(@box.__activeWidgets).toEqual [@widgetMock]
17
- expect(@widgetMock.__load.callCount).toEqual 1
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 @widgetMock).toBeTruthy()
20
- expect(@box.__activeWidgets).toEqual []
21
- expect(@widgetMock.__unload.callCount).toEqual 1
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 => @box.registerWidget(@ground, @widgetMock)
24
+ 0.upto(2).each =>
25
+ @box.registerWidget(@ground, @widget_mock)
25
26
  @box.__unloadWidgets()
26
- expect(@widgetMock.__unload.callCount).toEqual 3
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 Object.extended
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 @widgetMock
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