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
@@ -107,11 +107,15 @@ subscribers = {
|
|
107
107
|
modifiers = {
|
108
108
|
belongs_to: {
|
109
109
|
associated_loader: function() {
|
110
|
-
var association_name,
|
110
|
+
var association_name, definition, temporary_observed,
|
111
111
|
_this = this;
|
112
112
|
|
113
113
|
association_name = this.resource.toString();
|
114
|
-
|
114
|
+
if (this.owner.observed == null) {
|
115
|
+
this.owner.observed = {};
|
116
|
+
temporary_observed = true;
|
117
|
+
}
|
118
|
+
definition = Object.defineProperty(this.owner, association_name, {
|
115
119
|
set: function(associated) {
|
116
120
|
return this.observed[association_name] = associated;
|
117
121
|
},
|
@@ -144,6 +148,10 @@ modifiers = {
|
|
144
148
|
configurable: true,
|
145
149
|
enumerable: true
|
146
150
|
});
|
151
|
+
if (temporary_observed) {
|
152
|
+
delete this.owner.observed;
|
153
|
+
}
|
154
|
+
return definition;
|
147
155
|
}
|
148
156
|
}
|
149
157
|
};
|
@@ -321,14 +321,26 @@ restful = {
|
|
321
321
|
return this.saving = false;
|
322
322
|
},
|
323
323
|
toString: function() {
|
324
|
-
var serialized;
|
324
|
+
var e, name, property, serialized;
|
325
325
|
|
326
326
|
serialized = {};
|
327
327
|
serialized[this.resource] = this.json();
|
328
|
-
|
328
|
+
try {
|
329
|
+
return JSON.stringify(serialized);
|
330
|
+
} catch (_error) {
|
331
|
+
e = _error;
|
332
|
+
console.warn("restfulable.toString: Failed to stringify record: " + e.message + ". retrying...");
|
333
|
+
for (name in serialized) {
|
334
|
+
property = serialized[name];
|
335
|
+
if (typeof property === 'object') {
|
336
|
+
delete serialized[name];
|
337
|
+
}
|
338
|
+
}
|
339
|
+
return JSON.stringify(serialized);
|
340
|
+
}
|
329
341
|
},
|
330
342
|
json: function(methods) {
|
331
|
-
var
|
343
|
+
var definition, json, name, nested, value;
|
332
344
|
|
333
345
|
if (methods == null) {
|
334
346
|
methods = {};
|
@@ -336,10 +348,11 @@ restful = {
|
|
336
348
|
json = {};
|
337
349
|
definition = model[this.resource.toString()];
|
338
350
|
for (name in this) {
|
339
|
-
if (
|
351
|
+
if (observable.ignores.indexOf(name) !== -1) {
|
340
352
|
continue;
|
341
353
|
}
|
342
|
-
|
354
|
+
nested = this.nested_attributes.indexOf(name) !== -1;
|
355
|
+
if (!nested && (definition.belongs_to.indexOf(name) !== -1 || definition.has_one.indexOf(name) !== -1)) {
|
343
356
|
continue;
|
344
357
|
}
|
345
358
|
value = this[name];
|
@@ -350,22 +363,20 @@ restful = {
|
|
350
363
|
continue;
|
351
364
|
}
|
352
365
|
if (type(value) === 'object') {
|
353
|
-
if (
|
354
|
-
json[name] = value.
|
355
|
-
} else {
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
json["" + name + "_attributes"] = value.json(methods[name]);
|
361
|
-
}
|
366
|
+
if (nested) {
|
367
|
+
json["" + name + "_attributes"] = value.json(methods[name]);
|
368
|
+
} else if ((value.toJSON != null) || (value.json != null)) {
|
369
|
+
if (value.json != null) {
|
370
|
+
json[name] = value.json(methods[name]);
|
371
|
+
} else {
|
372
|
+
json[name] = value.toJSON(methods[name]);
|
362
373
|
}
|
363
374
|
}
|
364
375
|
} else {
|
365
376
|
json[name] = value;
|
366
377
|
}
|
367
378
|
}
|
368
|
-
observable.unobserve(json);
|
379
|
+
json = observable.unobserve(json);
|
369
380
|
delete json.dirty;
|
370
381
|
delete json.resource;
|
371
382
|
delete json.route;
|
@@ -75,7 +75,9 @@ this.model = (function() {
|
|
75
75
|
data.route || (data.route = this.route);
|
76
76
|
data.nested_attributes = this.nested_attributes || [];
|
77
77
|
after_initialize = (data.after_initialize || []).concat(this.record.after_initialize);
|
78
|
-
creation = extend(Object.create(data
|
78
|
+
creation = extend(Object.create(data, {
|
79
|
+
_shim: {}
|
80
|
+
}), this.record, creation, {
|
79
81
|
after_initialize: after_initialize
|
80
82
|
});
|
81
83
|
_ref = this.record.before_initialize;
|
@@ -91,7 +91,17 @@ modifiers =
|
|
91
91
|
associated_loader: ->
|
92
92
|
association_name = @resource.toString()
|
93
93
|
|
94
|
-
|
94
|
+
unless @owner.observed?
|
95
|
+
# When initializing a owner record in legacy browsers, we will
|
96
|
+
# run the getter to set the default value for the associate
|
97
|
+
# property
|
98
|
+
#
|
99
|
+
# TODO in the accessors shim, better way of getting the
|
100
|
+
# default value for further usage
|
101
|
+
@owner.observed = {}
|
102
|
+
temporary_observed = true
|
103
|
+
|
104
|
+
definition = Object.defineProperty @owner, association_name,
|
95
105
|
# Observable already sets property for us
|
96
106
|
set: (associated) ->
|
97
107
|
@observed[association_name] = associated
|
@@ -129,6 +139,10 @@ modifiers =
|
|
129
139
|
configurable: true
|
130
140
|
enumerable: true
|
131
141
|
|
142
|
+
delete @owner.observed if temporary_observed
|
143
|
+
|
144
|
+
definition
|
145
|
+
|
132
146
|
callbacks =
|
133
147
|
has_many:
|
134
148
|
# Forward association nested attributes
|
@@ -305,20 +305,40 @@ restful =
|
|
305
305
|
# Finish saving
|
306
306
|
@saving = false
|
307
307
|
|
308
|
+
# TODO move to record.coffee
|
308
309
|
toString: ->
|
309
310
|
serialized = {}
|
310
311
|
serialized[@resource] = @json()
|
311
|
-
JSON.stringify serialized
|
312
312
|
|
313
|
+
try
|
314
|
+
# TODO figure out why it throws circular references sometines
|
315
|
+
JSON.stringify serialized
|
316
|
+
catch e
|
317
|
+
console.warn "restfulable.toString: Failed to stringify record: #{e.message}. retrying..."
|
318
|
+
|
319
|
+
for name, property of serialized
|
320
|
+
delete serialized[name] if typeof property == 'object'
|
321
|
+
|
322
|
+
JSON.stringify serialized
|
323
|
+
|
324
|
+
# TODO move this to serializable module
|
325
|
+
# TODO figure out why sometimes is rendering a circular referenced json
|
326
|
+
# TODO rename to toJSON
|
313
327
|
json: (methods = {}) ->
|
314
328
|
json = {}
|
315
329
|
|
316
330
|
definition = model[@resource.toString()]
|
317
331
|
|
318
|
-
for name of @
|
332
|
+
for name of @
|
333
|
+
# TODO smarter way to ignore Dom node fix properties
|
334
|
+
continue if observable.ignores.indexOf(name) != -1
|
335
|
+
|
319
336
|
# TODO treat other associations to!
|
320
337
|
# TODO create association reflection for god sake!
|
321
|
-
|
338
|
+
nested = @nested_attributes.indexOf(name) != -1
|
339
|
+
|
340
|
+
# Skip association attributes that are note nested
|
341
|
+
continue if not nested and (definition.belongs_to.indexOf(name) != -1 or definition.has_one.indexOf(name) != -1)
|
322
342
|
|
323
343
|
# TODO Bypass only undefined values so we can erase data on server
|
324
344
|
value = @[name]
|
@@ -327,22 +347,26 @@ restful =
|
|
327
347
|
|
328
348
|
if type(value) == 'object'
|
329
349
|
|
330
|
-
if
|
331
|
-
|
332
|
-
|
350
|
+
if nested
|
351
|
+
# TODO move nested attributes to model definition and
|
352
|
+
# implement toJSON there
|
353
|
+
json["#{name}_attributes"] = value.json methods[name]
|
333
354
|
|
334
|
-
|
355
|
+
# Serialize complex type values
|
356
|
+
else if value.toJSON? || value.json?
|
335
357
|
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
json[
|
358
|
+
if value.json?
|
359
|
+
json[name] = value.json methods[name]
|
360
|
+
else
|
361
|
+
json[name] = value.toJSON methods[name]
|
340
362
|
|
341
363
|
else
|
342
364
|
|
365
|
+
# Serialize primitive type values
|
343
366
|
json[name] = value
|
344
367
|
|
345
|
-
observable
|
368
|
+
# Remove observable methods and dom node properties
|
369
|
+
json = observable.unobserve json
|
346
370
|
|
347
371
|
# TODO Store reserved words in a array
|
348
372
|
# TODO Use _.omit function
|
@@ -374,6 +398,7 @@ restful =
|
|
374
398
|
|
375
399
|
json
|
376
400
|
|
401
|
+
|
377
402
|
# TODO put deprecation warning on json method
|
378
403
|
# TODO rename json method to toJSON
|
379
404
|
restful.toJSON = restful.json
|
@@ -45,7 +45,9 @@ merge = require('assimilate').withStrategy 'deep'
|
|
45
45
|
# instance = record.call extend data, @record # TODO remove @record from outside scop
|
46
46
|
after_initialize = (data.after_initialize || []).concat(@record.after_initialize)
|
47
47
|
|
48
|
-
|
48
|
+
# TODO only shim in older browsers
|
49
|
+
# TODO try to remove _shim need
|
50
|
+
creation = extend Object.create(data, {_shim: {}}), @record, creation, after_initialize: after_initialize
|
49
51
|
|
50
52
|
# TODO use deferred instead of before_initialize array
|
51
53
|
for callback, index in @record.before_initialize
|
@@ -0,0 +1 @@
|
|
1
|
+
global
|
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.0.0-p195
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard 'bundler' do
|
5
|
+
watch('Gemfile')
|
6
|
+
# Uncomment next line if Gemfile contain `gemspec' command
|
7
|
+
# watch(/^.+\.gemspec/)
|
8
|
+
end
|
9
|
+
|
10
|
+
guard 'coffeescript', :input => 'src', :output => '.', :bare => true
|
11
|
+
# Add files and commands to this file, like the example:
|
12
|
+
# watch(%r{file/path}) { `command(s)` }
|
13
|
+
#
|
14
|
+
guard 'shell' do
|
15
|
+
watch(/(.*).coffee/) { |m|
|
16
|
+
puts ' Building release component'
|
17
|
+
puts `component-build --verbose --name release`
|
18
|
+
|
19
|
+
puts ' Building development component'
|
20
|
+
puts `component-build --verbose --name development --dev`
|
21
|
+
|
22
|
+
puts ' Building tests component'
|
23
|
+
puts `component-build --verbose --name test --dev`
|
24
|
+
}
|
25
|
+
|
26
|
+
watch(/component.json|lib\/observable/) { |m|
|
27
|
+
puts ' Installing possible new components'
|
28
|
+
puts `component install`
|
29
|
+
|
30
|
+
puts ' Building release component'
|
31
|
+
puts `component-build --verbose --name release`
|
32
|
+
|
33
|
+
puts ' Building development component'
|
34
|
+
puts `component-build --verbose --name development --dev`
|
35
|
+
|
36
|
+
puts ' Building tests component'
|
37
|
+
puts `component-build --verbose --name test --dev`
|
38
|
+
}
|
39
|
+
end
|
File without changes
|
@@ -0,0 +1,116 @@
|
|
1
|
+
|
2
|
+
# observable
|
3
|
+
|
4
|
+
Observable, observer capabilities built upon the observable shim
|
5
|
+
|
6
|
+
## Summary
|
7
|
+
|
8
|
+
- We need a pretty sintax to listen to single properties
|
9
|
+
- Requirements
|
10
|
+
- ES5 Getters and Setters (Shim ships with component, IE 10+)
|
11
|
+
- ES7 Observer (Shim ships with component, IE ?+)
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
$ component install indefinido/observable
|
16
|
+
|
17
|
+
## API
|
18
|
+
|
19
|
+
### Functionality (Single Property, All Properties)
|
20
|
+
|
21
|
+
Just implements a nicer interface:
|
22
|
+
|
23
|
+
```javascript
|
24
|
+
|
25
|
+
require('observable');
|
26
|
+
|
27
|
+
arthur = observable.call({
|
28
|
+
name : function () { return this.firstname + " " + this.surname; },
|
29
|
+
firstname: "Arthur Philip",
|
30
|
+
surname : "Dent",
|
31
|
+
species : "Humam"
|
32
|
+
});
|
33
|
+
|
34
|
+
// Subscribe to all changes
|
35
|
+
arthur.subscribe(function (updates) {
|
36
|
+
var i = updates.length, update;
|
37
|
+
while (i--) {
|
38
|
+
update = updates[i];
|
39
|
+
console.log(update.name, update.type, update.oldValue, '→', update.object[update.name]); // also this[update.name]
|
40
|
+
}
|
41
|
+
});
|
42
|
+
|
43
|
+
// Subscribe to single property change
|
44
|
+
arthur.subscribe('firstname', function ( update) {
|
45
|
+
console.log( update.name, update.type, update.oldValue, '→', update.object[ update.name]); // also this[ update.name]
|
46
|
+
});
|
47
|
+
|
48
|
+
```
|
49
|
+
|
50
|
+
! Warning all properties and configuration is stored in a per object
|
51
|
+
basis on the observed property:
|
52
|
+
|
53
|
+
```javascript
|
54
|
+
require('observable');
|
55
|
+
|
56
|
+
arthur = observable.call({
|
57
|
+
name : function () { return this.firstname + " " + this.surname; },
|
58
|
+
firstname: "Arthur Philip",
|
59
|
+
surname : "Dent",
|
60
|
+
species : "Humam"
|
61
|
+
});
|
62
|
+
|
63
|
+
// Don't mess with this properties
|
64
|
+
// they change between browsers!
|
65
|
+
arthur.observed.name; // "Arthur Philip"
|
66
|
+
|
67
|
+
// Also in some browsers it is not possible to create unreadable
|
68
|
+
// properties, the it will apear on for in loops!
|
69
|
+
for (attribute in arthur) {
|
70
|
+
if (attribute == "observed") alert("Im not hidden!");
|
71
|
+
}
|
72
|
+
|
73
|
+
```
|
74
|
+
|
75
|
+
### Adapters
|
76
|
+
|
77
|
+
#### Rivets
|
78
|
+
|
79
|
+
```javascript
|
80
|
+
require('observable/adapters/rivets');
|
81
|
+
|
82
|
+
arthur = observable.call({
|
83
|
+
name : function () { return this.firstname + " " + this.surname; },
|
84
|
+
firstname: "Arthur Philip",
|
85
|
+
surname : "Dent",
|
86
|
+
species : "Humam"
|
87
|
+
}),
|
88
|
+
|
89
|
+
template = '<div class="person">' +
|
90
|
+
' <span data-html="person.name"></span> ' +
|
91
|
+
' <span data-html="person.species"></span> ' +
|
92
|
+
'</div>';
|
93
|
+
|
94
|
+
document.body.innerHTML = template;
|
95
|
+
element = document.body.children[0];
|
96
|
+
|
97
|
+
rivets.bind(element, {person: arthur});
|
98
|
+
|
99
|
+
arthur.species = "Homo Sapiens";
|
100
|
+
|
101
|
+
```
|
102
|
+
|
103
|
+
## TODO
|
104
|
+
|
105
|
+
## TESTS!
|
106
|
+
|
107
|
+
A tiny part of tests has been written, but more on the go!
|
108
|
+
|
109
|
+
## License
|
110
|
+
|
111
|
+
WTFPL
|
112
|
+
|
113
|
+
## Credits
|
114
|
+
|
115
|
+
Built upon the lovely coffeescript language
|
116
|
+
Uses heavily https://github.com/KapIT/observe-shim and https://github.com/KapIT/observe-utils
|