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
@@ -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
- return Object.defineProperty(this.owner, association_name, {
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
- return JSON.stringify(serialized);
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 attribute, definition, json, name, value, _i, _len, _ref;
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 (!(type(value))) {
351
+ if (observable.ignores.indexOf(name) !== -1) {
340
352
  continue;
341
353
  }
342
- if (definition.belongs_to.indexOf(name) !== -1 && this.nested_attributes.indexOf(name) === -1) {
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 (value.toJSON != null) {
354
- json[name] = value.toJSON(methods[name]);
355
- } else {
356
- _ref = this.nested_attributes;
357
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
358
- attribute = _ref[_i];
359
- if (attribute === name) {
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), this.record, creation, {
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
- Object.defineProperty @owner, association_name,
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 @ when type(value)
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
- continue if definition.belongs_to.indexOf(name) != -1 and @nested_attributes.indexOf(name) == -1
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 value.toJSON?
331
-
332
- json[name] = value.toJSON(methods[name])
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
- else
355
+ # Serialize complex type values
356
+ else if value.toJSON? || value.json?
335
357
 
336
- # TODO move nested attributes to model definition
337
- # TODO and implement toJSON there
338
- for attribute in @nested_attributes when attribute == name
339
- json["#{name}_attributes"] = value.json(methods[name])
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.unobserve json
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
- creation = extend Object.create(data), @record, creation, after_initialize: after_initialize
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,15 @@
1
+ # Coverage reports
2
+
3
+ # Emacs Temporary Files
4
+ *~
5
+ *#
6
+ .*#
7
+ #*
8
+
9
+ # Eclipse
10
+ .directory
11
+ .project
12
+ .loadpath
13
+
14
+ # Mac OS X Files
15
+ .DS_*
@@ -0,0 +1 @@
1
+ ruby-2.0.0-p195
@@ -0,0 +1,13 @@
1
+ # A sample Gemfile
2
+ source "https://rubygems.org"
3
+
4
+
5
+ group :development do
6
+ # gem 'libv8'
7
+ gem 'guard'
8
+ gem 'guard-coffeescript'
9
+ gem 'guard-shell'
10
+ gem "guard-bundler"
11
+ gem "rb-fsevent", :require => false
12
+ gem "growl", "~> 1.0"
13
+ end
@@ -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
@@ -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