joosy 1.2.0.alpha.14 → 1.2.0.alpha.15

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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gruntfile.coffee +42 -18
  4. data/README.md +16 -12
  5. data/bower.json +1 -1
  6. data/lib/extensions/form.js +592 -0
  7. data/lib/extensions/preloaders.js +193 -0
  8. data/lib/extensions/resources.js +667 -0
  9. data/lib/joosy.js +1141 -2680
  10. data/lib/joosy.rb +0 -5
  11. data/package.json +1 -1
  12. data/spec/helpers/helper.coffee +1 -1
  13. data/spec/joosy/core/joosy_spec.coffee +1 -28
  14. data/spec/joosy/core/modules/renderer_spec.coffee +0 -95
  15. data/spec/joosy/{core → extensions/form}/form_spec.coffee +2 -2
  16. data/spec/joosy/{core → extensions/form}/helpers/forms_spec.coffee +1 -1
  17. data/spec/joosy/{preloaders → extensions/preloaders}/caching_spec.coffee +0 -0
  18. data/spec/joosy/{preloaders → extensions/preloaders}/inline_spec.coffee +0 -0
  19. data/spec/joosy/{core/resource/generic_spec.coffee → extensions/resources/base_spec.coffee} +19 -20
  20. data/spec/joosy/{core/resource → extensions/resources}/collection_spec.coffee +4 -4
  21. data/spec/joosy/{core/resource → extensions/resources}/rest_collection_spec.coffee +4 -4
  22. data/spec/joosy/{core/resource → extensions/resources}/rest_spec.coffee +6 -7
  23. data/src/joosy.coffee +1 -2
  24. data/src/joosy/core/helpers/view.coffee +0 -8
  25. data/src/joosy/core/joosy.coffee +5 -44
  26. data/src/joosy/core/modules/renderer.coffee +10 -29
  27. data/src/joosy/core/{resource → resources}/watcher.coffee +2 -1
  28. data/src/joosy/{core → extensions/form}/form.coffee +3 -9
  29. data/src/joosy/{core → extensions/form}/helpers/form.coffee +2 -2
  30. data/src/joosy/extensions/form/index.coffee +1 -0
  31. data/src/joosy/{preloaders → extensions/preloaders}/caching.coffee +0 -0
  32. data/src/joosy/extensions/preloaders/index.coffee +1 -0
  33. data/src/joosy/{preloaders → extensions/preloaders}/inline.coffee +0 -0
  34. data/src/joosy/{core/resource/generic.coffee → extensions/resources/base.coffee} +21 -21
  35. data/src/joosy/{core/resource → extensions/resources}/collection.coffee +11 -11
  36. data/src/joosy/extensions/resources/index.coffee +1 -0
  37. data/src/joosy/{core/resource → extensions/resources}/rest.coffee +15 -12
  38. data/src/joosy/{core/resource → extensions/resources}/rest_collection.coffee +4 -2
  39. data/src/joosy/generators/base.coffee +1 -1
  40. metadata +25 -20
  41. data/src/joosy/core/preloader.coffee +0 -13
data/lib/joosy.rb CHANGED
@@ -1,10 +1,5 @@
1
1
  require 'json'
2
2
 
3
- begin
4
- require 'haml_coffee_assets'
5
- rescue Gem::LoadError # This is required for the first bundle run
6
- end
7
-
8
3
  module Joosy
9
4
  PACKAGE = File.expand_path("../../package.json", __FILE__)
10
5
 
data/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "keywords": [
5
5
  "joosy"
6
6
  ],
7
- "version": "1.2.0-alpha.14",
7
+ "version": "1.2.0-alpha.15",
8
8
  "author": "Boris Staal <boris@staal.io>",
9
9
  "bin": {
10
10
  "joosy": "bin/joosy"
@@ -1,5 +1,5 @@
1
1
  beforeEach ->
2
- Joosy.Resource.Generic.resetIdentity()
2
+ Joosy.Resources.Base?.resetIdentity()
3
3
 
4
4
  window.JST = {}
5
5
  $('body').append('<div id="ground">')
@@ -3,7 +3,7 @@ describe "Joosy", ->
3
3
  it "should properly initialize", ->
4
4
  expect(Joosy.Application.config.debug).toBeFalsy()
5
5
  expect(Joosy.Modules).toBeDefined()
6
- expect(Joosy.Resource).toBeDefined()
6
+ expect(Joosy.Resources).toBeDefined()
7
7
 
8
8
  it "should declare namespaces", ->
9
9
  Joosy.namespace 'Namespaces.Test1'
@@ -70,30 +70,3 @@ describe "Joosy", ->
70
70
  runs -> Joosy.preloadImages images, callback
71
71
  waits(150)
72
72
  runs -> expect(callback.callCount).toEqual(2)
73
-
74
- it "should define resource", ->
75
- container = {}
76
- Joosy.defineResource 'foo', '', container
77
- expect(Object.isFunction container.Foo).toBeTruthy()
78
- expect(Object.isFunction container.FoosCollection).toBeTruthy()
79
- expect(container.Foo::__collection()).toEqual container.FoosCollection
80
- Joosy.defineResource 'boo'
81
- expect(Object.isFunction Boo).toBeTruthy()
82
- expect(Object.isFunction BoosCollection).toBeTruthy()
83
- expect(Boo::__collection()).toEqual BoosCollection
84
-
85
- it "should define resource", ->
86
- window.Defined = 'this'
87
- window.DefinedsCollection = 'that'
88
- Joosy.defineResources
89
- '':
90
- test: '/test'
91
- defined: 'no'
92
- 'Scope.Test':
93
- another: ''
94
- expect(Object.isFunction Test).toBeTruthy()
95
- expect(Object.isFunction TestsCollection).toBeTruthy()
96
- expect(Object.isFunction Scope.Test.Another).toBeTruthy()
97
- expect(Object.isFunction Scope.Test.AnothersCollection).toBeTruthy()
98
- expect(Defined).toEqual 'this'
99
- expect(DefinedsCollection).toEqual 'that'
@@ -52,101 +52,6 @@ describe "Joosy.Modules.Renderer", ->
52
52
  runs ->
53
53
  expect(elem.text()).toBe "new"
54
54
 
55
- it "renders resources and keep html up2date", ->
56
- data = Joosy.Resource.Generic.build zombie: 'rock'
57
-
58
- @TestContainer.view (locals) ->
59
- template = -> @zombie
60
-
61
- @renderDynamic(template, locals)
62
-
63
- elem = $("<div></div>")
64
- @ground.append elem
65
-
66
- elem.html @dummyContainer.__renderer(data)
67
-
68
- waits 0
69
-
70
- runs ->
71
- expect(elem.text()).toBe "rock"
72
-
73
- runs ->
74
- data 'zombie', 'suck'
75
-
76
- waits 0
77
-
78
- runs ->
79
- expect(elem.text()).toBe "suck"
80
-
81
- it "renders collections and keep html up2date", ->
82
- class Foo extends Joosy.Resource.Generic
83
- @entity 'foo'
84
-
85
- data = new Joosy.Resource.Collection(Foo)
86
-
87
- data.load [
88
- { zombie: 'rock' },
89
- { zombie: 'never sleep' }
90
- ]
91
-
92
- @TestContainer.view (locals) ->
93
- template = -> @data[1] 'zombie'
94
-
95
- @renderDynamic(template, locals)
96
-
97
- elem = $("<div></div>")
98
- @ground.append elem
99
-
100
- elem.html @dummyContainer.__renderer(data)
101
-
102
- waits 0
103
-
104
- runs ->
105
- expect(elem.text()).toBe "never sleep"
106
-
107
- runs ->
108
- data.data[1] 'zombie', 'suck'
109
-
110
- waits 0
111
-
112
- runs ->
113
- expect(elem.text()).toBe "suck"
114
-
115
- xit "renders collections and track its new items", ->
116
- class Foo extends Joosy.Resource.Generic
117
- @entity 'foo'
118
-
119
- data = new Joosy.Resource.Collection(Foo)
120
- data.load [
121
- {key: 1},
122
- {key: 2}
123
- ]
124
-
125
- @TestContainer.view (locals) ->
126
- template = -> @data.map((item) -> item('key')).join('')
127
- @renderDynamic(template, locals)
128
-
129
- elem = $("<div></div>")
130
- @ground.append elem
131
- elem.html @dummyContainer.__renderer(data)
132
-
133
- waits 0
134
-
135
- runs ->
136
- expect(elem.text()).toBe "12"
137
- data.add Foo.build(key: 3)
138
-
139
- waits 0
140
-
141
- runs ->
142
- expect(elem.text()).toBe "123"
143
- data.at(2)('key', 6)
144
-
145
- waits 0
146
-
147
- runs ->
148
- expect(elem.text()).toBe "126"
149
-
150
55
  it "debounces morpher updates", ->
151
56
  @TestContainer.view (locals) ->
152
57
  template = -> @object.value
@@ -19,7 +19,7 @@ describe "Joosy.Form", ->
19
19
  @exactForm = $('#exact')
20
20
  @arrayForm = $('#array')
21
21
 
22
- class Test extends Joosy.Resource.REST
22
+ class Test extends Joosy.Resources.REST
23
23
  @entity 'test'
24
24
  @Test = Test
25
25
 
@@ -36,7 +36,7 @@ describe "Joosy.Form", ->
36
36
  test: 'test'
37
37
  EXact:
38
38
  MATCH: 'works'
39
- items: (new Joosy.Resource.RESTCollection(Test)).load([{attr: 'one'}, {attr: 'two'}])
39
+ items: (new Joosy.Resources.RESTCollection(Test)).load([{attr: 'one'}, {attr: 'two'}])
40
40
  single: Test.build(attr: 'sin')
41
41
 
42
42
  afterEach ->
@@ -1,5 +1,5 @@
1
1
  describe "Joosy.Helpers.Form", ->
2
- class Test extends Joosy.Resource.Generic
2
+ class Test extends Joosy.Resources.Base
3
3
  @entity 'test'
4
4
 
5
5
  h = Joosy.Helpers.Application
@@ -1,19 +1,19 @@
1
- describe "Joosy.Resource.Generic", ->
1
+ describe "Joosy.Resources.Base", ->
2
2
 
3
- class TestInline extends Joosy.Resource.Generic
3
+ class TestInline extends Joosy.Resources.Base
4
4
  @entity 'test_inline'
5
5
 
6
- class Test extends Joosy.Resource.REST
6
+ class Test extends Joosy.Resources.REST
7
7
  @entity 'test'
8
8
  @map 'test_inlines', TestInline
9
9
 
10
- class TestNode extends Joosy.Resource.Generic
10
+ class TestNode extends Joosy.Resources.Base
11
11
  @entity 'test_node'
12
12
  @map 'children', TestNode
13
13
  @map 'parent', TestNode
14
14
 
15
15
  beforeEach ->
16
- @resource = Joosy.Resource.Generic.build @data =
16
+ @resource = Joosy.Resources.Base.build @data =
17
17
  foo: 'bar'
18
18
  bar: 'baz'
19
19
  very:
@@ -24,7 +24,7 @@ describe "Joosy.Resource.Generic", ->
24
24
  expect(Test::__primaryKey).toEqual 'id'
25
25
 
26
26
  it "remembers where it belongs", ->
27
- resource = new Joosy.Resource.Generic foo: 'bar'
27
+ resource = new Joosy.Resources.Base foo: 'bar'
28
28
  expect(resource.data).toEqual foo: 'bar'
29
29
 
30
30
  it "produces magic function", ->
@@ -49,7 +49,7 @@ describe "Joosy.Resource.Generic", ->
49
49
  expect(@resource 'another.deep').toEqual value: 'banana strikes back'
50
50
 
51
51
  it "handles @at", ->
52
- class Fluffy extends Joosy.Resource.Generic
52
+ class Fluffy extends Joosy.Resources.Base
53
53
  @entity 'fluffy'
54
54
 
55
55
  clone = Fluffy.at('rumbas!')
@@ -73,7 +73,7 @@ describe "Joosy.Resource.Generic", ->
73
73
  expect(callback.callCount).toEqual(2)
74
74
 
75
75
  it "handles the before filter", ->
76
- class R extends Joosy.Resource.Generic
76
+ class R extends Joosy.Resources.Base
77
77
  @beforeLoad (data) ->
78
78
  data ||= {}
79
79
  data.tested = true
@@ -84,13 +84,13 @@ describe "Joosy.Resource.Generic", ->
84
84
  expect(resource 'tested').toBeTruthy()
85
85
 
86
86
  it "should map inlines", ->
87
- class RumbaMumba extends Joosy.Resource.Generic
87
+ class RumbaMumba extends Joosy.Resources.Base
88
88
  @entity 'rumba_mumba'
89
89
 
90
- class R extends Joosy.Resource.Generic
90
+ class R extends Joosy.Resources.Base
91
91
  @map 'rumbaMumbas', RumbaMumba
92
92
 
93
- class S extends Joosy.Resource.Generic
93
+ class S extends Joosy.Resources.Base
94
94
  @map 'rumbaMumba', RumbaMumba
95
95
 
96
96
  resource = R.build
@@ -98,20 +98,20 @@ describe "Joosy.Resource.Generic", ->
98
98
  {foo: 'bar'},
99
99
  {bar: 'baz'}
100
100
  ]
101
- expect(resource('rumbaMumbas') instanceof Joosy.Resource.Collection).toBeTruthy()
101
+ expect(resource('rumbaMumbas') instanceof Joosy.Resources.Collection).toBeTruthy()
102
102
  expect(resource('rumbaMumbas').at(0)('foo')).toEqual 'bar'
103
103
 
104
104
  resource = S.build
105
105
  rumbaMumba: {foo: 'bar'}
106
- expect(resource('rumbaMumba') instanceof Joosy.Resource.Generic).toBeTruthy()
106
+ expect(resource('rumbaMumba') instanceof Joosy.Resources.Base).toBeTruthy()
107
107
  expect(resource('rumbaMumba.foo')).toEqual 'bar'
108
108
 
109
109
  it "should use magic collections", ->
110
- class window.RumbaMumbasCollection extends Joosy.Resource.Collection
110
+ class window.RumbaMumbasCollection extends Joosy.Resources.Collection
111
111
 
112
- class RumbaMumba extends Joosy.Resource.Generic
112
+ class RumbaMumba extends Joosy.Resources.Base
113
113
  @entity 'rumba_mumba'
114
- class R extends Joosy.Resource.Generic
114
+ class R extends Joosy.Resources.Base
115
115
  @map 'rumbaMumbas', RumbaMumba
116
116
 
117
117
  resource = R.build
@@ -125,12 +125,12 @@ describe "Joosy.Resource.Generic", ->
125
125
  window.RumbaMumbasCollection = undefined
126
126
 
127
127
  it "should use manually set collections", ->
128
- class OloCollection extends Joosy.Resource.Collection
128
+ class OloCollection extends Joosy.Resources.Collection
129
129
 
130
- class RumbaMumba extends Joosy.Resource.Generic
130
+ class RumbaMumba extends Joosy.Resources.Base
131
131
  @entity 'rumba_mumba'
132
132
  @collection OloCollection
133
- class R extends Joosy.Resource.Generic
133
+ class R extends Joosy.Resources.Base
134
134
  @map 'rumbaMumbas', RumbaMumba
135
135
 
136
136
  resource = R.build
@@ -142,7 +142,6 @@ describe "Joosy.Resource.Generic", ->
142
142
  expect(resource('rumbaMumbas').at(0)('foo')).toEqual 'bar'
143
143
 
144
144
  describe "identity map", ->
145
-
146
145
  it "handles builds", ->
147
146
  foo = Test.build 1
148
147
  bar = Test.build 1
@@ -1,6 +1,6 @@
1
- describe "Joosy.Resource.Collection", ->
1
+ describe "Joosy.Resources.Collection", ->
2
2
 
3
- class Test extends Joosy.Resource.Generic
3
+ class Test extends Joosy.Resources.Base
4
4
  @entity 'test'
5
5
 
6
6
  data = '[{"id": 1, "name": "test1"}, {"id": 2, "name": "test2"}]'
@@ -11,7 +11,7 @@ describe "Joosy.Resource.Collection", ->
11
11
  expect(collection.data[0].data.name).toEqual 'test1'
12
12
 
13
13
  beforeEach ->
14
- @collection = new Joosy.Resource.Collection(Test)
14
+ @collection = new Joosy.Resources.Collection(Test)
15
15
 
16
16
  it "should initialize", ->
17
17
  expect(@collection.model).toEqual Test
@@ -37,7 +37,7 @@ describe "Joosy.Resource.Collection", ->
37
37
  expect(callback.callCount).toEqual 0
38
38
 
39
39
  it "should properly handle the before filter", ->
40
- class RC extends Joosy.Resource.Collection
40
+ class RC extends Joosy.Resources.Collection
41
41
  @beforeLoad (data) ->
42
42
  data.each (entry, i) ->
43
43
  data[i].tested = true
@@ -1,11 +1,11 @@
1
- describe "Joosy.Resource.RESTCollection", ->
1
+ describe "Joosy.Resources.RESTCollection", ->
2
2
 
3
- class Test extends Joosy.Resource.REST
3
+ class Test extends Joosy.Resources.REST
4
4
  @entity 'test'
5
5
 
6
6
  beforeEach ->
7
7
  @server = sinon.fakeServer.create()
8
- @collection = new Joosy.Resource.RESTCollection(Test)
8
+ @collection = new Joosy.Resources.RESTCollection(Test)
9
9
 
10
10
  afterEach ->
11
11
  @server.restore()
@@ -30,7 +30,7 @@ describe "Joosy.Resource.RESTCollection", ->
30
30
  expect(@collection.data[0].data.name).toEqual 'test3'
31
31
 
32
32
  it "should use own storage", ->
33
- class TestsCollection extends Joosy.Resource.RESTCollection
33
+ class TestsCollection extends Joosy.Resources.RESTCollection
34
34
  @model Test
35
35
  collection = new TestsCollection()
36
36
  collection.add 'test'
@@ -1,17 +1,17 @@
1
- describe "Joosy.Resource.REST", ->
1
+ describe "Joosy.Resources.REST", ->
2
2
 
3
- class FluffyInline extends Joosy.Resource.REST
3
+ class FluffyInline extends Joosy.Resources.REST
4
4
  @entity 'fluffy_inline'
5
5
 
6
- class FluffyParent extends Joosy.Resource.REST
6
+ class FluffyParent extends Joosy.Resources.REST
7
7
  @entity 'fluffy_parent'
8
8
 
9
- class Fluffy extends Joosy.Resource.REST
9
+ class Fluffy extends Joosy.Resources.REST
10
10
  @entity 'fluffy'
11
11
  @map 'fluffy_inlines', FluffyInline
12
12
 
13
13
  Joosy.namespace 'Animal', ->
14
- class @Cat extends Joosy.Resource.REST
14
+ class @Cat extends Joosy.Resources.REST
15
15
  @entity 'cat'
16
16
 
17
17
  beforeEach ->
@@ -94,7 +94,7 @@ describe "Joosy.Resource.REST", ->
94
94
  rawData = '{"page": 42, "fluffies": [{"id": 1, "name": "test1"}, {"id": 2, "name": "test2"}]}'
95
95
 
96
96
  callback = sinon.spy (target, data) ->
97
- expect(target instanceof Joosy.Resource.RESTCollection).toEqual true
97
+ expect(target instanceof Joosy.Resources.RESTCollection).toEqual true
98
98
  expect(target.size()).toEqual 2
99
99
  expect(target.at(0) instanceof Fluffy).toEqual true
100
100
  expect(data).toEqual $.parseJSON(rawData)
@@ -174,7 +174,6 @@ describe "Joosy.Resource.REST", ->
174
174
  checkAndRespond @server.requests[0], 'DELETE', /^\/fluffies/, rawData
175
175
 
176
176
  describe "identity map", ->
177
-
178
177
  it "handles finds", ->
179
178
  inline = FluffyInline.build(1)
180
179
  root = Fluffy.find 1
data/src/joosy.coffee CHANGED
@@ -1,2 +1 @@
1
- #= require_tree ./joosy/core
2
- #= require_tree ./joosy/preloaders
1
+ #= require_tree ./joosy/core
@@ -23,14 +23,6 @@ Joosy.helpers 'Application', ->
23
23
  temp.appendChild element
24
24
  temp.innerHTML
25
25
 
26
- #
27
- # Converts \n into <br/> in your text
28
- #
29
- # @param [String] text Text to convert
30
- #
31
- @nl2br = (text) ->
32
- text.toString().replace /\n/g, '<br/>'
33
-
34
26
  #
35
27
  # Wraps the inline block into given template
36
28
  # Request template will receive the inline block as @yield parameter
@@ -1,3 +1,6 @@
1
+ #= require_self ./
2
+ #= require joosy/core/modules/module
3
+
1
4
  #
2
5
  # All the tiny core stuff
3
6
  #
@@ -12,7 +15,7 @@
12
15
  #
13
16
  # Resources container
14
17
  #
15
- Resource: {}
18
+ Resources: {}
16
19
 
17
20
  #
18
21
  # Templaters container
@@ -136,46 +139,4 @@
136
139
  if !paramsString.isBlank() && url.last() != '?'
137
140
  paramsString = '&' + paramsString
138
141
 
139
- url + paramsString + hash
140
-
141
- #
142
- # Creates classes and collection classes for the given resources that might have been extracted from the routes
143
- #
144
- # @param [Hash] resources Resources declaration
145
- #
146
- # @example Basic usage
147
- # Joosy.defineResources {'': {foo: '/foos'}, 'namespace': {bar: '/namespace/bars'}}
148
- #
149
- defineResources: (resources) ->
150
- Object.extended(resources).each (namespace, resources) ->
151
- if namespace.isBlank()
152
- Object.extended(resources).each (resource, path) ->
153
- Joosy.defineResource resource, path
154
- else
155
- Joosy.namespace namespace, ->
156
- Object.extended(resources).each (resource, path) =>
157
- Joosy.defineResource resource, path, @
158
-
159
- #
160
- #
161
- # @param [String] resource Entity name in singular form
162
- # @param [String] path Entity REST end-point
163
- # @param [Object] space Namespace for new classes
164
- #
165
- # @example Basic usage
166
- # Joosy.defineResource 'foo', '/foos'
167
- #
168
- defineResource: (resource, path, space=window) ->
169
- className = resource.camelize()
170
- collectionName = "#{resource.pluralize().camelize()}Collection"
171
- unless space[className]
172
- Joosy.Modules.Log.debugAs space, "Define #{className}"
173
- space[className] = class extends Joosy.Resource.REST
174
- @entity resource
175
- @source path
176
- __collection: ->
177
- space[collectionName]
178
- unless space[collectionName]
179
- Joosy.Modules.Log.debugAs space, "Define #{collectionName}"
180
- space[collectionName] = class extends Joosy.Resource.RESTCollection
181
- @model space[className]
142
+ url + paramsString + hash