diff --git a/docs/configuration.md b/docs/configuration.md index d85bd6c3..578a9c6a 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -231,7 +231,7 @@ for more details. polly.configure({ persisterOptions: { rest: { - apiNamespace: '/pollyjs' + apiNamespace: '/polly' } } }); diff --git a/docs/frameworks/ember-cli.md b/docs/frameworks/ember-cli.md index 9b2b890a..35deaf4e 100644 --- a/docs/frameworks/ember-cli.md +++ b/docs/frameworks/ember-cli.md @@ -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 `/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(); + }; }; ``` diff --git a/docs/node-server/overview.md b/docs/node-server/overview.md index fbc513f3..16d66c87 100644 --- a/docs/node-server/overview.md +++ b/docs/node-server/overview.md @@ -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 @@ -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' }); ``` diff --git a/docs/persisters/rest.md b/docs/persisters/rest.md index 0f0c3cbc..d37f297a 100644 --- a/docs/persisters/rest.md +++ b/docs/persisters/rest.md @@ -77,7 +77,7 @@ option. polly.configure({ persisterOptions: { rest: { - apiNamespace: '/pollyjs' + apiNamespace: '/polly' } } }); diff --git a/packages/@pollyjs/ember/.npmignore b/packages/@pollyjs/ember/.npmignore index 6032b251..8aaec1d5 100644 --- a/packages/@pollyjs/ember/.npmignore +++ b/packages/@pollyjs/ember/.npmignore @@ -4,6 +4,7 @@ # dependencies /bower_components/ +/node_modules/ # misc /.bowerrc @@ -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/ diff --git a/packages/@pollyjs/ember/README.md b/packages/@pollyjs/ember/README.md index 1679bf15..32b80e0e 100644 --- a/packages/@pollyjs/ember/README.md +++ b/packages/@pollyjs/ember/README.md @@ -37,7 +37,7 @@ module.exports = function(defaults) { // Server Configuration Options server: { - apiNamespace: 'polly', + apiNamespace: '/polly', recordingsDir: 'recordings', recordingSizeLimit: '50mb' } diff --git a/packages/@pollyjs/ember/blueprints/@pollyjs/ember/files/config/polly.js b/packages/@pollyjs/ember/blueprints/@pollyjs/ember/files/config/polly.js new file mode 100644 index 00000000..aa0fdf29 --- /dev/null +++ b/packages/@pollyjs/ember/blueprints/@pollyjs/ember/files/config/polly.js @@ -0,0 +1,13 @@ +/* eslint-env node */ + +'use strict'; + +module.exports = function(env) { + return { + enabled: env !== 'production', + server: { + apiNamespace: '/polly', + recordingsDir: 'recordings' + } + }; +}; diff --git a/packages/@pollyjs/ember/blueprints/@pollyjs/ember/index.js b/packages/@pollyjs/ember/blueprints/@pollyjs/ember/index.js new file mode 100644 index 00000000..fab54eab --- /dev/null +++ b/packages/@pollyjs/ember/blueprints/@pollyjs/ember/index.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + description: 'Setup @pollyjs/ember', + normalizeEntityName() {} +}; diff --git a/packages/@pollyjs/ember/config/polly.js b/packages/@pollyjs/ember/config/polly.js new file mode 100644 index 00000000..7dcf9505 --- /dev/null +++ b/packages/@pollyjs/ember/config/polly.js @@ -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' + } + }; +}; diff --git a/packages/@pollyjs/ember/index.js b/packages/@pollyjs/ember/index.js index 7454f3d0..0cde6f38 100644 --- a/packages/@pollyjs/ember/index.js +++ b/packages/@pollyjs/ember/index.js @@ -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() { @@ -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); + } } }; diff --git a/packages/@pollyjs/ember/package.json b/packages/@pollyjs/ember/package.json index 8ad42852..a1dc7f4c 100644 --- a/packages/@pollyjs/ember/package.json +++ b/packages/@pollyjs/ember/package.json @@ -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", diff --git a/packages/@pollyjs/node-server/README.md b/packages/@pollyjs/node-server/README.md index cac56033..f605aaac 100644 --- a/packages/@pollyjs/node-server/README.md +++ b/packages/@pollyjs/node-server/README.md @@ -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 diff --git a/packages/@pollyjs/node-server/src/config.js b/packages/@pollyjs/node-server/src/config.js index 47df54ae..23f4f64c 100644 --- a/packages/@pollyjs/node-server/src/config.js +++ b/packages/@pollyjs/node-server/src/config.js @@ -3,5 +3,5 @@ export default { quiet: false, recordingSizeLimit: '50mb', recordingsDir: 'recordings', - apiNamespace: 'polly' + apiNamespace: '/polly' };