From 63ad8f69ae75377a9020a6fa0f5a6398cd6342b7 Mon Sep 17 00:00:00 2001
From: Ritchie Martori <skawful@gmail.com>
Date: Fri, 11 Apr 2014 11:40:53 -0700
Subject: [PATCH 1/2] Add test for remoting nested hidden properties

---
 lib/models/model.js            | 16 --------------
 test/hidden-properties.test.js | 39 +++++++++++++++++++++++++++++-----
 2 files changed, 34 insertions(+), 21 deletions(-)

diff --git a/lib/models/model.js b/lib/models/model.js
index bb59b129..fdc48f55 100644
--- a/lib/models/model.js
+++ b/lib/models/model.js
@@ -201,22 +201,6 @@ Model._getAccessTypeForMethod = function(method) {
   }
 }
 
-var superToJSON = Model.prototype.toJSON;
-Model.prototype.toJSON = function toJSON() {
-  var Model = this.constructor;
-  var obj = superToJSON.apply(this, arguments);
-  var settings = Model.definition && Model.definition.settings;
-  var hiddenProperties = settings && settings.hidden;
-
-  if(Array.isArray(hiddenProperties)) {
-    for(var i = 0; i < hiddenProperties.length; i++) {
-      delete obj[hiddenProperties[i]];
-    }
-  }
-
-  return obj;
-}
-
 // setup the initial model
 Model.setup();
 
diff --git a/test/hidden-properties.test.js b/test/hidden-properties.test.js
index 65565341..356c20f7 100644
--- a/test/hidden-properties.test.js
+++ b/test/hidden-properties.test.js
@@ -7,14 +7,28 @@ describe('hidden properties', function () {
       options: {hidden: ['secret']},
       dataSource: loopback.memory()
     });
+    var Category = this.Category = this.app.model('category', {
+      dataSource: loopback.memory()
+    });
+    Category.hasMany(Product);
     app.use(loopback.rest());
-
-    Product.create(
-      {name: 'pencil', secret: 'secret'},
-      done
-    );
+    Category.create({
+      name: 'my category'
+    }, function(err, category) {
+      category.products.create({
+        name: 'pencil',
+        secret: 'a secret'
+      }, done);
+    });
   });
 
+  afterEach(function(done) {
+    var Product = this.Product;
+    this.Category.destroyAll(function() {
+      Product.destroyAll(done);
+    });
+  })
+
   it('should hide a property remotely', function (done) {
      request(this.app)
         .get('/products')
@@ -27,4 +41,19 @@ describe('hidden properties', function () {
           done();
         });
   });
+
+  it('should hide a property of nested models', function (done) {
+    var app = this.app;
+    request(app)
+      .get('/categories?filter[include]=products')
+      .expect('Content-Type', /json/)
+      .expect(200)
+      .end(function(err, res){
+        if(err) return done(err);
+        var category = res.body[0];
+        var product = category.products[0];
+        assert.equal(product.secret, undefined);
+        done();
+      });
+  });
 });

From 37a28db01780a34bc8f7200337846250841e9d8a Mon Sep 17 00:00:00 2001
From: Ritchie Martori <skawful@gmail.com>
Date: Fri, 11 Apr 2014 12:42:59 -0700
Subject: [PATCH 2/2] Bump juggler version

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index de2512a2..3822fbd6 100644
--- a/package.json
+++ b/package.json
@@ -29,10 +29,10 @@
     "async": "~0.2.10"
   },
   "peerDependencies": {
-    "loopback-datasource-juggler": "~1.3.3"
+    "loopback-datasource-juggler": "~1.3.11"
   },
   "devDependencies": {
-    "loopback-datasource-juggler": "~1.3.3",
+    "loopback-datasource-juggler": "~1.3.11",
     "mocha": "~1.17.1",
     "strong-task-emitter": "0.0.x",
     "supertest": "~0.9.0",