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
@@ -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