ende 0.3.13 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/component.json +7 -0
  3. data/lib/assets/javascripts/aura/extensions/devise.js.coffee +2 -2
  4. data/lib/assets/javascripts/aura/extensions/loader.js.coffee +13 -11
  5. data/lib/assets/javascripts/aura/extensions/mask.js.coffee +54 -40
  6. data/lib/assets/javascripts/aura/extensions/mediator.js +5 -3
  7. data/lib/assets/javascripts/aura/extensions/models.js.coffee.erb +2 -2
  8. data/lib/assets/javascripts/aura/extensions/rivets/accounting.js.coffee +7 -1
  9. data/lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee +5 -1
  10. data/lib/assets/javascripts/aura/extensions/rivets.js.coffee +47 -29
  11. data/lib/assets/javascripts/aura/extensions/routes.js.coffee +10 -5
  12. data/lib/assets/javascripts/aura/extensions/states.js.coffee +2 -2
  13. data/lib/assets/javascripts/aura/extensions/widget/eventable.js.coffee +18 -19
  14. data/lib/assets/javascripts/aura/extensions/widget/lifecycleable.js.coffee +15 -10
  15. data/lib/assets/javascripts/config/initializers/jquery.js.coffee +2 -1
  16. data/lib/assets/javascripts/config/initializers/requirejs.js.coffee +3 -4
  17. data/lib/assets/javascripts/config/initializers.js.coffee +3 -0
  18. data/lib/assets/javascripts/config/load_components.js.coffee +106 -83
  19. data/lib/assets/javascripts/ende.js.coffee +13 -4
  20. data/lib/assets/javascripts/widgets/authenticator/presenter.js.coffee +3 -2
  21. data/lib/assets/javascripts/widgets/dialog/main.js.coffee +7 -3
  22. data/lib/assets/javascripts/widgets/support/main.js.coffee +3 -4
  23. data/lib/assets/javascripts/widgets/viewer/main.js.coffee +35 -103
  24. data/lib/assets/javascripts/widgets/viewer/presenters/default.js.coffee +2 -4
  25. data/lib/ende/version.rb +1 -1
  26. data/vendor/assets/components/build.js +30877 -0
  27. data/vendor/assets/components/ende_build.js +2487 -148
  28. data/vendor/assets/components/indemma_with_none.js +30553 -0
  29. data/vendor/assets/javascripts/spin/spin.js +349 -0
  30. data/vendor/components/indefinido-indemma/.gitignore +3 -0
  31. data/vendor/components/indefinido-indemma/.ruby-gemset +1 -1
  32. data/vendor/components/indefinido-indemma/.ruby-version +1 -1
  33. data/vendor/components/indefinido-indemma/build/development.js +17 -14
  34. data/vendor/components/indefinido-indemma/build/release.js +213 -148
  35. data/vendor/components/indefinido-indemma/build/test.js +213 -148
  36. data/vendor/components/indefinido-indemma/component.json +3 -1
  37. data/vendor/components/indefinido-indemma/karma.conf.js +50 -60
  38. data/vendor/components/indefinido-indemma/lib/record/associable.js +17 -17
  39. data/vendor/components/indefinido-indemma/lib/record/persistable.js +8 -1
  40. data/vendor/components/indefinido-indemma/lib/record/queryable.js +3 -0
  41. data/vendor/components/indefinido-indemma/lib/record/resource.js +25 -45
  42. data/vendor/components/indefinido-indemma/lib/record/restfulable.js +82 -28
  43. data/vendor/components/indefinido-indemma/lib/record/scopable.js +28 -2
  44. data/vendor/components/indefinido-indemma/lib/record/storable.js +1 -1
  45. data/vendor/components/indefinido-indemma/lib/record/validatable.js +15 -23
  46. data/vendor/components/indefinido-indemma/lib/record/validations/associated.js +3 -5
  47. data/vendor/components/indefinido-indemma/lib/record/validations/confirmation.js +3 -5
  48. data/vendor/components/indefinido-indemma/lib/record/validations/cpf.js +5 -7
  49. data/vendor/components/indefinido-indemma/lib/record/validations/presence.js +3 -5
  50. data/vendor/components/indefinido-indemma/lib/record/validations/remote.js +3 -7
  51. data/vendor/components/indefinido-indemma/lib/record/validations/type.js +2 -2
  52. data/vendor/components/indefinido-indemma/lib/record/validations/validatorable.js +12 -0
  53. data/vendor/components/indefinido-indemma/package.json +9 -0
  54. data/vendor/components/indefinido-indemma/spec/record/restfulable_spec.js +12 -0
  55. data/vendor/components/indefinido-indemma/spec/record/validatable_spec.js +4 -4
  56. data/vendor/components/indefinido-indemma/spec/record/validations/associated_spec.js +2 -2
  57. data/vendor/components/indefinido-indemma/src/lib/record/associable.coffee +44 -20
  58. data/vendor/components/indefinido-indemma/src/lib/record/persistable.coffee +7 -2
  59. data/vendor/components/indefinido-indemma/src/lib/record/queryable.coffee +1 -0
  60. data/vendor/components/indefinido-indemma/src/lib/record/resource.coffee +32 -32
  61. data/vendor/components/indefinido-indemma/src/lib/record/restfulable.coffee +79 -22
  62. data/vendor/components/indefinido-indemma/src/lib/record/scopable.coffee +27 -8
  63. data/vendor/components/indefinido-indemma/src/lib/record/storable.coffee +1 -1
  64. data/vendor/components/indefinido-indemma/src/lib/record/validatable.coffee +20 -19
  65. data/vendor/components/indefinido-indemma/src/lib/record/validations/associated.coffee +3 -5
  66. data/vendor/components/indefinido-indemma/src/lib/record/validations/confirmation.coffee +2 -4
  67. data/vendor/components/indefinido-indemma/src/lib/record/validations/cpf.coffee +4 -5
  68. data/vendor/components/indefinido-indemma/src/lib/record/validations/presence.coffee +2 -5
  69. data/vendor/components/indefinido-indemma/src/lib/record/validations/remote.coffee +3 -7
  70. data/vendor/components/indefinido-indemma/src/lib/record/validations/type.coffee +2 -3
  71. data/vendor/components/indefinido-indemma/src/lib/record/validations/validatorable.coffee +5 -0
  72. data/vendor/components/indefinido-indemma/src/spec/record/restfulable_spec.coffee +8 -0
  73. data/vendor/components/indefinido-indemma/src/spec/record/validatable_spec.coffee +4 -4
  74. data/vendor/components/indefinido-indemma/src/spec/record/validations/associated_spec.coffee +2 -2
  75. metadata +9 -3
  76. data/lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee~ +0 -0
@@ -20202,26 +20202,22 @@ singular = {
20202
20202
  subscribers = {
20203
20203
  belongs_to: {
20204
20204
  foreign_key: function(resource_id) {
20205
- var associated, association_name, current_resource_id, resource, _ref;
20205
+ var association_name, current_resource_id, resource, _ref;
20206
20206
 
20207
20207
  association_name = this.resource.toString();
20208
- if (resource_id === null || resource_id === void 0) {
20208
+ if (!resource_id) {
20209
20209
  this.dirty = true;
20210
20210
  this.owner[association_name] = resource_id;
20211
20211
  return resource_id;
20212
20212
  }
20213
- current_resource_id = (_ref = this.owner[association_name]) != null ? _ref._id : void 0;
20213
+ current_resource_id = (_ref = this.owner.observed[association_name]) != null ? _ref._id : void 0;
20214
20214
  if (resource_id !== current_resource_id) {
20215
20215
  resource = model[association_name];
20216
20216
  if (!resource) {
20217
20217
  console.warn("subscribers.belongs_to.foreign_key: associated factory not found for model: " + association_name);
20218
20218
  return resource_id;
20219
20219
  }
20220
- associated = resource.find(resource_id);
20221
- associated || (associated = resource({
20222
- _id: resource_id
20223
- }));
20224
- this.owner.observed[association_name] = associated;
20220
+ this.owner.observed[association_name] = null;
20225
20221
  }
20226
20222
  return resource_id;
20227
20223
  },
@@ -20259,10 +20255,12 @@ modifiers = {
20259
20255
  return associated;
20260
20256
  }
20261
20257
  associated = resource.find(associated_id || associated._id);
20258
+ if (associated) {
20259
+ return _this.owner.observed[association_name] = associated;
20260
+ }
20262
20261
  associated || (associated = resource({
20263
20262
  _id: associated_id
20264
20263
  }));
20265
- resource.storage.store(associated._id, associated);
20266
20264
  associated.reload();
20267
20265
  return _this.owner.observed[association_name] = associated;
20268
20266
  },
@@ -20284,8 +20282,8 @@ callbacks = {
20284
20282
  for (_i = 0, _len = association_names.length; _i < _len; _i++) {
20285
20283
  association_name = association_names[_i];
20286
20284
  associations_attributes = this["" + association_name + "_attributes"];
20285
+ association = this[model.pluralize(association_name)];
20287
20286
  if (associations_attributes && associations_attributes.length) {
20288
- association = this[model.pluralize(association_name)];
20289
20287
  if (!association) {
20290
20288
  message = "has_many.nest_attributes: Association not found for " + association_name + ". \n";
20291
20289
  message += "did you set it on model declaration? \n has_many: " + association_name + " ";
@@ -20375,7 +20373,7 @@ associable = {
20375
20373
  return true;
20376
20374
  },
20377
20375
  create_after_hooks: function(definition) {
20378
- var association_name, association_proxy, old_resource_id, options, resource, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;
20376
+ var association_attributes, association_name, association_proxy, old_dirty, old_resource_id, options, resource, _i, _j, _k, _len, _len1, _len2, _name, _ref, _ref1, _ref2, _results;
20379
20377
 
20380
20378
  options = model[this.resource.name || this.resource.toString()];
20381
20379
  if (options.has_many) {
@@ -20388,6 +20386,11 @@ associable = {
20388
20386
  parent: this
20389
20387
  };
20390
20388
  association_name = model.pluralize(resource);
20389
+ association_attributes = this[association_name] || [];
20390
+ this[_name = "" + association_name + "_attributes"] || (this[_name] = []);
20391
+ if (association_attributes.length) {
20392
+ this["" + association_name + "_attributes"] = this["" + association_name + "_attributes"].concat(association_attributes);
20393
+ }
20391
20394
  this[association_name] = $.extend(association_proxy, plural);
20392
20395
  }
20393
20396
  this.after('saved', callbacks.has_many.update_association);
@@ -20423,15 +20426,12 @@ associable = {
20423
20426
  this["build_" + resource] = $.proxy(singular.build, association_proxy);
20424
20427
  this["create_" + resource] = $.proxy(singular.create, association_proxy);
20425
20428
  old_resource_id = this["" + resource + "_id"];
20429
+ old_dirty = this.dirty;
20426
20430
  this["" + resource + "_id"] = null;
20427
20431
  this.subscribe("" + resource + "_id", $.proxy(subscribers.belongs_to.foreign_key, association_proxy));
20428
20432
  this.subscribe(resource.toString(), $.proxy(subscribers.belongs_to.associated_changed, association_proxy));
20429
- this.resource_id = old_resource_id;
20430
- if (this["" + resource + "_id"] && !this[resource]) {
20431
- _results.push(this.publish("" + resource + "_id", this["" + resource + "_id"]));
20432
- } else {
20433
- _results.push(void 0);
20434
- }
20433
+ this["" + resource + "_id"] = old_resource_id;
20434
+ _results.push(this.dirty = old_dirty);
20435
20435
  }
20436
20436
  return _results;
20437
20437
  }
@@ -20506,7 +20506,14 @@ handlers = {
20506
20506
  persistable = {
20507
20507
  record: {
20508
20508
  after_initialize: function() {
20509
- return this.after('saved', handlers.store_after_saved);
20509
+ var storage;
20510
+
20511
+ if (this._id) {
20512
+ storage = model[this.resource.toString()].storage;
20513
+ return storage.store(this._id, this);
20514
+ } else {
20515
+ return this.after('saved', handlers.store_after_saved);
20516
+ }
20510
20517
  }
20511
20518
  }
20512
20519
  };
@@ -20548,7 +20555,7 @@ storable = stampit({
20548
20555
  return collection[key];
20549
20556
  } else {
20550
20557
  this.writes++;
20551
- value.sustained = true;
20558
+ value.sustained || (value.sustained = true);
20552
20559
  return collection[key] = value;
20553
20560
  }
20554
20561
  },
@@ -20585,6 +20592,9 @@ stampit = require('../../vendor/stampit');
20585
20592
  queryable = {
20586
20593
  storage: storable(),
20587
20594
  find: function(key) {
20595
+ if (!key) {
20596
+ throw new TypeError("InvalidFind: resource.find was called with a falsey value");
20597
+ }
20588
20598
  return this.storage.store(key);
20589
20599
  },
20590
20600
  all: function() {
@@ -20609,7 +20619,7 @@ model.mix(function(modelable) {
20609
20619
 
20610
20620
  });
20611
20621
  require.register("indemma/lib/record/resource.js", function(exports, require, module){
20612
- var model, resource, resourceable, stampit;
20622
+ var descriptors, model, resource, resourceable, stampit;
20613
20623
 
20614
20624
  stampit = require('../../vendor/stampit');
20615
20625
 
@@ -20636,34 +20646,11 @@ resource = stampit({
20636
20646
  return this;
20637
20647
  });
20638
20648
 
20639
- resourceable = {
20640
- pluralize: function(word, count, plural) {
20641
- if (!(word && word.length)) {
20642
- throw new TypeError("Invalid string passed to pluralize '" + word + "'");
20643
- }
20644
- if (word.indexOf('s') !== word.length - 1) {
20645
- return owl.pluralize(word, count, plural);
20646
- } else {
20647
- return word;
20648
- }
20649
- },
20650
- singularize: function(word) {
20651
- if (!(word && word.length)) {
20652
- throw new TypeError("Invalid string passed to singularize '" + word + "'");
20653
- }
20654
- if (word.lastIndexOf('s') === word.length - 1) {
20655
- return word.substring(0, word.length - 1);
20656
- } else {
20657
- return word;
20658
- }
20659
- },
20649
+ descriptors = {
20660
20650
  route: {
20661
20651
  get: function() {
20662
20652
  var route;
20663
20653
 
20664
- if (this.initial_route != null) {
20665
- return this.initial_route;
20666
- }
20667
20654
  if (typeof this.resource === 'string') {
20668
20655
  this.resource = {
20669
20656
  name: this.resource
@@ -20677,33 +20664,36 @@ resourceable = {
20677
20664
  route += this.resource.scope + '/';
20678
20665
  }
20679
20666
  route += this.resource.singular ? this.resource.name : model.pluralize(this.resource.name);
20680
- this.initial_route = route;
20681
- return route;
20667
+ return this.route = route;
20682
20668
  },
20683
- set: function(value) {
20684
- return this.initial_route = value;
20669
+ configurable: true
20670
+ }
20671
+ };
20672
+
20673
+ resourceable = {
20674
+ pluralize: function(word, count, plural) {
20675
+ if (!(word && word.length)) {
20676
+ throw new TypeError("Invalid string passed to pluralize '" + word + "'");
20677
+ }
20678
+ if (word.indexOf('s') !== word.length - 1) {
20679
+ return owl.pluralize(word, count, plural);
20680
+ } else {
20681
+ return word;
20685
20682
  }
20686
20683
  },
20687
- parent_id: {
20688
- get: function() {
20689
- if (this[this.parent_resource]) {
20690
- return this[this.parent_resource]._id;
20691
- }
20692
- },
20693
- set: function() {
20694
- return console.error('Warning changing associations throught parent_id not allowed for security and style guide purposes');
20684
+ singularize: function(word) {
20685
+ if (!(word && word.length)) {
20686
+ throw new TypeError("Invalid string passed to singularize '" + word + "'");
20687
+ }
20688
+ if (word.lastIndexOf('s') === word.length - 1) {
20689
+ return word.substring(0, word.length - 1);
20690
+ } else {
20691
+ return word;
20695
20692
  }
20696
20693
  },
20697
20694
  initialize: function() {
20698
20695
  var resource_definition, _ref;
20699
20696
 
20700
- if (this.parent_resource) {
20701
- Object.defineProperty(this, "" + this.parent_resource + "_id", {
20702
- value: resourceable.parent_id,
20703
- configurable: true,
20704
- enumerable: true
20705
- });
20706
- }
20707
20697
  resource_definition = {};
20708
20698
  if (typeof this.resource === 'string') {
20709
20699
  resource_definition = {
@@ -20716,7 +20706,7 @@ resourceable = {
20716
20706
  }
20717
20707
  resource_definition.parent = this.parent_resource;
20718
20708
  this.resource = resource(resource_definition);
20719
- return (_ref = this.route) != null ? _ref : Object.defineProperty(this, 'route', resourceable.route);
20709
+ return (_ref = this.route) != null ? _ref : Object.defineProperty(this, 'route', descriptors.route);
20720
20710
  }
20721
20711
  };
20722
20712
 
@@ -20775,7 +20765,7 @@ request = function(method, url, data) {
20775
20765
 
20776
20766
  });
20777
20767
  require.register("indemma/lib/record/restfulable.js", function(exports, require, module){
20778
- var $, merge, model, observable, record, rest, restful, type, util,
20768
+ var $, merge, model, observable, record, rest, restful, root, type, util,
20779
20769
  __slice = [].slice;
20780
20770
 
20781
20771
  merge = require('assimilate').withStrategy('deep');
@@ -20788,15 +20778,17 @@ $ = require('jquery');
20788
20778
 
20789
20779
  rest = require('./rest.js');
20790
20780
 
20781
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
20782
+
20791
20783
  util = {
20792
20784
  model: {
20793
- map: function(models) {
20794
- var model, _i, _len, _results;
20785
+ map: function(records) {
20786
+ var record, _i, _len, _results;
20795
20787
 
20796
20788
  _results = [];
20797
- for (_i = 0, _len = models.length; _i < _len; _i++) {
20798
- model = models[_i];
20799
- _results.push(this(model));
20789
+ for (_i = 0, _len = records.length; _i < _len; _i++) {
20790
+ record = records[_i];
20791
+ _results.push(this(record));
20800
20792
  }
20801
20793
  return _results;
20802
20794
  }
@@ -20828,15 +20820,15 @@ restful = {
20828
20820
  }
20829
20821
  return $.when.apply($, savings);
20830
20822
  },
20831
- all: function(conditions, callback) {
20823
+ all: function(conditions, doned, failed) {
20832
20824
  if (conditions == null) {
20833
20825
  conditions = {};
20834
20826
  }
20835
20827
  if (typeof conditions === 'function') {
20836
- callback = conditions;
20828
+ doned = conditions;
20837
20829
  conditions = {};
20838
20830
  }
20839
- return $.when(rest.get.call(this, conditions)).then(util.model.map).done(callback);
20831
+ return $.when(rest.get.call(this, conditions)).then(util.model.map).done(doned).fail(failed);
20840
20832
  },
20841
20833
  first: function(conditions, callback) {
20842
20834
  var namespaced;
@@ -20854,15 +20846,21 @@ restful = {
20854
20846
  return this.all(conditions, callback);
20855
20847
  },
20856
20848
  get: function(action, data) {
20857
- var old_route, payload, promise, resource, route;
20849
+ var default_route, old_route, payload, promise, resource;
20858
20850
 
20859
20851
  if (data == null) {
20860
20852
  data = {};
20861
20853
  }
20862
20854
  old_route = this.route;
20863
- this.route = "/" + (model.pluralize(this.resource.name));
20855
+ default_route = "/" + (model.pluralize(this.resource.name));
20856
+ if (default_route !== this.route) {
20857
+ this.route = default_route;
20858
+ }
20864
20859
  if (action) {
20865
- this.route += "/" + action;
20860
+ Object.defineProperty(this, 'route', {
20861
+ value: "" + default_route + "/" + action,
20862
+ configurable: true
20863
+ });
20866
20864
  }
20867
20865
  resource = data.resource;
20868
20866
  if (data && data.json) {
@@ -20874,13 +20872,19 @@ restful = {
20874
20872
  data[resource] = payload;
20875
20873
  }
20876
20874
  promise = rest.get.call(this, data);
20877
- route = old_route;
20875
+ Object.defineProperty(this, 'route', {
20876
+ value: old_route,
20877
+ configurable: true
20878
+ });
20878
20879
  return promise;
20879
20880
  },
20880
20881
  put: rest.put,
20881
20882
  "delete": rest["delete"]
20882
20883
  },
20883
20884
  record: {
20885
+ ready: function(callback) {
20886
+ return callback.call(this);
20887
+ },
20884
20888
  reload: function() {
20885
20889
  var data, param, params, promise, _i, _len;
20886
20890
 
@@ -20892,6 +20896,11 @@ restful = {
20892
20896
  promise = rest.get.call(this, data || {});
20893
20897
  promise.done(this.assign_attributes);
20894
20898
  promise.fail(this.failed);
20899
+ this.reloading = promise;
20900
+ this.ready = function() {
20901
+ console.warn("resource.ready was deprecated, please use resource.reloading.done");
20902
+ return promise.done.apply(promise, arguments);
20903
+ };
20895
20904
  for (_i = 0, _len = params.length; _i < _len; _i++) {
20896
20905
  param = params[_i];
20897
20906
  promise.done(param);
@@ -20899,7 +20908,7 @@ restful = {
20899
20908
  return promise;
20900
20909
  },
20901
20910
  assign_attributes: function(attributes) {
20902
- var association, association_attributes, association_name, associations_attributes, attribute, message, singular_resource, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref, _ref1, _ref2, _results;
20911
+ 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;
20903
20912
 
20904
20913
  _ref = model[this.resource.toString()].has_many;
20905
20914
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -20944,9 +20953,18 @@ restful = {
20944
20953
  }
20945
20954
  }
20946
20955
  _results = [];
20947
- for (attribute in attributes) {
20948
- if (attribute !== this[attribute]) {
20949
- _results.push(this[attribute] = attributes[attribute]);
20956
+ for (name in attributes) {
20957
+ attribute = attributes[name];
20958
+ if (attribute !== this[name]) {
20959
+ if (type(attribute) === 'object') {
20960
+ if (JSON.stringify(attribute) !== JSON.stringify(this[name])) {
20961
+ _results.push(this[name] = attributes[name]);
20962
+ } else {
20963
+ _results.push(void 0);
20964
+ }
20965
+ } else {
20966
+ _results.push(this[name] = attributes[name]);
20967
+ }
20950
20968
  }
20951
20969
  }
20952
20970
  return _results;
@@ -20967,18 +20985,23 @@ restful = {
20967
20985
  saving: false,
20968
20986
  salvation: null,
20969
20987
  save: function(doned, failed, data) {
20970
- var salvation;
20988
+ var lock, salvation;
20971
20989
 
20990
+ lock = JSON.stringify(this.json());
20972
20991
  if (this.saving) {
20973
- return this.salvation;
20992
+ if (this.lock === lock) {
20993
+ return this.salvation;
20994
+ } else {
20995
+ this.salvation.abort();
20996
+ }
20974
20997
  }
20975
- this.lock = JSON.stringify(this.json());
20998
+ this.lock = lock;
20976
20999
  if (!this.dirty) {
20977
21000
  salvation = $.Deferred().resolveWith(this, null);
20978
21001
  }
21002
+ this.saving = true;
20979
21003
  salvation || (salvation = rest[this._id ? 'put' : 'post'].call(this, data));
20980
21004
  this.salvation = salvation;
20981
- this.saving = true;
20982
21005
  salvation.done(this.saved);
20983
21006
  salvation.fail(this.failed);
20984
21007
  salvation.always(function() {
@@ -20994,8 +21017,6 @@ restful = {
20994
21017
  if (this.lock === JSON.stringify(this.json())) {
20995
21018
  this.dirty = false;
20996
21019
  delete this.lock;
20997
- } else {
20998
- return this.save();
20999
21020
  }
21000
21021
  if (data != null) {
21001
21022
  this.assign_attributes(data);
@@ -21021,8 +21042,21 @@ restful = {
21021
21042
  }
21022
21043
  payload || (payload = xhr.responseText);
21023
21044
  switch (xhr.status) {
21045
+ case 0:
21046
+ message = status || xhr.statusText;
21047
+ switch (message) {
21048
+ case 'abort':
21049
+ console.info("salvation probably aborted");
21050
+ break;
21051
+ case 'error':
21052
+ console.info("server probably unreachable");
21053
+ break;
21054
+ default:
21055
+ throw new Error('Unhandled status code for xhr');
21056
+ }
21057
+ break;
21024
21058
  case 422:
21025
- definition = model[this.resource];
21059
+ definition = model[this.resource.toString()];
21026
21060
  _ref = payload.errors;
21027
21061
  for (attribute_name in _ref) {
21028
21062
  messages = _ref[attribute_name];
@@ -21047,8 +21081,9 @@ restful = {
21047
21081
  default:
21048
21082
  message = "Fail in " + this.resource + ".save:\n";
21049
21083
  message += "Record: " + this + "\n";
21050
- message += "Status: " + status + " (" + (payload.status || xhr.status) + ")\n";
21084
+ message += "Status: " + status + " (" + (payload || xhr).status + ")\n";
21051
21085
  message += "Error : " + (payload.error || payload.message || payload);
21086
+ console.log(message);
21052
21087
  }
21053
21088
  return this.saving = false;
21054
21089
  },
@@ -21060,20 +21095,27 @@ restful = {
21060
21095
  return JSON.stringify(serialized);
21061
21096
  },
21062
21097
  json: function(methods) {
21063
- var attribute, json, name, value, _i, _len, _ref;
21098
+ var attribute, definition, json, name, value, _i, _len, _ref;
21064
21099
 
21065
21100
  if (methods == null) {
21066
21101
  methods = {};
21067
21102
  }
21068
21103
  json = {};
21104
+ definition = model[this.resource.toString()];
21069
21105
  for (name in this) {
21070
- value = this[name];
21071
- if (!(type(value) !== 'function')) {
21106
+ if (!(type(value))) {
21107
+ continue;
21108
+ }
21109
+ if (definition.belongs_to.indexOf(name) !== -1 && this.nested_attributes.indexOf(name) === -1) {
21072
21110
  continue;
21073
21111
  }
21112
+ value = this[name];
21074
21113
  if (value == null) {
21075
21114
  continue;
21076
21115
  }
21116
+ if (type(value) === 'function') {
21117
+ continue;
21118
+ }
21077
21119
  if (type(value) === 'object') {
21078
21120
  if (value.toJSON != null) {
21079
21121
  json[name] = value.toJSON(methods[name]);
@@ -21099,6 +21141,8 @@ restful = {
21099
21141
  delete json.before_initialize;
21100
21142
  delete json.parent_resource;
21101
21143
  delete json.nested_attributes;
21144
+ delete json.reloading;
21145
+ delete json.ready;
21102
21146
  delete json.saving;
21103
21147
  delete json.salvation;
21104
21148
  delete json.sustained;
@@ -21145,7 +21189,7 @@ model.associable && model.associable.mix(function(singular_association, plural_a
21145
21189
 
21146
21190
  });
21147
21191
  require.register("indemma/lib/record/scopable.js", function(exports, require, module){
21148
- var $, builders, defaults, extend, merge, model, record, rest, scopable, stampit,
21192
+ var $, builders, defaults, extend, merge, model, observable, record, rest, scopable, stampit, util,
21149
21193
  __slice = [].slice;
21150
21194
 
21151
21195
  require('./restfulable');
@@ -21156,12 +21200,29 @@ stampit = require('../../vendor/stampit');
21156
21200
 
21157
21201
  extend = require('assimilate');
21158
21202
 
21203
+ observable = require('observable').mixin;
21204
+
21159
21205
  merge = extend.withStrategy('deep');
21160
21206
 
21161
21207
  $ = require('jquery');
21162
21208
 
21163
21209
  rest = require('./rest');
21164
21210
 
21211
+ util = {
21212
+ model: {
21213
+ map: function(records) {
21214
+ var index, record, _i, _len, _results;
21215
+
21216
+ _results = [];
21217
+ for (index = _i = 0, _len = records.length; _i < _len; index = ++_i) {
21218
+ record = records[index];
21219
+ _results.push((this.build || this).call(this, record));
21220
+ }
21221
+ return _results;
21222
+ }
21223
+ }
21224
+ };
21225
+
21165
21226
  scopable = {
21166
21227
  builder: stampit().enclose(function() {
21167
21228
  return stampit.mixIn(function(name, type) {
@@ -21192,14 +21253,19 @@ scopable = {
21192
21253
  fetch: function(data, done, fail) {
21193
21254
  var deferred, scope;
21194
21255
 
21256
+ if (typeof data === 'function') {
21257
+ done = data;
21258
+ data = {};
21259
+ }
21195
21260
  scope = extend({}, this.scope.data);
21261
+ observable.unobserve(scope);
21196
21262
  if (scope.noned != null) {
21197
21263
  deferred = $.Deferred();
21198
21264
  deferred.resolveWith(this, [[]]);
21199
21265
  } else {
21200
21266
  deferred = rest.get.call(this, extend(scope, data));
21201
21267
  }
21202
- deferred.done(this.scope.then.concat(done)).fail([this.scope.fail, fail]);
21268
+ deferred.then(util.model.map).done(this.scope.then.concat([done])).fail(this.scope.fail.concat([fail]));
21203
21269
  this.scope.clear();
21204
21270
  return deferred;
21205
21271
  },
@@ -21242,6 +21308,10 @@ scopable = {
21242
21308
  return this;
21243
21309
  },
21244
21310
  fetch: function(data, done, fail) {
21311
+ if (typeof data === 'function') {
21312
+ done = data;
21313
+ data = null;
21314
+ }
21245
21315
  return this.scope.fetch.call(this, data, done, fail);
21246
21316
  },
21247
21317
  forward_scopes_to_associations: function() {
@@ -21498,10 +21568,23 @@ model.mix(function(modelable) {
21498
21568
  });
21499
21569
 
21500
21570
  });
21501
- require.register("indemma/lib/record/validations/confirmation.js", function(exports, require, module){
21502
- var composed, confirmationable, stampit, validations;
21571
+ require.register("indemma/lib/record/validations/validatorable.js", function(exports, require, module){
21572
+ var stampit;
21503
21573
 
21504
- validations = require('../validatable');
21574
+ stampit = require('../../../vendor/stampit');
21575
+
21576
+ module.exports = stampit({
21577
+ validate: function() {
21578
+ throw new Error('Composed factory must override the validate method');
21579
+ },
21580
+ validate_each: function() {
21581
+ throw new Error('Composed factory must override the validate each method');
21582
+ }
21583
+ });
21584
+
21585
+ });
21586
+ require.register("indemma/lib/record/validations/confirmation.js", function(exports, require, module){
21587
+ var composed, confirmationable, stampit;
21505
21588
 
21506
21589
  stampit = require('../../../vendor/stampit');
21507
21590
 
@@ -21513,17 +21596,15 @@ confirmationable = stampit({
21513
21596
  }
21514
21597
  });
21515
21598
 
21516
- composed = stampit.compose(validations.validatable, confirmationable);
21599
+ composed = stampit.compose(require('./validatorable'), confirmationable);
21517
21600
 
21518
21601
  composed.definition_key = 'validates_confirmation_of';
21519
21602
 
21520
- validations.manager.validators.confirmation = composed;
21603
+ module.exports = composed;
21521
21604
 
21522
21605
  });
21523
21606
  require.register("indemma/lib/record/validations/associated.js", function(exports, require, module){
21524
- var associationable, composed, stampit, validations;
21525
-
21526
- validations = require('../validatable');
21607
+ var associationable, composed, stampit;
21527
21608
 
21528
21609
  stampit = require('../../../vendor/stampit');
21529
21610
 
@@ -21546,17 +21627,15 @@ associationable = stampit({
21546
21627
  }
21547
21628
  });
21548
21629
 
21549
- composed = stampit.compose(validations.validatable, associationable);
21630
+ composed = stampit.compose(require('./validatorable'), associationable);
21550
21631
 
21551
21632
  composed.definition_key = 'validates_associated';
21552
21633
 
21553
- validations.manager.validators.association = composed;
21634
+ module.exports = composed;
21554
21635
 
21555
21636
  });
21556
21637
  require.register("indemma/lib/record/validations/presence.js", function(exports, require, module){
21557
- var composed, presenceable, stampit, validations;
21558
-
21559
- validations = require('../validatable');
21638
+ var composed, presenceable, stampit;
21560
21639
 
21561
21640
  stampit = require('../../../vendor/stampit');
21562
21641
 
@@ -21568,19 +21647,15 @@ presenceable = stampit({
21568
21647
  }
21569
21648
  });
21570
21649
 
21571
- composed = stampit.compose(validations.validatable, presenceable);
21650
+ composed = stampit.compose(require('./validatorable'), presenceable);
21572
21651
 
21573
21652
  composed.definition_key = 'validates_presence_of';
21574
21653
 
21575
- validations.manager.validators.presence = composed;
21654
+ module.exports = composed;
21576
21655
 
21577
21656
  });
21578
21657
  require.register("indemma/lib/record/validations/remote.js", function(exports, require, module){
21579
- var composed, remoteable, rest, root, stampit, validations;
21580
-
21581
- root = typeof exports !== "undefined" && exports !== null ? exports : window;
21582
-
21583
- validations = require('../validatable');
21658
+ var composed, remoteable, rest, stampit;
21584
21659
 
21585
21660
  rest = require('../rest');
21586
21661
 
@@ -21643,11 +21718,11 @@ remoteable = stampit({
21643
21718
  return this;
21644
21719
  });
21645
21720
 
21646
- composed = stampit.compose(validations.validatable, remoteable);
21721
+ composed = stampit.compose(require('./validatorable'), remoteable);
21647
21722
 
21648
21723
  composed.definition_key = 'validates_remotely';
21649
21724
 
21650
- validations.manager.validators.remote = composed;
21725
+ module.exports = composed;
21651
21726
 
21652
21727
  });
21653
21728
  require.register("indemma/lib/record/validations/type.js", function(exports, require, module){
@@ -21675,17 +21750,15 @@ typeable = stampit({
21675
21750
  }
21676
21751
  });
21677
21752
 
21678
- composed = stampit.compose(validations.validatable, typeable);
21753
+ composed = stampit.compose(require('./validatorable'), typeable);
21679
21754
 
21680
21755
  composed.definition_key = 'validates_type_of';
21681
21756
 
21682
- validations.manager.validators.type = composed;
21757
+ module.exports = composed;
21683
21758
 
21684
21759
  });
21685
21760
  require.register("indemma/lib/record/validations/cpf.js", function(exports, require, module){
21686
- var composed, cpfable, stampit, validations;
21687
-
21688
- validations = require('../validatable');
21761
+ var composed, cpfable, stampit;
21689
21762
 
21690
21763
  stampit = require('../../../vendor/stampit');
21691
21764
 
@@ -21705,7 +21778,7 @@ cpfable = stampit({
21705
21778
  d1 = 0;
21706
21779
  v = false;
21707
21780
  i = 0;
21708
- for (i = _i = 1; _i <= 9; i = ++_i) {
21781
+ for (i = _i = 0; _i <= 9; i = ++_i) {
21709
21782
  d1 += c.charAt(i) * (10 - i);
21710
21783
  }
21711
21784
  if (d1 === 0) {
@@ -21719,7 +21792,7 @@ cpfable = stampit({
21719
21792
  return false;
21720
21793
  }
21721
21794
  d1 *= 2;
21722
- for (i = _j = 1; _j <= 9; i = ++_j) {
21795
+ for (i = _j = 0; _j <= 9; i = ++_j) {
21723
21796
  d1 += c.charAt(i) * (11 - i);
21724
21797
  }
21725
21798
  d1 = 11 - (d1 % 11);
@@ -21738,19 +21811,19 @@ cpfable = stampit({
21738
21811
  }
21739
21812
  });
21740
21813
 
21741
- composed = stampit.compose(validations.validatable, cpfable);
21814
+ composed = stampit.compose(require('./validatorable'), cpfable);
21742
21815
 
21743
21816
  composed.definition_key = 'validates_cpf_format';
21744
21817
 
21745
- validations.manager.validators.cpf = composed;
21818
+ module.exports = composed;
21746
21819
 
21747
21820
  });
21748
21821
  require.register("indemma/lib/record/validatable.js", function(exports, require, module){
21749
- var errorsable, extensions, initializers, manager, messages, observable, root, stampit, type, validatable;
21822
+ var errorsable, extensions, initializers, manager, messages, observable, root, stampit, type;
21750
21823
 
21751
21824
  require('./translationable');
21752
21825
 
21753
- root = typeof exports !== "undefined" && exports !== null ? exports : window;
21826
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
21754
21827
 
21755
21828
  stampit = require('../../vendor/stampit');
21756
21829
 
@@ -21841,7 +21914,7 @@ initializers = {
21841
21914
  });
21842
21915
  this.validated = false;
21843
21916
  this.subscribe('dirty', function(value) {
21844
- return this.validated = false;
21917
+ return value && (this.validated = false);
21845
21918
  });
21846
21919
  return Object.defineProperty(this, 'valid', {
21847
21920
  get: function() {
@@ -21935,7 +22008,12 @@ extensions = {
21935
22008
  this.validation.done(doned);
21936
22009
  this.validation.fail(failed);
21937
22010
  this.validation.then(function(record) {
21938
- return record.validated = true;
22011
+ var old_dirty;
22012
+
22013
+ old_dirty = record.dirty;
22014
+ record.dirty = null;
22015
+ record.validated || (record.validated = true);
22016
+ return record.dirty = old_dirty;
21939
22017
  });
21940
22018
  return this.validation;
21941
22019
  }
@@ -21946,15 +22024,6 @@ manager = {
21946
22024
  validators: {}
21947
22025
  };
21948
22026
 
21949
- validatable = stampit({
21950
- validate: function() {
21951
- throw new Error('Composed factory must override the validate method');
21952
- },
21953
- validate_each: function() {
21954
- throw new Error('Composed factory must override the validate each method');
21955
- }
21956
- });
21957
-
21958
22027
  model.mix(function(modelable) {
21959
22028
  jQuery.extend(modelable, extensions.model);
21960
22029
  jQuery.extend(modelable.record, extensions.record);
@@ -21963,21 +22032,17 @@ model.mix(function(modelable) {
21963
22032
  return model.validators = manager.validators;
21964
22033
  });
21965
22034
 
21966
- root.validatable = validatable;
21967
-
21968
- root.manager = manager;
21969
-
21970
- require('./validations/confirmation');
22035
+ manager.validators.confirmation = require('./validations/confirmation');
21971
22036
 
21972
- require('./validations/associated');
22037
+ manager.validators.associated = require('./validations/associated');
21973
22038
 
21974
- require('./validations/presence');
22039
+ manager.validators.presence = require('./validations/presence');
21975
22040
 
21976
- require('./validations/remote');
22041
+ manager.validators.remote = require('./validations/remote');
21977
22042
 
21978
- require('./validations/type');
22043
+ manager.validators.type = require('./validations/type');
21979
22044
 
21980
- require('./validations/cpf');
22045
+ manager.validators.cpf = require('./validations/cpf');
21981
22046
 
21982
22047
  });
21983
22048
  require.register("indemma/lib/extensions/rivets.js", function(exports, require, module){