Skip to content

Commit

Permalink
fix(ember): loads polly config for ember by its own module (#277)
Browse files Browse the repository at this point in the history
BREAKING CHANGE: moves location of polly configuration
  • Loading branch information
jasonmit authored Dec 11, 2019
1 parent 1cc9e80 commit 0569040
Show file tree
Hide file tree
Showing 13 changed files with 114 additions and 47 deletions.
2 changes: 1 addition & 1 deletion docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ for more details.
polly.configure({
persisterOptions: {
rest: {
apiNamespace: '/pollyjs'
apiNamespace: '/polly'
}
}
});
Expand Down
27 changes: 11 additions & 16 deletions docs/frameworks/ember-cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,20 @@ ember install @pollyjs/ember
## Configuration

Addon and [server API configuration](node-server/overview#api-configuration) can be
be specified in `ember-cli-build.js`. The default configuration options are shown
below.
be specified in `<ember app root>/config/polly.js`. The default configuration options are shown below.

```js
module.exports = function(defaults) {
const app = new EmberApp(defaults, {
pollyjs: {
// Addon Configuration Options
enabled: EmberApp.env() !== 'production',

// Server Configuration Options
server: {
apiNamespace: 'polly',
recordingsDir: 'recordings'
}
module.exports = function(env) {
return {
// Addon Configuration Options
enabled: env !== 'production',

// Server Configuration Options
server: {
apiNamespace: '/polly',
recordingsDir: 'recordings'
}
});

return app.toTree();
};
};
```

Expand Down
6 changes: 3 additions & 3 deletions docs/node-server/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ const { Server } = require('@pollyjs/node-server');
const server = new Server({
quiet: true,
port: 4000,
apiNamespace: '/pollyjs'
apiNamespace: '/polly'
});

// Add custom business logic to the express server
Expand Down Expand Up @@ -115,11 +115,11 @@ instance via the [Persister Options](persisters/rest#apinamespace)

```js
new Server({
apiNamespace: 'polly_js'
apiNamespace: '/polly'
});

registerExpressAPI(app, {
apiNamespace: 'polly_js'
apiNamespace: '/polly'
});
```

Expand Down
2 changes: 1 addition & 1 deletion docs/persisters/rest.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ option.
polly.configure({
persisterOptions: {
rest: {
apiNamespace: '/pollyjs'
apiNamespace: '/polly'
}
}
});
Expand Down
3 changes: 2 additions & 1 deletion packages/@pollyjs/ember/.npmignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

# dependencies
/bower_components/
/node_modules/

# misc
/.bowerrc
Expand All @@ -16,12 +17,12 @@
/.travis.yml
/.watchmanconfig
/bower.json
/config/ember-try.js
/ember-cli-build.js
/testem.js
/tests/
/yarn.lock
.gitkeep
/config/

# ember-try
/.node_modules.ember-try/
Expand Down
2 changes: 1 addition & 1 deletion packages/@pollyjs/ember/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ module.exports = function(defaults) {

// Server Configuration Options
server: {
apiNamespace: 'polly',
apiNamespace: '/polly',
recordingsDir: 'recordings',
recordingSizeLimit: '50mb'
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/* eslint-env node */

'use strict';

module.exports = function(env) {
return {
enabled: env !== 'production',
server: {
apiNamespace: '/polly',
recordingsDir: 'recordings'
}
};
};
6 changes: 6 additions & 0 deletions packages/@pollyjs/ember/blueprints/@pollyjs/ember/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
'use strict';

module.exports = {
description: 'Setup @pollyjs/ember',
normalizeEntityName() {}
};
14 changes: 14 additions & 0 deletions packages/@pollyjs/ember/config/polly.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/* eslint-env node */

'use strict';

module.exports = function(env) {
// See: https://netflix.github.io/pollyjs/#/frameworks/ember-cli?id=configuration
return {
enabled: env !== 'production',
server: {
apiNamespace: '/polly',
recordingsDir: 'recordings'
}
};
};
79 changes: 58 additions & 21 deletions packages/@pollyjs/ember/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,49 @@

'use strict';

const fs = require('fs');
const path = require('path');
const { registerExpressAPI, Defaults } = require('@pollyjs/node-server');
const parseArgs = require('minimist');

const { assign } = Object;
function determineEnv() {
if (process.env.EMBER_ENV) {
return process.env.EMBER_ENV;
}

let args = parseArgs(process.argv);
let env = args.e || args.env || args.environment;

// Is it "ember b -prod" or "ember build --prod" command?
if (
!env &&
(process.argv.indexOf('-prod') > -1 || process.argv.indexOf('--prod') > -1)
) {
env = 'production';
}

// Is it "ember test" or "ember t" command without explicit env specified?
if (
!env &&
(process.argv.indexOf('test') > -1 || process.argv.indexOf('t') > -1)
) {
env = 'test';
}

return env || 'development';
}

module.exports = {
name: require('./package').name,
_config: null,

init() {
// see: https://github.com/ember-cli/ember-cli/blob/725e129e62bccbf21af55b21180edb8966781f53/lib/models/addon.js#L258
this._super.init && this._super.init.apply(this, arguments);

included() {
this._super.included.apply(this, arguments);
const env = determineEnv();

this._config = this._pollyConfig();
this._config = this._pollyConfig(env);
},

treeForAddon() {
Expand All @@ -37,30 +68,36 @@ module.exports = {
`;
},

serverMiddleware(startOptions) {
this.testemMiddleware(startOptions.app);
},
_pollyConfig(env) {
// defaults
let config = {
enabled: env !== 'production',
server: {}
};

testemMiddleware(app) {
if (this._config.enabled) {
registerExpressAPI(app, this._config.server);
}
},
let configPath = path.join(this.root, 'config', 'polly.js');

_pollyConfig() {
const config = assign(
{
enabled: this.app.env !== 'production',
server: {}
},
this.app.options.pollyjs
);
if (fs.existsSync(configPath)) {
let configGenerator = require(configPath);

Object.assign(config, configGenerator(env));
}

config.server.recordingsDir = path.join(
this.app.project.root,
this.root,
config.server.recordingsDir || Defaults.recordingsDir
);

return config;
},

serverMiddleware(startOptions) {
this.testemMiddleware(startOptions.app);
},

testemMiddleware(app) {
if (this._config.enabled) {
registerExpressAPI(app, this._config.server);
}
}
};
3 changes: 2 additions & 1 deletion packages/@pollyjs/ember/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@
"@pollyjs/persister-local-storage": "^2.6.3",
"@pollyjs/persister-rest": "^2.6.3",
"ember-auto-import": "^1.2.15",
"ember-cli-babel": "^6.16.0"
"ember-cli-babel": "^6.16.0",
"minimist": "^1.2.0"
},
"devDependencies": {
"@ember/optional-features": "^0.6.3",
Expand Down
2 changes: 1 addition & 1 deletion packages/@pollyjs/node-server/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ const { Server } = require('@pollyjs/node-server');
const server = new Server({
quiet: true,
port: 4000,
apiNamespace: '/pollyjs'
apiNamespace: '/polly'
});

// Add custom business logic to the express server
Expand Down
2 changes: 1 addition & 1 deletion packages/@pollyjs/node-server/src/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ export default {
quiet: false,
recordingSizeLimit: '50mb',
recordingsDir: 'recordings',
apiNamespace: 'polly'
apiNamespace: '/polly'
};

0 comments on commit 0569040

Please sign in to comment.