ende 0.4.5 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/lib/assets/javascripts/aura/extensions/devise.js.coffee +0 -2
  3. data/lib/assets/javascripts/aura/extensions/platform.js.coffee +3 -0
  4. data/lib/assets/javascripts/aura/extensions/rivets.js.coffee +17 -1
  5. data/lib/assets/javascripts/aura/extensions/routes.js.coffee +8 -7
  6. data/lib/assets/javascripts/aura/extensions/states.js.coffee +13 -1
  7. data/lib/assets/javascripts/aura/extensions/widget/eventable.js.coffee +4 -2
  8. data/lib/assets/javascripts/config/load_components.js.coffee +19 -12
  9. data/lib/assets/javascripts/ende.js.coffee +33 -12
  10. data/lib/ende/version.rb +1 -1
  11. data/vendor/assets/components/build.css +111 -0
  12. data/vendor/assets/components/ende_build.js +160 -41
  13. data/vendor/components/indefinido-indemma/build/development.js +3 -118
  14. data/vendor/components/indefinido-indemma/build/release.js +39 -4170
  15. data/vendor/components/indefinido-indemma/build/test.js +3 -118
  16. data/vendor/components/indefinido-indemma/lib/record/associable.js +10 -2
  17. data/vendor/components/indefinido-indemma/lib/record/restfulable.js +26 -15
  18. data/vendor/components/indefinido-indemma/lib/record.js +3 -1
  19. data/vendor/components/indefinido-indemma/src/lib/record/associable.coffee +15 -1
  20. data/vendor/components/indefinido-indemma/src/lib/record/restfulable.coffee +37 -12
  21. data/vendor/components/indefinido-indemma/src/lib/record.coffee +3 -1
  22. data/vendor/components/indefinido-observable/.gitignore +15 -0
  23. data/vendor/components/indefinido-observable/.ruby-gemset +1 -0
  24. data/vendor/components/indefinido-observable/.ruby-version +1 -0
  25. data/vendor/components/indefinido-observable/Gemfile +13 -0
  26. data/vendor/components/indefinido-observable/Guardfile +39 -0
  27. data/vendor/components/indefinido-observable/History.md +0 -0
  28. data/vendor/components/indefinido-observable/Readme.md +116 -0
  29. data/vendor/components/indefinido-observable/build/build.js +14798 -0
  30. data/vendor/components/indefinido-observable/build/development.js +339 -0
  31. data/vendor/components/indefinido-observable/build/release.js +14937 -0
  32. data/vendor/components/indefinido-observable/build/test.js +339 -0
  33. data/vendor/components/indefinido-observable/component.json +5 -1
  34. data/vendor/components/indefinido-observable/components/chaijs-chai/component.json +46 -0
  35. data/vendor/components/indefinido-observable/components/chaijs-chai/index.js +1 -0
  36. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/assertion.js +132 -0
  37. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/core/assertions.js +1270 -0
  38. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/error.js +60 -0
  39. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/interface/assert.js +1060 -0
  40. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/interface/expect.js +12 -0
  41. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/interface/should.js +76 -0
  42. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/addChainableMethod.js +94 -0
  43. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/addMethod.js +37 -0
  44. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/addProperty.js +40 -0
  45. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/eql.js +124 -0
  46. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/flag.js +32 -0
  47. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getActual.js +19 -0
  48. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getEnumerableProperties.js +25 -0
  49. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getMessage.js +49 -0
  50. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getName.js +20 -0
  51. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getPathValue.js +102 -0
  52. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/getProperties.js +35 -0
  53. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/index.js +108 -0
  54. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/inspect.js +316 -0
  55. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/objDisplay.js +48 -0
  56. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/overwriteMethod.js +51 -0
  57. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/overwriteProperty.js +54 -0
  58. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/test.js +26 -0
  59. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/transferFlags.js +44 -0
  60. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai/utils/type.js +45 -0
  61. data/vendor/components/indefinido-observable/components/chaijs-chai/lib/chai.js +79 -0
  62. data/vendor/components/indefinido-observable/components/component-jquery/component.json +14 -0
  63. data/vendor/components/indefinido-observable/components/component-jquery/index.js +9601 -0
  64. data/vendor/components/indefinido-observable/components/kapit-observe-shim/component.json +11 -0
  65. data/vendor/components/indefinido-observable/components/kapit-observe-utils/component.json +13 -0
  66. data/vendor/components/indefinido-observable/karma.conf.js +92 -0
  67. data/vendor/components/indefinido-observable/lib/adapters/rivets.js +3 -1
  68. data/vendor/components/indefinido-observable/lib/observable.js +47 -13
  69. data/vendor/components/indefinido-observable/spec/legacy/observable_spec.js +126 -0
  70. data/vendor/components/indefinido-observable/spec/observable_spec.js +92 -0
  71. data/vendor/components/indefinido-observable/spec/spec_helper.js +8 -0
  72. data/vendor/components/indefinido-observable/spec/vendor/accessors_spec.js +63 -0
  73. data/vendor/components/indefinido-observable/src/lib/adapters/rivets.js.coffee +15 -0
  74. data/vendor/components/indefinido-observable/src/spec/legacy/observable_spec.coffee +132 -0
  75. data/vendor/components/indefinido-observable/src/spec/observable_spec.coffee +85 -0
  76. data/vendor/components/indefinido-observable/src/spec/spec_helper.coffee +5 -0
  77. data/vendor/components/indefinido-observable/src/spec/vendor/accessors_spec.coffee +59 -0
  78. data/vendor/components/indefinido-observable/vendor/shims/accessors.js +71 -9
  79. data/vendor/components/indefinido-observable/vendor/spec/boot.js +104 -0
  80. data/vendor/components/indefinido-observable/vendor/spec/jasmine.js +2054 -0
  81. 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,5 @@
1
+ root = exports ? window
2
+
3
+ if Object.prototype.defineProperty
4
+ chai = require 'chaijs-chai'
5
+ root.should = chai.should()
@@ -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 it exists and there's no falsey value
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 (!obj.attachEvent) throw new TypeError('Object.defineProperty: First parameter must be a dom element.');
100
+ if (!prop)
98
101
 
99
- if (!fix && !inDocument(obj)) throw new TypeError('Object.defineProperty: Dom element must be attached in document.');
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
- if (!descriptor) throw new TypeError('Object.defineProperty (object, property, descriptor): Descriptor must be an object, was \'' + descriptor + '\'.');
105
+ if (!fix && !inDocument(obj)) throw new TypeError('Object.defineProperty: Dom element must be attached in document.');
106
+ }
102
107
 
103
- if ((descriptor.get || descriptor.set) && descriptor.value) throw new TypeError('Object.defineProperty: Descriptor must have only getters and setters or value.');
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.get || descriptor.set) {
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
- // We only bind the getter when we have a non falsey value
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
+ }());