joosy 1.0.0.RC4 → 1.0.0.RC5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/Gemfile +1 -1
  2. data/Gemfile.lock +99 -82
  3. data/README.md +1 -1
  4. data/app/assets/javascripts/joosy/core/application.js.coffee +2 -2
  5. data/app/assets/javascripts/joosy/core/form.js.coffee +35 -22
  6. data/app/assets/javascripts/joosy/core/helpers/form.js.coffee +38 -9
  7. data/app/assets/javascripts/joosy/core/helpers/view.js.coffee +10 -4
  8. data/app/assets/javascripts/joosy/core/helpers/widgets.js.coffee +6 -1
  9. data/app/assets/javascripts/joosy/core/joosy.js.coffee +5 -3
  10. data/app/assets/javascripts/joosy/core/layout.js.coffee +5 -5
  11. data/app/assets/javascripts/joosy/core/modules/events.js.coffee +28 -10
  12. data/app/assets/javascripts/joosy/core/modules/log.js.coffee +1 -1
  13. data/app/assets/javascripts/joosy/core/modules/module.js.coffee +2 -2
  14. data/app/assets/javascripts/joosy/core/modules/time_manager.js.coffee +1 -1
  15. data/app/assets/javascripts/joosy/core/page.js.coffee +1 -1
  16. data/app/assets/javascripts/joosy/core/resource/collection.js.coffee +18 -18
  17. data/app/assets/javascripts/joosy/core/resource/generic.js.coffee +21 -19
  18. data/app/assets/javascripts/joosy/core/resource/rest.js.coffee +26 -14
  19. data/app/assets/javascripts/joosy/core/resource/rest_collection.js.coffee +2 -2
  20. data/app/assets/javascripts/joosy/core/router.js.coffee +2 -2
  21. data/app/assets/javascripts/joosy/core/widget.js.coffee +3 -0
  22. data/app/assets/javascripts/joosy/preloaders/caching.js.coffee +7 -7
  23. data/app/assets/javascripts/joosy/preloaders/inline.js.coffee +5 -5
  24. data/lib/joosy/rails/version.rb +1 -1
  25. data/lib/rails/generators/joosy/templates/app/helpers/application.js.coffee +2 -2
  26. data/lib/rails/generators/joosy/templates/app/pages/welcome/index.js.coffee +5 -5
  27. data/lib/rails/generators/joosy/templates/app/routes.js.coffee +2 -2
  28. data/lib/rails/generators/joosy/templates/preload.html.slim +19 -0
  29. data/lib/rails/resources_with_joosy.rb +2 -2
  30. data/spec/javascripts/helpers/spec_helper.js.coffee +19 -0
  31. data/spec/javascripts/joosy/core/form_spec.js.coffee +36 -16
  32. data/spec/javascripts/joosy/core/helpers/forms_spec.js.coffee +28 -23
  33. data/spec/javascripts/joosy/core/helpers/widgets_spec.js.coffee +17 -0
  34. data/spec/javascripts/joosy/core/joosy_spec.js.coffee +2 -0
  35. data/spec/javascripts/joosy/core/modules/events_spec.js.coffee +35 -1
  36. data/spec/javascripts/joosy/core/modules/renderer_spec.js.coffee +29 -29
  37. data/spec/javascripts/joosy/core/page_spec.js.coffee +2 -2
  38. data/spec/javascripts/joosy/core/resource/collection_spec.js.coffee +14 -9
  39. data/spec/javascripts/joosy/core/resource/generic_spec.js.coffee +19 -19
  40. data/spec/javascripts/joosy/core/resource/rest_collection_spec.js.coffee +0 -1
  41. data/spec/javascripts/joosy/core/resource/rest_spec.js.coffee +9 -3
  42. data/spec/javascripts/joosy/preloaders/caching_spec.js.coffee +7 -7
  43. data/spec/javascripts/joosy/preloaders/inline_spec.js.coffee +5 -5
  44. data/spec/javascripts/support/sinon-1.3.1.js +6 -6
  45. data/spec/javascripts/support/sinon-ie-1.3.1.js +5 -5
  46. metadata +22 -20
@@ -21,16 +21,16 @@ describe "Joosy.Resource.Generic", ->
21
21
  it "remembers where it belongs", ->
22
22
  resource = new Joosy.Resource.Generic foo: 'bar'
23
23
  expect(resource.data).toEqual foo: 'bar'
24
-
24
+
25
25
  it "produces magic function", ->
26
26
  expect(Object.isFunction @resource).toBeTruthy()
27
27
  expect(@resource.data).toEqual @data
28
-
28
+
29
29
  it "gets values", ->
30
30
  expect(@resource 'foo').toEqual 'bar'
31
31
  expect(@resource 'very.deep').toEqual value: 'boo!'
32
32
  expect(@resource 'very.deep.value').toEqual 'boo!'
33
-
33
+
34
34
  it "sets values", ->
35
35
  expect(@resource 'foo').toEqual 'bar'
36
36
  @resource 'foo', 'baz'
@@ -39,49 +39,49 @@ describe "Joosy.Resource.Generic", ->
39
39
  expect(@resource 'very.deep').toEqual value: 'boo!'
40
40
  @resource 'very.deep', 'banana!'
41
41
  expect(@resource 'very.deep').toEqual 'banana!'
42
-
42
+
43
43
  @resource 'another.deep.value', 'banana strikes back'
44
44
  expect(@resource 'another.deep').toEqual value: 'banana strikes back'
45
-
45
+
46
46
  it "handles @at", ->
47
47
  class Fluffy extends Joosy.Resource.Generic
48
48
  @entity 'fluffy'
49
49
 
50
50
  clone = Fluffy.at('rumbas!')
51
-
51
+
52
52
  expect(clone.__source).toEqual 'rumbas!'
53
53
  expect(Joosy.Module.hasAncestor clone, Fluffy).toBeTruthy()
54
54
 
55
55
  clone = Fluffy.at Test.build(1)
56
-
56
+
57
57
  expect(clone.__source).toEqual '/tests/1/fluffies'
58
58
  expect(Joosy.Module.hasAncestor clone, Fluffy).toBeTruthy()
59
59
  # clone won't be instanceof Fluffy in IE
60
60
  #expect(clone.build({}) instanceof Fluffy).toBeTruthy()
61
-
61
+
62
62
  it "triggers 'changed' right", ->
63
63
  callback = sinon.spy()
64
64
  @resource.bind 'changed', callback
65
65
  @resource 'foo', 'baz'
66
66
  @resource 'foo', 'baz2'
67
-
67
+
68
68
  expect(callback.callCount).toEqual(2)
69
-
69
+
70
70
  it "handles the before filter", ->
71
71
  class R extends Joosy.Resource.Generic
72
72
  @beforeLoad (data) ->
73
73
  data ||= {}
74
74
  data.tested = true
75
75
  data
76
-
76
+
77
77
  resource = R.build()
78
-
78
+
79
79
  expect(resource 'tested').toBeTruthy()
80
-
80
+
81
81
  it "should map inlines", ->
82
- class RumbaMumba extends Joosy.Resource.Generic
82
+ class RumbaMumba extends Joosy.Resource.Generic
83
83
  @entity 'rumba_mumba'
84
-
84
+
85
85
  class R extends Joosy.Resource.Generic
86
86
  @map 'rumbaMumbas', RumbaMumba
87
87
 
@@ -103,7 +103,7 @@ describe "Joosy.Resource.Generic", ->
103
103
 
104
104
  it "should use magic collections", ->
105
105
  class window.RumbaMumbasCollection extends Joosy.Resource.Collection
106
-
106
+
107
107
  class RumbaMumba extends Joosy.Resource.Generic
108
108
  @entity 'rumba_mumba'
109
109
  class R extends Joosy.Resource.Generic
@@ -116,9 +116,9 @@ describe "Joosy.Resource.Generic", ->
116
116
  ]
117
117
  expect(resource('rumbaMumbas') instanceof RumbaMumbasCollection).toBeTruthy()
118
118
  expect(resource('rumbaMumbas').at(0)('foo')).toEqual 'bar'
119
-
119
+
120
120
  window.RumbaMumbasCollection = undefined
121
-
121
+
122
122
  it "should use manually set collections", ->
123
123
  class OloCollection extends Joosy.Resource.Collection
124
124
 
@@ -152,4 +152,4 @@ describe "Joosy.Resource.Generic", ->
152
152
 
153
153
  inline('foo', 'bar')
154
154
 
155
- expect(root('test_inlines').at(0)('foo')).toEqual 'bar'
155
+ expect(root('test_inlines').at(0)('foo')).toEqual 'bar'
@@ -12,7 +12,6 @@ describe "Joosy.Resource.RESTCollection", ->
12
12
 
13
13
  it "loads", ->
14
14
  @collection.load [{"id": 1, "name": "test1"}, {"id": 2, "name": "test2"}]
15
- console.log @collection.data[0].constructor
16
15
  expect(@collection.data.length).toEqual 2
17
16
  expect(@collection.data[0] instanceof Test).toBeTruthy()
18
17
  expect(@collection.data[0].data.name).toEqual 'test1'
@@ -23,17 +23,21 @@ describe "Joosy.Resource.REST", ->
23
23
 
24
24
  it "builds member path", ->
25
25
  parent = FluffyParent.build 1
26
+ grandParent = FluffyParent.build 666
26
27
 
27
28
  expect(Fluffy.memberPath 1).toEqual '/fluffies/1'
28
29
  expect(Fluffy.memberPath 1, parent: parent).toEqual '/fluffy_parents/1/fluffies/1'
30
+ expect(Fluffy.memberPath 1, parent: [grandParent, parent]).toEqual '/fluffy_parents/666/fluffy_parents/1/fluffies/1'
29
31
  expect(Fluffy.memberPath 1, parent: parent, from: 'test').toEqual '/fluffy_parents/1/fluffies/1/test'
30
32
  expect(Fluffy.memberPath 1, parent: parent, from: 'test', params: {foo: 'bar'}).toEqual '/fluffy_parents/1/fluffies/1/test'
31
33
 
32
34
  it "builds collection path", ->
33
35
  parent = FluffyParent.build 1
36
+ grandParent = FluffyParent.build 666
34
37
 
35
38
  expect(Fluffy.collectionPath()).toEqual '/fluffies'
36
39
  expect(Fluffy.collectionPath parent: parent).toEqual '/fluffy_parents/1/fluffies'
40
+ expect(Fluffy.collectionPath parent: [grandParent, parent]).toEqual '/fluffy_parents/666/fluffy_parents/1/fluffies'
37
41
  expect(Fluffy.collectionPath parent: parent, from: 'test').toEqual '/fluffy_parents/1/fluffies/test'
38
42
  expect(Fluffy.collectionPath parent: parent, from: 'test', params: {foo: 'bar'}).toEqual '/fluffy_parents/1/fluffies/test'
39
43
 
@@ -41,10 +45,11 @@ describe "Joosy.Resource.REST", ->
41
45
  describe "finds resource", ->
42
46
  rawData = '{"fluffy": {"id": 1, "name": "test1"}}'
43
47
 
44
- callback = sinon.spy (target) ->
48
+ callback = sinon.spy (target, data) ->
45
49
  expect(target instanceof Fluffy).toEqual true
46
50
  expect(target.id()).toEqual 1
47
51
  expect(target 'name').toEqual 'test1'
52
+ expect(data).toEqual $.parseJSON(rawData)
48
53
 
49
54
  it "without params", ->
50
55
  resource = Fluffy.find 1, callback
@@ -75,12 +80,13 @@ describe "Joosy.Resource.REST", ->
75
80
  checkAndRespond @server.requests[0], 'GET', /^\/fluffies\/1\?_=\d+/, rawData
76
81
 
77
82
  describe "finds collection", ->
78
- rawData = '{"fluffies": [{"id": 1, "name": "test1"}, {"id": 2, "name": "test2"}]}'
83
+ rawData = '{"page": 42, "fluffies": [{"id": 1, "name": "test1"}, {"id": 2, "name": "test2"}]}'
79
84
 
80
- callback = sinon.spy (target) ->
85
+ callback = sinon.spy (target, data) ->
81
86
  expect(target instanceof Joosy.Resource.RESTCollection).toEqual true
82
87
  expect(target.size()).toEqual 2
83
88
  expect(target.at(0) instanceof Fluffy).toEqual true
89
+ expect(data).toEqual $.parseJSON(rawData)
84
90
 
85
91
  it "without params", ->
86
92
  resource = Fluffy.find 'all', callback
@@ -3,16 +3,16 @@ describe "CachingPreloader", ->
3
3
  it "should load JS", ->
4
4
  window.variable_assigned_on_load = undefined
5
5
  localStorage.clear()
6
-
6
+
7
7
  callback = sinon.spy()
8
8
  server = sinon.fakeServer.create()
9
-
9
+
10
10
  load = ->
11
- CachingPreloader.load [['/spec/javascripts/support/assets/test.js']],
11
+ CachingPreloader.load [['/spec/javascripts/support/assets/test.js']],
12
12
  complete: callback
13
13
 
14
14
  load()
15
-
15
+
16
16
  expect(server.requests.length).toEqual 1
17
17
  target = server.requests[0]
18
18
  expect(target.method).toEqual 'GET'
@@ -23,9 +23,9 @@ describe "CachingPreloader", ->
23
23
  expect(callback.callCount).toEqual 1
24
24
  expect(window.variable_assigned_on_load).toEqual 'yapyap'
25
25
  window.variable_assigned_on_load = undefined
26
-
26
+
27
27
  load()
28
-
28
+
29
29
  expect(server.requests.length).toEqual 1
30
30
  expect(callback.callCount).toEqual 2
31
31
  expect(window.variable_assigned_on_load).toEqual 'yapyap'
@@ -33,4 +33,4 @@ describe "CachingPreloader", ->
33
33
  server.restore()
34
34
 
35
35
  window.variable_assigned_on_load = undefined
36
- localStorage.clear()
36
+ localStorage.clear()
@@ -3,14 +3,14 @@ describe "InlinePreloader", ->
3
3
  it "should load JS", ->
4
4
  window.variable_assigned_on_load = undefined
5
5
  callback = sinon.spy()
6
-
6
+
7
7
  runs ->
8
- InlinePreloader.load [['/spec/javascripts/support/assets/test.js']],
8
+ InlinePreloader.load [['/spec/javascripts/support/assets/test.js']],
9
9
  complete: callback
10
-
10
+
11
11
  waits 100
12
-
12
+
13
13
  runs ->
14
14
  expect(callback.callCount).toEqual 1
15
15
  expect(window.variable_assigned_on_load).toEqual 'yapyap'
16
- window.variable_assigned_on_load = undefined
16
+ window.variable_assigned_on_load = undefined
@@ -4,13 +4,13 @@
4
4
  * @author Christian Johansen (christian@cjohansen.no)
5
5
  *
6
6
  * (The BSD License)
7
- *
7
+ *
8
8
  * Copyright (c) 2010-2011, Christian Johansen, christian@cjohansen.no
9
9
  * All rights reserved.
10
- *
10
+ *
11
11
  * Redistribution and use in source and binary forms, with or without modification,
12
12
  * are permitted provided that the following conditions are met:
13
- *
13
+ *
14
14
  * * Redistributions of source code must retain the above copyright notice,
15
15
  * this list of conditions and the following disclaimer.
16
16
  * * Redistributions in binary form must reproduce the above copyright notice,
@@ -19,7 +19,7 @@
19
19
  * * Neither the name of Christian Johansen nor the names of his contributors
20
20
  * may be used to endorse or promote products derived from this software
21
21
  * without specific prior written permission.
22
- *
22
+ *
23
23
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
24
24
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25
25
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -1197,7 +1197,7 @@ var sinon = (function (buster) {
1197
1197
  } else {
1198
1198
  this.exception = error;
1199
1199
  }
1200
-
1200
+
1201
1201
  return this;
1202
1202
  }
1203
1203
 
@@ -1238,7 +1238,7 @@ var sinon = (function (buster) {
1238
1238
  if (typeof pos != "number") {
1239
1239
  throw new TypeError("argument index is not number");
1240
1240
  }
1241
-
1241
+
1242
1242
  this.returnArgAt = pos;
1243
1243
 
1244
1244
  return this;
@@ -4,13 +4,13 @@
4
4
  * @author Christian Johansen (christian@cjohansen.no)
5
5
  *
6
6
  * (The BSD License)
7
- *
7
+ *
8
8
  * Copyright (c) 2010-2011, Christian Johansen, christian@cjohansen.no
9
9
  * All rights reserved.
10
- *
10
+ *
11
11
  * Redistribution and use in source and binary forms, with or without modification,
12
12
  * are permitted provided that the following conditions are met:
13
- *
13
+ *
14
14
  * * Redistributions of source code must retain the above copyright notice,
15
15
  * this list of conditions and the following disclaimer.
16
16
  * * Redistributions in binary form must reproduce the above copyright notice,
@@ -19,7 +19,7 @@
19
19
  * * Neither the name of Christian Johansen nor the names of his contributors
20
20
  * may be used to endorse or promote products derived from this software
21
21
  * without specific prior written permission.
22
- *
22
+ *
23
23
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
24
24
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25
25
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -79,4 +79,4 @@ function XMLHttpRequest() {}
79
79
 
80
80
  // Reassign the original function. Now its writable attribute
81
81
  // should be true. Hackish, I know, but it works.
82
- XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined;
82
+ XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: joosy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.RC4
4
+ version: 1.0.0.RC5
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -12,11 +12,11 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2012-06-19 00:00:00.000000000 Z
15
+ date: 2012-12-14 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rails
19
- requirement: &70267714575100 !ruby/object:Gem::Requirement
19
+ requirement: &70277116410620 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
22
  - - ! '>='
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: 3.1.0
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *70267714575100
27
+ version_requirements: *70277116410620
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: coffee-rails
30
- requirement: &70267714574680 !ruby/object:Gem::Requirement
30
+ requirement: &70277116408700 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ! '>='
@@ -35,10 +35,10 @@ dependencies:
35
35
  version: '0'
36
36
  type: :runtime
37
37
  prerelease: false
38
- version_requirements: *70267714574680
38
+ version_requirements: *70277116408700
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: jquery-rails
41
- requirement: &70267714574220 !ruby/object:Gem::Requirement
41
+ requirement: &70277116407280 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
44
  - - ! '>='
@@ -46,10 +46,10 @@ dependencies:
46
46
  version: '0'
47
47
  type: :runtime
48
48
  prerelease: false
49
- version_requirements: *70267714574220
49
+ version_requirements: *70277116407280
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: haml_coffee_assets
52
- requirement: &70267714609360 !ruby/object:Gem::Requirement
52
+ requirement: &70277116405680 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ! '>='
@@ -57,10 +57,10 @@ dependencies:
57
57
  version: '0'
58
58
  type: :runtime
59
59
  prerelease: false
60
- version_requirements: *70267714609360
60
+ version_requirements: *70277116405680
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: i18n-js
63
- requirement: &70267714608940 !ruby/object:Gem::Requirement
63
+ requirement: &70277116402480 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ! '>='
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: '0'
69
69
  type: :runtime
70
70
  prerelease: false
71
- version_requirements: *70267714608940
71
+ version_requirements: *70277116402480
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: guard
74
- requirement: &70267714608520 !ruby/object:Gem::Requirement
74
+ requirement: &70277116399260 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ! '>='
@@ -79,10 +79,10 @@ dependencies:
79
79
  version: '0'
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *70267714608520
82
+ version_requirements: *70277116399260
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: guard-coffeescript
85
- requirement: &70267714608100 !ruby/object:Gem::Requirement
85
+ requirement: &70277116397960 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
88
88
  - - ! '>='
@@ -90,10 +90,10 @@ dependencies:
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
- version_requirements: *70267714608100
93
+ version_requirements: *70277116397960
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: guard-sprockets
96
- requirement: &70267714607680 !ruby/object:Gem::Requirement
96
+ requirement: &70277116396780 !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
99
  - - ! '>='
@@ -101,10 +101,10 @@ dependencies:
101
101
  version: '0'
102
102
  type: :development
103
103
  prerelease: false
104
- version_requirements: *70267714607680
104
+ version_requirements: *70277116396780
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: jasmine
107
- requirement: &70267714607260 !ruby/object:Gem::Requirement
107
+ requirement: &70277116396020 !ruby/object:Gem::Requirement
108
108
  none: false
109
109
  requirements:
110
110
  - - ! '>='
@@ -112,7 +112,7 @@ dependencies:
112
112
  version: '0'
113
113
  type: :development
114
114
  prerelease: false
115
- version_requirements: *70267714607260
115
+ version_requirements: *70277116396020
116
116
  description: A gem wrapper to include Joosy via the asset pipeline.
117
117
  email: boris@roundlake.ru
118
118
  executables: []
@@ -184,6 +184,7 @@ files:
184
184
  - lib/rails/generators/joosy/templates/app_railties.js.coffee.erb
185
185
  - lib/rails/generators/joosy/templates/preload.html.erb
186
186
  - lib/rails/generators/joosy/templates/preload.html.haml
187
+ - lib/rails/generators/joosy/templates/preload.html.slim
187
188
  - lib/rails/generators/joosy/widget_generator.rb
188
189
  - lib/rails/resources_with_joosy.rb
189
190
  - spec/javascripts/helpers/spec_helper.js.coffee
@@ -191,6 +192,7 @@ files:
191
192
  - spec/javascripts/joosy/core/form_spec.js.coffee
192
193
  - spec/javascripts/joosy/core/helpers/forms_spec.js.coffee
193
194
  - spec/javascripts/joosy/core/helpers/view_spec.js.coffee
195
+ - spec/javascripts/joosy/core/helpers/widgets_spec.js.coffee
194
196
  - spec/javascripts/joosy/core/joosy_spec.js.coffee
195
197
  - spec/javascripts/joosy/core/layout_spec.js.coffee
196
198
  - spec/javascripts/joosy/core/modules/container_spec.js.coffee