ende 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/component.json +2 -2
- data/components/indefinido/indemma/master/component.json +27 -17
- data/components/indefinido/indemma/master/lib/record/associable.js +74 -75
- data/components/indefinido/indemma/master/lib/record/dirtyable.js +40 -0
- data/components/indefinido/indemma/master/lib/record/queryable.js +2 -2
- data/components/indefinido/indemma/master/lib/record/resource.js +1 -1
- data/components/indefinido/indemma/master/lib/record/rest.js +7 -2
- data/components/indefinido/indemma/master/lib/record/restfulable.js +37 -10
- data/components/indefinido/indemma/master/lib/record/scopable.js +20 -47
- data/components/indefinido/indemma/master/lib/record/storable.js +11 -0
- data/components/indefinido/indemma/master/lib/record/validatable.js +195 -1068
- data/components/indefinido/indemma/master/lib/record.js +1 -1
- data/components/indefinido/indemma/master/vendor/stampit.js +568 -242
- data/components/indefinido/observable/es6-modules/component.json +39 -0
- data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/lib/adapters/rivets.js +3 -1
- data/components/indefinido/observable/es6-modules/lib/legacy/notifierable.js +145 -0
- data/components/indefinido/observable/es6-modules/lib/legacy/schedulerable.js +114 -0
- data/components/indefinido/observable/es6-modules/lib/lookup.js +38 -0
- data/components/indefinido/observable/es6-modules/lib/observable/keypath_observer.js +38 -0
- data/components/indefinido/observable/es6-modules/lib/observable/observation.js +45 -0
- data/components/indefinido/observable/es6-modules/lib/observable/selection.js +57 -0
- data/components/indefinido/observable/es6-modules/lib/observable/self_observer.js +38 -0
- data/components/indefinido/observable/es6-modules/lib/observable.js +90 -0
- data/components/indefinido/observable/es6-modules/lib/platform.js +12 -0
- data/components/indefinido/observable/es6-modules/vendor/observe-js/observe.js +1631 -0
- data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/accessors.js +85 -10
- data/lib/assets/javascripts/aura/extensions/rivets.js.coffee +1 -1
- data/lib/ende/version.rb +1 -1
- data/vendor/assets/components/ende_build.js +18379 -26828
- metadata +20 -128
- data/components/indefinido/indemma/master/.gitignore +0 -17
- data/components/indefinido/indemma/master/.ruby-gemset +0 -1
- data/components/indefinido/indemma/master/.ruby-version +0 -1
- data/components/indefinido/indemma/master/Gemfile +0 -13
- data/components/indefinido/indemma/master/Guardfile +0 -39
- data/components/indefinido/indemma/master/History.md +0 -0
- data/components/indefinido/indemma/master/Readme.md +0 -447
- data/components/indefinido/indemma/master/build/build.js +0 -26288
- data/components/indefinido/indemma/master/build/development.js +0 -22200
- data/components/indefinido/indemma/master/build/release.js +0 -22139
- data/components/indefinido/indemma/master/build/test.js +0 -22200
- data/components/indefinido/indemma/master/components/chaijs-assertion-error/component.json +0 -18
- data/components/indefinido/indemma/master/components/chaijs-assertion-error/index.js +0 -110
- data/components/indefinido/indemma/master/components/chaijs-chai/component.json +0 -47
- data/components/indefinido/indemma/master/components/chaijs-chai/index.js +0 -1
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/assertion.js +0 -130
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/core/assertions.js +0 -1270
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/interface/assert.js +0 -1080
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/interface/expect.js +0 -12
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/interface/should.js +0 -76
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/addChainableMethod.js +0 -94
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/addMethod.js +0 -37
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/addProperty.js +0 -40
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/eql.js +0 -129
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/flag.js +0 -32
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getActual.js +0 -19
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getEnumerableProperties.js +0 -25
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getMessage.js +0 -49
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getName.js +0 -20
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getPathValue.js +0 -102
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getProperties.js +0 -35
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/index.js +0 -108
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/inspect.js +0 -320
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/objDisplay.js +0 -48
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/overwriteMethod.js +0 -51
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/overwriteProperty.js +0 -54
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/test.js +0 -26
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/transferFlags.js +0 -44
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/type.js +0 -45
- data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai.js +0 -80
- data/components/indefinido/indemma/master/components/component-bind/component.json +0 -14
- data/components/indefinido/indemma/master/components/component-bind/index.js +0 -24
- data/components/indefinido/indemma/master/components/component-jquery/component.json +0 -14
- data/components/indefinido/indemma/master/components/component-jquery/index.js +0 -9601
- data/components/indefinido/indemma/master/components/component-type/component.json +0 -18
- data/components/indefinido/indemma/master/components/component-type/index.js +0 -32
- data/components/indefinido/indemma/master/components/indefinido-advisable/component.json +0 -21
- data/components/indefinido/indemma/master/components/indefinido-advisable/index.js +0 -1
- data/components/indefinido/indemma/master/components/indefinido-advisable/lib/advisable.js +0 -60
- data/components/indefinido/indemma/master/components/indefinido-observable/component.json +0 -25
- data/components/indefinido/indemma/master/components/indefinido-observable/components/cjohansen-sinon/sinon.js +0 -4290
- data/components/indefinido/indemma/master/components/indefinido-observable/lib/observable.js +0 -323
- data/components/indefinido/indemma/master/components/kapit-observe-utils/component.json +0 -13
- data/components/indefinido/indemma/master/components/paulmillr-es6-shim/component.json +0 -17
- data/components/indefinido/indemma/master/components/paulmillr-es6-shim/es6-shim.js +0 -996
- data/components/indefinido/indemma/master/components/pluma-assimilate/component.json +0 -25
- data/components/indefinido/indemma/master/components/pluma-assimilate/dist/assimilate.js +0 -127
- data/components/indefinido/indemma/master/karma.conf.js +0 -76
- data/components/indefinido/indemma/master/package.json +0 -9
- data/components/indefinido/indemma/master/spec/record/associable_spec.js +0 -137
- data/components/indefinido/indemma/master/spec/record/persistable_spec.js +0 -36
- data/components/indefinido/indemma/master/spec/record/queryable_spec.js +0 -33
- data/components/indefinido/indemma/master/spec/record/resource_spec.js +0 -93
- data/components/indefinido/indemma/master/spec/record/rest_spec.js +0 -32
- data/components/indefinido/indemma/master/spec/record/restfulable_spec.js +0 -300
- data/components/indefinido/indemma/master/spec/record/scopable_spec.js +0 -212
- data/components/indefinido/indemma/master/spec/record/storable_spec.js +0 -53
- data/components/indefinido/indemma/master/spec/record/translationable.js +0 -28
- data/components/indefinido/indemma/master/spec/record/validatable_spec.js +0 -111
- data/components/indefinido/indemma/master/spec/record/validations/associated_spec.js +0 -43
- data/components/indefinido/indemma/master/spec/record/validations/confirmation_spec.js +0 -36
- data/components/indefinido/indemma/master/spec/record/validations/cpf_spec.js +0 -35
- data/components/indefinido/indemma/master/spec/record/validations/presence_spec.js +0 -28
- data/components/indefinido/indemma/master/spec/record/validations/remote_spec.js +0 -87
- data/components/indefinido/indemma/master/spec/record/validations/type_spec.js +0 -48
- data/components/indefinido/indemma/master/spec/record_spec.js +0 -37
- data/components/indefinido/indemma/master/spec/spec_helper.js +0 -11
- data/components/indefinido/indemma/master/spec/support/value_objects/phone.js +0 -45
- data/components/indefinido/indemma/master/src/lib/extensions/rivets.coffee +0 -17
- data/components/indefinido/indemma/master/src/lib/record/associable.coffee +0 -380
- data/components/indefinido/indemma/master/src/lib/record/errors.coffee +0 -20
- data/components/indefinido/indemma/master/src/lib/record/maid.coffee +0 -16
- data/components/indefinido/indemma/master/src/lib/record/persistable.coffee +0 -32
- data/components/indefinido/indemma/master/src/lib/record/queryable.coffee +0 -30
- data/components/indefinido/indemma/master/src/lib/record/resource.coffee +0 -106
- data/components/indefinido/indemma/master/src/lib/record/rest.coffee +0 -28
- data/components/indefinido/indemma/master/src/lib/record/restfulable.coffee +0 -447
- data/components/indefinido/indemma/master/src/lib/record/scopable.coffee +0 -294
- data/components/indefinido/indemma/master/src/lib/record/storable.coffee +0 -46
- data/components/indefinido/indemma/master/src/lib/record/translationable.coffee +0 -18
- data/components/indefinido/indemma/master/src/lib/record/validatable.coffee +0 -207
- data/components/indefinido/indemma/master/src/lib/record/validations/associated.coffee +0 -30
- data/components/indefinido/indemma/master/src/lib/record/validations/confirmation.coffee +0 -17
- data/components/indefinido/indemma/master/src/lib/record/validations/cpf.coffee +0 -57
- data/components/indefinido/indemma/master/src/lib/record/validations/presence.coffee +0 -16
- data/components/indefinido/indemma/master/src/lib/record/validations/remote.coffee +0 -61
- data/components/indefinido/indemma/master/src/lib/record/validations/type.coffee +0 -31
- data/components/indefinido/indemma/master/src/lib/record/validations/validatorable.coffee +0 -5
- data/components/indefinido/indemma/master/src/lib/record.coffee +0 -138
- data/components/indefinido/indemma/master/src/spec/record/associable_spec.coffee +0 -130
- data/components/indefinido/indemma/master/src/spec/record/persistable_spec.coffee +0 -30
- data/components/indefinido/indemma/master/src/spec/record/queryable_spec.coffee +0 -27
- data/components/indefinido/indemma/master/src/spec/record/resource_spec.coffee +0 -69
- data/components/indefinido/indemma/master/src/spec/record/rest_spec.coffee +0 -22
- data/components/indefinido/indemma/master/src/spec/record/restfulable_spec.coffee +0 -215
- data/components/indefinido/indemma/master/src/spec/record/scopable_spec.coffee +0 -191
- data/components/indefinido/indemma/master/src/spec/record/storable_spec.coffee +0 -40
- data/components/indefinido/indemma/master/src/spec/record/translationable.coffee +0 -19
- data/components/indefinido/indemma/master/src/spec/record/validatable_spec.coffee +0 -100
- data/components/indefinido/indemma/master/src/spec/record/validations/associated_spec.coffee +0 -35
- data/components/indefinido/indemma/master/src/spec/record/validations/confirmation_spec.coffee +0 -25
- data/components/indefinido/indemma/master/src/spec/record/validations/cpf_spec.coffee +0 -28
- data/components/indefinido/indemma/master/src/spec/record/validations/presence_spec.coffee +0 -24
- data/components/indefinido/indemma/master/src/spec/record/validations/remote_spec.coffee +0 -74
- data/components/indefinido/indemma/master/src/spec/record/validations/type_spec.coffee +0 -33
- data/components/indefinido/indemma/master/src/spec/record_spec.coffee +0 -23
- data/components/indefinido/indemma/master/src/spec/spec_helper.coffee +0 -9
- data/components/indefinido/indemma/master/src/spec/support/value_objects/phone.coffee +0 -30
- data/components/indefinido/indemma/master/vendor/object/mixin.js +0 -196
- data/components/indefinido/indemma/master/vendor/sinon.js +0 -4290
- /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/index.js +0 -0
- /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/accessors-legacy.js +0 -0
- /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/array.indexOf.js +0 -0
- /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/object.create.js +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62968c729a073ebbf59f3784cab367762e84d539
|
4
|
+
data.tar.gz: 4cf11ac267c9c8bbc05dccf562f44c0ac0cad292
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b42de80aa1a414be0df5218d99f657827457c17548f52eddadb82d7295e19730e5c1fea9ef5728c99880450fd745e86eef85537bc4f5443436de98c022d81806
|
7
|
+
data.tar.gz: 9647f2ea5a1ed71670ebc9206575b150511157584c774f91a7db46e2fbdaeb4fe7676b1a21bf98f9939514812a1e207533578a10fd56f1469f1a28b44b48d608
|
data/component.json
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
"name": "ende",
|
3
3
|
"repo": "indefinido/ende",
|
4
4
|
"description": "Core web application functionacility",
|
5
|
-
"version": "0.5.
|
5
|
+
"version": "0.5.1",
|
6
6
|
"keywords": [],
|
7
7
|
"dependencies": {
|
8
8
|
"mikeric/rivets": "v0.5.12",
|
@@ -16,7 +16,7 @@
|
|
16
16
|
"components/modernizr": "*",
|
17
17
|
"indefinido/advisable": "*",
|
18
18
|
"indefinido/observable": "es6-modules",
|
19
|
-
"indefinido/indemma": "
|
19
|
+
"indefinido/indemma": "master",
|
20
20
|
"component/dialog": "*"
|
21
21
|
},
|
22
22
|
"scripts": [
|
@@ -1,45 +1,55 @@
|
|
1
1
|
{
|
2
2
|
"name": "indemma",
|
3
3
|
"description": "Indemma (mind picture = memory), client side ES5 observable REST model",
|
4
|
-
"version": "0.1.
|
4
|
+
"version": "0.1.13",
|
5
5
|
"keywords": [],
|
6
6
|
"dependencies": {
|
7
7
|
"pluma/assimilate": "0.3.0",
|
8
8
|
"component/type": "*",
|
9
9
|
"component/bind": "*",
|
10
10
|
"component/jquery": "*",
|
11
|
-
"indefinido/observable": "*",
|
12
11
|
"indefinido/advisable": "*",
|
13
|
-
"
|
12
|
+
"indefinido/observable": "es6-modules"
|
13
|
+
},
|
14
|
+
"development": {
|
15
|
+
"dependencies": {
|
16
|
+
"chaijs/chai": "*"
|
17
|
+
},
|
18
|
+
"scripts": [
|
19
|
+
"vendor/spec/sinon.js",
|
20
|
+
"vendor/spec/sinon/**/*.js"
|
21
|
+
]
|
14
22
|
},
|
15
|
-
"development": {},
|
16
23
|
"license": "WTFPL",
|
24
|
+
"paths": [
|
25
|
+
"vendor/components"
|
26
|
+
],
|
17
27
|
"scripts": [
|
18
28
|
"index.js",
|
19
|
-
"
|
20
|
-
"vendor/sinon.js",
|
21
|
-
"vendor/owl/pluralize.js",
|
29
|
+
"lib/extensions/rivets.js",
|
22
30
|
"lib/record.js",
|
23
31
|
"lib/record/associable.js",
|
32
|
+
"lib/record/dirtyable.js",
|
33
|
+
"lib/record/errors.js",
|
34
|
+
"lib/record/maid.js",
|
24
35
|
"lib/record/persistable.js",
|
25
|
-
"lib/record/storable.js",
|
26
36
|
"lib/record/queryable.js",
|
27
37
|
"lib/record/resource.js",
|
28
38
|
"lib/record/rest.js",
|
29
39
|
"lib/record/restfulable.js",
|
30
40
|
"lib/record/scopable.js",
|
31
|
-
"lib/record/
|
41
|
+
"lib/record/storable.js",
|
32
42
|
"lib/record/translationable.js",
|
33
|
-
"lib/record/
|
34
|
-
"lib/record/validations/confirmation.js",
|
43
|
+
"lib/record/validatable.js",
|
35
44
|
"lib/record/validations/associated.js",
|
45
|
+
"lib/record/validations/confirmation.js",
|
46
|
+
"lib/record/validations/cpf.js",
|
36
47
|
"lib/record/validations/presence.js",
|
37
48
|
"lib/record/validations/remote.js",
|
38
49
|
"lib/record/validations/type.js",
|
39
|
-
"lib/record/validations/
|
40
|
-
"
|
41
|
-
"
|
50
|
+
"lib/record/validations/validatorable.js",
|
51
|
+
"vendor/stampit.js",
|
52
|
+
"vendor/owl/pluralize.js"
|
42
53
|
],
|
43
|
-
"repository": "indefinido/indemma"
|
44
|
-
|
45
|
-
}
|
54
|
+
"repository": "indefinido/indemma"
|
55
|
+
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
var $, associable, callbacks, extend, model,
|
1
|
+
var $, associable, callbacks, descriptors, extend, model, plural, root, singular,
|
2
2
|
__slice = [].slice;
|
3
3
|
|
4
4
|
root = window;
|
@@ -52,7 +52,8 @@ plural = {
|
|
52
52
|
},
|
53
53
|
push: function() {
|
54
54
|
console.warn("" + this.resource + ".push is deprecated and will be removed, please use add instead");
|
55
|
-
|
55
|
+
Array.prototype.push.apply(this, arguments);
|
56
|
+
return arguments[0];
|
56
57
|
},
|
57
58
|
length: 0,
|
58
59
|
json: function(methods, omissions) {
|
@@ -64,7 +65,18 @@ plural = {
|
|
64
65
|
_results.push(record.json(methods, omissions));
|
65
66
|
}
|
66
67
|
return _results;
|
67
|
-
}
|
68
|
+
},
|
69
|
+
find: function(id) {
|
70
|
+
var resource, _i, _len;
|
71
|
+
|
72
|
+
for (_i = 0, _len = this.length; _i < _len; _i++) {
|
73
|
+
resource = this[_i];
|
74
|
+
if (resource._id === id) {
|
75
|
+
return resource;
|
76
|
+
}
|
77
|
+
}
|
78
|
+
},
|
79
|
+
filter: Array.prototype.filter || (typeof _ !== "undefined" && _ !== null ? _.filter : void 0)
|
68
80
|
};
|
69
81
|
|
70
82
|
singular = {
|
@@ -76,82 +88,61 @@ singular = {
|
|
76
88
|
}
|
77
89
|
};
|
78
90
|
|
79
|
-
|
91
|
+
descriptors = {
|
80
92
|
belongs_to: {
|
81
|
-
|
82
|
-
|
93
|
+
resource_id: {
|
94
|
+
getter: function() {
|
95
|
+
return this.owner.observed[this.resource + '_id'];
|
96
|
+
},
|
97
|
+
setter: function(resource_id) {
|
98
|
+
var association_name, current_resource_id, _ref;
|
83
99
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
return resource_id;
|
89
|
-
}
|
90
|
-
current_resource_id = (_ref = this.owner.observed[association_name]) != null ? _ref._id : void 0;
|
91
|
-
if (resource_id !== current_resource_id) {
|
92
|
-
resource = model[association_name];
|
93
|
-
if (!resource) {
|
94
|
-
console.warn("subscribers.belongs_to.foreign_key: associated factory not found for model: " + association_name);
|
100
|
+
association_name = this.resource.toString();
|
101
|
+
if (!resource_id) {
|
102
|
+
this.dirty = true;
|
103
|
+
this.owner[association_name] = resource_id;
|
95
104
|
return resource_id;
|
96
105
|
}
|
97
|
-
this.owner.observed[association_name]
|
106
|
+
current_resource_id = (_ref = this.owner.observed[association_name]) != null ? _ref._id : void 0;
|
107
|
+
if (resource_id !== current_resource_id) {
|
108
|
+
this.owner.observed[association_name + '_id'] = resource_id;
|
109
|
+
this.owner.observed[association_name] = null;
|
110
|
+
}
|
111
|
+
return resource_id;
|
98
112
|
}
|
99
|
-
return resource_id;
|
100
113
|
},
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
}
|
105
|
-
};
|
106
|
-
|
107
|
-
modifiers = {
|
108
|
-
belongs_to: {
|
109
|
-
associated_loader: function() {
|
110
|
-
var association_name, definition, temporary_observed,
|
111
|
-
_this = this;
|
112
|
-
|
113
|
-
association_name = this.resource.toString();
|
114
|
-
if (this.owner.observed == null) {
|
115
|
-
this.owner.observed = {};
|
116
|
-
temporary_observed = true;
|
117
|
-
}
|
118
|
-
definition = Object.defineProperty(this.owner, association_name, {
|
119
|
-
set: function(associated) {
|
120
|
-
return this.observed[association_name] = associated;
|
121
|
-
},
|
122
|
-
get: function() {
|
123
|
-
var associated, associated_id, resource;
|
114
|
+
resource: {
|
115
|
+
getter: function() {
|
116
|
+
var associated, associated_id, association_name, resource;
|
124
117
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
delete this.owner.observed;
|
118
|
+
association_name = this.resource.toString();
|
119
|
+
associated = this.owner.observed[association_name];
|
120
|
+
associated_id = this.owner.observed[association_name + '_id'];
|
121
|
+
if (!(((associated != null ? associated._id : void 0) != null) || associated_id)) {
|
122
|
+
return associated;
|
123
|
+
}
|
124
|
+
if (associated != null ? associated.sustained : void 0) {
|
125
|
+
return associated;
|
126
|
+
}
|
127
|
+
resource = model[association_name];
|
128
|
+
if (!resource) {
|
129
|
+
console.warn("descriptors.belongs_to.resource.getter: associated factory not found for model '" + association_name + "' belonging to '" + this.owner.resource + "'");
|
130
|
+
return associated;
|
131
|
+
}
|
132
|
+
associated = resource.find(associated_id || associated._id);
|
133
|
+
if (associated) {
|
134
|
+
return this.owner.observed[association_name] = associated;
|
135
|
+
}
|
136
|
+
associated || (associated = resource({
|
137
|
+
_id: associated_id
|
138
|
+
}));
|
139
|
+
associated.reload();
|
140
|
+
return this.owner.observed[association_name] = associated;
|
141
|
+
},
|
142
|
+
setter: function(associated) {
|
143
|
+
this.owner.observed[this.resource.toString()] = associated;
|
144
|
+
return this.owner.observed[this.resource.toString() + '_id'] = associated ? associated._id : null;
|
153
145
|
}
|
154
|
-
return definition;
|
155
146
|
}
|
156
147
|
}
|
157
148
|
};
|
@@ -313,8 +304,11 @@ associable = {
|
|
313
304
|
old_resource_id = this["" + resource + "_id"];
|
314
305
|
old_dirty = this.dirty;
|
315
306
|
this["" + resource + "_id"] = null;
|
316
|
-
|
317
|
-
|
307
|
+
Object.defineProperty(this, "" + resource + "_id", {
|
308
|
+
get: $.proxy(descriptors.belongs_to.resource_id.getter, association_proxy),
|
309
|
+
set: $.proxy(descriptors.belongs_to.resource_id.setter, association_proxy),
|
310
|
+
configurable: true
|
311
|
+
});
|
318
312
|
this["" + resource + "_id"] = old_resource_id;
|
319
313
|
_results.push(this.dirty = old_dirty);
|
320
314
|
}
|
@@ -322,7 +316,7 @@ associable = {
|
|
322
316
|
}
|
323
317
|
},
|
324
318
|
create_before_hooks: function(record) {
|
325
|
-
var association_proxy, definition, resource, _i, _len, _ref, _results;
|
319
|
+
var association_proxy, definition, old_resource, resource, _i, _len, _ref, _results;
|
326
320
|
|
327
321
|
definition = this;
|
328
322
|
if (definition.belongs_to) {
|
@@ -335,7 +329,12 @@ associable = {
|
|
335
329
|
parent_resource: this.resource,
|
336
330
|
owner: record
|
337
331
|
};
|
338
|
-
|
332
|
+
old_resource = this[resource];
|
333
|
+
Object.defineProperty(record, resource.toString(), {
|
334
|
+
get: $.proxy(descriptors.belongs_to.resource.getter, association_proxy),
|
335
|
+
set: $.proxy(descriptors.belongs_to.resource.setter, association_proxy)
|
336
|
+
});
|
337
|
+
_results.push(this[resource] = old_resource);
|
339
338
|
}
|
340
339
|
return _results;
|
341
340
|
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
'use strict';
|
2
|
+
var dirtyable, model, record;
|
3
|
+
|
4
|
+
dirtyable = {
|
5
|
+
ignores: ['dirty', 'resource', 'route', 'initial_route', 'after_initialize', 'before_initialize', 'parent_resource', 'nested_attributes', 'reloading', 'ready', 'saving', 'salvation', 'sustained', 'element', 'default', 'lock', 'validated', 'validation', 'errors', 'dirty'],
|
6
|
+
change: function(name) {
|
7
|
+
return dirtyable.ignores.indexOf(name) === -1;
|
8
|
+
},
|
9
|
+
descriptor: {
|
10
|
+
get: function() {
|
11
|
+
return this.observed.dirty;
|
12
|
+
},
|
13
|
+
set: function(value) {
|
14
|
+
return this.observed.dirty = value;
|
15
|
+
}
|
16
|
+
},
|
17
|
+
record: {
|
18
|
+
after_initialize: function() {
|
19
|
+
Object.defineProperty(this, 'dirty', dirtyable.descriptor);
|
20
|
+
this.observed.dirty = !!this._id;
|
21
|
+
return this.subscribe(function(added, removed, changed, past) {
|
22
|
+
return this.dirty || (this.dirty = !!Object.keys(changed).filter(dirtyable.change).length);
|
23
|
+
});
|
24
|
+
}
|
25
|
+
}
|
26
|
+
};
|
27
|
+
|
28
|
+
model = window.model;
|
29
|
+
|
30
|
+
record = window.record;
|
31
|
+
|
32
|
+
model.dirtyable = true;
|
33
|
+
|
34
|
+
record.mix(function(recordable) {
|
35
|
+
return recordable.after_initialize.push(dirtyable.record.after_initialize);
|
36
|
+
});
|
37
|
+
|
38
|
+
model.mix(function(modelable) {});
|
39
|
+
|
40
|
+
export default dirtyable;
|
@@ -14,8 +14,8 @@ queryable = {
|
|
14
14
|
}
|
15
15
|
return this.storage.store(key);
|
16
16
|
},
|
17
|
-
every: function() {
|
18
|
-
return this.storage.values();
|
17
|
+
every: function(callback) {
|
18
|
+
return callback(this.storage.values());
|
19
19
|
},
|
20
20
|
where: function() {
|
21
21
|
throw new Error('queryable.where: Not implemented yet');
|
@@ -37,7 +37,7 @@ descriptors = {
|
|
37
37
|
}
|
38
38
|
route = '/';
|
39
39
|
if (this.parent != null) {
|
40
|
-
route += "" + this.parent.route + "/" + this.parent._id + "/";
|
40
|
+
route += ("" + this.parent.route + "/" + this.parent._id) + "/";
|
41
41
|
}
|
42
42
|
if (this.resource.scope != null) {
|
43
43
|
route += this.resource.scope + '/';
|
@@ -1,4 +1,4 @@
|
|
1
|
-
var $, request;
|
1
|
+
var $, data_for, request;
|
2
2
|
|
3
3
|
$ = require('jquery');
|
4
4
|
|
@@ -17,7 +17,7 @@ module.exports = {
|
|
17
17
|
}
|
18
18
|
};
|
19
19
|
|
20
|
-
|
20
|
+
data_for = function(data) {
|
21
21
|
var param_name;
|
22
22
|
|
23
23
|
param_name = this.resource.param_name || this.resource.toString();
|
@@ -29,6 +29,11 @@ request = function(method, url, data) {
|
|
29
29
|
delete data[param_name]['id'];
|
30
30
|
delete data[param_name]['_id'];
|
31
31
|
}
|
32
|
+
return data;
|
33
|
+
};
|
34
|
+
|
35
|
+
request = function(method, url, data) {
|
36
|
+
data = data_for.call(this, data);
|
32
37
|
return $.ajax({
|
33
38
|
url: url,
|
34
39
|
data: data,
|
@@ -13,6 +13,8 @@ rest = require('./rest.js');
|
|
13
13
|
|
14
14
|
root = typeof exports !== "undefined" && exports !== null ? exports : this;
|
15
15
|
|
16
|
+
import './dirtyable.js';
|
17
|
+
|
16
18
|
util = {
|
17
19
|
model: {
|
18
20
|
map: function(records) {
|
@@ -85,7 +87,11 @@ restful = {
|
|
85
87
|
data = {};
|
86
88
|
}
|
87
89
|
old_route = this.route;
|
88
|
-
default_route =
|
90
|
+
default_route = '/';
|
91
|
+
if (this.resource.scope != null) {
|
92
|
+
default_route += this.resource.scope + '/';
|
93
|
+
}
|
94
|
+
default_route += this.resource.singular ? this.resource.name : model.pluralize(this.resource.name);
|
89
95
|
if (default_route !== this.route) {
|
90
96
|
this.route = default_route;
|
91
97
|
}
|
@@ -141,13 +147,14 @@ restful = {
|
|
141
147
|
return promise;
|
142
148
|
},
|
143
149
|
assign_attributes: function(attributes) {
|
144
|
-
var association, association_attributes, association_name, associations_attributes, attribute, message, name, singular_resource, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref, _ref1, _ref2, _results;
|
150
|
+
var association, association_attributes, association_name, associations_attributes, attribute, message, name, singular_resource, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _results;
|
145
151
|
|
146
152
|
_ref = model[this.resource.toString()].has_many;
|
147
153
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
148
154
|
association_name = _ref[_i];
|
149
|
-
associations_attributes = attributes[association_name];
|
155
|
+
associations_attributes = attributes[association_name + "_attributes"] || attributes[association_name];
|
150
156
|
delete attributes[association_name];
|
157
|
+
delete attributes[association_name + '_attributes'];
|
151
158
|
association = this[association_name];
|
152
159
|
if (association == null) {
|
153
160
|
message = "Association '" + association_name + "' not found. \n";
|
@@ -185,6 +192,16 @@ restful = {
|
|
185
192
|
this[association_name] = this["build_" + association_name](association_attributes);
|
186
193
|
}
|
187
194
|
}
|
195
|
+
_ref3 = model[this.resource.toString()].belongs_to;
|
196
|
+
for (_m = 0, _len4 = _ref3.length; _m < _len4; _m++) {
|
197
|
+
association_name = _ref3[_m];
|
198
|
+
association_attributes = (_ref4 = (_ref5 = attributes[association_name]) != null ? typeof _ref5.json === "function" ? _ref5.json() : void 0 : void 0) != null ? _ref4 : attributes[association_name];
|
199
|
+
delete attributes[association_name];
|
200
|
+
delete attributes[association_name + "_attributes"];
|
201
|
+
if (association_attributes) {
|
202
|
+
this[association_name] = this["build_" + association_name](association_attributes);
|
203
|
+
}
|
204
|
+
}
|
188
205
|
_results = [];
|
189
206
|
for (name in attributes) {
|
190
207
|
attribute = attributes[name];
|
@@ -339,11 +356,11 @@ restful = {
|
|
339
356
|
return JSON.stringify(serialized);
|
340
357
|
}
|
341
358
|
},
|
342
|
-
json: function(
|
343
|
-
var definition, json, name, nature, nested, value;
|
359
|
+
json: function(options) {
|
360
|
+
var definition, json, method, name, nature, nested, value, _ref, _ref1;
|
344
361
|
|
345
|
-
if (
|
346
|
-
|
362
|
+
if (options == null) {
|
363
|
+
options = {};
|
347
364
|
}
|
348
365
|
json = {};
|
349
366
|
definition = model[this.resource.toString()];
|
@@ -369,15 +386,15 @@ restful = {
|
|
369
386
|
console.warn("json: Tryied to serialize nested attribute '" + name + "' without serialization method!");
|
370
387
|
continue;
|
371
388
|
}
|
372
|
-
json["" + name + "_attributes"] = value.json(
|
389
|
+
json["" + name + "_attributes"] = value.json(options[name]);
|
373
390
|
} else if ((value.toJSON != null) || (value.json != null)) {
|
374
391
|
if (value.resource) {
|
375
392
|
continue;
|
376
393
|
}
|
377
394
|
if (value.json != null) {
|
378
|
-
json[name] = value.json(
|
395
|
+
json[name] = value.json(options[name]);
|
379
396
|
} else {
|
380
|
-
json[name] = value.toJSON(
|
397
|
+
json[name] = value.toJSON(options[name]);
|
381
398
|
}
|
382
399
|
} else {
|
383
400
|
continue;
|
@@ -387,6 +404,16 @@ restful = {
|
|
387
404
|
}
|
388
405
|
}
|
389
406
|
json = observable.unobserve(json);
|
407
|
+
_ref1 = (_ref = options.methods) != null ? _ref : {};
|
408
|
+
for (name in _ref1) {
|
409
|
+
value = _ref1[name];
|
410
|
+
method = this[name];
|
411
|
+
if (typeof method === 'function') {
|
412
|
+
json[name] = method();
|
413
|
+
} else {
|
414
|
+
json[name] = method;
|
415
|
+
}
|
416
|
+
}
|
390
417
|
delete json.dirty;
|
391
418
|
delete json.resource;
|
392
419
|
delete json.route;
|
@@ -60,14 +60,16 @@ scopable = {
|
|
60
60
|
fail: [],
|
61
61
|
declared: [],
|
62
62
|
fetch: function(data, done, fail) {
|
63
|
-
var deferred, scope;
|
63
|
+
var deferred, method, scope;
|
64
64
|
|
65
65
|
if (typeof data === 'function') {
|
66
66
|
done = data;
|
67
67
|
data = {};
|
68
68
|
}
|
69
69
|
scope = extend({}, this.scope.data);
|
70
|
-
observable.
|
70
|
+
for (method in observable.methods) {
|
71
|
+
delete scope[method];
|
72
|
+
}
|
71
73
|
if (scope.noned != null) {
|
72
74
|
deferred = $.Deferred();
|
73
75
|
deferred.resolveWith(this, [[]]);
|
@@ -124,7 +126,7 @@ scopable = {
|
|
124
126
|
return this.scope.fetch.call(this, data, done, fail);
|
125
127
|
},
|
126
128
|
forward_scopes_to_associations: function() {
|
127
|
-
var associated_factory, associated_resource, association, association_name, factory,
|
129
|
+
var associated_factory, associated_resource, association, association_name, factory, scope, _i, _j, _len, _len1, _ref, _ref1;
|
128
130
|
|
129
131
|
factory = model[this.resource.name];
|
130
132
|
_ref = factory.has_many;
|
@@ -144,46 +146,6 @@ scopable = {
|
|
144
146
|
association.scope(scope, associated_factory["$" + scope]);
|
145
147
|
}
|
146
148
|
}
|
147
|
-
_ref2 = factory.has_one;
|
148
|
-
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
|
149
|
-
associated_resource = _ref2[_k];
|
150
|
-
if (!model[associated_resource]) {
|
151
|
-
console.warn("Associated factory not found for associated resource: " + associated_resource);
|
152
|
-
continue;
|
153
|
-
}
|
154
|
-
_ref3 = model[associated_resource].scope.declared;
|
155
|
-
for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {
|
156
|
-
scope = _ref3[_l];
|
157
|
-
this[associated_resource][scope] = factory[scope];
|
158
|
-
}
|
159
|
-
}
|
160
|
-
if (factory.belongs_to.length) {
|
161
|
-
generate_forwarder = function(associated_resource) {
|
162
|
-
var declared_scopes;
|
163
|
-
|
164
|
-
associated_factory = model[associated_resource];
|
165
|
-
if (!associated_factory) {
|
166
|
-
return console.warn("Associated factory not found for associated resource: " + associated_resource);
|
167
|
-
}
|
168
|
-
declared_scopes = associated_factory.scope.declared;
|
169
|
-
return function() {
|
170
|
-
var _len4, _m, _results;
|
171
|
-
|
172
|
-
_results = [];
|
173
|
-
for (_m = 0, _len4 = declared_scopes.length; _m < _len4; _m++) {
|
174
|
-
scope = declared_scopes[_m];
|
175
|
-
_results.push(this[associated_resource][scope] = associated_factory[scope]);
|
176
|
-
}
|
177
|
-
return _results;
|
178
|
-
};
|
179
|
-
};
|
180
|
-
_ref4 = factory.belongs_to;
|
181
|
-
for (_m = 0, _len4 = _ref4.length; _m < _len4; _m++) {
|
182
|
-
associated_resource = _ref4[_m];
|
183
|
-
forwarder = generate_forwarder(associated_resource);
|
184
|
-
this.after("build_" + associated_resource, forwarder);
|
185
|
-
}
|
186
|
-
}
|
187
149
|
return true;
|
188
150
|
}
|
189
151
|
},
|
@@ -283,11 +245,13 @@ if (model.associable) {
|
|
283
245
|
promises.push(this.scope.fetch.call(this, data, null, scopable.record.failed));
|
284
246
|
reload = $.when.apply(jQuery, promises);
|
285
247
|
reload.done(function(records, status) {
|
286
|
-
var association_name, singular_resource, _i, _j, _len, _len1, _ref;
|
248
|
+
var association_name, create, index, singular_resource, target, _i, _j, _k, _len, _len1, _len2, _ref;
|
287
249
|
|
288
|
-
Array.prototype.splice.call(this, 0);
|
289
250
|
if (!records.length) {
|
290
|
-
|
251
|
+
if (this.length) {
|
252
|
+
Array.prototype.splice.call(this, 0);
|
253
|
+
}
|
254
|
+
return true;
|
291
255
|
}
|
292
256
|
singular_resource = model.singularize(this.resource);
|
293
257
|
for (_i = 0, _len = records.length; _i < _len; _i++) {
|
@@ -299,7 +263,16 @@ if (model.associable) {
|
|
299
263
|
delete record[association_name];
|
300
264
|
}
|
301
265
|
}
|
302
|
-
|
266
|
+
create = [];
|
267
|
+
for (index = _k = 0, _len2 = records.length; _k < _len2; index = ++_k) {
|
268
|
+
record = records[index];
|
269
|
+
if (target = this.find(record._id)) {
|
270
|
+
target.assign_attributes(record);
|
271
|
+
} else {
|
272
|
+
create.push(record);
|
273
|
+
}
|
274
|
+
}
|
275
|
+
this.add.apply(this, create);
|
303
276
|
records.splice(0);
|
304
277
|
return records.push.apply(records, this);
|
305
278
|
});
|
@@ -6,6 +6,17 @@ merge = extend.withStrategy('deep');
|
|
6
6
|
|
7
7
|
stampit = require('../../vendor/stampit');
|
8
8
|
|
9
|
+
Object.values || (Object.values = (typeof _ !== "undefined" && _ !== null ? _.values : void 0) || function(object) {
|
10
|
+
var key, value, _results;
|
11
|
+
|
12
|
+
_results = [];
|
13
|
+
for (key in object) {
|
14
|
+
value = object[key];
|
15
|
+
_results.push(value);
|
16
|
+
}
|
17
|
+
return _results;
|
18
|
+
});
|
19
|
+
|
9
20
|
storable = stampit({
|
10
21
|
store: function(keypath, value, options) {
|
11
22
|
var collection, entry, key, _i, _len;
|