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.
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