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.
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
+ }());