ende 0.4.5 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/assets/javascripts/aura/extensions/devise.js.coffee +0 -2
- data/lib/assets/javascripts/aura/extensions/platform.js.coffee +3 -0
- data/lib/assets/javascripts/aura/extensions/rivets.js.coffee +17 -1
- data/lib/assets/javascripts/aura/extensions/routes.js.coffee +8 -7
- data/lib/assets/javascripts/aura/extensions/states.js.coffee +13 -1
- data/lib/assets/javascripts/aura/extensions/widget/eventable.js.coffee +4 -2
- data/lib/assets/javascripts/config/load_components.js.coffee +19 -12
- data/lib/assets/javascripts/ende.js.coffee +33 -12
- data/lib/ende/version.rb +1 -1
- data/vendor/assets/components/build.css +111 -0
- data/vendor/assets/components/ende_build.js +160 -41
- data/vendor/components/indefinido-indemma/build/development.js +3 -118
- data/vendor/components/indefinido-indemma/build/release.js +39 -4170
- data/vendor/components/indefinido-indemma/build/test.js +3 -118
- data/vendor/components/indefinido-indemma/lib/record/associable.js +10 -2
- data/vendor/components/indefinido-indemma/lib/record/restfulable.js +26 -15
- data/vendor/components/indefinido-indemma/lib/record.js +3 -1
- data/vendor/components/indefinido-indemma/src/lib/record/associable.coffee +15 -1
- data/vendor/components/indefinido-indemma/src/lib/record/restfulable.coffee +37 -12
- data/vendor/components/indefinido-indemma/src/lib/record.coffee +3 -1
- data/vendor/components/indefinido-observable/.gitignore +15 -0
- data/vendor/components/indefinido-observable/.ruby-gemset +1 -0
- data/vendor/components/indefinido-observable/.ruby-version +1 -0
- data/vendor/components/indefinido-observable/Gemfile +13 -0
- data/vendor/components/indefinido-observable/Guardfile +39 -0
- data/vendor/components/indefinido-observable/History.md +0 -0
- data/vendor/components/indefinido-observable/Readme.md +116 -0
- data/vendor/components/indefinido-observable/build/build.js +14798 -0
- data/vendor/components/indefinido-observable/build/development.js +339 -0
- data/vendor/components/indefinido-observable/build/release.js +14937 -0
- data/vendor/components/indefinido-observable/build/test.js +339 -0
- data/vendor/components/indefinido-observable/component.json +5 -1
- data/vendor/components/indefinido-observable/components/chaijs-chai/component.json +46 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/index.js +1 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/assertion.js +132 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/core/assertions.js +1270 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/error.js +60 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/interface/assert.js +1060 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/interface/expect.js +12 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/interface/should.js +76 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/addChainableMethod.js +94 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/addMethod.js +37 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/addProperty.js +40 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/eql.js +124 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/flag.js +32 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getActual.js +19 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getEnumerableProperties.js +25 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getMessage.js +49 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getName.js +20 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getPathValue.js +102 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getProperties.js +35 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/index.js +108 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/inspect.js +316 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/objDisplay.js +48 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/overwriteMethod.js +51 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/overwriteProperty.js +54 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/test.js +26 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/transferFlags.js +44 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/type.js +45 -0
- data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai.js +79 -0
- data/vendor/components/indefinido-observable/components/component-jquery/component.json +14 -0
- data/vendor/components/indefinido-observable/components/component-jquery/index.js +9601 -0
- data/vendor/components/indefinido-observable/components/kapit-observe-shim/component.json +11 -0
- data/vendor/components/indefinido-observable/components/kapit-observe-utils/component.json +13 -0
- data/vendor/components/indefinido-observable/karma.conf.js +92 -0
- data/vendor/components/indefinido-observable/lib/adapters/rivets.js +3 -1
- data/vendor/components/indefinido-observable/lib/observable.js +47 -13
- data/vendor/components/indefinido-observable/spec/legacy/observable_spec.js +126 -0
- data/vendor/components/indefinido-observable/spec/observable_spec.js +92 -0
- data/vendor/components/indefinido-observable/spec/spec_helper.js +8 -0
- data/vendor/components/indefinido-observable/spec/vendor/accessors_spec.js +63 -0
- data/vendor/components/indefinido-observable/src/lib/adapters/rivets.js.coffee +15 -0
- data/vendor/components/indefinido-observable/src/spec/legacy/observable_spec.coffee +132 -0
- data/vendor/components/indefinido-observable/src/spec/observable_spec.coffee +85 -0
- data/vendor/components/indefinido-observable/src/spec/spec_helper.coffee +5 -0
- data/vendor/components/indefinido-observable/src/spec/vendor/accessors_spec.coffee +59 -0
- data/vendor/components/indefinido-observable/vendor/shims/accessors.js +71 -9
- data/vendor/components/indefinido-observable/vendor/spec/boot.js +104 -0
- data/vendor/components/indefinido-observable/vendor/spec/jasmine.js +2054 -0
- metadata +58 -2
@@ -0,0 +1,85 @@
|
|
1
|
+
observable = require('observable').mixin
|
2
|
+
root = exports ? window
|
3
|
+
|
4
|
+
describe 'observable #()', ->
|
5
|
+
return unless root.should
|
6
|
+
|
7
|
+
object = null
|
8
|
+
|
9
|
+
beforeEach ->
|
10
|
+
object = property: 'value'
|
11
|
+
|
12
|
+
it 'should not have observed property', ->
|
13
|
+
object.should.not.have.property 'observed'
|
14
|
+
|
15
|
+
xit 'should let element unsubscribe to property', ->
|
16
|
+
|
17
|
+
describe '#subscribe', ->
|
18
|
+
called = null
|
19
|
+
|
20
|
+
beforeEach ->
|
21
|
+
object = observable({})
|
22
|
+
called = false
|
23
|
+
true
|
24
|
+
|
25
|
+
it 'should subscribe to property', ->
|
26
|
+
spy = sinon.spy()
|
27
|
+
object.subscribe 'other', spy
|
28
|
+
|
29
|
+
object.other = 'mafagafo'
|
30
|
+
spy.called.should.be.true
|
31
|
+
|
32
|
+
it 'should let multiple function subscriptions to property', ->
|
33
|
+
also_called = false
|
34
|
+
|
35
|
+
object.subscribe 'other', -> called = true
|
36
|
+
|
37
|
+
object.subscribe 'other', -> also_called = true
|
38
|
+
|
39
|
+
object.other = 'mafagafo'
|
40
|
+
called.should.be.true
|
41
|
+
also_called.should.be.true
|
42
|
+
|
43
|
+
describe 'subscribes to properties of type array', ->
|
44
|
+
it 'should observe objects added to array', ->
|
45
|
+
spy = sinon.spy()
|
46
|
+
friend = {domo: 1}
|
47
|
+
|
48
|
+
# TODO implement a one time setter to solve this
|
49
|
+
# Specifically on array types
|
50
|
+
# property must be an array before subscribing
|
51
|
+
object.friends = []
|
52
|
+
|
53
|
+
# Remember, you must subscribe to new properties to
|
54
|
+
# turn then into observable ones
|
55
|
+
object.subscribe 'friends', ->
|
56
|
+
|
57
|
+
object.friends = [friend]
|
58
|
+
|
59
|
+
object.friends[0].should.be.eq friend
|
60
|
+
friend.should.have.property 'observed'
|
61
|
+
|
62
|
+
friend.subscribe 'domo', spy
|
63
|
+
friend.domo = 2
|
64
|
+
spy.callCount.should.be.eq 1
|
65
|
+
|
66
|
+
xit 'should override native methods'
|
67
|
+
it 'should preserve array bindings when setting new array', ->
|
68
|
+
spy = sinon.spy()
|
69
|
+
object.friends = []
|
70
|
+
object.subscribe 'friends', spy
|
71
|
+
|
72
|
+
object.friends.push 1
|
73
|
+
object.friends = []
|
74
|
+
object.friends.push 2
|
75
|
+
|
76
|
+
object.friends.length.should.be.eq 1
|
77
|
+
spy.callCount.should.be.eq 3
|
78
|
+
|
79
|
+
|
80
|
+
it 'should create a observed property', ->
|
81
|
+
object.should.have.property 'observed'
|
82
|
+
|
83
|
+
xdescribe '#publish', ->
|
84
|
+
|
85
|
+
xit 'should let element publish to property', ->
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'observable/vendor/shims/accessors.js'
|
2
|
+
|
3
|
+
$ = require 'jquery'
|
4
|
+
|
5
|
+
describe 'Object #defineProperty', ->
|
6
|
+
|
7
|
+
describe 'on dom elements', ->
|
8
|
+
spy = object = null
|
9
|
+
|
10
|
+
beforeEach ->
|
11
|
+
object = document.createElement 'domo'
|
12
|
+
document.body.appendChild object
|
13
|
+
spy = sinon.spy()
|
14
|
+
|
15
|
+
|
16
|
+
it 'should define property', (done) ->
|
17
|
+
Object.defineProperty object, 'kun', {}
|
18
|
+
|
19
|
+
it 'should define property getter', (done) ->
|
20
|
+
getter = sinon.stub().returns(42)
|
21
|
+
|
22
|
+
Object.defineProperty object, 'kun',
|
23
|
+
get: getter
|
24
|
+
|
25
|
+
expect(object.kun + 1).toBe 43
|
26
|
+
expect(getter.called).toBe true
|
27
|
+
|
28
|
+
it 'should define property setter', (done) ->
|
29
|
+
|
30
|
+
Object.defineProperty object, 'kun',
|
31
|
+
set: spy
|
32
|
+
|
33
|
+
object.kun = 10
|
34
|
+
|
35
|
+
expect(spy.calledWith 10).toBe true
|
36
|
+
|
37
|
+
describe 'off dom elements', ->
|
38
|
+
|
39
|
+
beforeEach ->
|
40
|
+
@object = {}
|
41
|
+
@spy = sinon.spy()
|
42
|
+
|
43
|
+
# it's simply not possible
|
44
|
+
it 'should not define property setter', (done) ->
|
45
|
+
expect( =>
|
46
|
+
Object.defineProperty @object, 'kun',
|
47
|
+
set: @spy
|
48
|
+
).toThrow()
|
49
|
+
|
50
|
+
|
51
|
+
it 'should define property getter', (done) ->
|
52
|
+
getter = sinon.stub().returns(42)
|
53
|
+
|
54
|
+
Object.defineProperty @object, 'kun',
|
55
|
+
get: getter
|
56
|
+
|
57
|
+
expect(@object.kun + 1).toBe 43
|
58
|
+
expect(getter.called).toBe true
|
59
|
+
|
@@ -70,7 +70,10 @@
|
|
70
70
|
changed_value = object[property];
|
71
71
|
descriptor.set.call(object, changed_value);
|
72
72
|
|
73
|
-
// Restore get function if
|
73
|
+
// Restore get function if:
|
74
|
+
// it was mentioned on definition
|
75
|
+
// there's no falsey value, in that case we just need to return falsey value
|
76
|
+
// current toString is not the getter, to prevent further unecessary redefinitions
|
74
77
|
if (descriptor.get && descriptor.value && descriptor.value.toString != descriptor.bound_getter) {
|
75
78
|
// TODO if (descriptor.get + '' === 'undefined') descriptor.get = ''; // Handle undefined getter
|
76
79
|
descriptor.value.toString = descriptor.bound_getter
|
@@ -88,33 +91,37 @@
|
|
88
91
|
}
|
89
92
|
|
90
93
|
return setter;
|
91
|
-
}
|
94
|
+
};
|
92
95
|
|
93
96
|
// Shim define property with apropriated fail cases exceptions
|
94
97
|
Object.defineProperty = function (obj, prop, descriptor) {
|
95
98
|
var fix;
|
96
99
|
|
97
|
-
if (!
|
100
|
+
if (!prop)
|
98
101
|
|
99
|
-
if (
|
102
|
+
if (descriptor.set) {
|
103
|
+
if (!obj.attachEvent) throw new TypeError('Object.defineProperty: First parameter must be a dom element. When descriptor has \'set\' property.');
|
100
104
|
|
101
|
-
|
105
|
+
if (!fix && !inDocument(obj)) throw new TypeError('Object.defineProperty: Dom element must be attached in document.');
|
106
|
+
}
|
102
107
|
|
103
|
-
if (
|
108
|
+
if (!descriptor) throw new TypeError('Object.defineProperty (object, property, descriptor): Descriptor must be an object, was \'' + descriptor + '\'.');
|
104
109
|
|
105
110
|
// Store current value in descriptor
|
111
|
+
// TODO only try to set descriptor value if it was passed as parameter
|
106
112
|
descriptor.value = descriptor.value || (descriptor.get && descriptor.get.call(obj)) || obj[prop];
|
107
113
|
|
108
|
-
if (descriptor.
|
114
|
+
if (descriptor.set) {
|
109
115
|
// Detach old listeners if any
|
110
116
|
detach = true;
|
111
117
|
obj[prop] = 'detaching';
|
112
118
|
detach = false;
|
113
119
|
|
114
120
|
if (descriptor.get) {
|
121
|
+
// TODO remove jquery dependency
|
115
122
|
descriptor.bound_getter = $.extend($.proxy(descriptor.get, obj), descriptor.get);
|
116
123
|
|
117
|
-
//
|
124
|
+
// Why? we only bind the getter when we have a non falsey value
|
118
125
|
if (descriptor.value) descriptor.value.toString = descriptor.bound_getter;
|
119
126
|
|
120
127
|
// Although its not allowed for convention to have getters
|
@@ -125,6 +132,16 @@
|
|
125
132
|
|
126
133
|
(fix || obj).attachEvent("onpropertychange", generate_setter(obj, prop, descriptor));
|
127
134
|
|
135
|
+
} else if (descriptor.get) {
|
136
|
+
descriptor.bound_getter = $.extend($.proxy(descriptor.get, obj), descriptor.get);
|
137
|
+
|
138
|
+
// Why? we only bind the getter when we have a non falsey value
|
139
|
+
if (descriptor.value) descriptor.value.toString = descriptor.bound_getter;
|
140
|
+
|
141
|
+
// Although its not allowed for convention to have getters
|
142
|
+
// and setters with the descriptor value, here we just reuse
|
143
|
+
// the descriptor stored value
|
144
|
+
obj[prop] = descriptor.value;
|
128
145
|
} else {
|
129
146
|
obj[prop] = descriptor.value;
|
130
147
|
}
|
@@ -146,7 +163,52 @@
|
|
146
163
|
}
|
147
164
|
}
|
148
165
|
};
|
149
|
-
|
166
|
+
|
167
|
+
ObjectCreate = Object.create;
|
168
|
+
baseElement = document.createElement('fix');
|
169
|
+
|
170
|
+
Object.create = function (prototype, properties) {
|
171
|
+
var complexDescriptor, fix, descriptor, name;
|
172
|
+
|
173
|
+
for (name in properties) {
|
174
|
+
descriptor = properties[name]
|
175
|
+
if (descriptor instanceof Object) {
|
176
|
+
complexDescriptor = !!(descriptor.get || descriptor.set)
|
177
|
+
|
178
|
+
if (complexDescriptor) {
|
179
|
+
break;
|
180
|
+
}
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
184
|
+
if (complexDescriptor || prototype.nodeName === 'fix' || properties && properties._shim) {
|
185
|
+
properties && delete properties._shim;
|
186
|
+
|
187
|
+
if (typeof object != 'function') {
|
188
|
+
fix = document.createElement('fix');
|
189
|
+
document.appendChild(fix);
|
190
|
+
|
191
|
+
// Copy over prototype properties
|
192
|
+
for (name in prototype) {
|
193
|
+
try {
|
194
|
+
if (name in baseElement) continue;
|
195
|
+
fix[name] = prototype[name];
|
196
|
+
} catch (e) {
|
197
|
+
console.warn("Object.create: Invalid shimmed property: " + name + ", with error " + e);
|
198
|
+
}
|
199
|
+
}
|
200
|
+
|
201
|
+
Object.defineProperties(fix, properties);
|
202
|
+
} else {
|
203
|
+
throw new TypeError('Functions with complex descriptors not implemented yet');
|
204
|
+
}
|
205
|
+
return fix;
|
206
|
+
} else {
|
207
|
+
return ObjectCreate(prototype, properties)
|
208
|
+
}
|
209
|
+
}
|
210
|
+
};
|
211
|
+
|
150
212
|
|
151
213
|
/* TODO Use define Property, and only define if
|
152
214
|
non-enumerable properties are allowed
|
@@ -0,0 +1,104 @@
|
|
1
|
+
// Jasmine boot.js for browser runners - exposes external/global interface, builds the Jasmine environment and executes it.
|
2
|
+
(function() {
|
3
|
+
var env = jasmine.getEnv();
|
4
|
+
|
5
|
+
var jasmineInterface = {
|
6
|
+
describe: function(description, specDefinitions) {
|
7
|
+
return env.describe(description, specDefinitions);
|
8
|
+
},
|
9
|
+
|
10
|
+
xdescribe: function(description, specDefinitions) {
|
11
|
+
return env.xdescribe(description, specDefinitions);
|
12
|
+
},
|
13
|
+
|
14
|
+
it: function(desc, func) {
|
15
|
+
return env.it(desc, func);
|
16
|
+
},
|
17
|
+
|
18
|
+
xit: function(desc, func) {
|
19
|
+
return env.xit(desc, func);
|
20
|
+
},
|
21
|
+
|
22
|
+
beforeEach: function(beforeEachFunction) {
|
23
|
+
return env.beforeEach(beforeEachFunction);
|
24
|
+
},
|
25
|
+
|
26
|
+
afterEach: function(afterEachFunction) {
|
27
|
+
return env.afterEach(afterEachFunction);
|
28
|
+
},
|
29
|
+
|
30
|
+
expect: function(actual) {
|
31
|
+
return env.expect(actual);
|
32
|
+
},
|
33
|
+
|
34
|
+
pending: function() {
|
35
|
+
return env.pending();
|
36
|
+
},
|
37
|
+
|
38
|
+
addMatchers: function(matchers) {
|
39
|
+
return env.addMatchers(matchers);
|
40
|
+
},
|
41
|
+
|
42
|
+
spyOn: function(obj, methodName) {
|
43
|
+
return env.spyOn(obj, methodName);
|
44
|
+
},
|
45
|
+
|
46
|
+
clock: env.clock,
|
47
|
+
setTimeout: env.clock.setTimeout,
|
48
|
+
clearTimeout: env.clock.clearTimeout,
|
49
|
+
setInterval: env.clock.setInterval,
|
50
|
+
clearInterval: env.clock.clearInterval,
|
51
|
+
|
52
|
+
jsApiReporter: new jasmine.JsApiReporter(jasmine)
|
53
|
+
};
|
54
|
+
|
55
|
+
if (typeof window == "undefined" && typeof exports == "object") {
|
56
|
+
extend(exports, jasmineInterface);
|
57
|
+
} else {
|
58
|
+
extend(window, jasmineInterface);
|
59
|
+
}
|
60
|
+
|
61
|
+
var queryString = new jasmine.QueryString({
|
62
|
+
getWindowLocation: function() { return window.location; }
|
63
|
+
});
|
64
|
+
|
65
|
+
// TODO: move all of catching to raise so we don't break our brains
|
66
|
+
var catchingExceptions = queryString.getParam("catch");
|
67
|
+
env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions);
|
68
|
+
|
69
|
+
var htmlReporter = new jasmine.HtmlReporter({
|
70
|
+
env: env,
|
71
|
+
queryString: queryString,
|
72
|
+
onRaiseExceptionsClick: function() { queryString.setParam("catch", !env.catchingExceptions()); },
|
73
|
+
getContainer: function() { return document.body; },
|
74
|
+
createElement: function() { return document.createElement.apply(document, arguments); },
|
75
|
+
createTextNode: function() { return document.createTextNode.apply(document, arguments); }
|
76
|
+
});
|
77
|
+
|
78
|
+
env.addReporter(jasmineInterface.jsApiReporter);
|
79
|
+
env.addReporter(htmlReporter);
|
80
|
+
|
81
|
+
var specFilter = new jasmine.HtmlSpecFilter({
|
82
|
+
filterString: function() { return queryString.getParam("spec"); }
|
83
|
+
});
|
84
|
+
|
85
|
+
env.specFilter = function(spec) {
|
86
|
+
return specFilter.matches(spec.getFullName());
|
87
|
+
};
|
88
|
+
|
89
|
+
var currentWindowOnload = window.onload;
|
90
|
+
|
91
|
+
window.onload = function() {
|
92
|
+
if (currentWindowOnload) {
|
93
|
+
currentWindowOnload();
|
94
|
+
}
|
95
|
+
htmlReporter.initialize();
|
96
|
+
env.execute();
|
97
|
+
};
|
98
|
+
|
99
|
+
function extend(destination, source) {
|
100
|
+
for (var property in source) destination[property] = source[property];
|
101
|
+
return destination;
|
102
|
+
}
|
103
|
+
|
104
|
+
}());
|