Skip to content

Commit

Permalink
added debug adapter to support ember inspector, updated http-mock and…
Browse files Browse the repository at this point in the history
… pretender
  • Loading branch information
Matthew Marcum committed Dec 10, 2014
1 parent b684ece commit 33dfcc0
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 14 deletions.
62 changes: 62 additions & 0 deletions addon/debug-adapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import Model from "./model";

export default Ember.DataAdapter.extend({

detect: function(klass) {
return klass !== Model && Model.detect(klass);
},

columnsForType: function( type ) {
var columns = [],
type = type._debugContainerKey.replace( 'model:',''),
record = this.get( 'store' )._cache._getRecords( type ).records[0];

if( record ){
Ember.keys( record.content ).forEach( function( key ){
columns.push( { name: key, desc: key });
});
}

return columns;
},

getRecords: function( type ){
var type = type._debugContainerKey.replace( 'model:','');
return this.get( 'store' )._cache._getRecords( type ).records;
},

getRecordColumnValues: function( record ){
var values = {};

if( record ){
Ember.keys( record.content ).forEach( function( key ){
values[ key ] = Ember.get( record, key );
});
}

return values;
},

observeRecord: function( record, recordUpdated ){
var releaseMethods = Ember.A(),
self = this,
keysToObserve = Ember.keys( record.content );

keysToObserve.forEach(function(key) {
var handler = function() {
recordUpdated(self.wrapRecord(record));
};
Ember.addObserver(record, key, handler);
releaseMethods.push(function() {
Ember.removeObserver(record, key, handler);
});
});

var release = function() {
releaseMethods.forEach(function(fn) { fn(); } );
};

return release;
}

});
3 changes: 3 additions & 0 deletions addon/initializers/sl-ember-store.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Store from '../store';
import AjaxAdapter from '../adapters/ajax';
import LocalstorageAdapter from '../adapters/localstorage';
import DebugAdapter from '../debug-adapter';

/**
* @module initializers
Expand All @@ -21,11 +22,13 @@ export default function( container, application ) {
namespace: container.lookup( 'application:main' ).get( 'modulePrefix' )
});

container.register( 'data-adapter:main', DebugAdapter );
container.register( 'store:main', Store );
container.register( 'adapter:ajax', AjaxAdapter );
container.register( 'adapter:localstorage', localstorageAdapter );

application.inject( 'controller', 'store', 'store:main' );
application.inject( 'route', 'store', 'store:main' );
application.inject( 'adapter', 'store', 'store:main' );
application.inject( 'data-adapter', 'store', 'store:main' );
}
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"broccoli-asset-rev": "^1.0.0",
"broccoli-ember-hbs-template-compiler": "^1.6.1",
"broccoli-static-compiler": "~0.2.1",
"connect-restreamer": "~1.0.1",
"connect-restreamer": "^1.0.1",
"ember-cli": "0.1.4",
"ember-cli-dependency-checker": "0.0.6",
"ember-cli-ic-ajax": "0.1.1",
Expand All @@ -34,7 +34,8 @@
"ember-cli-qunit": "0.1.2",
"ember-export-application-global": "^1.0.0",
"express": "^4.8.5",
"glob": "^4.0.5"
"glob": "^4.0.5",
"morgan": "^1.5.0"
},
"ember-addon": {
"configPath": "tests/dummy/config"
Expand Down
24 changes: 13 additions & 11 deletions server/index.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
// To use it create some files under `routes/`
// e.g. `server/routes/ember-hamsters.js`
//
// module.exports = function(app) {
// app.get('/ember-hamsters', function(req, res) {
// res.send('hello');
// });
// };

module.exports = function(app) {
var globSync = require('glob').sync;
var bodyParser = require('body-parser');
var mocks = globSync('./mocks/**/*.js', { cwd: __dirname }).map(require);
var proxies = globSync('./proxies/**/*.js', { cwd: __dirname }).map(require);

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
// Log proxy requests
var morgan = require('morgan');
app.use(morgan('dev'));

mocks.forEach(function(route) { route(app); });

// proxy expects a stream, but express will have turned
// the request stream into an object because bodyParser
// has run. We have to convert it back to stream:
// https://github.com/nodejitsu/node-http-proxy/issues/180
app.use(require('connect-restreamer')());
proxies.forEach(function(route) { route(app); });

};
11 changes: 10 additions & 1 deletion tests/dummy/app/initializers/pretender.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,16 @@ export function initialize(/* container, application */) {
{ "Content-Type":"application/json" },
JSON.stringify( fooRecords )
];
});
});
this.post( '/foo', function(request){
var record = JSON.parse( request.requestBody );
fooRecords[ record.id ]= record;
return [
200,
{ "Content-Type":"application/json" },
JSON.stringify( record )
];
});
});
}

Expand Down

0 comments on commit 33dfcc0

Please sign in to comment.