agt 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -2
- data/app/assets/javascripts/agt/dom.coffee +7 -2
- data/app/assets/javascripts/agt/function.coffee +136 -114
- data/app/assets/javascripts/agt/{models/mixins/model.coffee → mixins/collectionable.coffee} +35 -17
- data/app/assets/javascripts/agt/object.coffee +8 -0
- data/app/assets/javascripts/agt/widgets/widgets.coffee +5 -1
- data/lib/agt/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d8dccd0f25aabdb783a8f30d525ba1fe9541266
|
4
|
+
data.tar.gz: 18e725c31cb93f2844ae52f68cef53286c8830ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b25e48db126cd1c7de237e001ffeb8579b9cf1e40f5a53e2ef07884a9bf7ed700424535b8c14c11fc0d16d5acb52c814277708b6029a8f63d79f4002c0c01141
|
7
|
+
data.tar.gz: f592ca2a69860e754c22acd9e065579c63534fbbcd9e7c22b87e687a4a8e3a4fd7d0eea57168297e28e43aa72ebf019538ad509e4be6db5e0e5448880a6d8c03
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
a name="v0.0.5"></a>
|
2
|
+
# v0.0.5 (2015-01-23)
|
3
|
+
|
4
|
+
## :bug: Bug Fixes
|
5
|
+
|
6
|
+
- Fix event related issues on IE8 ([10b771df](https://github.com/abe33/agt.git/commit/10b771dfb9a5809b2df9309d7f9b89762815ee65))
|
7
|
+
- Add a fallback for mixins used in IE8 ([faec4cdb](https://github.com/abe33/agt.git/commit/faec4cdb25e393c2e65e289ef4046cd117f46e96))
|
8
|
+
|
9
|
+
<a name="v0.0.4"></a>
|
10
|
+
# v0.0.4 (2014-09-09)
|
3
11
|
|
4
12
|
## :sparkles: Features
|
5
13
|
|
@@ -5,8 +5,13 @@ agt.domEvent = (type, data={}, options={bubbles, cancelable}={}) ->
|
|
5
5
|
cancelable: cancelable ? true
|
6
6
|
}
|
7
7
|
catch e
|
8
|
-
|
9
|
-
|
8
|
+
if document.createEvent?
|
9
|
+
event = document.createEvent 'Event'
|
10
|
+
event.initEvent type, bubbles ? true, cancelable ? true
|
11
|
+
else if document.createEventObject?
|
12
|
+
event = document.createEventObject()
|
13
|
+
event.type = type
|
14
|
+
event[k] = v for k,v of options
|
10
15
|
|
11
16
|
event.data = data
|
12
17
|
event
|
@@ -1,3 +1,6 @@
|
|
1
|
+
|
2
|
+
warn = (msg) -> console?.warn?(msg)
|
3
|
+
|
1
4
|
### Public ###
|
2
5
|
|
3
6
|
# Creates a new non-enumerable method on the current class prototype.
|
@@ -10,11 +13,15 @@
|
|
10
13
|
# name - The {String} for the method name.
|
11
14
|
# block - The {Function} body.
|
12
15
|
Function::def = (name, block) ->
|
13
|
-
Object.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
if Object.NO_DEFINE_PROPERTY
|
17
|
+
warn "Using Function::def in a context where Object.defineProperty is not supported, falling back to prototype decoration."
|
18
|
+
@prototype[name] = block
|
19
|
+
else
|
20
|
+
Object.defineProperty @prototype, name, {
|
21
|
+
value: block
|
22
|
+
configurable: true
|
23
|
+
enumerable: false
|
24
|
+
}
|
18
25
|
this
|
19
26
|
|
20
27
|
# Creates a virtual property on the current class's prototype.
|
@@ -42,13 +49,15 @@ Function::accessor = (name, options) ->
|
|
42
49
|
|
43
50
|
options.get ||= oldDescriptor.get if oldDescriptor?
|
44
51
|
options.set ||= oldDescriptor.set if oldDescriptor?
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
+
if Object.NO_DEFINE_PROPERTY
|
53
|
+
throw new Error "Using Function::accessor in a context where Object.defineProperty is not supported."
|
54
|
+
else
|
55
|
+
Object.defineProperty @prototype, name, {
|
56
|
+
get: options.get
|
57
|
+
set: options.set
|
58
|
+
configurable: true
|
59
|
+
enumerable: true
|
60
|
+
}
|
52
61
|
this
|
53
62
|
|
54
63
|
# Creates a getter on the given class prototype.
|
@@ -150,72 +159,80 @@ Function::include = (mixins...) ->
|
|
150
159
|
# We loop through all the enumerable properties of the mixin's
|
151
160
|
# prototype that is not marked for exclusion.
|
152
161
|
keys = Object.keys mixin.prototype
|
153
|
-
for k in keys
|
154
|
-
if k not in excl
|
155
|
-
|
156
|
-
# We prefer working with property descriptors rather than with
|
157
|
-
# the plain values.
|
158
|
-
oldDescriptor = Object.getPropertyDescriptor @prototype, k
|
159
|
-
newDescriptor = Object.getPropertyDescriptor mixin.prototype, k
|
160
|
-
|
161
|
-
# If the two descriptors are available we'll have to go deeper.
|
162
|
-
if oldDescriptor? and newDescriptor?
|
163
|
-
oldHasAccessor = oldDescriptor.get? or oldDescriptor.set?
|
164
|
-
newHasAccessor = newDescriptor.get? or newDescriptor.set?
|
165
|
-
bothHaveGet = oldDescriptor.get? and newDescriptor.get?
|
166
|
-
bothHaveSet = oldDescriptor.set? and newDescriptor.set?
|
167
|
-
bothHaveValue = oldDescriptor.value? and newDescriptor.value?
|
168
|
-
|
169
|
-
# When both properties are accessors we'll be able to follow
|
170
|
-
# the super accross them.
|
171
|
-
#
|
172
|
-
# Super methods are registered if both are there for getters
|
173
|
-
# and setters.
|
174
|
-
if oldHasAccessor and newHasAccessor
|
175
|
-
registerSuper k, newDescriptor.get, @, oldDescriptor.get, mixin if bothHaveGet
|
176
|
-
registerSuper k, newDescriptor.set, @, oldDescriptor.set, mixin if bothHaveSet
|
177
|
-
|
178
|
-
# If there was a getter or a setter and the new accessor
|
179
|
-
# doesn't define one them, the previous value is used.
|
180
|
-
newDescriptor.get ||= oldDescriptor.get
|
181
|
-
newDescriptor.set ||= oldDescriptor.set
|
182
|
-
|
183
|
-
# When both have a value, the super is also available.
|
184
|
-
else if bothHaveValue
|
185
|
-
registerSuper k, newDescriptor.value, @, oldDescriptor.value, mixin
|
186
162
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
# and overriding the property to have access to its super property
|
193
|
-
# through the `super` keyword or with `this.super` method.
|
194
|
-
Object.defineProperty @__super__, k, newDescriptor
|
195
|
-
|
196
|
-
# We only have a descriptor for the new property, the previous
|
197
|
-
# one is just added to the class `__super__` property.
|
198
|
-
else if newDescriptor?
|
199
|
-
@__super__[k] = mixin[k]
|
200
|
-
|
201
|
-
# We only have a descriptor for the previous property, we'll
|
202
|
-
# create it on the class `__super__` property.
|
203
|
-
else if oldDescriptor?
|
204
|
-
Object.defineProperty @__super__, k, newDescriptor
|
205
|
-
|
206
|
-
# No descriptors at all. The super property is attached directly
|
207
|
-
# to the value.
|
208
|
-
else if @::[k]?
|
209
|
-
registerSuper k, mixin[k], @, @::[k], mixin
|
210
|
-
@__super__[k] = mixin[k]
|
211
|
-
|
212
|
-
# With a descriptor the new property is created using
|
213
|
-
# `Object.defineProperty` or by affecting the value
|
214
|
-
# to the prototype.
|
215
|
-
if newDescriptor?
|
216
|
-
Object.defineProperty @prototype, k, newDescriptor
|
217
|
-
else
|
163
|
+
if Object.NO_DEFINE_PROPERTY
|
164
|
+
warn "Using Function::include in a context where Object.defineProperty is not supported. Falling back to direct prototype decoration."
|
165
|
+
for k in keys
|
166
|
+
if k not in excl
|
167
|
+
@__super__[k] = mixin::[k]
|
218
168
|
@::[k] = mixin::[k]
|
169
|
+
else
|
170
|
+
for k in keys
|
171
|
+
if k not in excl
|
172
|
+
|
173
|
+
# We prefer working with property descriptors rather than with
|
174
|
+
# the plain values.
|
175
|
+
oldDescriptor = Object.getPropertyDescriptor @prototype, k
|
176
|
+
newDescriptor = Object.getPropertyDescriptor mixin.prototype, k
|
177
|
+
|
178
|
+
# If the two descriptors are available we'll have to go deeper.
|
179
|
+
if oldDescriptor? and newDescriptor?
|
180
|
+
oldHasAccessor = oldDescriptor.get? or oldDescriptor.set?
|
181
|
+
newHasAccessor = newDescriptor.get? or newDescriptor.set?
|
182
|
+
bothHaveGet = oldDescriptor.get? and newDescriptor.get?
|
183
|
+
bothHaveSet = oldDescriptor.set? and newDescriptor.set?
|
184
|
+
bothHaveValue = oldDescriptor.value? and newDescriptor.value?
|
185
|
+
|
186
|
+
# When both properties are accessors we'll be able to follow
|
187
|
+
# the super accross them.
|
188
|
+
#
|
189
|
+
# Super methods are registered if both are there for getters
|
190
|
+
# and setters.
|
191
|
+
if oldHasAccessor and newHasAccessor
|
192
|
+
registerSuper k, newDescriptor.get, @, oldDescriptor.get, mixin if bothHaveGet
|
193
|
+
registerSuper k, newDescriptor.set, @, oldDescriptor.set, mixin if bothHaveSet
|
194
|
+
|
195
|
+
# If there was a getter or a setter and the new accessor
|
196
|
+
# doesn't define one them, the previous value is used.
|
197
|
+
newDescriptor.get ||= oldDescriptor.get
|
198
|
+
newDescriptor.set ||= oldDescriptor.set
|
199
|
+
|
200
|
+
# When both have a value, the super is also available.
|
201
|
+
else if bothHaveValue
|
202
|
+
registerSuper k, newDescriptor.value, @, oldDescriptor.value, mixin
|
203
|
+
|
204
|
+
else
|
205
|
+
throw new Error "Can't mix accessors and plain values inheritance"
|
206
|
+
|
207
|
+
# We also have to create the property on the class `__super__`
|
208
|
+
# property. It'll allow the method defined on the class itself
|
209
|
+
# and overriding the property to have access to its super property
|
210
|
+
# through the `super` keyword or with `this.super` method.
|
211
|
+
Object.defineProperty @__super__, k, newDescriptor
|
212
|
+
|
213
|
+
# We only have a descriptor for the new property, the previous
|
214
|
+
# one is just added to the class `__super__` property.
|
215
|
+
else if newDescriptor?
|
216
|
+
Object.defineProperty @__super__, k, newDescriptor
|
217
|
+
|
218
|
+
# We only have a descriptor for the previous property, we'll
|
219
|
+
# create it on the class `__super__` property.
|
220
|
+
else if oldDescriptor?
|
221
|
+
@__super__[k] = mixins::[k]
|
222
|
+
|
223
|
+
# No descriptors at all. The super property is attached directly
|
224
|
+
# to the value.
|
225
|
+
else if @::[k]?
|
226
|
+
registerSuper k, mixin::[k], @, @::[k], mixin
|
227
|
+
@__super__[k] = mixin::[k]
|
228
|
+
|
229
|
+
# With a descriptor the new property is created using
|
230
|
+
# `Object.defineProperty` or by affecting the value
|
231
|
+
# to the prototype.
|
232
|
+
if newDescriptor?
|
233
|
+
Object.defineProperty @prototype, k, newDescriptor
|
234
|
+
else
|
235
|
+
@::[k] = mixin::[k]
|
219
236
|
|
220
237
|
# The `included` hook is triggered on the mixin.
|
221
238
|
mixin.included? this
|
@@ -250,46 +267,51 @@ Function::extend = (mixins...) ->
|
|
250
267
|
excl = excl.concat mixin.excluded if mixin.excluded?
|
251
268
|
|
252
269
|
keys = Object.keys mixin
|
253
|
-
for k in keys
|
254
|
-
if k not in excl
|
255
|
-
oldDescriptor = Object.getPropertyDescriptor this, k
|
256
|
-
newDescriptor = Object.getPropertyDescriptor mixin, k
|
257
|
-
|
258
|
-
if oldDescriptor? and newDescriptor?
|
259
|
-
oldHasAccessor = oldDescriptor.get? or oldDescriptor.set?
|
260
|
-
newHasAccessor = newDescriptor.get? or newDescriptor.set?
|
261
|
-
bothHaveGet = oldDescriptor.get? and newDescriptor.get?
|
262
|
-
bothHaveSet = oldDescriptor.set? and newDescriptor.set?
|
263
|
-
bothHaveValue = oldDescriptor.value? and newDescriptor.value?
|
264
|
-
|
265
|
-
# When both properties are accessors we'll be able to follow
|
266
|
-
# the super accross them
|
267
|
-
#
|
268
|
-
# Super methods are registered if both are there for getters
|
269
|
-
# and setters.
|
270
|
-
if oldHasAccessor and newHasAccessor
|
271
|
-
registerSuper k, newDescriptor.get, @, oldDescriptor.get, mixin if bothHaveGet
|
272
|
-
registerSuper k, newDescriptor.set, @, oldDescriptor.set, mixin if bothHaveSet
|
273
|
-
|
274
|
-
# If there was a getter or a setter and the new accessor
|
275
|
-
# doesn't define one them, the previous value is used.
|
276
|
-
newDescriptor.get ||= oldDescriptor.get
|
277
|
-
newDescriptor.set ||= oldDescriptor.set
|
278
|
-
|
279
|
-
# When both have a value, the super is also available.
|
280
|
-
else if bothHaveValue
|
281
|
-
registerSuper k, newDescriptor.value, @, oldDescriptor.value, mixin
|
282
270
|
|
271
|
+
if Object.NO_DEFINE_PROPERTY
|
272
|
+
warn "Using Function::include in a context where Object.defineProperty is not supported. Falling back to direct prototype decoration."
|
273
|
+
@[k] = mixin[k] for k in keys when k not in excl
|
274
|
+
else
|
275
|
+
for k in keys
|
276
|
+
if k not in excl
|
277
|
+
oldDescriptor = Object.getPropertyDescriptor this, k
|
278
|
+
newDescriptor = Object.getPropertyDescriptor mixin, k
|
279
|
+
|
280
|
+
if oldDescriptor? and newDescriptor?
|
281
|
+
oldHasAccessor = oldDescriptor.get? or oldDescriptor.set?
|
282
|
+
newHasAccessor = newDescriptor.get? or newDescriptor.set?
|
283
|
+
bothHaveGet = oldDescriptor.get? and newDescriptor.get?
|
284
|
+
bothHaveSet = oldDescriptor.set? and newDescriptor.set?
|
285
|
+
bothHaveValue = oldDescriptor.value? and newDescriptor.value?
|
286
|
+
|
287
|
+
# When both properties are accessors we'll be able to follow
|
288
|
+
# the super accross them
|
289
|
+
#
|
290
|
+
# Super methods are registered if both are there for getters
|
291
|
+
# and setters.
|
292
|
+
if oldHasAccessor and newHasAccessor
|
293
|
+
registerSuper k, newDescriptor.get, @, oldDescriptor.get, mixin if bothHaveGet
|
294
|
+
registerSuper k, newDescriptor.set, @, oldDescriptor.set, mixin if bothHaveSet
|
295
|
+
|
296
|
+
# If there was a getter or a setter and the new accessor
|
297
|
+
# doesn't define one them, the previous value is used.
|
298
|
+
newDescriptor.get ||= oldDescriptor.get
|
299
|
+
newDescriptor.set ||= oldDescriptor.set
|
300
|
+
|
301
|
+
# When both have a value, the super is also available.
|
302
|
+
else if bothHaveValue
|
303
|
+
registerSuper k, newDescriptor.value, @, oldDescriptor.value, mixin
|
304
|
+
|
305
|
+
else
|
306
|
+
throw new Error "Can't mix accessors and plain values inheritance"
|
307
|
+
|
308
|
+
# With a descriptor the new property is created using
|
309
|
+
# `Object.defineProperty` or by affecting the value
|
310
|
+
# to the prototype.
|
311
|
+
if newDescriptor?
|
312
|
+
Object.defineProperty this, k, newDescriptor
|
283
313
|
else
|
284
|
-
|
285
|
-
|
286
|
-
# With a descriptor the new property is created using
|
287
|
-
# `Object.defineProperty` or by affecting the value
|
288
|
-
# to the prototype.
|
289
|
-
if newDescriptor?
|
290
|
-
Object.defineProperty this, k, newDescriptor
|
291
|
-
else
|
292
|
-
@[k] = mixin[k]
|
314
|
+
@[k] = mixin[k]
|
293
315
|
|
294
316
|
mixin.extended? this
|
295
317
|
|
@@ -1,11 +1,11 @@
|
|
1
|
-
namespace('agt.
|
1
|
+
namespace('agt.mixins')
|
2
2
|
|
3
|
-
# Creates a collection class for the given model. This class
|
3
|
+
# Internal: Creates a collection class for the given model. This class
|
4
4
|
# will be decorated with the scopes defined on the model class
|
5
5
|
# so it have to be specific to the model class.
|
6
6
|
buildCollectionClass = (model) ->
|
7
7
|
|
8
|
-
# The Collection class behaves mostly like an array except that
|
8
|
+
# Public: The Collection class behaves mostly like an array except that
|
9
9
|
# every methods that should return an array return a collection
|
10
10
|
# instead.
|
11
11
|
class Collection
|
@@ -28,9 +28,7 @@ buildCollectionClass = (model) ->
|
|
28
28
|
# With this we can call `collection[index]` and access the content
|
29
29
|
# of the collection array.
|
30
30
|
index = parseInt(name)
|
31
|
-
|
32
|
-
|
33
|
-
target.array[index]
|
31
|
+
target.get(index)
|
34
32
|
else
|
35
33
|
target[name]
|
36
34
|
}
|
@@ -53,17 +51,36 @@ buildCollectionClass = (model) ->
|
|
53
51
|
|
54
52
|
constructor: (@array=[]) ->
|
55
53
|
|
56
|
-
|
54
|
+
get: (index) ->
|
55
|
+
index = @length + index if index < 0
|
56
|
+
@array[index]
|
57
|
+
|
58
|
+
first: -> @get(0)
|
57
59
|
|
58
|
-
last: -> @
|
60
|
+
last: -> @get(-1)
|
61
|
+
|
62
|
+
where: (conditions={}) ->
|
63
|
+
@filter (model) => @matchConditions(model, conditions)
|
59
64
|
|
60
65
|
map: (block) ->
|
61
|
-
|
62
|
-
@
|
66
|
+
if typeof block is 'string'
|
67
|
+
@distinct(block)
|
63
68
|
else
|
64
69
|
@array.map(block)
|
65
70
|
|
66
|
-
|
71
|
+
sum: (field) -> @reduce ((a,b) -> a + b[field]), 0
|
72
|
+
|
73
|
+
group: (key) ->
|
74
|
+
results = {}
|
75
|
+
|
76
|
+
for record in @array
|
77
|
+
slot = record[key]
|
78
|
+
slot = slot.id if typeof slot is 'object' and slot.id?
|
79
|
+
results[slot] ?= @constructor.create()
|
80
|
+
results[slot].push record
|
81
|
+
|
82
|
+
results
|
83
|
+
|
67
84
|
|
68
85
|
distinct: (field) ->
|
69
86
|
values = []
|
@@ -73,9 +90,6 @@ buildCollectionClass = (model) ->
|
|
73
90
|
|
74
91
|
values
|
75
92
|
|
76
|
-
where: (conditions={}) ->
|
77
|
-
@filter (model) => @matchConditions(model, conditions)
|
78
|
-
|
79
93
|
matchConditions: (model, conditions) ->
|
80
94
|
res = true
|
81
95
|
for k,v of conditions
|
@@ -85,13 +99,14 @@ buildCollectionClass = (model) ->
|
|
85
99
|
res &&= model[k] is v
|
86
100
|
res
|
87
101
|
|
88
|
-
|
102
|
+
# Public:
|
103
|
+
class agt.mixins.Collectionable
|
89
104
|
@extend agt.mixins.Delegation
|
90
105
|
|
91
106
|
@delegatesCollectionMethods: (methods...) ->
|
92
107
|
methods.forEach (method) => @[method] = -> @instances[method](arguments...)
|
93
108
|
|
94
|
-
@delegatesCollectionMethods 'first', 'last', 'where', 'distinct'
|
109
|
+
@delegatesCollectionMethods 'first', 'last', 'where', 'distinct', 'sum', 'group'
|
95
110
|
|
96
111
|
### Public ###
|
97
112
|
|
@@ -101,7 +116,7 @@ class agt.models.Model
|
|
101
116
|
|
102
117
|
@Collection = buildCollectionClass(this)
|
103
118
|
|
104
|
-
@instances = @Collection.create(
|
119
|
+
@instances = @Collection.create()
|
105
120
|
@nextId = 1
|
106
121
|
|
107
122
|
@initialized = true
|
@@ -120,6 +135,9 @@ class agt.models.Model
|
|
120
135
|
@unregister: (instance) ->
|
121
136
|
@instances.splice(@instances.indexOf(instance), 1) if instance in @instances
|
122
137
|
|
138
|
+
@unregisterAll: ->
|
139
|
+
@instances = @Collection.create()
|
140
|
+
|
123
141
|
### Scopes ###
|
124
142
|
|
125
143
|
@all: ->
|
@@ -7,3 +7,11 @@ unless Object.getPropertyDescriptor?
|
|
7
7
|
descriptor
|
8
8
|
else
|
9
9
|
Object.getPropertyDescriptor = -> undefined
|
10
|
+
|
11
|
+
Object.NO_DEFINE_PROPERTY = not Object.defineProperty?
|
12
|
+
|
13
|
+
if Object.defineProperty?
|
14
|
+
try
|
15
|
+
Object.defineProperty(Array.prototype,'test', value: 'test')
|
16
|
+
catch e
|
17
|
+
Object.NO_DEFINE_PROPERTY = true
|
@@ -107,7 +107,11 @@ agt.widgets = (name, selector, options={}, block) ->
|
|
107
107
|
else
|
108
108
|
widget.activate()
|
109
109
|
|
110
|
-
|
110
|
+
event = agt.domEvent("#{name}:handled", {element, widget})
|
111
|
+
if document.dispatchEvent?
|
112
|
+
document.dispatchEvent(event)
|
113
|
+
else
|
114
|
+
console?.warn? 'HTMLElement::dispatchEvent is not available on this platform. Unable to dispatch custom events on DOM nodes.'
|
111
115
|
|
112
116
|
block?.call element, element, widget
|
113
117
|
|
data/lib/agt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: agt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cédric Néhémie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- app/assets/javascripts/agt/mixins/aliasable.coffee
|
85
85
|
- app/assets/javascripts/agt/mixins/alternate_case.coffee
|
86
86
|
- app/assets/javascripts/agt/mixins/cloneable.coffee
|
87
|
+
- app/assets/javascripts/agt/mixins/collectionable.coffee
|
87
88
|
- app/assets/javascripts/agt/mixins/delegation.coffee
|
88
89
|
- app/assets/javascripts/agt/mixins/disposable.coffee
|
89
90
|
- app/assets/javascripts/agt/mixins/emitter.coffee
|
@@ -99,7 +100,6 @@ files:
|
|
99
100
|
- app/assets/javascripts/agt/mixins/sourcable.coffee
|
100
101
|
- app/assets/javascripts/agt/mixins/state_machine.coffee
|
101
102
|
- app/assets/javascripts/agt/mixins/subscriber.coffee
|
102
|
-
- app/assets/javascripts/agt/models/mixins/model.coffee
|
103
103
|
- app/assets/javascripts/agt/net/router.coffee
|
104
104
|
- app/assets/javascripts/agt/object.coffee
|
105
105
|
- app/assets/javascripts/agt/particles/actions/base_action.coffee
|