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

Sign up to get free protection for your applications and to get access to all the features.
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