ende 0.4.5 → 0.4.6
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.
- 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
|
+
}());
|