diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 2aa55aef3f7..b5c6d4eeb0b 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -7,11 +7,14 @@ ## Testing +### Setup + ### Unit Tests -To run the unit tests, simply run: +First, run `npm install` at the root of the repository. To run the unit tests +(at the root or in one of the sub-packages), simply run: -``` sh +```sh $ npm test ``` diff --git a/.gitignore b/.gitignore index 7350c8fcd74..cf927442c09 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -node_modules/* -coverage/* +**/node_modules +**/coverage/* docs/json/**/*.json *.log diff --git a/.jscsrc b/.jscsrc index 9d2a5011ab7..c9551063232 100644 --- a/.jscsrc +++ b/.jscsrc @@ -21,6 +21,7 @@ }, "excludeFiles": [ "system-test/data/*", - "test/testdata/*" + "test/testdata/*", + "**/node_modules/" ] } diff --git a/.jshintignore b/.jshintignore index f4368e6349f..39b3b18d124 100644 --- a/.jshintignore +++ b/.jshintignore @@ -1,2 +1,3 @@ -system-test/data/* -test/testdata/* +**/system-test/data/* +**/test/testdata/* +**/node_modules/ diff --git a/.travis.yml b/.travis.yml index 2eaf68c511e..b172d112261 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,8 @@ addons: packages: - g++-4.8 before_install: +- npm install shelljs +- "./scripts/link" - export CXX=g++-4.8 - "$CXX --version" script: "./scripts/build.sh" diff --git a/CONTRIBUTORS b/CONTRIBUTORS index b14cbe5ad60..a3b3418ae4a 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -18,6 +18,7 @@ Burcu Dogan Gor Martsen Hector Rovira Ido Shamun +Jason Dobry Jesse Friedman Johan Euphrosine Marco Ziccardi diff --git a/README.md b/README.md index c2afed32219..10745149e14 100644 --- a/README.md +++ b/README.md @@ -26,10 +26,25 @@ This client supports the following Google Cloud Platform services: If you need support for other Google APIs, check out the [Google Node.js API Client library][googleapis]. +## Where did `gcloud-node` go? + +`gcloud-node` lives on under a new name, `google-cloud`. Your code will behave +the same, simply change your dependency: + +```sh +$ npm uninstall --save gcloud +$ npm install --save google-cloud +``` + +```diff +- var gcloud = require('gcloud'); ++ var gcloud = require('google-cloud'); +``` + ## Quick Start ```sh -$ npm install --save gcloud +$ npm install --save google-cloud ``` ## Example Applications @@ -44,7 +59,7 @@ $ npm install --save gcloud ## Authentication -With `gcloud-node` it's incredibly easy to get authenticated and start using Google's APIs. You can set your credentials on a global basis as well as on a per-API basis. See each individual API section below to see how you can auth on a per-API-basis. This is useful if you want to use different accounts for different Google Cloud services. +With `google-cloud` it's incredibly easy to get authenticated and start using Google's APIs. You can set your credentials on a global basis as well as on a per-API basis. See each individual API section below to see how you can auth on a per-API-basis. This is useful if you want to use different accounts for different Google Cloud services. ### On Google Compute Engine @@ -53,7 +68,7 @@ If you are running this client on Google Compute Engine, we handle authenticatio ``` js // Authenticating on a global basis. var projectId = process.env.GCLOUD_PROJECT; // E.g. 'grape-spaceship-123' -var gcloud = require('gcloud')({ +var gcloud = require('google-cloud')({ projectId: projectId }); @@ -78,7 +93,7 @@ If you are not running this client on Google Compute Engine, you need a Google D // Authenticating on a global basis. var projectId = process.env.GCLOUD_PROJECT; // E.g. 'grape-spaceship-123' -var gcloud = require('gcloud')({ +var gcloud = require('google-cloud')({ projectId: projectId, // The path to your key file: @@ -99,27 +114,47 @@ You can also set auth on a per-API-instance basis. The examples below show you h - [API Documentation][gcloud-bigquery-docs] - [Official Documentation][cloud-bigquery-docs] -#### Preview +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var bigquery = gcloud.bigquery; +``` + +#### Using the BigQuery API module + +``` +$ npm install --save @google-cloud/bigquery +``` ```js -var gcloud = require('gcloud'); +var bigquery = require('@google-cloud/bigquery'); +``` + +#### Preview +```js // Authenticating on a per-API-basis. You don't need to do this if you auth on a // global basis (see Authentication section above). -var bigquery = gcloud.bigquery({ + +var bigqueryClient = bigquery({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json' }); // Access an existing dataset and table. -var schoolsDataset = bigquery.dataset('schools'); +var schoolsDataset = bigqueryClient.dataset('schools'); var schoolsTable = schoolsDataset.table('schoolsData'); // Import data into a table. schoolsTable.import('/local/file.json', function(err, job) {}); // Get results from a query job. -var job = bigquery.job('job-id'); +var job = bigqueryClient.job('job-id'); // Use a callback. job.getQueryResults(function(err, rows) {}); @@ -136,21 +171,41 @@ job.getQueryResults().on('data', function(row) {}); *You may need to [create a cluster][cloud-bigtable-cluster] to use the Google Cloud Bigtable API with your project.* -#### Preview +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var bigtable = gcloud.bigtable; +``` + +#### Using the Cloud Bigtable API module + +``` +$ npm install --save @google-cloud/bigtable +``` ```js -var gcloud = require('gcloud'); +var bigtable = require('@google-cloud/bigtable'); +``` + +#### Preview +```js // Authenticating on a per-API-basis. You don't need to do this if you auth on a // global basis (see Authentication section above). -var bigtable = gcloud.bigtable({ + +var bigtableClient = bigtable({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json', zone: 'my-zone', cluster: 'my-cluster' }); -var table = bigtable.table('prezzy'); +var table = bigtableClient.table('prezzy'); table.getRows(function(err, rows) {}); @@ -188,22 +243,41 @@ row.save('follows:gwashington', 1, function(err) { *Follow the [activation instructions][cloud-datastore-activation] to use the Google Cloud Datastore API with your project.* -#### Preview +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var datastore = gcloud.datastore; +``` + +#### Using the Cloud Datastore API module + +``` +$ npm install --save @google-cloud/datastore +``` ```js -var gcloud = require('gcloud'); +var datastore = require('@google-cloud/datastore'); +``` +#### Preview + +```js // Authenticating on a per-API-basis. You don't need to do this if you auth on a // global basis (see Authentication section above). -var datastore = gcloud.datastore({ +var datastoreClient = datastore({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json' }); -var key = datastore.key(['Product', 'Computer']); +var key = datastoreClient.key(['Product', 'Computer']); -datastore.get(key, function(err, entity) { +datastoreClient.get(key, function(err, entity) { console.log(err || entity); }); @@ -214,9 +288,9 @@ var blogPostData = { isDraft: true }; -var blogPostKey = datastore.key('BlogPost'); +var blogPostKey = datastoreClient.key('BlogPost'); -datastore.save({ +datastoreClient.save({ key: blogPostKey, data: blogPostData }, function(err) { @@ -224,7 +298,7 @@ datastore.save({ // with it, such as an update. blogPostData.isDraft = false; - datastore.save({ + datastoreClient.save({ key: blogPostKey, data: blogPostData }, function(err) { @@ -241,26 +315,45 @@ datastore.save({ - [API Documentation][gcloud-dns-docs] - [Official Documentation][cloud-dns-docs] -#### Preview +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var dns = gcloud.dns; +``` + +#### Using the Cloud DNS API module + +``` +$ npm install --save @google-cloud/dns +``` ```js -var gcloud = require('gcloud'); +var dns = require('@google-cloud/dns'); +``` +#### Preview + +```js // Authenticating on a per-API-basis. You don't need to do this if you auth on a // global basis (see Authentication section above). -var dns = gcloud.dns({ +var dnsClient = dns({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json' }); // Create a managed zone. -dns.createZone('my-new-zone', { +dnsClient.createZone('my-new-zone', { dnsName: 'my-domain.com.' }, function(err, zone) {}); // Reference an existing zone. -var zone = dns.zone('my-existing-zone'); +var zone = dnsClient.zone('my-existing-zone'); // Create an NS record. var nsRecord = zone.record('ns', { @@ -281,21 +374,40 @@ zone.export('/zonefile.zone', function(err) {}); - [API Documentation][gcloud-pubsub-docs] - [Official Documentation][cloud-pubsub-docs] -#### Preview +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var pubsub = gcloud.pubsub; +``` + +#### Using the Cloud Pub/Sub API module + +``` +$ npm install --save @google-cloud/pubsub +``` ```js -var gcloud = require('gcloud'); +var pubsub = require('@google-cloud/pubsub'); +``` +#### Preview + +```js // Authenticating on a per-API-basis. You don't need to do this if you // auth on a global basis (see Authentication section above). -var pubsub = gcloud.pubsub({ +var pubsubClient = pubsub({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json' }); // Reference a topic that has been previously created. -var topic = pubsub.topic('my-topic'); +var topic = pubsubClient.topic('my-topic'); // Publish a message to the topic. topic.publish({ @@ -326,16 +438,35 @@ topic.subscribe('subscription-name', options, function(err, subscription) { - [API Documentation][gcloud-storage-docs] - [Official Documentation][cloud-storage-docs] +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var storage = gcloud.storage; +``` + +#### Using the Cloud Storage API module + +``` +$ npm install --save @google-cloud/storage +``` + +```js +var storage = require('@google-cloud/storage'); +``` + #### Preview ```js var fs = require('fs'); -var gcloud = require('gcloud'); - // Authenticating on a per-API-basis. You don't need to do this if you auth on a // global basis (see Authentication section above). -var gcs = gcloud.storage({ +var gcs = storage({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json' }); @@ -378,15 +509,34 @@ localReadStream.pipe(remoteWriteStream); - [API Documentation][gcloud-compute-docs] - [Official Documentation][cloud-compute-docs] -#### Preview +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var compute = gcloud.compute; +``` + +#### Using the Compute Engine API module + +``` +$ npm install --save @google-cloud/compute +``` ```js -var gcloud = require('gcloud'); +var compute = require('@google-cloud/compute'); +``` +#### Preview + +```js // Authenticating on a per-API-basis. You don't need to do this if you auth on a // global basis (see Authentication section above). -var gce = gcloud.compute({ +var gce = compute({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json' }); @@ -412,28 +562,47 @@ zone.createVM(name, { os: 'ubuntu' }, function(err, vm, operation) { - [API Documentation][gcloud-prediction-docs] - [Official Documentation][cloud-prediction-docs] -#### Preview +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var prediction = gcloud.prediction; +``` + +#### Using the Prediction API module + +``` +$ npm install --save @google-cloud/prediction +``` ```js -var gcloud = require('gcloud'); +var prediction = require('@google-cloud/prediction'); +``` +#### Preview + +```js // Authenticating on a per-API-basis. You don't need to do this if you auth on a // global basis (see Authentication section above). -var prediction = gcloud.prediction({ +var predictionClient = prediction({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json' }); // Get all of the trained models in your project. -prediction.getModels(function(err, models) { +predictionClient.getModels(function(err, models) { if (!err) { // `models` is an array of Model objects. } }); // Reference an existing trained model. -var model = prediction.model('my-existing-model'); +var model = predictionClient.model('my-existing-model'); // Train a model. model.train('english', 'Hello from your friends at Google!', function(err) {}); @@ -462,28 +631,48 @@ model.query('Hello', function(err, results) { - [API Documentation][gcloud-translate-docs] - [Official Documentation][cloud-translate-docs] +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var translate = gcloud.translate; +``` + +#### Using the Translate API module + +``` +$ npm install --save @google-cloud/translate +``` + +```js +var translate = require('@google-cloud/translate'); +``` + **An API key is required for Translate.** See [Identifying your application to Google][api-key-howto]. #### Preview ```js -var gcloud = require('gcloud'); - // Authenticating on a per-API-basis. You don't need to do this if you auth on a // global basis (see Authentication section above). -var translate = gcloud.translate({ + +var translateClient = translate({ key: 'API Key' }); // Translate a string of text. -translate.translate('Hello', 'es', function(err, translation) { +translateClient.translate('Hello', 'es', function(err, translation) { if (!err) { // translation = 'Hola' } }); // Detect a language from a string of text. -translate.detect('Hello', function(err, results) { +translateClient.detect('Hello', function(err, results) { if (!err) { // results = { // language: 'en', @@ -494,7 +683,7 @@ translate.detect('Hello', function(err, results) { }); // Get a list of supported languages. -translate.getLanguages(function(err, languages) { +translateClient.getLanguages(function(err, languages) { if (!err) { // languages = [ // 'af', @@ -514,26 +703,47 @@ translate.getLanguages(function(err, languages) { - [API Documentation][gcloud-logging-docs] - [Official Documentation][cloud-logging-docs] +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var logging = gcloud.logging; +``` + +#### Using the Cloud Logging API module + +``` +$ npm install --save @google-cloud/logging +``` + +```js +var logging = require('@google-cloud/logging'); +``` + +#### Preview + ```js // Authenticating on a global-basis. You can also authenticate on a per-API- // basis (see Authentication section above). -var gcloud = require('gcloud')({ +var loggingClient = logging({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json' }); -var logging = gcloud.logging(); - // Create a sink using a Bucket as a destination. -var gcs = gcloud.storage(); +var gcs = storage(); -logging.createSink('my-new-sink', { +loggingClient.createSink('my-new-sink', { destination: gcs.bucket('my-sink') }, function(err, sink) {}); // Write a critical entry to a log. -var syslog = logging.log('syslog'); +var syslog = loggingClient.log('syslog'); var resource = { type: 'gce_instance', @@ -550,7 +760,7 @@ var entry = syslog.entry(resource, { syslog.critical(entry, function(err) {}); // Get all entries in your project. -logging.getEntries(function(err, entries) { +loggingClient.getEntries(function(err, entries) { if (!err) { // `entries` contains all of the entries from the logs in your project. } @@ -565,28 +775,47 @@ logging.getEntries(function(err, entries) { - [API Documentation][gcloud-resource-docs] - [Official Documentation][cloud-resource-docs] -#### Preview +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var resource = gcloud.resource; +``` + +#### Using the Cloud Resource Manager API module + +``` +$ npm install --save @google-cloud/resource +``` ```js -var gcloud = require('gcloud'); +var resource = require('@google-cloud/resource'); +``` +#### Preview + +```js // Authorizing on a per-API-basis. You don't need to do this if you auth on a // global basis (see Authorization section above). -var resource = gcloud.resource({ +var resourceClient = resource({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json' }); // Get all of the projects you maintain. -resource.getProjects(function(err, projects) { +resourceClient.getProjects(function(err, projects) { if (!err) { // `projects` contains all of your projects. } }); // Get the metadata from your project. (defaults to `my-project`) -var project = resource.project(); +var project = resourceClient.project(); project.getMetadata(function(err, metadata) { // `metadata` describes your project. @@ -601,21 +830,40 @@ project.getMetadata(function(err, metadata) { - [API Documentation][gcloud-vision-docs] - [Official Documentation][cloud-vision-docs] -#### Preview +#### Using the all-in-one module + +``` +$ npm install --save google-cloud +``` + +```js +var gcloud = require('google-cloud'); +var vision = gcloud.vision; +``` + +#### Using the Cloud Vision API module + +``` +$ npm install --save @google-cloud/vision +``` ```js -var gcloud = require('gcloud'); +var vision = require('@google-cloud/vision'); +``` +#### Preview + +```js // Authorizing on a per-API-basis. You don't need to do this if you auth on a // global basis (see Authorization section above). -var vision = gcloud.vision({ +var visionClient = vision({ projectId: 'my-project', keyFilename: '/path/to/keyfile.json' }); // Read the text from an image. -vision.detectText('./image.jpg', function(err, text) { +visionClient.detectText('./image.jpg', function(err, text) { // text = [ // 'This was text found in the image', // 'This was more text found in the image' @@ -623,7 +871,7 @@ vision.detectText('./image.jpg', function(err, text) { }); // Detect faces and the locations of their features in an image. -vision.detectFaces('./image.jpg', function(err, faces) { +visionClient.detectFaces('./image.jpg', function(err, faces) { // faces = [ // { // angles: {pan,tilt,roll}, diff --git a/docs/authentication.md b/docs/authentication.md index 95ee0362e1d..7c26d1481ec 100644 --- a/docs/authentication.md +++ b/docs/authentication.md @@ -1,6 +1,6 @@ -## With `gcloud-node` +## With `google-cloud` -With `gcloud-node` it's incredibly easy to get authenticated and start using Google's APIs. You can set your credentials on a global basis as well as on a per-API basis. See each individual API section below to see how you can auth on a per-API-basis. This is useful if you want to use different accounts for different Google Cloud services. +With `google-cloud` it's incredibly easy to get authenticated and start using Google's APIs. You can set your credentials on a global basis as well as on a per-API basis. See each individual API section below to see how you can auth on a per-API-basis. This is useful if you want to use different accounts for different Google Cloud services. ```js var config = { @@ -8,7 +8,7 @@ var config = { keyFilename: '/path/to/keyfile.json' }; -var gcloud = require('gcloud')(config); +var gcloud = require('google-cloud')(config); ``` ### The `config` object diff --git a/docs/home.html b/docs/home.html index b7e26499341..d8aefe0f3d4 100644 --- a/docs/home.html +++ b/docs/home.html @@ -92,7 +92,7 @@

Example: Upload a file to Cloud Storage

// Authentication is automatic // inside Google Compute Engine. -var gcloud = require('gcloud')({ +var gcloud = require('google-cloud')({ projectId: 'grape-spaceship-123' }); @@ -106,7 +106,7 @@

Example: Upload a file to Cloud Storage

});
-var gcloud = require('gcloud')({ +var gcloud = require('google-cloud')({ projectId: 'grape-spaceship-123', // Specify a path to a keyfile. keyFilename: '/path/to/keyfile.json' diff --git a/docs/overview.html b/docs/overview.html index b2295633a8f..4ecf3cf568b 100644 --- a/docs/overview.html +++ b/docs/overview.html @@ -1,8 +1,8 @@

- First, install gcloud-node with npm and require it into your project: + First, install google-cloud with npm and require it into your project:

-
$ npm install --save gcloud
-
var gcloud = require('gcloud');
+
$ npm install --save google-cloud
+
var gcloud = require('google-cloud');

If you are running your app on Google Compute Engine, you won't need to worry about supplying connection configuration options to gcloud-node— we figure that out for you.

@@ -11,10 +11,10 @@

// Compute Engine -var gcloud = require('gcloud'); +var gcloud = require('google-cloud'); // Elsewhere -var gcloud = require('gcloud')({ +var gcloud = require('google-cloud')({ projectId: 'project-id', keyFilename: '/path/to/keyfile.json' });
diff --git a/package.json b/package.json index 94d99688c4c..a12c6606606 100644 --- a/package.json +++ b/package.json @@ -1,133 +1,9 @@ { - "name": "gcloud", - "version": "0.37.0", - "author": "Google Inc.", - "description": "Google Cloud APIs Client Library for Node.js", - "contributors": [ - { - "name": "Burcu Dogan", - "email": "jbd@google.com" - }, - { - "name": "Johan Euphrosine", - "email": "proppy@google.com" - }, - { - "name": "Patrick Costello", - "email": "pcostell@google.com" - }, - { - "name": "Ryan Seys", - "email": "ryan@ryanseys.com" - }, - { - "name": "Silvano Luciani", - "email": "silvano@google.com" - }, - { - "name": "Stephen Sawchuk", - "email": "sawchuk@gmail.com" - } - ], - "main": "./lib/index", - "files": [ - "lib/", - "AUTHORS", - "CONTRIBUTORS", - "COPYING" - ], - "repository": "googlecloudplatform/gcloud-node", - "keywords": [ - "google apis client", - "google api client", - "google apis", - "google api", - "google", - "google cloud platform", - "google cloud", - "cloud", - "google bigquery", - "google big query", - "bigquery", - "big query", - "google cloud datastore", - "cloud datastore", - "datastore", - "google cloud dns", - "cloud dns", - "dns", - "google cloud pub/sub", - "google cloud pubsub", - "cloud pub/sub", - "cloud pubsub", - "pub/sub", - "pubsub", - "google cloud storage", - "cloud storage", - "gcs", - "google compute engine", - "compute engine", - "computeengine", - "gce", - "google app engine", - "app engine", - "google appengine", - "appengine", - "gae", - "google prediction", - "prediction", - "google translate", - "translate", - "google cloud logging", - "cloud logging", - "logging", - "google cloud resource manager", - "cloud resource manager", - "resource manager", - "google cloud vision", - "cloud vision", - "vision" - ], - "dependencies": { - "JSONStream": "^1.0.7", - "array-uniq": "^1.0.2", - "arrify": "^1.0.0", - "async": "^1.4.2", - "concat-stream": "^1.5.0", - "create-error-class": "^2.0.1", - "dns-zonefile": "0.1.18", - "dot-prop": "^2.4.0", - "duplexify": "^3.2.0", - "ent": "^2.2.0", - "extend": "^3.0.0", - "gce-images": "^0.3.0", - "gcs-resumable-upload": "^0.7.1", - "google-auto-auth": "^0.2.4", - "google-proto-files": "^0.2.1", - "grpc": "^0.14.1", - "hash-stream-validation": "^0.2.1", - "is": "^3.0.1", - "lodash.flatten": "^4.2.0", - "methmeth": "^1.0.0", - "mime-types": "^2.0.8", - "modelo": "^4.2.0", - "node-int64": "^0.4.0", - "once": "^1.3.1", - "prop-assign": "^1.0.0", - "propprop": "^0.3.0", - "pumpify": "^1.3.3", - "request": "^2.70.0", - "retry-request": "^1.3.0", - "rgb-hex": "^1.0.0", - "split-array-stream": "^1.0.0", - "stream-events": "^1.0.1", - "string-format-obj": "^1.0.0", - "through2": "^2.0.0" - }, + "name": "gcloud-node", + "private": "true", "devDependencies": { - "bytebuffer": "^4.0.0", + "async": "^1.4.2", "coveralls": "^2.11.2", - "deep-strict-equal": "^0.1.0", "dox": "0.8.1", "glob": "^5.0.9", "globby": "^3.0.1", @@ -136,19 +12,22 @@ "jshint": "^2.9.1", "mitm": "^1.1.0", "mocha": "^2.1.0", - "mockery-next": "^2.0.1-3", - "multiline": "^1.0.2", - "node-uuid": "^1.4.3", - "normalize-newline": "^2.0.0", - "sinon": "^1.17.4", - "tmp": "0.0.27" + "propprop": "^0.3.0", + "proxyquire": "^1.7.10", + "request": "^2.70.0", + "shelljs": "^0.7.3", + "string-format-obj": "^1.0.0", + "through2": "^2.0.0" }, "scripts": { + "link-modules": "node ./scripts/link", + "install-module-dependencies": "node ./scripts/install", + "postinstall": "npm run link-modules && npm run install-module-dependencies", "docs": "node ./scripts/docs.js", - "lint": "jshint lib/ system-test/ test/ && jscs lib/ system-test/ test/", - "test": "npm run docs && mocha test/docs.js test/index.js test/*/*.js", - "system-test": "mocha system-test/*.js --no-timeouts --bail", - "coveralls": "istanbul cover _mocha --report lcovonly -- --no-timeouts --bail test/**/*.js -R spec && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage" + "lint": "jshint packages/ system-test/ test/ && jscs packages/ system-test/ test/", + "test": "npm run docs && mocha test/docs.js packages/*/test/*.js", + "system-test": "mocha packages/*/system-test/*.js --no-timeouts --bail", + "coveralls": "istanbul cover _mocha --report lcovonly -- --no-timeouts --bail packages/*/test/*.js -R spec && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage" }, "license": "Apache-2.0", "engines": { diff --git a/packages/bigquery/package.json b/packages/bigquery/package.json new file mode 100644 index 00000000000..896d2e8cc88 --- /dev/null +++ b/packages/bigquery/package.json @@ -0,0 +1,79 @@ +{ + "name": "@google-cloud/bigquery", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google BigQuery Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google bigquery", + "bigquery" + ], + "dependencies": { + "arrify": "^1.0.0", + "duplexify": "^3.2.0", + "extend": "^3.0.0", + "@google-cloud/common": "^0.1.0", + "@google-cloud/storage": "^0.1.0", + "is": "^3.0.1", + "modelo": "^4.2.0", + "stream-events": "^1.0.1", + "string-format-obj": "^1.0.0" + }, + "devDependencies": { + "async": "^1.4.2", + "mocha": "^2.1.0", + "node-uuid": "^1.4.3", + "propprop": "^0.3.0", + "proxyquire": "^1.7.10" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/bigquery/dataset.js b/packages/bigquery/src/dataset.js similarity index 98% rename from lib/bigquery/dataset.js rename to packages/bigquery/src/dataset.js index 10b2be5085b..1fc0a741d1f 100644 --- a/lib/bigquery/dataset.js +++ b/packages/bigquery/src/dataset.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); var nodeutil = require('util'); @@ -28,13 +29,13 @@ var nodeutil = require('util'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:bigquery/table} @@ -55,7 +56,7 @@ var Table = require('./table.js'); * @constructor * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * * var bigquery = gcloud.bigquery({ * keyFilename: '/path/to/keyfile.json', diff --git a/lib/bigquery/index.js b/packages/bigquery/src/index.js similarity index 97% rename from lib/bigquery/index.js rename to packages/bigquery/src/index.js index 7bf66708c70..40069f43f56 100644 --- a/lib/bigquery/index.js +++ b/packages/bigquery/src/index.js @@ -20,9 +20,11 @@ 'use strict'; +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); var nodeutil = require('util'); +var PKG = require('../package.json'); /** * @type {module:bigquery/dataset} @@ -40,13 +42,13 @@ var Job = require('./job.js'); * @type {module:common/service} * @private */ -var Service = require('../common/service.js'); +var Service = common.Service; /** * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:bigquery/table} @@ -58,7 +60,7 @@ var Table = require('./table.js'); * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * The examples below will demonstrate the different usage patterns your app may @@ -78,7 +80,7 @@ var util = require('../common/util.js'); * @param {object} options - [Configuration object](#/docs). * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'my-project' * }); @@ -103,7 +105,8 @@ function BigQuery(options) { var config = { baseUrl: 'https://www.googleapis.com/bigquery/v2', - scopes: ['https://www.googleapis.com/auth/bigquery'] + scopes: ['https://www.googleapis.com/auth/bigquery'], + userAgent: PKG.name + '/' + PKG.version }; Service.call(this, config, options); @@ -644,4 +647,8 @@ BigQuery.prototype.startQuery = function(options, callback) { */ streamRouter.extend(BigQuery, ['getDatasets', 'getJobs', 'query']); +BigQuery.Dataset = Dataset; +BigQuery.Job = Job; +BigQuery.Table = Table; + module.exports = BigQuery; diff --git a/lib/bigquery/job.js b/packages/bigquery/src/job.js similarity index 98% rename from lib/bigquery/job.js rename to packages/bigquery/src/job.js index 43742e8c683..62ee49efe62 100644 --- a/lib/bigquery/job.js +++ b/packages/bigquery/src/job.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var events = require('events'); var is = require('is'); var modelo = require('modelo'); @@ -28,13 +29,13 @@ var modelo = require('modelo'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -65,7 +66,7 @@ var util = require('../common/util.js'); * @constructor * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/bigquery/table.js b/packages/bigquery/src/table.js similarity index 99% rename from lib/bigquery/table.js rename to packages/bigquery/src/table.js index 11a308dfe6c..d32199c60be 100644 --- a/lib/bigquery/table.js +++ b/packages/bigquery/src/table.js @@ -34,25 +34,25 @@ var streamEvents = require('stream-events'); * @type {module:storage/file} * @private */ -var File = require('../storage/file.js'); +var File = require('@google-cloud/storage').File; /** * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; /** * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = require('@google-cloud/common').streamRouter; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = require('@google-cloud/common').util; /** * The file formats accepted by BigQuery. @@ -87,7 +87,7 @@ var FORMATS = { * @constructor * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/system-test/bigquery.js b/packages/bigquery/system-test/bigquery.js similarity index 97% rename from system-test/bigquery.js rename to packages/bigquery/system-test/bigquery.js index 4e0ff7323da..13fad8874fb 100644 --- a/system-test/bigquery.js +++ b/packages/bigquery/system-test/bigquery.js @@ -18,16 +18,15 @@ var assert = require('assert'); var async = require('async'); -var Dataset = require('../lib/bigquery/dataset'); -var Table = require('../lib/bigquery/table'); -var env = require('./env'); +var Dataset = require('../src/dataset.js'); +var Table = require('../src/table.js'); +var env = require('../../../system-test/env.js'); var fs = require('fs'); -var Job = require('../lib/bigquery/job'); +var Job = require('../src/job.js'); var uuid = require('node-uuid'); -var gcloud = require('../lib')(env); -var bigquery = gcloud.bigquery(); -var storage = gcloud.storage(); +var bigquery = require('../')(env); +var storage = require('@google-cloud/storage')(env); describe('BigQuery', function() { var DATASET_ID = ('gcloud_test_dataset_temp' + uuid.v1()).replace(/-/g, '_'); @@ -102,7 +101,7 @@ describe('BigQuery', function() { var maxApiCalls = 1; var numRequestsMade = 0; - var bigquery = gcloud.bigquery(); + var bigquery = require('../')(env); bigquery.interceptors.push({ request: function(reqOpts) { diff --git a/system-test/data/kitten-test-data.json b/packages/bigquery/system-test/data/kitten-test-data.json similarity index 100% rename from system-test/data/kitten-test-data.json rename to packages/bigquery/system-test/data/kitten-test-data.json diff --git a/test/bigquery/dataset.js b/packages/bigquery/test/dataset.js similarity index 95% rename from test/bigquery/dataset.js rename to packages/bigquery/test/dataset.js index 8fd00a829ee..ca8632d123a 100644 --- a/test/bigquery/dataset.js +++ b/packages/bigquery/test/dataset.js @@ -19,11 +19,11 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; var extended = false; var fakeStreamRouter = { @@ -57,23 +57,13 @@ describe('BigQuery/Dataset', function() { var ds; before(function() { - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Dataset = proxyquire('../src/dataset.js', { + '@google-cloud/common': { + streamRouter: fakeStreamRouter, + ServiceObject: FakeServiceObject + } }); - - Dataset = require('../../lib/bigquery/dataset'); - Table = require('../../lib/bigquery/table'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); + Table = require('../src/table.js'); }); beforeEach(function() { diff --git a/test/bigquery/index.js b/packages/bigquery/test/index.js similarity index 96% rename from test/bigquery/index.js rename to packages/bigquery/test/index.js index 8ca870d452d..6b358c20dfa 100644 --- a/test/bigquery/index.js +++ b/packages/bigquery/test/index.js @@ -19,12 +19,13 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); -var Service = require('../../lib/common/service.js'); -var util = require('../../lib/common/util.js'); -var Table = require('../../lib/bigquery/table.js'); +var Service = require('@google-cloud/common').Service; +var util = require('@google-cloud/common').util; +var Table = require('../src/table.js'); +var PKG = require('../package.json'); var fakeUtil = extend({}, util); @@ -68,20 +69,14 @@ describe('BigQuery', function() { var bq; before(function() { - mockery.registerMock('../../lib/bigquery/table.js', FakeTable); - mockery.registerMock('../../lib/common/service.js', FakeService); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false - }); - BigQuery = require('../../lib/bigquery/index.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); + BigQuery = proxyquire('../', { + './table.js': FakeTable, + '@google-cloud/common': { + Service: FakeService, + streamRouter: fakeStreamRouter, + util: fakeUtil + } + }); }); beforeEach(function() { @@ -122,6 +117,7 @@ describe('BigQuery', function() { assert.deepEqual(calledWith.scopes, [ 'https://www.googleapis.com/auth/bigquery' ]); + assert.strictEqual(calledWith.userAgent, PKG.name + '/' + PKG.version); }); }); diff --git a/test/bigquery/job.js b/packages/bigquery/test/job.js similarity index 95% rename from test/bigquery/job.js rename to packages/bigquery/test/job.js index fd979b601d2..24b83b4c8e5 100644 --- a/test/bigquery/job.js +++ b/packages/bigquery/test/job.js @@ -17,12 +17,12 @@ 'use strict'; var assert = require('assert'); -var mockery = require('mockery-next'); var is = require('is'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -49,23 +49,12 @@ describe('BigQuery/Job', function() { var job; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Job = proxyquire('../src/job.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject, + util: fakeUtil + } }); - - Job = require('../../lib/bigquery/job.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/bigquery/table.js b/packages/bigquery/test/table.js similarity index 97% rename from test/bigquery/table.js rename to packages/bigquery/test/table.js index 4ac86e855ff..3cc64960f75 100644 --- a/test/bigquery/table.js +++ b/packages/bigquery/test/table.js @@ -19,14 +19,14 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); var nodeutil = require('util'); var prop = require('propprop'); +var proxyquire = require('proxyquire'); var stream = require('stream'); -var File = require('../../lib/storage/file.js'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var File = require('@google-cloud/storage').File; +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeFile(a, b) { this.request = util.noop; @@ -97,20 +97,17 @@ describe('BigQuery/Table', function() { var tableOverrides = {}; before(function() { - mockery.registerMock('../../lib/storage/file.js', FakeFile); - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Table = proxyquire('../src/table.js', { + '@google-cloud/storage': { + File: FakeFile + }, + '@google-cloud/common': { + ServiceObject: FakeServiceObject, + streamRouter: fakeStreamRouter, + util: fakeUtil + } }); - Table = require('../../lib/bigquery/table.js'); - var tableCached = extend(true, {}, Table); // Override all util methods, allowing them to be mocked. Overrides are @@ -127,11 +124,6 @@ describe('BigQuery/Table', function() { }); }); - after(function() { - mockery.deregisterAll(); - mockery.disable(); - }); - beforeEach(function() { makeWritableStreamOverride = null; tableOverrides = {}; @@ -801,7 +793,7 @@ describe('BigQuery/Table', function() { }); describe('import', function() { - var FILEPATH = require.resolve('../testdata/testfile.json'); + var FILEPATH = require.resolve('./testdata/testfile.json'); var FILE = new FakeFile({ name: 'bucket-name', makeReq_: util.noop diff --git a/test/testdata/testfile.json b/packages/bigquery/test/testdata/testfile.json similarity index 100% rename from test/testdata/testfile.json rename to packages/bigquery/test/testdata/testfile.json diff --git a/packages/bigtable/package.json b/packages/bigtable/package.json new file mode 100644 index 00000000000..1ad44711976 --- /dev/null +++ b/packages/bigtable/package.json @@ -0,0 +1,85 @@ +{ + "name": "@google-cloud/bigtable", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google Cloud Bigtable Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google bigtable", + "bigtable" + ], + "dependencies": { + "arrify": "^1.0.0", + "concat-stream": "^1.5.0", + "create-error-class": "^2.0.1", + "dot-prop": "^2.4.0", + "extend": "^3.0.0", + "@google-cloud/common": "^0.1.0", + "google-proto-files": "^0.2.1", + "is": "^3.0.1", + "lodash.flatten": "^4.2.0", + "node-int64": "^0.4.0", + "prop-assign": "^1.0.0", + "pumpify": "^1.3.3", + "string-format-obj": "^1.0.0", + "through2": "^2.0.0" + }, + "devDependencies": { + "async": "^1.4.2", + "methmeth": "^1.0.0", + "mocha": "^2.1.0", + "node-uuid": "^1.4.3", + "proxyquire": "^1.7.10", + "sinon": "^1.17.4" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/bigtable/family.js b/packages/bigtable/src/family.js similarity index 98% rename from lib/bigtable/family.js rename to packages/bigtable/src/family.js index 0ac04d31da3..2851062214a 100644 --- a/lib/bigtable/family.js +++ b/packages/bigtable/src/family.js @@ -14,12 +14,13 @@ * limitations under the License. */ - /*! +/*! * @module bigtable/family */ 'use strict'; +var common = require('@google-cloud/common'); var createErrorClass = require('create-error-class'); var nodeutil = require('util'); var is = require('is'); @@ -36,7 +37,7 @@ var FamilyError = createErrorClass('FamilyError', function(name) { * @type {module:common/grpcServiceObject} * @private */ -var GrpcServiceObject = require('../common/grpc-service-object.js'); +var GrpcServiceObject = common.GrpcServiceObject; /** * Create a Family object to interact with your table column families. @@ -45,7 +46,7 @@ var GrpcServiceObject = require('../common/grpc-service-object.js'); * @alias module:bigtable/family * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * * var bigtable = gcloud.bigtable({ * keyFilename: '/path/to/keyfile.json', diff --git a/lib/bigtable/filter.js b/packages/bigtable/src/filter.js similarity index 100% rename from lib/bigtable/filter.js rename to packages/bigtable/src/filter.js diff --git a/lib/bigtable/index.js b/packages/bigtable/src/index.js similarity index 97% rename from lib/bigtable/index.js rename to packages/bigtable/src/index.js index 0b79dfc5e46..a2deaefb08a 100644 --- a/lib/bigtable/index.js +++ b/packages/bigtable/src/index.js @@ -20,11 +20,13 @@ 'use strict'; +var common = require('@google-cloud/common'); var googleProtoFiles = require('google-proto-files'); var is = require('is'); var nodeutil = require('util'); var format = require('string-format-obj'); var extend = require('extend'); +var PKG = require('../package.json'); /** * @type {module:bigtable/table} @@ -36,13 +38,13 @@ var Table = require('./table.js'); * @type {module:common/grpcService} * @private */ -var GrpcService = require('../common/grpc-service.js'); +var GrpcService = common.GrpcService; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * Interact with @@ -65,7 +67,7 @@ var util = require('../common/util.js'); * cluster resides. * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'my-project' * }); @@ -304,7 +306,8 @@ function Bigtable(options) { scopes: [ 'https://www.googleapis.com/auth/bigtable.admin', 'https://www.googleapis.com/auth/bigtable.data' - ] + ], + userAgent: PKG.name + '/' + PKG.version }; GrpcService.call(this, config, options); @@ -471,4 +474,6 @@ Bigtable.prototype.table = function(name) { return new Table(this, name); }; +Bigtable.Table = Table; + module.exports = Bigtable; diff --git a/lib/bigtable/mutation.js b/packages/bigtable/src/mutation.js similarity index 99% rename from lib/bigtable/mutation.js rename to packages/bigtable/src/mutation.js index c367fb40d37..d80925b68f1 100644 --- a/lib/bigtable/mutation.js +++ b/packages/bigtable/src/mutation.js @@ -14,7 +14,7 @@ * limitations under the License. */ - /*! +/*! * @module bigtable/mutation */ diff --git a/lib/bigtable/row.js b/packages/bigtable/src/row.js similarity index 99% rename from lib/bigtable/row.js rename to packages/bigtable/src/row.js index 3514a8ba634..5043355b4ee 100644 --- a/lib/bigtable/row.js +++ b/packages/bigtable/src/row.js @@ -14,12 +14,13 @@ * limitations under the License. */ - /*! +/*! * @module bigtable/row */ 'use strict'; +var common = require('@google-cloud/common'); var nodeutil = require('util'); var is = require('is'); var extend = require('extend'); @@ -44,7 +45,7 @@ var Filter = require('./filter.js'); * @type {module:common/grpcServiceObject} * @private */ -var GrpcServiceObject = require('../common/grpc-service-object.js'); +var GrpcServiceObject = common.GrpcServiceObject; /** * @private @@ -60,7 +61,7 @@ var RowError = createErrorClass('RowError', function(row) { * @alias module:bigtable/row * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * * var bigtable = gcloud.bigtable({ * keyFilename: '/path/to/keyfile.json', diff --git a/lib/bigtable/table.js b/packages/bigtable/src/table.js similarity index 99% rename from lib/bigtable/table.js rename to packages/bigtable/src/table.js index 48c7beeac5c..794caa45ce3 100644 --- a/lib/bigtable/table.js +++ b/packages/bigtable/src/table.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var nodeutil = require('util'); var arrify = require('arrify'); var is = require('is'); @@ -57,7 +58,7 @@ var Mutation = require('./mutation.js'); * @type {module:common/grpcServiceObject} * @private */ -var GrpcServiceObject = require('../common/grpc-service-object.js'); +var GrpcServiceObject = common.GrpcServiceObject; /** * Create a Table object to interact with a Google Cloud Bigtable table. @@ -68,7 +69,7 @@ var GrpcServiceObject = require('../common/grpc-service-object.js'); * @param {string} name - Name of the table. * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * * var bigtable = gcloud.bigtable({ * keyFilename: '/path/to/keyfile.json', diff --git a/system-test/bigtable.js b/packages/bigtable/system-test/bigtable.js similarity index 98% rename from system-test/bigtable.js rename to packages/bigtable/system-test/bigtable.js index 76a776a748d..678f5d8bcf9 100644 --- a/system-test/bigtable.js +++ b/packages/bigtable/system-test/bigtable.js @@ -20,13 +20,14 @@ var assert = require('assert'); var async = require('async'); var uuid = require('node-uuid'); var exec = require('methmeth'); +var extend = require('extend'); -var Table = require('../lib/bigtable/table.js'); -var Family = require('../lib/bigtable/family.js'); -var Row = require('../lib/bigtable/row.js'); +var Table = require('../src/table.js'); +var Family = require('../src/family.js'); +var Row = require('../src/row.js'); -var env = require('./env.js'); -var gcloud = require('../lib/index.js')(env); +var env = require('../../../system-test/env.js'); +var Bigtable = require('../'); var clusterName = process.env.GCLOUD_TESTS_BIGTABLE_CLUSTER; var zoneName = process.env.GCLOUD_TESTS_BIGTABLE_ZONE; @@ -38,10 +39,10 @@ function generateTableName() { } (isTestable ? describe : describe.skip)('Bigtable', function() { - var bigtable = gcloud.bigtable({ + var bigtable = new Bigtable(extend({}, env, { cluster: clusterName, zone: zoneName - }); + })); var TABLE_NAME = generateTableName(); var TABLE = bigtable.table(TABLE_NAME); diff --git a/test/bigtable/family.js b/packages/bigtable/test/family.js similarity index 94% rename from test/bigtable/family.js rename to packages/bigtable/test/family.js index ab5a58e6434..ab1ece06bc5 100644 --- a/test/bigtable/family.js +++ b/packages/bigtable/test/family.js @@ -17,12 +17,12 @@ 'use strict'; var assert = require('assert'); -var mockery = require('mockery-next'); var nodeutil = require('util'); -var util = require('../../lib/common/util.js'); +var proxyquire = require('proxyquire'); +var util = require('@google-cloud/common').util; var format = require('string-format-obj'); -var GrpcServiceObject = require('../../lib/common/grpc-service-object.js'); +var GrpcServiceObject = require('@google-cloud/common').GrpcServiceObject; function FakeGrpcServiceObject() { this.calledWith_ = arguments; @@ -49,23 +49,14 @@ describe('Bigtable/Family', function() { var FamilyError; before(function() { - mockery.registerMock( - '../../lib/common/grpc-service-object', FakeGrpcServiceObject); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Family = proxyquire('../src/family.js', { + '@google-cloud/common': { + GrpcServiceObject: FakeGrpcServiceObject + } }); - - Family = require('../../lib/bigtable/family.js'); FamilyError = Family.FamilyError; }); - after(function() { - mockery.deregisterAll(); - mockery.disable(); - }); - beforeEach(function() { family = new Family(TABLE, FAMILY_NAME); }); diff --git a/test/bigtable/filter.js b/packages/bigtable/test/filter.js similarity index 98% rename from test/bigtable/filter.js rename to packages/bigtable/test/filter.js index 201aaf78e53..294d52ed215 100644 --- a/test/bigtable/filter.js +++ b/packages/bigtable/test/filter.js @@ -17,7 +17,7 @@ 'use strict'; var assert = require('assert'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var sinon = require('sinon').sandbox.create(); var FakeMutation = { @@ -32,19 +32,9 @@ describe('Bigtable/Filter', function() { var filter; before(function() { - mockery.registerMock('../../lib/bigtable/mutation', FakeMutation); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Filter = proxyquire('../src/filter', { + './mutation.js': FakeMutation }); - - Filter = require('../../lib/bigtable/filter'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/bigtable/index.js b/packages/bigtable/test/index.js similarity index 93% rename from test/bigtable/index.js rename to packages/bigtable/test/index.js index eab807c68f5..f0c540c22ae 100644 --- a/test/bigtable/index.js +++ b/packages/bigtable/test/index.js @@ -17,16 +17,17 @@ 'use strict'; var assert = require('assert'); -var mockery = require('mockery-next'); var nodeutil = require('util'); var extend = require('extend'); var googleProtoFiles = require('google-proto-files'); var format = require('string-format-obj'); +var proxyquire = require('proxyquire'); var sinon = require('sinon').sandbox.create(); -var GrpcService = require('../../lib/common/grpc-service.js'); -var util = require('../../lib/common/util.js'); -var Table = require('../../lib/bigtable/table.js'); +var GrpcService = require('@google-cloud/common').GrpcService; +var util = require('@google-cloud/common').util; +var Table = require('../src/table.js'); +var PKG = require('../package.json'); var fakeUtil = extend({}, util); @@ -57,21 +58,13 @@ describe('Bigtable', function() { var bigtable; before(function() { - mockery.registerMock('../../lib/common/grpc-service.js', FakeGrpcService); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.registerMock('../../lib/bigtable/table.js', FakeTable); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Bigtable = proxyquire('../', { + '@google-cloud/common': { + GrpcService: FakeGrpcService, + util: fakeUtil + }, + './table.js': FakeTable }); - - Bigtable = require('../../lib/bigtable/index.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); afterEach(function() { @@ -153,6 +146,7 @@ describe('Bigtable', function() { 'https://www.googleapis.com/auth/bigtable.admin', 'https://www.googleapis.com/auth/bigtable.data' ]); + assert.strictEqual(calledWith.userAgent, PKG.name + '/' + PKG.version); }); }); diff --git a/test/bigtable/mutation.js b/packages/bigtable/test/mutation.js similarity index 99% rename from test/bigtable/mutation.js rename to packages/bigtable/test/mutation.js index 4d2a8f8b63c..b87cc187382 100644 --- a/test/bigtable/mutation.js +++ b/packages/bigtable/test/mutation.js @@ -17,7 +17,7 @@ 'use strict'; var assert = require('assert'); -var Mutation = require('../../lib/bigtable/mutation.js'); +var Mutation = require('../src/mutation.js'); var Int64 = require('node-int64'); var sinon = require('sinon').sandbox.create(); diff --git a/test/bigtable/row.js b/packages/bigtable/test/row.js similarity index 97% rename from test/bigtable/row.js rename to packages/bigtable/test/row.js index fbfc7711f87..6c2184ff5dc 100644 --- a/test/bigtable/row.js +++ b/packages/bigtable/test/row.js @@ -17,12 +17,12 @@ 'use strict'; var assert = require('assert'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); var sinon = require('sinon').sandbox.create(); -var GrpcServiceObject = require('../../lib/common/grpc-service-object.js'); -var Mutation = require('../../lib/bigtable/mutation.js'); +var GrpcServiceObject = require('@google-cloud/common').GrpcServiceObject; +var Mutation = require('../src/mutation.js'); function FakeGrpcServiceObject() { this.calledWith_ = arguments; @@ -69,22 +69,13 @@ describe('Bigtable/Row', function() { var row; before(function() { - mockery.registerMock( - '../../lib/common/grpc-service-object', FakeGrpcServiceObject); - mockery.registerMock('../../lib/bigtable/mutation', FakeMutation); - mockery.registerMock('../../lib/bigtable/filter', FakeFilter); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Row = proxyquire('../src/row.js', { + '@google-cloud/common': { + GrpcServiceObject: FakeGrpcServiceObject + }, + './mutation.js': FakeMutation, + './filter.js': FakeFilter }); - - Row = require('../../lib/bigtable/row.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/bigtable/table.js b/packages/bigtable/test/table.js similarity index 96% rename from test/bigtable/table.js rename to packages/bigtable/test/table.js index b85b3d6f8d5..6e6297e9a13 100644 --- a/test/bigtable/table.js +++ b/packages/bigtable/test/table.js @@ -17,17 +17,17 @@ 'use strict'; var assert = require('assert'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); var pumpify = require('pumpify'); var through = require('through2'); var Stream = require('stream').PassThrough; var sinon = require('sinon').sandbox.create(); -var GrpcServiceObject = require('../../lib/common/grpc-service-object.js'); -var Family = require('../../lib/bigtable/family.js'); -var Mutation = require('../../lib/bigtable/mutation.js'); -var Row = require('../../lib/bigtable/row.js'); +var GrpcServiceObject = require('@google-cloud/common').GrpcServiceObject; +var Family = require('../src/family.js'); +var Mutation = require('../src/mutation.js'); +var Row = require('../src/row.js'); function FakeGrpcServiceObject() { this.calledWith_ = arguments; @@ -88,25 +88,16 @@ describe('Bigtable/Table', function() { var table; before(function() { - mockery.registerMock( - '../../lib/common/grpc-service-object', FakeGrpcServiceObject); - mockery.registerMock('../../lib/bigtable/family', FakeFamily); - mockery.registerMock('../../lib/bigtable/mutation', FakeMutation); - mockery.registerMock('../../lib/bigtable/filter', FakeFilter); - mockery.registerMock('pumpify', pumpify); - mockery.registerMock('../../lib/bigtable/row', FakeRow); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Table = proxyquire('../src/table.js', { + '@google-cloud/common': { + GrpcServiceObject: FakeGrpcServiceObject + }, + './family.js': FakeFamily, + './mutation.js': FakeMutation, + './filter.js': FakeFilter, + pumpify: pumpify, + './row.js': FakeRow }); - - Table = require('../../lib/bigtable/table.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/packages/common/package.json b/packages/common/package.json new file mode 100644 index 00000000000..637b8a937aa --- /dev/null +++ b/packages/common/package.json @@ -0,0 +1,76 @@ +{ + "name": "@google-cloud/common", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Common components for Google Cloud APIs Node.js Client Libraries", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "dependencies": { + "array-uniq": "^1.0.2", + "arrify": "^1.0.0", + "concat-stream": "^1.5.0", + "create-error-class": "^2.0.1", + "dot-prop": "^2.4.0", + "duplexify": "^3.2.0", + "ent": "^2.2.0", + "extend": "^3.0.0", + "google-auto-auth": "^0.2.4", + "google-proto-files": "^0.2.1", + "grpc": "^0.14.1", + "is": "^3.0.1", + "methmeth": "^1.0.0", + "request": "^2.70.0", + "retry-request": "^1.3.0", + "split-array-stream": "^1.0.0", + "stream-events": "^1.0.1", + "string-format-obj": "^1.0.0", + "through2": "^2.0.0" + }, + "devDependencies": { + "methmeth": "^1.0.0", + "mocha": "^2.1.0", + "node-uuid": "^1.4.3", + "proxyquire": "^1.7.10", + "sinon": "^1.17.4" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/common/grpc-service-object.js b/packages/common/src/grpc-service-object.js similarity index 100% rename from lib/common/grpc-service-object.js rename to packages/common/src/grpc-service-object.js diff --git a/lib/common/grpc-service.js b/packages/common/src/grpc-service.js similarity index 100% rename from lib/common/grpc-service.js rename to packages/common/src/grpc-service.js diff --git a/packages/common/src/index.js b/packages/common/src/index.js new file mode 100644 index 00000000000..bbf84eb20cc --- /dev/null +++ b/packages/common/src/index.js @@ -0,0 +1,51 @@ +/*! + * Copyright 2016 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @type {module:common/grpcServiceObject} + * @private + */ +exports.GrpcServiceObject = require('./grpc-service-object.js'); + +/** + * @type {module:common/grpcService} + * @private + */ +exports.GrpcService = require('./grpc-service.js'); + +/** + * @type {module:common/serviceObject} + * @private + */ +exports.ServiceObject = require('./service-object.js'); + +/** + * @type {module:common/service} + * @private + */ +exports.Service = require('./service.js'); + +/** + * @type {module:common/streamRouter} + * @private + */ +exports.streamRouter = require('./stream-router.js'); + +/** + * @type {module:common/util} + * @private + */ +exports.util = require('./util.js'); diff --git a/lib/common/service-object.js b/packages/common/src/service-object.js similarity index 100% rename from lib/common/service-object.js rename to packages/common/src/service-object.js diff --git a/lib/common/service.js b/packages/common/src/service.js similarity index 100% rename from lib/common/service.js rename to packages/common/src/service.js diff --git a/lib/common/stream-router.js b/packages/common/src/stream-router.js similarity index 100% rename from lib/common/stream-router.js rename to packages/common/src/stream-router.js diff --git a/lib/common/util.js b/packages/common/src/util.js similarity index 96% rename from lib/common/util.js rename to packages/common/src/util.js index f5dc4769691..92d72c749ab 100644 --- a/lib/common/util.js +++ b/packages/common/src/util.js @@ -38,11 +38,11 @@ var streamEvents = require('stream-events'); var through = require('through2'); var uniq = require('array-uniq'); -/** @const {object} gcloud-node's package.json file. */ -var PKG = require('../../package.json'); +/** @const {object} @google-cloud/common's package.json file. */ +var PKG = require('../package.json'); /** @const {string} User agent. */ -var USER_AGENT = 'gcloud-node/' + PKG.version; +var USER_AGENT = PKG.name + '/' + PKG.version; var util = module.exports; @@ -353,7 +353,7 @@ function makeAuthenticatedRequestFactory(config) { return; } - authenticatedReqOpts = util.decorateRequest(authenticatedReqOpts); + authenticatedReqOpts = util.decorateRequest(authenticatedReqOpts, config); if (options && options.onAuthenticated) { options.onAuthenticated(null, authenticatedReqOpts); @@ -461,11 +461,16 @@ util.makeRequest = makeRequest; * Decorate the options about to be made in a request. * * @param {object} reqOpts - The options to be passed to `request`. + * @param {object} config - Service config. * @return {object} reqOpts - The decorated reqOpts. */ -function decorateRequest(reqOpts) { +function decorateRequest(reqOpts, config) { + config = config || {}; reqOpts.headers = reqOpts.headers || {}; - reqOpts.headers['User-Agent'] = USER_AGENT; + + var headers = reqOpts.headers; + var userAgent = headers['User-Agent'] || headers['user-agent']; + headers['User-Agent'] = userAgent || config.userAgent || USER_AGENT; if (is.object(reqOpts.qs)) { delete reqOpts.qs.autoPaginate; @@ -542,7 +547,9 @@ util.extendGlobalConfig = extendGlobalConfig; function normalizeArguments(globalContext, localConfig, options) { options = options || {}; - var config = util.extendGlobalConfig(globalContext.config_, localConfig); + var globalConfig = globalContext && globalContext.config_; + + var config = util.extendGlobalConfig(globalConfig, localConfig); if (options.projectIdRequired !== false && !config.projectId) { throw util.missingProjectIdError; diff --git a/test/common/grpc-service-object.js b/packages/common/test/grpc-service-object.js similarity index 92% rename from test/common/grpc-service-object.js rename to packages/common/test/grpc-service-object.js index 4907fa84b4e..36557768152 100644 --- a/test/common/grpc-service-object.js +++ b/packages/common/test/grpc-service-object.js @@ -18,7 +18,7 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); function FakeServiceObject() { this.calledWith_ = arguments; @@ -33,22 +33,9 @@ describe('GrpcServiceObject', function() { var REQ_OPTS = {}; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + GrpcServiceObject = proxyquire('../src/grpc-service-object.js', { + './service-object.js': FakeServiceObject }); - - GrpcServiceObject = require('../../lib/common/grpc-service-object.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/common/grpc-service.js b/packages/common/test/grpc-service.js similarity index 98% rename from test/common/grpc-service.js rename to packages/common/test/grpc-service.js index d9be9c26a69..f0000f28e89 100644 --- a/test/common/grpc-service.js +++ b/packages/common/test/grpc-service.js @@ -21,13 +21,13 @@ var extend = require('extend'); var googleProtoFiles = require('google-proto-files'); var grpc = require('grpc'); var is = require('is'); -var mockery = require('mockery-next'); var path = require('path'); +var proxyquire = require('proxyquire'); var retryRequest = require('retry-request'); var through = require('through2'); var sinon = require('sinon').sandbox.create(); -var util = require('../../lib/common/util.js'); +var util = require('../src/index.js').util; function FakeService() { this.calledWith_ = arguments; @@ -101,25 +101,15 @@ describe('GrpcService', function() { fakeGoogleProtoFiles[CONFIG.service][CONFIG.apiVersion] = PROTO_FILE_PATH; before(function() { - mockery.registerMock('google-proto-files', fakeGoogleProtoFiles); - mockery.registerMock('retry-request', fakeRetryRequest); - mockery.registerMock('grpc', fakeGrpc); - mockery.registerMock('../../lib/common/service.js', FakeService); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + GrpcService = proxyquire('../src/grpc-service.js', { + 'google-proto-files': fakeGoogleProtoFiles, + 'retry-request': fakeRetryRequest, + grpc: fakeGrpc, + './service.js': FakeService }); - - GrpcService = require('../../lib/common/grpc-service.js'); GrpcServiceCached = extend(true, {}, GrpcService); }); - after(function() { - mockery.deregisterAll(); - mockery.disable(); - }); - beforeEach(function() { retryRequestOverride = null; diff --git a/test/common/service-object.js b/packages/common/test/service-object.js similarity index 99% rename from test/common/service-object.js rename to packages/common/test/service-object.js index 2bb1198214b..e7d0a45cff4 100644 --- a/test/common/service-object.js +++ b/packages/common/test/service-object.js @@ -19,8 +19,8 @@ var assert = require('assert'); var extend = require('extend'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('../src/index.js').ServiceObject; +var util = require('../src/index.js').util; describe('ServiceObject', function() { var serviceObject; diff --git a/test/common/service.js b/packages/common/test/service.js similarity index 96% rename from test/common/service.js rename to packages/common/test/service.js index 0df57abd6bb..fb39422d1d1 100644 --- a/test/common/service.js +++ b/packages/common/test/service.js @@ -18,9 +18,9 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire').noPreserveCache(); -var util = require('../../lib/common/util.js'); +var util = require('../src/index.js').util; var makeAuthenticatedRequestFactoryCache = util.makeAuthenticatedRequestFactory; var makeAuthenticatedRequestFactoryOverride; @@ -50,19 +50,9 @@ describe('Service', function() { }; before(function() { - mockery.registerMock('../../lib/common/util.js', util); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Service = proxyquire('../src/service.js', { + './util.js': util }); - - Service = require('../../lib/common/service.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/common/stream-router.js b/packages/common/test/stream-router.js similarity index 97% rename from test/common/stream-router.js rename to packages/common/test/stream-router.js index d6bb8f21315..9cb7d4ca7a3 100644 --- a/test/common/stream-router.js +++ b/packages/common/test/stream-router.js @@ -18,13 +18,13 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var stream = require('stream'); var through = require('through2'); var uuid = require('node-uuid'); -var streamRouter = require('../../lib/common/stream-router.js'); -var util = require('../../lib/common/util.js'); +var streamRouter = require('../src/index.js').streamRouter; +var util = require('../src/index.js').util; var overrides = {}; @@ -64,14 +64,9 @@ describe('streamRouter', function() { function FakeClass() {} before(function() { - mockery.registerMock('../../lib/common/util.js', util); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + streamRouter = proxyquire('../src/stream-router.js', { + './util.js': util }); - - streamRouter = require('../../lib/common/stream-router.js'); override('streamRouter', streamRouter); }); @@ -82,8 +77,6 @@ describe('streamRouter', function() { after(function() { resetOverrides(); - mockery.deregisterAll(); - mockery.disable(); }); describe('extend', function() { diff --git a/test/common/util.js b/packages/common/test/util.js similarity index 96% rename from test/common/util.js rename to packages/common/test/util.js index 7b9bb69f44d..a50356945fb 100644 --- a/test/common/util.js +++ b/packages/common/test/util.js @@ -22,7 +22,7 @@ var extend = require('extend'); var format = require('string-format-obj'); var googleAuth = require('google-auto-auth'); var is = require('is'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var request = require('request'); var retryRequest = require('retry-request'); var stream = require('stream'); @@ -60,15 +60,12 @@ describe('common/util', function() { var utilOverrides = {}; before(function() { - mockery.registerMock('google-auto-auth', fakeGoogleAutoAuth); - mockery.registerMock('request', fakeRequest); - mockery.registerMock('retry-request', fakeRetryRequest); - mockery.registerMock('stream-events', fakeStreamEvents); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false - }); - util = require('../../lib/common/util'); + util = proxyquire('../src/util', { + 'google-auto-auth': fakeGoogleAutoAuth, + request: fakeRequest, + 'retry-request': fakeRetryRequest, + 'stream-events': fakeStreamEvents + }); var utilCached = extend(true, {}, util); // Override all util methods, allowing them to be mocked. Overrides are @@ -87,11 +84,6 @@ describe('common/util', function() { duplexify = require('duplexify'); }); - after(function() { - mockery.deregisterAll(); - mockery.disable(); - }); - beforeEach(function() { googleAutoAuthOverride = null; requestOverride = null; @@ -1161,9 +1153,47 @@ describe('common/util', function() { }); describe('decorateRequest', function() { + it('should keep user agent', function() { + var USER_AGENT = 'test/v1'; + + var reqOpts = { + a: 'b', + c: 'd', + headers: { + 'User-Agent': USER_AGENT + } + }; + + var expectedReqOpts = extend({}, reqOpts, { + headers: { + 'User-Agent': USER_AGENT + } + }); + + var decoratedReqOpts = util.decorateRequest(reqOpts); + assert.deepEqual(decoratedReqOpts, expectedReqOpts); + }); + it('should add the user agent', function() { - var PKG = require('../../package.json'); - var USER_AGENT = 'gcloud-node/' + PKG.version; + var USER_AGENT = 'test/v2'; + + var reqOpts = { a: 'b', c: 'd' }; + + var expectedReqOpts = extend({}, reqOpts, { + headers: { + 'User-Agent': USER_AGENT + } + }); + + var decoratedReqOpts = util.decorateRequest(reqOpts, { + userAgent: USER_AGENT + }); + assert.deepEqual(decoratedReqOpts, expectedReqOpts); + }); + + it('should add the default user agent', function() { + var PKG = require('../package.json'); + var USER_AGENT = PKG.name + '/' + PKG.version; var reqOpts = { a: 'b', c: 'd' }; diff --git a/packages/compute/package.json b/packages/compute/package.json new file mode 100644 index 00000000000..d4a232d9506 --- /dev/null +++ b/packages/compute/package.json @@ -0,0 +1,78 @@ +{ + "name": "@google-cloud/compute", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google Compute Engine Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google compute engine", + "compute engine" + ], + "dependencies": { + "arrify": "^1.0.0", + "async": "^1.4.2", + "create-error-class": "^2.0.1", + "extend": "^3.0.0", + "gce-images": "^0.3.0", + "@google-cloud/common": "^0.1.0", + "is": "^3.0.1", + "modelo": "^4.2.0", + "string-format-obj": "^1.0.0" + }, + "devDependencies": { + "mocha": "^2.1.0", + "concat-stream": "^1.5.0", + "propprop": "^0.3.0", + "proxyquire": "^1.7.10" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/compute/address.js b/packages/compute/src/address.js similarity index 97% rename from lib/compute/address.js rename to packages/compute/src/address.js index 3d3e2fc0fe3..8c3e634bcf5 100644 --- a/lib/compute/address.js +++ b/packages/compute/src/address.js @@ -20,19 +20,20 @@ 'use strict'; +var common = require('@google-cloud/common'); var nodeutil = require('util'); /** * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -50,7 +51,7 @@ var util = require('../common/util.js'); * @alias module:compute/address * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/autoscaler.js b/packages/compute/src/autoscaler.js similarity index 97% rename from lib/compute/autoscaler.js rename to packages/compute/src/autoscaler.js index 6cf60083335..c7f3bfef224 100644 --- a/lib/compute/autoscaler.js +++ b/packages/compute/src/autoscaler.js @@ -20,19 +20,20 @@ 'use strict'; +var common = require('@google-cloud/common'); var nodeutil = require('util'); /** * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -49,7 +50,7 @@ var util = require('../common/util.js'); * @alias module:compute/autoscaler * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/disk.js b/packages/compute/src/disk.js similarity index 98% rename from lib/compute/disk.js rename to packages/compute/src/disk.js index 7fbd0e31af9..fc801c87933 100644 --- a/lib/compute/disk.js +++ b/packages/compute/src/disk.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var extend = require('extend'); var format = require('string-format-obj'); var is = require('is'); @@ -29,7 +30,7 @@ var nodeutil = require('util'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:compute/snapshot} @@ -41,7 +42,7 @@ var Snapshot = require('./snapshot.js'); * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -58,7 +59,7 @@ var util = require('../common/util.js'); * @alias module:compute/disk * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/firewall.js b/packages/compute/src/firewall.js similarity index 97% rename from lib/compute/firewall.js rename to packages/compute/src/firewall.js index c9f49bf5c5b..4cfd156dc74 100644 --- a/lib/compute/firewall.js +++ b/packages/compute/src/firewall.js @@ -20,19 +20,20 @@ 'use strict'; +var common = require('@google-cloud/common'); var nodeutil = require('util'); /** * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -50,7 +51,7 @@ var util = require('../common/util.js'); * @alias module:compute/firewall * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/health-check.js b/packages/compute/src/health-check.js similarity index 98% rename from lib/compute/health-check.js rename to packages/compute/src/health-check.js index a74d3eafb8e..91c680f5cf9 100644 --- a/lib/compute/health-check.js +++ b/packages/compute/src/health-check.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); var nodeutil = require('util'); @@ -28,13 +29,13 @@ var nodeutil = require('util'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -58,7 +59,7 @@ var util = require('../common/util.js'); * @alias module:compute/health-check * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/index.js b/packages/compute/src/index.js similarity index 99% rename from lib/compute/index.js rename to packages/compute/src/index.js index 90faf1a42d5..4d7a2c4eecb 100644 --- a/lib/compute/index.js +++ b/packages/compute/src/index.js @@ -21,9 +21,11 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); var nodeutil = require('util'); +var PKG = require('../package.json'); /** * @type {module:compute/firewall} @@ -65,7 +67,7 @@ var Rule = require('./rule.js'); * @type {module:common/service} * @private */ -var Service = require('../common/service.js'); +var Service = common.Service; /** * @type {module:compute/service} @@ -83,13 +85,13 @@ var Snapshot = require('./snapshot.js'); * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * @type {module:compute/zone} @@ -117,7 +119,7 @@ var Zone = require('./zone.js'); * @param {object} options - [Configuration object](#/docs). * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); @@ -132,7 +134,8 @@ function Compute(options) { var config = { baseUrl: 'https://www.googleapis.com/compute/v1', - scopes: ['https://www.googleapis.com/auth/compute'] + scopes: ['https://www.googleapis.com/auth/compute'], + userAgent: PKG.name + '/' + PKG.version }; Service.call(this, config, options); @@ -2392,4 +2395,14 @@ streamRouter.extend(Compute, [ 'getZones' ]); +Compute.Firewall = Firewall; +Compute.HealthCheck = HealthCheck; +Compute.Network = Network; +Compute.Operation = Operation; +Compute.Region = Region; +Compute.Rule = Rule; +Compute.ServiceClass = ServiceClass; +Compute.Snapshot = Snapshot; +Compute.Zone = Zone; + module.exports = Compute; diff --git a/lib/compute/instance-group.js b/packages/compute/src/instance-group.js similarity index 98% rename from lib/compute/instance-group.js rename to packages/compute/src/instance-group.js index 2587e635318..9c33acc8e41 100644 --- a/lib/compute/instance-group.js +++ b/packages/compute/src/instance-group.js @@ -21,6 +21,7 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); var nodeutil = require('util'); @@ -29,19 +30,19 @@ var nodeutil = require('util'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -60,7 +61,7 @@ var util = require('../common/util.js'); * @alias module:compute/instance-group * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/network.js b/packages/compute/src/network.js similarity index 99% rename from lib/compute/network.js rename to packages/compute/src/network.js index e62b95dd4f7..007546d309a 100644 --- a/lib/compute/network.js +++ b/packages/compute/src/network.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var extend = require('extend'); var format = require('string-format-obj'); var is = require('is'); @@ -29,13 +30,13 @@ var nodeutil = require('util'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -52,7 +53,7 @@ var util = require('../common/util.js'); * @alias module:compute/network * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/operation.js b/packages/compute/src/operation.js similarity index 98% rename from lib/compute/operation.js rename to packages/compute/src/operation.js index 7a17c11dbc4..57d721faaf5 100644 --- a/lib/compute/operation.js +++ b/packages/compute/src/operation.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var events = require('events'); var modelo = require('modelo'); @@ -27,13 +28,13 @@ var modelo = require('modelo'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -55,7 +56,7 @@ var util = require('../common/util.js'); * @alias module:compute/operation * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/region.js b/packages/compute/src/region.js similarity index 99% rename from lib/compute/region.js rename to packages/compute/src/region.js index d0e13eac122..96f82c2e7f8 100644 --- a/lib/compute/region.js +++ b/packages/compute/src/region.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); var nodeutil = require('util'); @@ -52,7 +53,7 @@ var Rule = require('./rule.js'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:compute/subnetwork} @@ -64,7 +65,7 @@ var Subnetwork = require('./subnetwork.js'); * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /*! Developer Documentation * @@ -81,7 +82,7 @@ var streamRouter = require('../common/stream-router.js'); * @alias module:compute/region * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/rule.js b/packages/compute/src/rule.js similarity index 98% rename from lib/compute/rule.js rename to packages/compute/src/rule.js index f07eda014e5..c92a800073b 100644 --- a/lib/compute/rule.js +++ b/packages/compute/src/rule.js @@ -20,19 +20,20 @@ 'use strict'; +var common = require('@google-cloud/common'); var nodeutil = require('util'); /** * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -53,7 +54,7 @@ var util = require('../common/util.js'); * @alias module:compute/rule * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/service.js b/packages/compute/src/service.js similarity index 98% rename from lib/compute/service.js rename to packages/compute/src/service.js index 30318d993a2..2d7e5525f0e 100644 --- a/lib/compute/service.js +++ b/packages/compute/src/service.js @@ -21,6 +21,7 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var format = require('string-format-obj'); var is = require('is'); var nodeutil = require('util'); @@ -29,13 +30,13 @@ var nodeutil = require('util'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -58,7 +59,7 @@ var util = require('../common/util.js'); * @alias module:compute/service * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/snapshot.js b/packages/compute/src/snapshot.js similarity index 97% rename from lib/compute/snapshot.js rename to packages/compute/src/snapshot.js index 90b6ba26786..7ceee2fcf46 100644 --- a/lib/compute/snapshot.js +++ b/packages/compute/src/snapshot.js @@ -20,19 +20,20 @@ 'use strict'; +var common = require('@google-cloud/common'); var nodeutil = require('util'); /** * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -51,7 +52,7 @@ var util = require('../common/util.js'); * @alias module:compute/snapshot * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/subnetwork.js b/packages/compute/src/subnetwork.js similarity index 97% rename from lib/compute/subnetwork.js rename to packages/compute/src/subnetwork.js index 350d91b9449..dcd67a75400 100644 --- a/lib/compute/subnetwork.js +++ b/packages/compute/src/subnetwork.js @@ -20,19 +20,20 @@ 'use strict'; +var common = require('@google-cloud/common'); var nodeutil = require('util'); /** * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation @@ -51,7 +52,7 @@ var util = require('../common/util.js'); * @alias module:compute/subnetwork * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/vm.js b/packages/compute/src/vm.js similarity index 99% rename from lib/compute/vm.js rename to packages/compute/src/vm.js index e4dd276817e..6ed9bf252c0 100644 --- a/lib/compute/vm.js +++ b/packages/compute/src/vm.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var createErrorClass = require('create-error-class'); var extend = require('extend'); var format = require('string-format-obj'); @@ -36,13 +37,13 @@ var Disk = require('./disk.js'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * Custom error type for errors related to detaching a disk. @@ -72,7 +73,7 @@ var DetachDiskError = createErrorClass('DetachDiskError', function(message) { * @alias module:compute/vm * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/compute/zone.js b/packages/compute/src/zone.js similarity index 99% rename from lib/compute/zone.js rename to packages/compute/src/zone.js index 468582c2b13..e59ceb3ac4e 100644 --- a/lib/compute/zone.js +++ b/packages/compute/src/zone.js @@ -22,6 +22,7 @@ var arrify = require('arrify'); var async = require('async'); +var common = require('@google-cloud/common'); var extend = require('extend'); var format = require('string-format-obj'); var gceImages = require('gce-images'); @@ -56,13 +57,13 @@ var Operation = require('./operation.js'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:compute/vm} @@ -85,7 +86,7 @@ var VM = require('./vm.js'); * @alias module:compute/zone * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/system-test/compute.js b/packages/compute/system-test/compute.js similarity index 99% rename from system-test/compute.js rename to packages/compute/system-test/compute.js index 2c2b80a68b8..c464cdb3468 100644 --- a/system-test/compute.js +++ b/packages/compute/system-test/compute.js @@ -22,8 +22,8 @@ var concat = require('concat-stream'); var is = require('is'); var prop = require('propprop'); -var env = require('./env.js'); -var Compute = require('../lib/compute/index.js'); +var env = require('../../../system-test/env.js'); +var Compute = require('../'); describe('Compute', function() { // Since the Compute Engine API is rather large and involves long-running diff --git a/test/compute/address.js b/packages/compute/test/address.js similarity index 89% rename from test/compute/address.js rename to packages/compute/test/address.js index 71c0080b84f..13745245515 100644 --- a/test/compute/address.js +++ b/packages/compute/test/address.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -41,21 +41,11 @@ describe('Address', function() { }; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Address = proxyquire('../src/address.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - Address = require('../../lib/compute/address.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/compute/autoscaler.js b/packages/compute/test/autoscaler.js similarity index 93% rename from test/compute/autoscaler.js rename to packages/compute/test/autoscaler.js index e1471cc9730..5d83148092d 100644 --- a/test/compute/autoscaler.js +++ b/packages/compute/test/autoscaler.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -45,21 +45,11 @@ describe('Autoscaler', function() { }; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Autoscaler = proxyquire('../src/autoscaler.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - Autoscaler = require('../../lib/compute/autoscaler.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/compute/disk.js b/packages/compute/test/disk.js similarity index 93% rename from test/compute/disk.js rename to packages/compute/test/disk.js index f3bc2ecadaf..bbb2f89760e 100644 --- a/test/compute/disk.js +++ b/packages/compute/test/disk.js @@ -19,11 +19,11 @@ var assert = require('assert'); var extend = require('extend'); var format = require('string-format-obj'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeSnapshot() { this.calledWith_ = [].slice.call(arguments); @@ -58,22 +58,12 @@ describe('Disk', function() { }); before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.registerMock('../../lib/compute/snapshot.js', FakeSnapshot); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Disk = proxyquire('../src/disk.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + }, + './snapshot.js': FakeSnapshot }); - - Disk = require('../../lib/compute/disk.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/compute/firewall.js b/packages/compute/test/firewall.js similarity index 93% rename from test/compute/firewall.js rename to packages/compute/test/firewall.js index c8895ec7759..124013e4a08 100644 --- a/test/compute/firewall.js +++ b/packages/compute/test/firewall.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -43,21 +43,11 @@ describe('Firewall', function() { var FIREWALL_NETWORK = 'global/networks/default'; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Firewall = proxyquire('../src/firewall.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - Firewall = require('../../lib/compute/firewall.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/compute/health-check.js b/packages/compute/test/health-check.js similarity index 94% rename from test/compute/health-check.js rename to packages/compute/test/health-check.js index f77a3fb7950..00c9382a177 100644 --- a/test/compute/health-check.js +++ b/packages/compute/test/health-check.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -41,21 +41,11 @@ describe('HealthCheck', function() { var OPTIONS = {}; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + HealthCheck = proxyquire('../src/health-check.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - HealthCheck = require('../../lib/compute/health-check.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/compute/index.js b/packages/compute/test/index.js similarity index 98% rename from test/compute/index.js rename to packages/compute/test/index.js index 017b412dd7d..b8cc1f59458 100644 --- a/test/compute/index.js +++ b/packages/compute/test/index.js @@ -19,11 +19,12 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var Service = require('../../lib/common/service.js'); -var util = require('../../lib/common/util.js'); +var Service = require('@google-cloud/common').Service; +var util = require('@google-cloud/common').util; +var PKG = require('../package.json'); var slice = Array.prototype.slice; @@ -114,30 +115,22 @@ describe('Compute', function() { var PROJECT_ID = 'project-id'; before(function() { - mockery.registerMock('../../lib/common/service.js', FakeService); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.registerMock('../../lib/compute/firewall.js', FakeFirewall); - mockery.registerMock('../../lib/compute/health-check.js', FakeHealthCheck); - mockery.registerMock('../../lib/compute/network.js', FakeNetwork); - mockery.registerMock('../../lib/compute/operation.js', FakeOperation); - mockery.registerMock('../../lib/compute/region.js', FakeRegion); - mockery.registerMock('../../lib/compute/rule.js', FakeRule); - mockery.registerMock('../../lib/compute/service.js', FakeServiceClass); - mockery.registerMock('../../lib/compute/snapshot.js', FakeSnapshot); - mockery.registerMock('../../lib/compute/zone.js', FakeZone); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false - }); - - Compute = require('../../lib/compute'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); + Compute = proxyquire('../', { + '@google-cloud/common': { + Service: FakeService, + streamRouter: fakeStreamRouter, + util: fakeUtil + }, + './firewall.js': FakeFirewall, + './health-check.js': FakeHealthCheck, + './network.js': FakeNetwork, + './operation.js': FakeOperation, + './region.js': FakeRegion, + './rule.js': FakeRule, + './service.js': FakeServiceClass, + './snapshot.js': FakeSnapshot, + './zone.js': FakeZone + }); }); beforeEach(function() { @@ -187,6 +180,7 @@ describe('Compute', function() { assert.deepEqual(calledWith.scopes, [ 'https://www.googleapis.com/auth/compute' ]); + assert.strictEqual(calledWith.userAgent, PKG.name + '/' + PKG.version); }); }); diff --git a/test/compute/instance-group.js b/packages/compute/test/instance-group.js similarity index 96% rename from test/compute/instance-group.js rename to packages/compute/test/instance-group.js index 8e9560a3a47..25d69802129 100644 --- a/test/compute/instance-group.js +++ b/packages/compute/test/instance-group.js @@ -19,11 +19,11 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -59,26 +59,15 @@ describe('InstanceGroup', function() { var NAME = 'instance-group-name'; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + InstanceGroup = proxyquire('../src/instance-group.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject, + streamRouter: fakeStreamRouter + } }); - - InstanceGroup = require('../../lib/compute/instance-group.js'); staticMethods.formatPorts_ = InstanceGroup.formatPorts_; }); - after(function() { - mockery.deregisterAll(); - mockery.disable(); - }); - beforeEach(function() { extend(InstanceGroup, staticMethods); instanceGroup = new InstanceGroup(ZONE, NAME); diff --git a/test/compute/network.js b/packages/compute/test/network.js similarity index 94% rename from test/compute/network.js rename to packages/compute/test/network.js index a0fc4dc6790..f5ec67a2cf8 100644 --- a/test/compute/network.js +++ b/packages/compute/test/network.js @@ -19,11 +19,11 @@ var assert = require('assert'); var extend = require('extend'); var format = require('string-format-obj'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -51,22 +51,14 @@ describe('Network', function() { var REGION_NAME = 'region-name'; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Network = proxyquire('../src/network.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject, + util: util + } }); - Network = require('../../lib/compute/network.js'); - Region = require('../../lib/compute/region.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); + Region = require('../src/region.js'); }); beforeEach(function() { diff --git a/test/compute/operation.js b/packages/compute/test/operation.js similarity index 95% rename from test/compute/operation.js rename to packages/compute/test/operation.js index b01ac3acf74..e966dca7e10 100644 --- a/test/compute/operation.js +++ b/packages/compute/test/operation.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -50,22 +50,12 @@ describe('Operation', function() { var OPERATION_NAME = 'operation-name'; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Operation = proxyquire('../src/operation.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject, + util: fakeUtil + } }); - - Operation = require('../../lib/compute/operation.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/compute/region.js b/packages/compute/test/region.js similarity index 96% rename from test/compute/region.js rename to packages/compute/test/region.js index d6ed4c67095..899fde187a6 100644 --- a/test/compute/region.js +++ b/packages/compute/test/region.js @@ -20,10 +20,10 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); var is = require('is'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; function FakeAddress() { this.calledWith_ = [].slice.call(arguments); @@ -80,28 +80,17 @@ describe('Region', function() { var REGION_NAME = 'us-central1'; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/compute/address.js', FakeAddress); - mockery.registerMock('../../lib/compute/network.js', FakeNetwork); - mockery.registerMock('../../lib/compute/operation.js', FakeOperation); - mockery.registerMock('../../lib/compute/rule.js', FakeRule); - mockery.registerMock('../../lib/compute/subnetwork.js', FakeSubnetwork); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false - }); - - Region = require('../../lib/compute/region.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); + Region = proxyquire('../src/region.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject, + streamRouter: fakeStreamRouter + }, + './address.js': FakeAddress, + './network.js': FakeNetwork, + './operation.js': FakeOperation, + './rule.js': FakeRule, + './subnetwork.js': FakeSubnetwork + }); }); beforeEach(function() { diff --git a/test/compute/rule.js b/packages/compute/test/rule.js similarity index 94% rename from test/compute/rule.js rename to packages/compute/test/rule.js index 8acb0c249ad..d4648b27a3e 100644 --- a/test/compute/rule.js +++ b/packages/compute/test/rule.js @@ -18,9 +18,9 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); -var util = require('../../lib/common/util.js'); +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -39,21 +39,11 @@ describe('Rule', function() { var RULE_NAME = 'rule-name'; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Rule = proxyquire('../src/rule.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - Rule = require('../../lib/compute/rule.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/compute/service.js b/packages/compute/test/service.js similarity index 95% rename from test/compute/service.js rename to packages/compute/test/service.js index e6a5cd870b6..8f98db12c1a 100644 --- a/test/compute/service.js +++ b/packages/compute/test/service.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -43,21 +43,11 @@ describe('Service', function() { }; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Service = proxyquire('../src/service.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - Service = require('../../lib/compute/service.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/compute/snapshot.js b/packages/compute/test/snapshot.js similarity index 91% rename from test/compute/snapshot.js rename to packages/compute/test/snapshot.js index dab500e5c55..fc4dff8a580 100644 --- a/test/compute/snapshot.js +++ b/packages/compute/test/snapshot.js @@ -17,10 +17,10 @@ 'use strict'; var assert = require('assert'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; function FakeServiceObject() { this.calledWith_ = arguments; @@ -37,21 +37,11 @@ describe('Snapshot', function() { var SNAPSHOT_NAME = 'snapshot-name'; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Snapshot = proxyquire('../src/snapshot.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - Snapshot = require('../../lib/compute/snapshot.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/compute/subnetwork.js b/packages/compute/test/subnetwork.js similarity index 90% rename from test/compute/subnetwork.js rename to packages/compute/test/subnetwork.js index eaaaf0c2a46..504db667258 100644 --- a/test/compute/subnetwork.js +++ b/packages/compute/test/subnetwork.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -43,21 +43,11 @@ describe('Subnetwork', function() { }; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Subnetwork = proxyquire('../src/subnetwork.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - Subnetwork = require('../../lib/compute/subnetwork.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/compute/vm.js b/packages/compute/test/vm.js similarity index 97% rename from test/compute/vm.js rename to packages/compute/test/vm.js index 5d4ba93ae88..12d53e48b5d 100644 --- a/test/compute/vm.js +++ b/packages/compute/test/vm.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var util = require('../../lib/common/util.js'); -var ServiceObject = require('../../lib/common/service-object.js'); +var util = require('@google-cloud/common').util; +var ServiceObject = require('@google-cloud/common').ServiceObject; function FakeServiceObject() { this.calledWith_ = arguments; @@ -52,22 +52,12 @@ describe('VM', function() { ].join(''); before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Disk = require('../src/disk.js'); + VM = proxyquire('../src/vm.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - Disk = require('../../lib/compute/disk.js'); - VM = require('../../lib/compute/vm.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/compute/zone.js b/packages/compute/test/zone.js similarity index 97% rename from test/compute/zone.js rename to packages/compute/test/zone.js index c1e669fc0e1..a689a9a474b 100644 --- a/test/compute/zone.js +++ b/packages/compute/test/zone.js @@ -20,11 +20,11 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); var gceImages = require('gce-images'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; var gceImagesOverride = null; function fakeGceImages() { @@ -93,32 +93,18 @@ describe('Zone', function() { var ZONE_NAME = 'us-central1-a'; before(function() { - mockery.registerMock('gce-images', fakeGceImages); - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/compute/autoscaler.js', FakeAutoscaler); - mockery.registerMock('../../lib/compute/disk.js', FakeDisk); - mockery.registerMock( - '../../lib/compute/instance-group.js', - FakeInstanceGroup - ); - mockery.registerMock('../../lib/compute/operation.js', FakeOperation); - mockery.registerMock('../../lib/compute/vm.js', FakeVM); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Zone = proxyquire('../src/zone.js', { + 'gce-images': fakeGceImages, + '@google-cloud/common': { + ServiceObject: FakeServiceObject, + streamRouter: fakeStreamRouter + }, + './autoscaler.js': FakeAutoscaler, + './disk.js': FakeDisk, + './instance-group.js': FakeInstanceGroup, + './operation.js': FakeOperation, + './vm.js': FakeVM }); - - Zone = require('../../lib/compute/zone.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/packages/datastore/package.json b/packages/datastore/package.json new file mode 100644 index 00000000000..2246f721ffa --- /dev/null +++ b/packages/datastore/package.json @@ -0,0 +1,81 @@ +{ + "name": "@google-cloud/datastore", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google Cloud Datastore Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google datastore", + "datastore" + ], + "dependencies": { + "arrify": "^1.0.0", + "concat-stream": "^1.5.0", + "create-error-class": "^2.0.1", + "extend": "^3.0.0", + "@google-cloud/common": "^0.1.0", + "is": "^3.0.1", + "lodash.flatten": "^4.2.0", + "modelo": "^4.2.0", + "prop-assign": "^1.0.0", + "propprop": "^0.3.0", + "split-array-stream": "^1.0.0" + }, + "devDependencies": { + "async": "^1.4.2", + "deep-strict-equal": "^0.1.0", + "mocha": "^2.1.0", + "proxyquire": "^1.7.10", + "through2": "^2.0.0" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/datastore/entity.js b/packages/datastore/src/entity.js similarity index 100% rename from lib/datastore/entity.js rename to packages/datastore/src/entity.js diff --git a/lib/datastore/index.js b/packages/datastore/src/index.js similarity index 97% rename from lib/datastore/index.js rename to packages/datastore/src/index.js index 8c27ea8dbdb..916d464a9e2 100644 --- a/lib/datastore/index.js +++ b/packages/datastore/src/index.js @@ -21,8 +21,10 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var is = require('is'); var modelo = require('modelo'); +var PKG = require('../package.json'); /** * @type {module:datastore/request} @@ -46,7 +48,7 @@ var Query = require('./query.js'); * @type {module:common/grpc-service} * @private */ -var GrpcService = require('../common/grpc-service.js'); +var GrpcService = common.GrpcService; /** * @type {module:datastore/transaction} @@ -58,7 +60,7 @@ var Transaction = require('./transaction.js'); * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * Interact with the @@ -82,7 +84,7 @@ var util = require('../common/util.js'); * @param {string} options.namespace - Namespace to isolate transactions to. * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); @@ -353,7 +355,8 @@ function Datastore(options) { customEndpoint: this.customEndpoint_, service: 'datastore', apiVersion: 'v1beta3', - scopes: ['https://www.googleapis.com/auth/datastore'] + scopes: ['https://www.googleapis.com/auth/datastore'], + userAgent: PKG.name + '/' + PKG.version }; GrpcService.call(this, config, options); @@ -547,4 +550,8 @@ Datastore.prototype.determineBaseUrl_ = function(customApiEndpoint) { .replace(trailingSlashes, ''); }; +Datastore.DatastoreRequest = DatastoreRequest; +Datastore.Query = Query; +Datastore.Transaction = Transaction; + module.exports = Datastore; diff --git a/lib/datastore/query.js b/packages/datastore/src/query.js similarity index 99% rename from lib/datastore/query.js rename to packages/datastore/src/query.js index f8c4d191c9a..af7b2faebc1 100644 --- a/lib/datastore/query.js +++ b/packages/datastore/src/query.js @@ -42,7 +42,7 @@ var arrify = require('arrify'); * @param {string} kind - Kind to query. * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/datastore/request.js b/packages/datastore/src/request.js similarity index 99% rename from lib/datastore/request.js rename to packages/datastore/src/request.js index ab96847ae4f..35df37324cd 100644 --- a/lib/datastore/request.js +++ b/packages/datastore/src/request.js @@ -21,6 +21,7 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var concat = require('concat-stream'); var extend = require('extend'); var is = require('is'); @@ -43,7 +44,7 @@ var Query = require('./query.js'); * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * A map of read consistency values to proto codes. diff --git a/lib/datastore/transaction.js b/packages/datastore/src/transaction.js similarity index 99% rename from lib/datastore/transaction.js rename to packages/datastore/src/transaction.js index bf08a81b627..dff6be99732 100644 --- a/lib/datastore/transaction.js +++ b/packages/datastore/src/transaction.js @@ -35,7 +35,7 @@ var DatastoreRequest = require('./request.js'); * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = require('@google-cloud/common').util; /*! Developer Documentation * @@ -45,8 +45,8 @@ var util = require('../common/util.js'); * // This is how to create a transaction object directly using this Transaction * // class. The following transaction object is created for use in the examples * // in this file below. + * var Transaction = gcloud.datastore.Transaction; * var datastore = gcloud.datastore({ projectId: 'project-id' }); - * var Transaction = require('gcloud/lib/datastore/transaction'); * var transaction = new Transaction(datastore, 'my-project-id'); * transaction.id = '1234'; // Give the transaction an ID. */ @@ -63,6 +63,7 @@ var util = require('../common/util.js'); * @mixes module:datastore/request * * @example + * var gcloud = require('google-cloud'); * var datastore = gcloud.datastore({ * projectId: 'my-project', * keyFilename: '/path/to/keyfile.json' diff --git a/system-test/datastore.js b/packages/datastore/system-test/datastore.js similarity index 99% rename from system-test/datastore.js rename to packages/datastore/system-test/datastore.js index 91a0fc3d4fb..f4752e2a7a7 100644 --- a/system-test/datastore.js +++ b/packages/datastore/system-test/datastore.js @@ -19,9 +19,9 @@ var assert = require('assert'); var async = require('async'); -var env = require('./env.js'); -var Datastore = require('../lib/datastore/index.js'); -var entity = require('../lib/datastore/entity.js'); +var env = require('../../../system-test/env.js'); +var Datastore = require('../'); +var entity = require('../src/entity.js'); describe('Datastore', function() { var testKinds = []; diff --git a/test/datastore/entity.js b/packages/datastore/test/entity.js similarity index 99% rename from test/datastore/entity.js rename to packages/datastore/test/entity.js index 3b205d6c730..feea6cae641 100644 --- a/test/datastore/entity.js +++ b/packages/datastore/test/entity.js @@ -22,14 +22,14 @@ assert.deepStrictEqual = assert.deepStrictEqual || function() { return assert(deepStrictEqual.apply(this, arguments)); }; -var Datastore = require('../../lib/datastore/index.js'); +var Datastore = require('../'); describe('entity', function() { var entity; beforeEach(function() { - delete require.cache[require.resolve('../../lib/datastore/entity.js')]; - entity = require('../../lib/datastore/entity.js'); + delete require.cache[require.resolve('../src/entity.js')]; + entity = require('../src/entity.js'); }); describe('Double', function() { diff --git a/test/datastore/index.js b/packages/datastore/test/index.js similarity index 93% rename from test/datastore/index.js rename to packages/datastore/test/index.js index a662c02afbe..b33733ed885 100644 --- a/test/datastore/index.js +++ b/packages/datastore/test/index.js @@ -33,9 +33,10 @@ var entity = { var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); -var util = require('../../lib/common/util.js'); +var util = require('@google-cloud/common').util; +var PKG = require('../package.json'); var fakeUtil = extend({}, util); @@ -68,17 +69,15 @@ describe('Datastore', function() { }; before(function() { - mockery.registerMock('../../lib/common/grpc-service.js', FakeGrpcService); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.registerMock('../../lib/datastore/entity.js', entity); - mockery.registerMock('../../lib/datastore/query.js', FakeQuery); - mockery.registerMock('../../lib/datastore/transaction.js', FakeTransaction); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Datastore = proxyquire('../', { + '@google-cloud/common': { + GrpcService: FakeGrpcService, + util: fakeUtil + }, + './entity.js': entity, + './query.js': FakeQuery, + './transaction.js': FakeTransaction }); - - Datastore = require('../../lib/datastore/index.js'); }); beforeEach(function() { @@ -88,11 +87,6 @@ describe('Datastore', function() { }); }); - after(function() { - mockery.deregisterAll(); - mockery.disable(); - }); - describe('instantiation', function() { it('should normalize the arguments', function() { var normalizeArguments = fakeUtil.normalizeArguments; @@ -163,6 +157,7 @@ describe('Datastore', function() { assert.deepEqual(calledWith.scopes, [ 'https://www.googleapis.com/auth/datastore' ]); + assert.strictEqual(calledWith.userAgent, PKG.name + '/' + PKG.version); }); }); diff --git a/test/datastore/query.js b/packages/datastore/test/query.js similarity index 99% rename from test/datastore/query.js rename to packages/datastore/test/query.js index 36c565c5a63..955bbaaba18 100644 --- a/test/datastore/query.js +++ b/packages/datastore/test/query.js @@ -18,7 +18,7 @@ var assert = require('assert'); -var Query = require('../../lib/datastore/query.js'); +var Query = require('../src/query.js'); describe('Query', function() { var SCOPE = {}; diff --git a/test/datastore/request.js b/packages/datastore/test/request.js similarity index 98% rename from test/datastore/request.js rename to packages/datastore/test/request.js index b6093edd9c2..3eb9cfa9e29 100644 --- a/test/datastore/request.js +++ b/packages/datastore/test/request.js @@ -19,13 +19,13 @@ var assert = require('assert'); var extend = require('extend'); var is = require('is'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var stream = require('stream'); var through = require('through2'); -var entity = require('../../lib/datastore/entity.js'); -var util = require('../../lib/common/util.js'); -var Query = require('../../lib/datastore/query.js'); +var entity = require('../src/entity.js'); +var util = require('@google-cloud/common').util; +var Query = require('../src/query.js'); var overrides = {}; @@ -71,22 +71,17 @@ describe('Request', function() { var key; before(function() { - mockery.registerMock('../../lib/common/util.js', util); - mockery.registerMock('../../lib/datastore/entity.js', entity); - mockery.registerMock('../../lib/datastore/query.js', FakeQuery); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Request = proxyquire('../src/request.js', { + '@google-cloud/common': { + util: util + }, + './entity.js': entity, + './query.js': FakeQuery }); - - Request = require('../../lib/datastore/request.js'); }); after(function() { resetOverrides(); - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/datastore/transaction.js b/packages/datastore/test/transaction.js similarity index 96% rename from test/datastore/transaction.js rename to packages/datastore/test/transaction.js index 3715569d75b..30f6ea79df7 100644 --- a/test/datastore/transaction.js +++ b/packages/datastore/test/transaction.js @@ -18,9 +18,9 @@ var arrify = require('arrify'); var assert = require('assert'); -var entity = require('../../lib/datastore/entity.js'); -var mockery = require('mockery-next'); -var util = require('../../lib/common/util.js'); +var entity = require('../src/entity.js'); +var proxyquire = require('proxyquire'); +var util = require('@google-cloud/common').util; var DatastoreRequestOverride = { delete: util.noop, @@ -61,21 +61,9 @@ describe('Transaction', function() { } before(function() { - mockery.registerMock( - '../../lib/datastore/request.js', - FakeDatastoreRequest - ); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Transaction = proxyquire('../src/transaction.js', { + './request.js': FakeDatastoreRequest }); - - Transaction = require('../../lib/datastore/transaction.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/packages/dns/package.json b/packages/dns/package.json new file mode 100644 index 00000000000..a84c03ebede --- /dev/null +++ b/packages/dns/package.json @@ -0,0 +1,77 @@ +{ + "name": "@google-cloud/dns", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google Cloud DNS Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google dns", + "dns" + ], + "dependencies": { + "arrify": "^1.0.0", + "dns-zonefile": "0.1.18", + "extend": "^3.0.0", + "@google-cloud/common": "^0.1.0", + "is": "^3.0.1", + "methmeth": "^1.0.0", + "string-format-obj": "^1.0.0" + }, + "devDependencies": { + "async": "^1.4.2", + "mocha": "^2.1.0", + "node-uuid": "^1.4.3", + "proxyquire": "^1.7.10", + "tmp": "0.0.27" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/dns/change.js b/packages/dns/src/change.js similarity index 96% rename from lib/dns/change.js rename to packages/dns/src/change.js index 8f71581f03e..29f51fbf4d9 100644 --- a/lib/dns/change.js +++ b/packages/dns/src/change.js @@ -20,13 +20,14 @@ 'use strict'; +var common = require('@google-cloud/common'); var nodeutil = require('util'); /** * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @constructor @@ -36,7 +37,7 @@ var ServiceObject = require('../common/service-object.js'); * @param {string} id - ID of the change. * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * * var dns = gcloud.dns({ * keyFilename: '/path/to/keyfile.json', diff --git a/lib/dns/index.js b/packages/dns/src/index.js similarity index 95% rename from lib/dns/index.js rename to packages/dns/src/index.js index ba86d82017c..9c527dd5196 100644 --- a/lib/dns/index.js +++ b/packages/dns/src/index.js @@ -21,27 +21,29 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); var nodeutil = require('util'); +var PKG = require('../package.json'); /** * @type {module:common/service} * @private */ -var Service = require('../common/service.js'); +var Service = common.Service; /** * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * @type {module:dns/zone} @@ -69,7 +71,7 @@ var Zone = require('./zone.js'); * @param {object} options - [Configuration object](#/docs). * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); @@ -87,7 +89,8 @@ function DNS(options) { scopes: [ 'https://www.googleapis.com/auth/ndev.clouddns.readwrite', 'https://www.googleapis.com/auth/cloud-platform' - ] + ], + userAgent: PKG.name + '/' + PKG.version }; Service.call(this, config, options); @@ -255,4 +258,6 @@ DNS.prototype.zone = function(name) { */ streamRouter.extend(DNS, 'getZones'); +DNS.Zone = Zone; + module.exports = DNS; diff --git a/lib/dns/record.js b/packages/dns/src/record.js similarity index 99% rename from lib/dns/record.js rename to packages/dns/src/record.js index b7a184d88dd..d6e4d021034 100644 --- a/lib/dns/record.js +++ b/packages/dns/src/record.js @@ -41,7 +41,7 @@ var format = require('string-format-obj'); * resolvers. * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * * var dns = gcloud.dns({ * projectId: 'grape-spaceship-123' diff --git a/lib/dns/zone.js b/packages/dns/src/zone.js similarity index 99% rename from lib/dns/zone.js rename to packages/dns/src/zone.js index 82abcaf81de..f9426ed4288 100644 --- a/lib/dns/zone.js +++ b/packages/dns/src/zone.js @@ -21,6 +21,7 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var exec = require('methmeth'); var extend = require('extend'); var fs = require('fs'); @@ -44,13 +45,13 @@ var Record = require('./record.js'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * A Zone object is used to interact with your project's managed zone. It will @@ -61,7 +62,7 @@ var streamRouter = require('../common/stream-router.js'); * @alias module:dns/zone * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * * var dns = gcloud.dns({ * keyFilename: '/path/to/keyfile.json', diff --git a/system-test/data/zonefile.zone b/packages/dns/system-test/data/zonefile.zone similarity index 100% rename from system-test/data/zonefile.zone rename to packages/dns/system-test/data/zonefile.zone diff --git a/system-test/dns.js b/packages/dns/system-test/dns.js similarity index 99% rename from system-test/dns.js rename to packages/dns/system-test/dns.js index a1a2d7b44be..9bc2607b81a 100644 --- a/system-test/dns.js +++ b/packages/dns/system-test/dns.js @@ -24,8 +24,8 @@ var fs = require('fs'); var tmp = require('tmp'); var uuid = require('node-uuid'); -var env = require('./env.js'); -var DNS = require('../lib/dns'); +var env = require('../../../system-test/env.js'); +var DNS = require('../'); var dns = new DNS(env); var DNS_DOMAIN = process.env.GCLOUD_TESTS_DNS_DOMAIN; diff --git a/test/dns/change.js b/packages/dns/test/change.js similarity index 88% rename from test/dns/change.js rename to packages/dns/test/change.js index 202e33d44de..f47f68e7eae 100644 --- a/test/dns/change.js +++ b/packages/dns/test/change.js @@ -17,11 +17,11 @@ 'use strict'; var assert = require('assert'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -42,22 +42,11 @@ describe('Change', function() { var CHANGE_ID = 'change-id'; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Change = proxyquire('../src/change.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - Change = require('../../lib/dns/change.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/dns/index.js b/packages/dns/test/index.js similarity index 94% rename from test/dns/index.js rename to packages/dns/test/index.js index bcb5298eef7..0f296f47ad8 100644 --- a/test/dns/index.js +++ b/packages/dns/test/index.js @@ -19,11 +19,12 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var Service = require('../../lib/common/service.js'); -var util = require('../../lib/common/util.js'); +var Service = require('@google-cloud/common').Service; +var util = require('@google-cloud/common').util; +var PKG = require('../package.json'); var fakeUtil = extend({}, util, { makeAuthenticatedRequestFactory: util.noop @@ -61,21 +62,14 @@ describe('DNS', function() { var PROJECT_ID = 'project-id'; before(function() { - mockery.registerMock('../../lib/common/service.js', FakeService); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.registerMock('../../lib/dns/zone.js', FakeZone); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + DNS = proxyquire('../', { + '@google-cloud/common': { + Service: FakeService, + streamRouter: fakeStreamRouter, + util: fakeUtil + }, + './zone.js': FakeZone }); - - DNS = require('../../lib/dns/index.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { @@ -119,6 +113,7 @@ describe('DNS', function() { 'https://www.googleapis.com/auth/ndev.clouddns.readwrite', 'https://www.googleapis.com/auth/cloud-platform' ]); + assert.strictEqual(calledWith.userAgent, PKG.name + '/' + PKG.version); }); }); diff --git a/test/dns/record.js b/packages/dns/test/record.js similarity index 98% rename from test/dns/record.js rename to packages/dns/test/record.js index 854fa6081cf..0553d0fb706 100644 --- a/test/dns/record.js +++ b/packages/dns/test/record.js @@ -18,8 +18,8 @@ var assert = require('assert'); var extend = require('extend'); -var Record = require('../../lib/dns/record.js'); -var util = require('../../lib/common/util.js'); +var Record = require('../src/record.js'); +var util = require('@google-cloud/common').util; describe('Record', function() { var record; diff --git a/test/dns/zone.js b/packages/dns/test/zone.js similarity index 96% rename from test/dns/zone.js rename to packages/dns/test/zone.js index 980cb32702d..5c97a0f98d4 100644 --- a/test/dns/zone.js +++ b/packages/dns/test/zone.js @@ -19,11 +19,11 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -87,26 +87,16 @@ describe('Zone', function() { var ZONE_NAME = 'zone-name'; before(function() { - mockery.registerMock('dns-zonefile', fakeDnsZonefile); - mockery.registerMock('fs', fakeFs); - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/dns/change.js', FakeChange); - mockery.registerMock('../../lib/dns/record.js', FakeRecord); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false - }); - - Zone = require('../../lib/dns/zone.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); + Zone = proxyquire('../src/zone.js', { + 'dns-zonefile': fakeDnsZonefile, + fs: fakeFs, + '@google-cloud/common': { + ServiceObject: FakeServiceObject, + streamRouter: fakeStreamRouter + }, + './change.js': FakeChange, + './record.js': FakeRecord + }); }); beforeEach(function() { diff --git a/packages/google-cloud/package.json b/packages/google-cloud/package.json new file mode 100644 index 00000000000..908e4c78712 --- /dev/null +++ b/packages/google-cloud/package.json @@ -0,0 +1,122 @@ +{ + "name": "google-cloud", + "version": "0.37.0", + "author": "Google Inc.", + "description": "Google Cloud APIs Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Jason Dobry", + "email": "jason.dobry@gmail.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google bigquery", + "google big query", + "bigquery", + "big query", + "google cloud datastore", + "cloud datastore", + "datastore", + "google cloud dns", + "cloud dns", + "dns", + "google cloud pub/sub", + "google cloud pubsub", + "cloud pub/sub", + "cloud pubsub", + "pub/sub", + "pubsub", + "google cloud storage", + "cloud storage", + "gcs", + "google compute engine", + "compute engine", + "computeengine", + "gce", + "google app engine", + "app engine", + "google appengine", + "appengine", + "gae", + "google prediction", + "prediction", + "google translate", + "translate", + "google cloud logging", + "cloud logging", + "logging", + "google cloud resource manager", + "cloud resource manager", + "resource manager", + "google cloud vision", + "cloud vision", + "vision" + ], + "dependencies": { + "@google-cloud/bigquery": "0.1.0", + "@google-cloud/bigtable": "0.1.0", + "@google-cloud/compute": "0.1.0", + "@google-cloud/datastore": "0.1.0", + "@google-cloud/dns": "0.1.0", + "@google-cloud/prediction": "0.1.0", + "@google-cloud/logging": "0.1.0", + "@google-cloud/pubsub": "0.1.0", + "@google-cloud/resource": "0.1.0", + "@google-cloud/storage": "0.1.0", + "@google-cloud/translate": "0.1.0", + "@google-cloud/vision": "0.1.0", + "extend": "^3.0.0" + }, + "devDependencies": { + "proxyquire": "^1.7.10" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/index.js b/packages/google-cloud/src/index.js similarity index 92% rename from lib/index.js rename to packages/google-cloud/src/index.js index 6f72b793eb7..07c0bab6660 100644 --- a/lib/index.js +++ b/packages/google-cloud/src/index.js @@ -15,7 +15,7 @@ */ /*! - * @module gcloud + * @module google-cloud */ 'use strict'; @@ -40,13 +40,13 @@ var apis = { * @return {module:bigquery} * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * var bigquery = gcloud.bigquery({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); */ - bigquery: require('./bigquery'), + bigquery: require('@google-cloud/bigquery'), /** * [Cloud Bigtable](https://cloud.google.com/bigtable/) is Google's NoSQL Big @@ -58,7 +58,7 @@ var apis = { * @return {module:bigtable} * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * var bigtable = gcloud.bigtable({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json', @@ -66,7 +66,7 @@ var apis = { * cluster: 'gcloud-node' * }); */ - bigtable: require('./bigtable'), + bigtable: require('@google-cloud/bigtable'), /** * With [Compute Engine](https://cloud.google.com/compute/), you can run @@ -79,13 +79,13 @@ var apis = { * @return {module:compute} * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * var gce = gcloud.compute({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); */ - compute: require('./compute'), + compute: require('@google-cloud/compute'), /** * [Google Cloud Datastore](https://developers.google.com/datastore/) is a @@ -98,13 +98,13 @@ var apis = { * @return {module:datastore} * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * var datastore = gcloud.datastore({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); */ - datastore: require('./datastore'), + datastore: require('@google-cloud/datastore'), /** * [Google Cloud DNS](https://cloud.google.com/dns/what-is-cloud-dns) is a @@ -119,13 +119,13 @@ var apis = { * @return {module:dns} * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * var dns = gcloud.dns({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); */ - dns: require('./dns'), + dns: require('@google-cloud/dns'), /** * The [Google Prediction API](https://cloud.google.com/prediction/docs/getting-started) @@ -146,13 +146,13 @@ var apis = { * @return {module:prediction} * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * var dns = gcloud.prediction({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); */ - prediction: require('./prediction'), + prediction: require('@google-cloud/prediction'), /** * [Google Cloud Logging](https://cloud.google.com/logging/docs) collects and @@ -174,13 +174,13 @@ var apis = { * @return {module:logging} * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * var logging = gcloud.logging({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); */ - logging: require('./logging'), + logging: require('@google-cloud/logging'), /** * [Google Cloud Pub/Sub](https://developers.google.com/pubsub/overview) is a @@ -192,13 +192,13 @@ var apis = { * @return {module:pubsub} * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * var pubsub = gcloud.pubsub({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); */ - pubsub: require('./pubsub'), + pubsub: require('@google-cloud/pubsub'), /** * [The Cloud Resource Manager](https://cloud.google.com/resource-manager/) @@ -222,13 +222,13 @@ var apis = { * @return {module:resource} * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * var resource = gcloud.resource({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); */ - resource: require('./resource'), + resource: require('@google-cloud/resource'), /** * Google Cloud Storage allows you to store data on Google infrastructure. @@ -240,13 +240,13 @@ var apis = { * @return {module:storage} * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * var gcs = gcloud.storage({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); */ - storage: require('./storage'), + storage: require('@google-cloud/storage'), /** * With [Google Translate](https://cloud.google.com/translate), you can @@ -267,12 +267,12 @@ var apis = { * @return {module:translate} * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * var translate = gcloud.translate({ * key: 'API Key' * }); */ - translate: require('./translate'), + translate: require('@google-cloud/translate'), /** * The [Cloud Vision API](https://cloud.google.com/vision/docs) allows easy @@ -292,14 +292,14 @@ var apis = { * @type {module:vision} * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); * * var vision = gcloud.vision(); */ - vision: require('./vision') + vision: require('@google-cloud/vision') }; /*! Developer Documentation @@ -340,7 +340,7 @@ var apis = { * * See the example below for more. * - * @alias module:gcloud + * @alias module:google-cloud * @constructor * * @param {object} config - Connection configuration options. @@ -362,7 +362,7 @@ var apis = { * attempted before returning the error. (default: 3) * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); diff --git a/system-test/index.js b/packages/google-cloud/system-test/google-cloud.js similarity index 95% rename from system-test/index.js rename to packages/google-cloud/system-test/google-cloud.js index a9d176132b8..3abc1f48f76 100644 --- a/system-test/index.js +++ b/packages/google-cloud/system-test/google-cloud.js @@ -17,8 +17,8 @@ 'use strict'; var assert = require('assert'); -var env = require('./env'); -var gcloud = require('../lib'); +var env = require('../../../system-test/env.js'); +var gcloud = require('../'); var path = require('path'); // Test used to confirm we can perform a successful API operation. diff --git a/test/index.js b/packages/google-cloud/test/index.js similarity index 88% rename from test/index.js rename to packages/google-cloud/test/index.js index 86caac47bb9..6fd03f11d33 100644 --- a/test/index.js +++ b/packages/google-cloud/test/index.js @@ -18,7 +18,7 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); function createFakeApi() { return function FakeApi() { @@ -47,26 +47,18 @@ describe('gcloud', function() { var gcloud; before(function() { - mockery.registerMock('../lib/bigquery', FakeBigQuery); - mockery.registerMock('../lib/bigtable', FakeBigtable); - mockery.registerMock('../lib/compute', FakeCompute); - mockery.registerMock('../lib/datastore', FakeDatastore); - mockery.registerMock('../lib/dns', FakeDNS); - mockery.registerMock('../lib/prediction', FakePrediction); - mockery.registerMock('../lib/pubsub', FakePubSub); - mockery.registerMock('../lib/resource', FakeResource); - mockery.registerMock('../lib/storage', FakeStorage); - mockery.registerMock('../lib/vision', FakeVision); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + gcloud = proxyquire('../', { + '@google-cloud/bigquery': FakeBigQuery, + '@google-cloud/bigtable': FakeBigtable, + '@google-cloud/compute': FakeCompute, + '@google-cloud/datastore': FakeDatastore, + '@google-cloud/dns': FakeDNS, + '@google-cloud/prediction': FakePrediction, + '@google-cloud/pubsub': FakePubSub, + '@google-cloud/resource': FakeResource, + '@google-cloud/storage': FakeStorage, + '@google-cloud/vision': FakeVision }); - gcloud = require('../lib/index.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); it('should export a function', function() { diff --git a/packages/logging/package.json b/packages/logging/package.json new file mode 100644 index 00000000000..948c7a7362c --- /dev/null +++ b/packages/logging/package.json @@ -0,0 +1,80 @@ +{ + "name": "@google-cloud/logging", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google Cloud Logging Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google logging", + "logging" + ], + "dependencies": { + "arrify": "^1.0.0", + "extend": "^3.0.0", + "@google-cloud/bigquery": "^0.1.0", + "@google-cloud/common": "^0.1.0", + "@google-cloud/pubsub": "^0.1.0", + "@google-cloud/storage": "^0.1.0", + "google-proto-files": "^0.2.1", + "is": "^3.0.1", + "string-format-obj": "^1.0.0" + }, + "devDependencies": { + "async": "^1.4.2", + "methmeth": "^1.0.0", + "mocha": "^2.1.0", + "node-uuid": "^1.4.3", + "propprop": "^0.3.0", + "proxyquire": "^1.7.10" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/logging/entry.js b/packages/logging/src/entry.js similarity index 97% rename from lib/logging/entry.js rename to packages/logging/src/entry.js index f5bee9dbe15..0a3a643dcff 100644 --- a/lib/logging/entry.js +++ b/packages/logging/src/entry.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); @@ -27,7 +28,7 @@ var is = require('is'); * @type {module:common/grpc-service} * @private */ -var GrpcService = require('../common/grpc-service.js'); +var GrpcService = common.GrpcService; /** * Create an entry object to define new data to insert into a log. @@ -54,7 +55,7 @@ var GrpcService = require('../common/grpc-service.js'); * @return {module:logging/entry} * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/logging/index.js b/packages/logging/src/index.js similarity index 96% rename from lib/logging/index.js rename to packages/logging/src/index.js index cf866d633d2..e7d73d29d2f 100644 --- a/lib/logging/index.js +++ b/packages/logging/src/index.js @@ -21,23 +21,25 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var extend = require('extend'); var format = require('string-format-obj'); var googleProtoFiles = require('google-proto-files'); var is = require('is'); var nodeutil = require('util'); +var PKG = require('../package.json'); /** * @type {module:storage/bucket} * @private */ -var Bucket = require('../storage/bucket.js'); +var Bucket = require('@google-cloud/storage').Bucket; /** * @type {module:bigquery/dataset} * @private */ -var Dataset = require('../bigquery/dataset.js'); +var Dataset = require('@google-cloud/bigquery').Dataset; /** * @type {module:logging/entry} @@ -49,7 +51,7 @@ var Entry = require('./entry.js'); * @type {module:common/grpc-service} * @private */ -var GrpcService = require('../common/grpc-service.js'); +var GrpcService = common.GrpcService; /** * @type {module:logging/log} @@ -67,19 +69,19 @@ var Sink = require('./sink.js'); * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:pubsub/topic} * @private */ -var Topic = require('../pubsub/topic.js'); +var Topic = require('@google-cloud/pubsub').Topic; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * [Google Cloud Logging](https://cloud.google.com/logging/docs) collects and @@ -112,7 +114,7 @@ var util = require('../common/util.js'); * @param {object} options - [Configuration object](#/docs). * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); @@ -136,7 +138,8 @@ function Logging(options) { }, scopes: [ 'https://www.googleapis.com/auth/cloud-platform' - ] + ], + userAgent: PKG.name + '/' + PKG.version }; GrpcService.call(this, config, options); @@ -614,4 +617,9 @@ Logging.prototype.setAclForTopic_ = function(name, config, callback) { */ streamRouter.extend(Logging, ['getEntries', 'getSinks']); +Logging.Entry = Entry; +Logging.Log = Log; +Logging.Logging = Logging; +Logging.Sink = Sink; + module.exports = Logging; diff --git a/lib/logging/log.js b/packages/logging/src/log.js similarity index 99% rename from lib/logging/log.js rename to packages/logging/src/log.js index 0f7bd95ba6a..510364f6f38 100644 --- a/lib/logging/log.js +++ b/packages/logging/src/log.js @@ -21,6 +21,7 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); var nodeutil = require('util'); @@ -35,7 +36,7 @@ var Entry = require('./entry.js'); * @type {module:common/grpc-service-object} * @private */ -var GrpcServiceObject = require('../common/grpc-service-object.js'); +var GrpcServiceObject = common.GrpcServiceObject; /** * A log is a named collection of entries, each entry representing a timestamped @@ -52,7 +53,7 @@ var GrpcServiceObject = require('../common/grpc-service-object.js'); * @param {object} options - [Configuration object](#/docs). * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/lib/logging/sink.js b/packages/logging/src/sink.js similarity index 97% rename from lib/logging/sink.js rename to packages/logging/src/sink.js index e733a2ac116..7a17c027445 100644 --- a/lib/logging/sink.js +++ b/packages/logging/src/sink.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var extend = require('extend'); var nodeutil = require('util'); @@ -27,13 +28,13 @@ var nodeutil = require('util'); * @type {module:common/grpc-service-object} * @private */ -var GrpcServiceObject = require('../common/grpc-service-object.js'); +var GrpcServiceObject = common.GrpcServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -54,7 +55,7 @@ var util = require('../common/util.js'); * @param {object} options - [Configuration object](#/docs). * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/system-test/logging.js b/packages/logging/system-test/logging.js similarity index 97% rename from system-test/logging.js rename to packages/logging/system-test/logging.js index 200514acf4d..6ce8fbc518f 100644 --- a/system-test/logging.js +++ b/packages/logging/system-test/logging.js @@ -24,18 +24,17 @@ var is = require('is'); var prop = require('propprop'); var uuid = require('node-uuid'); -var env = require('./env.js'); -var BigQuery = require('../lib/bigquery/index.js'); -var Logging = require('../lib/logging/index.js'); -var PubSub = require('../lib/pubsub/index.js'); -var Storage = require('../lib/storage/index.js'); +var env = require('../../../system-test/env.js'); +var BigQuery = require('@google-cloud/bigquery'); +var Logging = require('../'); +var PubSub = require('@google-cloud/pubsub'); +var Storage = require('@google-cloud/storage'); describe('Logging', function() { var TESTS_PREFIX = 'gcloud-logging-test'; var WRITE_CONSISTENCY_DELAY_MS = 60000; var logging = new Logging(env); - var bigQuery = new BigQuery(env); var pubsub = new PubSub(env); var storage = new Storage(env); diff --git a/test/logging/entry.js b/packages/logging/test/entry.js similarity index 93% rename from test/logging/entry.js rename to packages/logging/test/entry.js index 7e5fbaa67cf..89b415b7205 100644 --- a/test/logging/entry.js +++ b/packages/logging/test/entry.js @@ -18,9 +18,9 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); -var GrpcService = require('../../lib/common/grpc-service.js'); +var GrpcService = require('@google-cloud/common').GrpcService; function FakeGrpcService() {} @@ -32,19 +32,11 @@ describe('Entry', function() { var DATA = {}; before(function() { - mockery.registerMock('../../lib/common/grpc-service.js', FakeGrpcService); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Entry = proxyquire('../src/entry.js', { + '@google-cloud/common': { + GrpcService: FakeGrpcService + } }); - - Entry = require('../../lib/logging/entry.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/logging/index.js b/packages/logging/test/index.js similarity index 95% rename from test/logging/index.js rename to packages/logging/test/index.js index dd1038c9be8..ab947d70079 100644 --- a/test/logging/index.js +++ b/packages/logging/test/index.js @@ -20,9 +20,10 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); var googleProtoFiles = require('google-proto-files'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); -var util = require('../../lib/common/util.js'); +var util = require('@google-cloud/common').util; +var PKG = require('../package.json'); var extended = false; var fakeStreamRouter = { @@ -83,27 +84,25 @@ describe('Logging', function() { var PROJECT_ID = 'project-id'; before(function() { - mockery.registerMock('../../lib/common/grpc-service.js', FakeGrpcService); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.registerMock('../../lib/bigquery/dataset.js', FakeDataset); - mockery.registerMock('../../lib/pubsub/topic.js', FakeTopic); - mockery.registerMock('../../lib/storage/bucket.js', FakeBucket); - mockery.registerMock('../../lib/logging/log.js', FakeLog); - mockery.registerMock('../../lib/logging/entry.js', FakeEntry); - mockery.registerMock('../../lib/logging/sink.js', FakeSink); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Logging = proxyquire('../', { + '@google-cloud/common': { + GrpcService: FakeGrpcService, + streamRouter: fakeStreamRouter, + util: fakeUtil + }, + '@google-cloud/bigquery': { + Dataset: FakeDataset + }, + '@google-cloud/pubsub': { + Topic: FakeTopic + }, + '@google-cloud/storage': { + Bucket: FakeBucket + }, + './log.js': FakeLog, + './entry.js': FakeEntry, + './sink.js': FakeSink }); - - Logging = require('../../lib/logging/index.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { @@ -115,11 +114,6 @@ describe('Logging', function() { logging.request = util.noop; }); - after(function() { - mockery.deregisterAll(); - mockery.disable(); - }); - describe('instantiation', function() { it('should extend the correct methods', function() { assert(extended); // See `fakeStreamRouter.extend` @@ -166,6 +160,7 @@ describe('Logging', function() { assert.deepEqual(calledWith.scopes, [ 'https://www.googleapis.com/auth/cloud-platform' ]); + assert.strictEqual(calledWith.userAgent, PKG.name + '/' + PKG.version); }); }); diff --git a/test/logging/log.js b/packages/logging/test/log.js similarity index 96% rename from test/logging/log.js rename to packages/logging/test/log.js index 79df491c522..d31296d2c22 100644 --- a/test/logging/log.js +++ b/packages/logging/test/log.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); -var Entry = require('../../lib/logging/entry.js'); -var GrpcServiceObject = require('../../lib/common/grpc-service-object.js'); -var util = require('../../lib/common/util.js'); +var Entry = require('../src/entry.js'); +var GrpcServiceObject = require('@google-cloud/common').GrpcServiceObject; +var util = require('@google-cloud/common').util; function FakeGrpcServiceObject() { this.calledWith_ = arguments; @@ -52,18 +52,12 @@ describe('Log', function() { var assignSeverityToEntriesOverride = null; before(function() { - mockery.registerMock( - '../../lib/common/grpc-service-object.js', - FakeGrpcServiceObject - ); - mockery.registerMock('../../lib/logging/entry.js', Entry); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Log = proxyquire('../src/log.js', { + './entry.js': Entry, + '@google-cloud/common': { + GrpcServiceObject: FakeGrpcServiceObject + } }); - - Log = require('../../lib/logging/log.js'); var assignSeverityToEntries_ = Log.assignSeverityToEntries_; Log.assignSeverityToEntries_ = function() { return (assignSeverityToEntriesOverride || assignSeverityToEntries_) @@ -71,11 +65,6 @@ describe('Log', function() { }; }); - after(function() { - mockery.deregisterAll(); - mockery.disable(); - }); - beforeEach(function() { assignSeverityToEntriesOverride = null; extend(FakeGrpcServiceObject, GrpcServiceObject); diff --git a/test/logging/sink.js b/packages/logging/test/sink.js similarity index 93% rename from test/logging/sink.js rename to packages/logging/test/sink.js index 3e4147adced..30138f2a6f1 100644 --- a/test/logging/sink.js +++ b/packages/logging/test/sink.js @@ -18,9 +18,9 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); -var util = require('../../lib/common/util.js'); +var util = require('@google-cloud/common').util; function FakeGrpcServiceObject() { this.calledWith_ = arguments; @@ -37,22 +37,11 @@ describe('Sink', function() { var SINK_NAME = 'sink-name'; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeGrpcServiceObject - ); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Sink = proxyquire('../src/sink.js', { + '@google-cloud/common': { + GrpcServiceObject: FakeGrpcServiceObject + } }); - - Sink = require('../../lib/logging/sink.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/packages/prediction/package.json b/packages/prediction/package.json new file mode 100644 index 00000000000..ca13851eb0f --- /dev/null +++ b/packages/prediction/package.json @@ -0,0 +1,80 @@ +{ + "name": "@google-cloud/prediction", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google Cloud Prediction Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google prediction", + "prediction" + ], + "dependencies": { + "JSONStream": "^1.0.7", + "arrify": "^1.0.0", + "extend": "^3.0.0", + "@google-cloud/common": "^0.1.0", + "is": "^3.0.1", + "pumpify": "^1.3.3", + "stream-events": "^1.0.1", + "string-format-obj": "^1.0.0", + "through2": "^2.0.0" + }, + "devDependencies": { + "async": "^1.4.2", + "concat-stream": "^1.5.0", + "@google-cloud/storage": "^0.1.0", + "mocha": "^2.1.0", + "node-uuid": "^1.4.3", + "proxyquire": "^1.7.10" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/prediction/index.js b/packages/prediction/src/index.js similarity index 96% rename from lib/prediction/index.js rename to packages/prediction/src/index.js index 267feca0c78..24624772a74 100644 --- a/lib/prediction/index.js +++ b/packages/prediction/src/index.js @@ -21,10 +21,12 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var extend = require('extend'); var format = require('string-format-obj'); var is = require('is'); var nodeutil = require('util'); +var PKG = require('../package.json'); /** * @type {module:prediction/model} @@ -36,19 +38,19 @@ var Model = require('./model.js'); * @type {module:common/service} * @private */ -var Service = require('../common/service.js'); +var Service = common.Service; /** * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * The [Google Prediction API](https://cloud.google.com/prediction/docs/getting-started) @@ -81,7 +83,7 @@ var util = require('../common/util.js'); * @param {object} options - [Configuration object](#/docs). * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); @@ -99,7 +101,8 @@ function Prediction(options) { scopes: [ 'https://www.googleapis.com/auth/prediction', 'https://www.googleapis.com/auth/devstorage.read_only' - ] + ], + userAgent: PKG.name + '/' + PKG.version }; Service.call(this, config, options); @@ -331,4 +334,6 @@ Prediction.prototype.model = function(id) { */ streamRouter.extend(Prediction, 'getModels'); +Prediction.Model = Model; + module.exports = Prediction; diff --git a/lib/prediction/model.js b/packages/prediction/src/model.js similarity index 98% rename from lib/prediction/model.js rename to packages/prediction/src/model.js index eccaf0899c8..e37b4ccb693 100644 --- a/lib/prediction/model.js +++ b/packages/prediction/src/model.js @@ -21,6 +21,7 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var JSONStream = require('JSONStream'); var nodeutil = require('util'); var pumpify = require('pumpify'); @@ -31,13 +32,13 @@ var through = require('through2'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -56,7 +57,7 @@ var util = require('../common/util.js'); * @alias module:compute/address * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/system-test/data/language_id.txt b/packages/prediction/system-test/data/language_id.txt similarity index 100% rename from system-test/data/language_id.txt rename to packages/prediction/system-test/data/language_id.txt diff --git a/system-test/prediction.js b/packages/prediction/system-test/prediction.js similarity index 97% rename from system-test/prediction.js rename to packages/prediction/system-test/prediction.js index 5e61e603677..0fce6e2d55a 100644 --- a/system-test/prediction.js +++ b/packages/prediction/system-test/prediction.js @@ -20,9 +20,9 @@ var assert = require('assert'); var async = require('async'); var uuid = require('node-uuid'); -var env = require('./env.js'); -var Prediction = require('../lib/prediction/index.js'); -var Storage = require('../lib/storage/index.js'); +var env = require('../../../system-test/env.js'); +var Prediction = require('../'); +var Storage = require('@google-cloud/storage'); describe('Prediction', function() { var TESTS_PREFIX = 'gcloud-test-prediction-'; diff --git a/test/prediction/index.js b/packages/prediction/test/index.js similarity index 94% rename from test/prediction/index.js rename to packages/prediction/test/index.js index ba94d91c50f..51f93bd7d78 100644 --- a/test/prediction/index.js +++ b/packages/prediction/test/index.js @@ -19,11 +19,12 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var Service = require('../../lib/common/service.js'); -var util = require('../../lib/common/util.js'); +var Service = require('@google-cloud/common').Service; +var util = require('@google-cloud/common').util; +var PKG = require('../package.json'); var fakeUtil = extend({}, util, { makeAuthenticatedRequestFactory: util.noop @@ -61,21 +62,14 @@ describe('Prediction', function() { var PROJECT_ID = 'project-id'; before(function() { - mockery.registerMock('../../lib/common/service.js', FakeService); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.registerMock('../../lib/prediction/model.js', FakeModel); - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Prediction = proxyquire('../', { + '@google-cloud/common': { + Service: FakeService, + streamRouter: fakeStreamRouter, + util: fakeUtil + }, + './model.js': FakeModel, }); - - Prediction = require('../../lib/prediction/index.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { @@ -119,6 +113,7 @@ describe('Prediction', function() { 'https://www.googleapis.com/auth/prediction', 'https://www.googleapis.com/auth/devstorage.read_only' ]); + assert.strictEqual(calledWith.userAgent, PKG.name + '/' + PKG.version); }); }); diff --git a/test/prediction/model.js b/packages/prediction/test/model.js similarity index 96% rename from test/prediction/model.js rename to packages/prediction/test/model.js index 48add95d8cd..46d73fb1613 100644 --- a/test/prediction/model.js +++ b/packages/prediction/test/model.js @@ -19,12 +19,12 @@ var assert = require('assert'); var concat = require('concat-stream'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); var through = require('through2'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -53,23 +53,12 @@ describe('Index', function() { var ID = 'model-id'; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Model = proxyquire('../src/model.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject, + util: fakeUtil + } }); - - Model = require('../../lib/prediction/model.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/packages/pubsub/package.json b/packages/pubsub/package.json new file mode 100644 index 00000000000..5adcef08975 --- /dev/null +++ b/packages/pubsub/package.json @@ -0,0 +1,75 @@ +{ + "name": "@google-cloud/pubsub", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google Cloud Pub/Sub Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google pubsub", + "pubsub" + ], + "dependencies": { + "arrify": "^1.0.0", + "extend": "^3.0.0", + "@google-cloud/common": "^0.1.0", + "is": "^3.0.1", + "modelo": "^4.2.0", + "propprop": "^0.3.0" + }, + "devDependencies": { + "async": "^1.4.2", + "mocha": "^2.1.0", + "node-uuid": "^1.4.3", + "proxyquire": "^1.7.10" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/pubsub/iam.js b/packages/pubsub/src/iam.js similarity index 98% rename from lib/pubsub/iam.js rename to packages/pubsub/src/iam.js index 5b38b579b7c..176bf7193cb 100644 --- a/lib/pubsub/iam.js +++ b/packages/pubsub/src/iam.js @@ -21,6 +21,7 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var is = require('is'); var nodeutil = require('util'); @@ -28,7 +29,7 @@ var nodeutil = require('util'); * @type {module:common/grpc-service} * @private */ -var GrpcService = require('../common/grpc-service.js'); +var GrpcService = common.GrpcService; /*! Developer Documentation * diff --git a/lib/pubsub/index.js b/packages/pubsub/src/index.js similarity index 98% rename from lib/pubsub/index.js rename to packages/pubsub/src/index.js index b12fa334614..f5ee4fa3a85 100644 --- a/lib/pubsub/index.js +++ b/packages/pubsub/src/index.js @@ -21,15 +21,17 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); var nodeutil = require('util'); +var PKG = require('../package.json'); /** * @type {module:common/grpc-service} * @private */ -var GrpcService = require('../common/grpc-service.js'); +var GrpcService = common.GrpcService; /** * @type {module:pubsub/subscription} @@ -41,7 +43,7 @@ var Subscription = require('./subscription.js'); * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:pubsub/topic} @@ -53,7 +55,7 @@ var Topic = require('./topic.js'); * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * [Google Cloud Pub/Sub](https://developers.google.com/pubsub/overview) is a @@ -75,7 +77,7 @@ var util = require('../common/util.js'); * @param {object} options - [Configuration object](#/docs). * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'my-project' * }); @@ -99,7 +101,8 @@ function PubSub(options) { scopes: [ 'https://www.googleapis.com/auth/pubsub', 'https://www.googleapis.com/auth/cloud-platform' - ] + ], + userAgent: PKG.name + '/' + PKG.version }; this.options = options; @@ -612,4 +615,7 @@ PubSub.prototype.determineBaseUrl_ = function() { */ streamRouter.extend(PubSub, ['getSubscriptions', 'getTopics']); +PubSub.Subscription = Subscription; +PubSub.Topic = Topic; + module.exports = PubSub; diff --git a/lib/pubsub/subscription.js b/packages/pubsub/src/subscription.js similarity index 99% rename from lib/pubsub/subscription.js rename to packages/pubsub/src/subscription.js index bd48ec50679..53a321c9a08 100644 --- a/lib/pubsub/subscription.js +++ b/packages/pubsub/src/subscription.js @@ -21,6 +21,7 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var events = require('events'); var is = require('is'); var modelo = require('modelo'); @@ -30,7 +31,7 @@ var prop = require('propprop'); * @type {module:common/grpc-service-object} * @private */ -var GrpcServiceObject = require('../common/grpc-service-object.js'); +var GrpcServiceObject = common.GrpcServiceObject; /** * @type {module:pubsub/iam} @@ -42,7 +43,7 @@ var IAM = require('./iam.js'); * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * @const {number} - The amount of time a subscription pull HTTP connection to @@ -91,6 +92,7 @@ var PUBSUB_API_TIMEOUT = 90000; * @constructor * * @example + * var gcloud = require('google-cloud'); * var pubsub = gcloud.pubsub({ * projectId: 'grape-spaceship-123' * }); diff --git a/lib/pubsub/topic.js b/packages/pubsub/src/topic.js similarity index 98% rename from lib/pubsub/topic.js rename to packages/pubsub/src/topic.js index 07113d78adf..155616c8e7b 100644 --- a/lib/pubsub/topic.js +++ b/packages/pubsub/src/topic.js @@ -21,6 +21,7 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var is = require('is'); var nodeutil = require('util'); var prop = require('propprop'); @@ -29,7 +30,7 @@ var prop = require('propprop'); * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * @type {module:pubsub/iam} @@ -41,7 +42,7 @@ var IAM = require('./iam.js'); * @type {module:common/grpc-service-object} * @private */ -var GrpcServiceObject = require('../common/grpc-service-object.js'); +var GrpcServiceObject = common.GrpcServiceObject; /*! Developer Documentation * @@ -55,6 +56,7 @@ var GrpcServiceObject = require('../common/grpc-service-object.js'); * @alias module:pubsub/topic * * @example + * var gcloud = require('google-cloud'); * var pubsub = gcloud.pubsub({ * projectId: 'grape-spaceship-123' * }); diff --git a/system-test/pubsub.js b/packages/pubsub/system-test/pubsub.js similarity index 98% rename from system-test/pubsub.js rename to packages/pubsub/system-test/pubsub.js index 006155d097c..de9d371f631 100644 --- a/system-test/pubsub.js +++ b/packages/pubsub/system-test/pubsub.js @@ -20,12 +20,9 @@ var assert = require('assert'); var async = require('async'); var uuid = require('node-uuid'); -var env = require('./env.js'); -var gcloud = require('../lib')(env); - -var Subscription = require('../lib/pubsub/subscription.js'); - -var pubsub = gcloud.pubsub(); +var env = require('../../../system-test/env.js'); +var Subscription = require('../src/subscription.js'); +var pubsub = require('../')(env); function generateTopicName() { return 'test-topic-' + uuid.v4(); diff --git a/test/pubsub/iam.js b/packages/pubsub/test/iam.js similarity index 91% rename from test/pubsub/iam.js rename to packages/pubsub/test/iam.js index 0190e54193f..cdf6310aa88 100644 --- a/test/pubsub/iam.js +++ b/packages/pubsub/test/iam.js @@ -17,11 +17,11 @@ 'use strict'; var assert = require('assert'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var GrpcService = require('../../lib/common/grpc-service.js'); -var util = require('../../lib/common/util.js'); +var GrpcService = require('@google-cloud/common').GrpcService; +var util = require('@google-cloud/common').util; function FakeGrpcService() { this.calledWith_ = arguments; @@ -41,19 +41,11 @@ describe('IAM', function() { var ID = 'id'; before(function() { - mockery.registerMock('../../lib/common/grpc-service.js', FakeGrpcService); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + IAM = proxyquire('../src/iam.js', { + '@google-cloud/common': { + GrpcService: FakeGrpcService + } }); - - IAM = require('../../lib/pubsub/iam.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/pubsub/index.js b/packages/pubsub/test/index.js similarity index 96% rename from test/pubsub/index.js rename to packages/pubsub/test/index.js index a5c4e59d6d7..e980bc64772 100644 --- a/test/pubsub/index.js +++ b/packages/pubsub/test/index.js @@ -19,12 +19,13 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); -var Topic = require('../../lib/pubsub/topic.js'); -var util = require('../../lib/common/util.js'); +var Topic = require('../src/topic.js'); +var util = require('@google-cloud/common').util; +var PKG = require('../package.json'); -var SubscriptionCached = require('../../lib/pubsub/subscription.js'); +var SubscriptionCached = require('../src/subscription.js'); var SubscriptionOverride; function Subscription(a, b) { @@ -61,28 +62,22 @@ describe('PubSub', function() { var PUBSUB_EMULATOR_HOST = process.env.PUBSUB_EMULATOR_HOST; before(function() { - mockery.registerMock('../../lib/common/grpc-service.js', FakeGrpcService); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.registerMock('../../lib/pubsub/subscription.js', Subscription); - mockery.registerMock('../../lib/pubsub/topic.js', Topic); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false - }); - delete process.env.PUBSUB_EMULATOR_HOST; - PubSub = require('../../lib/pubsub'); + PubSub = proxyquire('../', { + '@google-cloud/common': { + GrpcService: FakeGrpcService, + streamRouter: fakeStreamRouter, + util: fakeUtil + }, + './subscription.js': Subscription, + './topic.js': Topic + }); }); after(function() { if (PUBSUB_EMULATOR_HOST) { process.env.PUBSUB_EMULATOR_HOST = PUBSUB_EMULATOR_HOST; } - - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { @@ -128,6 +123,7 @@ describe('PubSub', function() { 'https://www.googleapis.com/auth/pubsub', 'https://www.googleapis.com/auth/cloud-platform' ]); + assert.strictEqual(calledWith.userAgent, PKG.name + '/' + PKG.version); }); it('should set the defaultBaseUrl_', function() { diff --git a/test/pubsub/subscription.js b/packages/pubsub/test/subscription.js similarity index 98% rename from test/pubsub/subscription.js rename to packages/pubsub/test/subscription.js index 168e4e87cba..e54beda2abe 100644 --- a/test/pubsub/subscription.js +++ b/packages/pubsub/test/subscription.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); +var proxyquire = require('proxyquire'); var nodeutil = require('util'); -var GrpcServiceObject = require('../../lib/common/grpc-service-object.js'); -var util = require('../../lib/common/util.js'); +var GrpcServiceObject = require('@google-cloud/common').GrpcServiceObject; +var util = require('@google-cloud/common').util; function FakeIAM() { this.calledWith_ = [].slice.call(arguments); @@ -71,30 +71,19 @@ describe('Subscription', function() { }; before(function() { - mockery.registerMock( - '../../lib/common/grpc-service-object.js', - FakeGrpcServiceObject - ); - mockery.registerMock('../../lib/pubsub/iam.js', FakeIAM); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Subscription = proxyquire('../src/subscription.js', { + '@google-cloud/common': { + GrpcServiceObject: FakeGrpcServiceObject + }, + './iam.js': FakeIAM }); - Subscription = require('../../lib/pubsub/subscription.js'); - var formatMessage = Subscription.formatMessage_; Subscription.formatMessage_ = function() { return (formatMessageOverride || formatMessage).apply(null, arguments); }; }); - after(function() { - mockery.deregisterAll(); - mockery.disable(); - }); - beforeEach(function() { subscription = new Subscription(PUBSUB, { name: SUB_NAME }); }); diff --git a/test/pubsub/topic.js b/packages/pubsub/test/topic.js similarity index 93% rename from test/pubsub/topic.js rename to packages/pubsub/test/topic.js index 98a49e7b7a4..58675909371 100644 --- a/test/pubsub/topic.js +++ b/packages/pubsub/test/topic.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); -var util = require('../../lib/common/util.js'); -var GrpcServiceObject = require('../../lib/common/grpc-service-object.js'); +var util = require('@google-cloud/common').util; +var GrpcServiceObject = require('@google-cloud/common').GrpcServiceObject; function FakeIAM() { this.calledWith_ = [].slice.call(arguments); @@ -48,23 +48,12 @@ describe('Topic', function() { }; before(function() { - mockery.registerMock( - '../../lib/common/grpc-service-object.js', - FakeGrpcServiceObject - ); - mockery.registerMock('../../lib/pubsub/iam.js', FakeIAM); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Topic = proxyquire('../src/topic.js', { + './iam.js': FakeIAM, + '@google-cloud/common': { + GrpcServiceObject: FakeGrpcServiceObject + } }); - - Topic = require('../../lib/pubsub/topic.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/packages/resource/package.json b/packages/resource/package.json new file mode 100644 index 00000000000..b1e8bace971 --- /dev/null +++ b/packages/resource/package.json @@ -0,0 +1,72 @@ +{ + "name": "@google-cloud/resource", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google Cloud Resource Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google resource", + "resource" + ], + "dependencies": { + "extend": "^3.0.0", + "@google-cloud/common": "^0.1.0", + "is": "^3.0.1" + }, + "devDependencies": { + "arrify": "^1.0.0", + "google-auto-auth": "^0.2.4", + "mocha": "^2.1.0", + "proxyquire": "^1.7.10" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/resource/index.js b/packages/resource/src/index.js similarity index 96% rename from lib/resource/index.js rename to packages/resource/src/index.js index 7450dbc0fee..95422de876d 100644 --- a/lib/resource/index.js +++ b/packages/resource/src/index.js @@ -20,9 +20,11 @@ 'use strict'; +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); var nodeutil = require('util'); +var PKG = require('../package.json'); /** * @type {module:resource/project} @@ -34,19 +36,19 @@ var Project = require('./project.js'); * @type {module:common/service} * @private */ -var Service = require('../common/service.js'); +var Service = common.Service; /** * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * [The Cloud Resource Manager](https://cloud.google.com/resource-manager/) @@ -78,7 +80,7 @@ var util = require('../common/util.js'); * @param {object} options - [Configuration object](#/docs). * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); @@ -96,7 +98,8 @@ function Resource(options) { var config = { baseUrl: 'https://cloudresourcemanager.googleapis.com/v1beta1', scopes: ['https://www.googleapis.com/auth/cloud-platform'], - projectIdRequired: false + projectIdRequired: false, + userAgent: PKG.name + '/' + PKG.version }; Service.call(this, config, options); @@ -288,4 +291,6 @@ Resource.prototype.project = function(id) { */ streamRouter.extend(Resource, ['getProjects']); +Resource.Project = Project; + module.exports = Resource; diff --git a/lib/resource/project.js b/packages/resource/src/project.js similarity index 97% rename from lib/resource/project.js rename to packages/resource/src/project.js index cfda1f8b6ae..ac6ccbfb8bb 100644 --- a/lib/resource/project.js +++ b/packages/resource/src/project.js @@ -20,19 +20,20 @@ 'use strict'; +var common = require('@google-cloud/common'); var nodeutil = require('util'); /** * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -49,7 +50,7 @@ var util = require('../common/util.js'); * @alias module:resource/project * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); diff --git a/system-test/resource.js b/packages/resource/system-test/resource.js similarity index 97% rename from system-test/resource.js rename to packages/resource/system-test/resource.js index bb615901242..50d633fdef3 100644 --- a/system-test/resource.js +++ b/packages/resource/system-test/resource.js @@ -19,8 +19,8 @@ var assert = require('assert'); var googleAuth = require('google-auto-auth'); -var env = require('./env.js'); -var Resource = require('../lib/resource/index.js'); +var env = require('../../../system-test/env.js'); +var Resource = require('../'); describe('Resource', function() { var resource = new Resource(env); diff --git a/test/resource/index.js b/packages/resource/test/index.js similarity index 93% rename from test/resource/index.js rename to packages/resource/test/index.js index a76911a00a2..3e074c0e006 100644 --- a/test/resource/index.js +++ b/packages/resource/test/index.js @@ -19,11 +19,12 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); -var Service = require('../../lib/common/service.js'); -var util = require('../../lib/common/util.js'); +var Service = require('@google-cloud/common').Service; +var util = require('@google-cloud/common').util; +var PKG = require('../package.json'); function FakeProject() { this.calledWith_ = [].slice.call(arguments); @@ -68,22 +69,14 @@ describe('Resource', function() { var resource; before(function() { - mockery.registerMock('../../lib/common/service.js', FakeService); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.registerMock('../../lib/resource/project.js', FakeProject); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Resource = proxyquire('../', { + '@google-cloud/common': { + Service: FakeService, + streamRouter: fakeStreamRouter, + util: fakeUtil + }, + './project.js': FakeProject }); - - Resource = require('../../lib/resource/index.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { @@ -133,6 +126,7 @@ describe('Resource', function() { 'https://www.googleapis.com/auth/cloud-platform' ]); assert.strictEqual(resource.projectIdRequired, false); + assert.strictEqual(calledWith.userAgent, PKG.name + '/' + PKG.version); }); }); diff --git a/test/resource/project.js b/packages/resource/test/project.js similarity index 86% rename from test/resource/project.js rename to packages/resource/test/project.js index eead6ad1c28..27f117cf671 100644 --- a/test/resource/project.js +++ b/packages/resource/test/project.js @@ -18,11 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeServiceObject() { this.calledWith_ = arguments; @@ -41,22 +41,11 @@ describe('Project', function() { var ID = 'project-id'; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Project = proxyquire('../src/project.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - Project = require('../../lib/resource/project.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/packages/storage/package.json b/packages/storage/package.json new file mode 100644 index 00000000000..d0d9b138c45 --- /dev/null +++ b/packages/storage/package.json @@ -0,0 +1,89 @@ +{ + "name": "@google-cloud/storage", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google Cloud Storage Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google storage", + "storage" + ], + "dependencies": { + "arrify": "^1.0.0", + "async": "^1.4.2", + "concat-stream": "^1.5.0", + "create-error-class": "^2.0.1", + "duplexify": "^3.2.0", + "extend": "^3.0.0", + "gcs-resumable-upload": "^0.7.1", + "@google-cloud/common": "^0.1.0", + "hash-stream-validation": "^0.2.1", + "is": "^3.0.1", + "mime-types": "^2.0.8", + "once": "^1.3.1", + "pumpify": "^1.3.3", + "stream-events": "^1.0.1", + "string-format-obj": "^1.0.0", + "through2": "^2.0.0" + }, + "devDependencies": { + "mocha": "^2.1.0", + "node-uuid": "^1.4.3", + "normalize-newline": "^2.0.0", + "prop-assign": "^1.0.0", + "propprop": "^0.3.0", + "proxyquire": "^1.7.10", + "request": "^2.70.0", + "tmp": "0.0.27" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/storage/acl.js b/packages/storage/src/acl.js similarity index 100% rename from lib/storage/acl.js rename to packages/storage/src/acl.js diff --git a/lib/storage/bucket.js b/packages/storage/src/bucket.js similarity index 99% rename from lib/storage/bucket.js rename to packages/storage/src/bucket.js index 401e0e11d2d..3c8cd3186ae 100644 --- a/lib/storage/bucket.js +++ b/packages/storage/src/bucket.js @@ -22,6 +22,7 @@ var arrify = require('arrify'); var async = require('async'); +var common = require('@google-cloud/common'); var extend = require('extend'); var fs = require('fs'); var is = require('is'); @@ -45,19 +46,19 @@ var File = require('./file.js'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * The size of a file (in bytes) must be greater than this number to @@ -83,7 +84,7 @@ var RESUMABLE_THRESHOLD = 5000000; * a `keyFilename`. * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * * var gcs = gcloud.storage({ * keyFilename: '/path/to/keyfile.json', diff --git a/lib/storage/channel.js b/packages/storage/src/channel.js similarity index 94% rename from lib/storage/channel.js rename to packages/storage/src/channel.js index acae9c5a175..9d58cb63367 100644 --- a/lib/storage/channel.js +++ b/packages/storage/src/channel.js @@ -20,19 +20,20 @@ 'use strict'; +var common = require('@google-cloud/common'); var nodeutil = require('util'); /** * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documenation * @@ -50,7 +51,7 @@ var util = require('../common/util.js'); * @param {string} resourceId - The resource ID of the channel. * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * * var gcs = gcloud.storage({ * keyFilename: '/path/to/keyfile.json', diff --git a/lib/storage/file.js b/packages/storage/src/file.js similarity index 99% rename from lib/storage/file.js rename to packages/storage/src/file.js index 6cc3b414bde..8bdec7dcc91 100644 --- a/lib/storage/file.js +++ b/packages/storage/src/file.js @@ -20,6 +20,7 @@ 'use strict'; +var common = require('@google-cloud/common'); var concat = require('concat-stream'); var createErrorClass = require('create-error-class'); var crypto = require('crypto'); @@ -47,13 +48,13 @@ var Acl = require('./acl.js'); * @type {module:common/service-object} * @private */ -var ServiceObject = require('../common/service-object.js'); +var ServiceObject = common.ServiceObject; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * Custom error type for errors related to getting signed errors and policies. @@ -102,7 +103,7 @@ var GS_URL_REGEXP = /^gs\:\/\/([a-z0-9_\.\-]+)\/(.+)$/; * @constructor * * @example - * var gcloud = require('gcloud'); + * var gcloud = require('google-cloud'); * * var gcs = gcloud.storage({ * keyFilename: '/path/to/keyfile.json', diff --git a/lib/storage/index.js b/packages/storage/src/index.js similarity index 96% rename from lib/storage/index.js rename to packages/storage/src/index.js index 105036d7cf6..92ca749f86a 100644 --- a/lib/storage/index.js +++ b/packages/storage/src/index.js @@ -21,8 +21,10 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var extend = require('extend'); var nodeutil = require('util'); +var PKG = require('../package.json'); /** * @type {module:storage/bucket} @@ -36,23 +38,29 @@ var Bucket = require('./bucket.js'); */ var Channel = require('./channel.js'); +/** + * @type {module:storage/file} + * @private + */ +var File = require('./file.js'); + /** * @type {module:common/service} * @private */ -var Service = require('../common/service.js'); +var Service = common.Service; /** * @type {module:common/stream-router} * @private */ -var streamRouter = require('../common/stream-router.js'); +var streamRouter = common.streamRouter; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /*! Developer Documentation * @@ -91,7 +99,7 @@ var util = require('../common/util.js'); * @param {object} options - [Configuration object](#/docs). * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'my-project' * }); @@ -109,7 +117,8 @@ function Storage(options) { projectIdRequired: false, scopes: [ 'https://www.googleapis.com/auth/devstorage.full_control' - ] + ], + userAgent: PKG.name + '/' + PKG.version }; Service.call(this, config, options); @@ -179,7 +188,7 @@ Storage.prototype.acl = Storage.acl; * @return {module:storage/bucket} * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * projectId: 'grape-spaceship-123', * keyFilename: '/path/to/keyfile.json' * }); @@ -427,4 +436,8 @@ Storage.prototype.getBuckets = function(query, callback) { */ streamRouter.extend(Storage, 'getBuckets'); +Storage.Bucket = Bucket; +Storage.Channel = Channel; +Storage.File = File; + module.exports = Storage; diff --git a/system-test/data/CloudPlatform_128px_Retina.png b/packages/storage/system-test/data/CloudPlatform_128px_Retina.png similarity index 100% rename from system-test/data/CloudPlatform_128px_Retina.png rename to packages/storage/system-test/data/CloudPlatform_128px_Retina.png diff --git a/system-test/data/long-html-file.html b/packages/storage/system-test/data/long-html-file.html similarity index 100% rename from system-test/data/long-html-file.html rename to packages/storage/system-test/data/long-html-file.html diff --git a/system-test/data/long-html-file.html.gz b/packages/storage/system-test/data/long-html-file.html.gz similarity index 100% rename from system-test/data/long-html-file.html.gz rename to packages/storage/system-test/data/long-html-file.html.gz diff --git a/system-test/data/three-mb-file.tif b/packages/storage/system-test/data/three-mb-file.tif similarity index 100% rename from system-test/data/three-mb-file.tif rename to packages/storage/system-test/data/three-mb-file.tif diff --git a/system-test/storage.js b/packages/storage/system-test/storage.js similarity index 98% rename from system-test/storage.js rename to packages/storage/system-test/storage.js index 939f5faf7cc..368e90db710 100644 --- a/system-test/storage.js +++ b/packages/storage/system-test/storage.js @@ -21,16 +21,18 @@ var async = require('async'); var crypto = require('crypto'); var fs = require('fs'); var normalizeNewline = require('normalize-newline'); +var path = require('path'); var prop = require('propprop'); var request = require('request'); var through = require('through2'); var tmp = require('tmp'); var uuid = require('node-uuid'); -var Bucket = require('../lib/storage/bucket.js'); -var env = require('./env.js'); -var File = require('../lib/storage/file.js'); -var Storage = require('../lib/storage/index.js'); +var Storage = require('../'); + +var Bucket = Storage.Bucket; +var env = require('../../../system-test/env.js'); +var File = Storage.File; describe('storage', function() { var TESTS_PREFIX = 'gcloud-test-'; @@ -40,16 +42,16 @@ describe('storage', function() { var FILES = { logo: { - path: 'system-test/data/CloudPlatform_128px_Retina.png' + path: path.join(__dirname, 'data/CloudPlatform_128px_Retina.png') }, big: { - path: 'system-test/data/three-mb-file.tif' + path: path.join(__dirname, 'data/three-mb-file.tif') }, html: { - path: 'system-test/data/long-html-file.html' + path: path.join(__dirname, 'data/long-html-file.html') }, gzip: { - path: 'system-test/data/long-html-file.html.gz' + path: path.join(__dirname, 'data/long-html-file.html.gz') } }; diff --git a/test/storage/acl.js b/packages/storage/test/acl.js similarity index 98% rename from test/storage/acl.js rename to packages/storage/test/acl.js index ae3398e3c79..ad1f3bfa688 100644 --- a/test/storage/acl.js +++ b/packages/storage/test/acl.js @@ -16,11 +16,11 @@ 'use strict'; -var Acl = require('../../lib/storage/acl.js'); +var Acl = require('../src/acl.js'); var assert = require('assert'); var async = require('async'); -var Storage = require('../../lib/storage/index.js'); -var util = require('../../lib/common/util.js'); +var Storage = require('../'); +var util = require('@google-cloud/common').util; describe('storage/acl', function() { var acl; diff --git a/test/storage/bucket.js b/packages/storage/test/bucket.js similarity index 97% rename from test/storage/bucket.js rename to packages/storage/test/bucket.js index 510d6857fa3..748e3414bb2 100644 --- a/test/storage/bucket.js +++ b/packages/storage/test/bucket.js @@ -21,14 +21,15 @@ var assert = require('assert'); var async = require('async'); var extend = require('extend'); var mime = require('mime-types'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var path = require('path'); +var proxyquire = require('proxyquire'); var propAssign = require('prop-assign'); var request = require('request'); var stream = require('stream'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; function FakeFile(bucket, name, options) { var self = this; @@ -104,27 +105,16 @@ describe('Bucket', function() { var BUCKET_NAME = 'test-bucket'; before(function() { - mockery.registerMock('async', fakeAsync); - mockery.registerMock('request', fakeRequest); - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/storage/acl.js', FakeAcl); - mockery.registerMock('../../lib/storage/file.js', FakeFile); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false - }); - - Bucket = require('../../lib/storage/bucket.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); + Bucket = proxyquire('../src/bucket.js', { + async: fakeAsync, + request: fakeRequest, + '@google-cloud/common': { + ServiceObject: FakeServiceObject, + streamRouter: fakeStreamRouter + }, + './acl.js': FakeAcl, + './file.js': FakeFile + }); }); beforeEach(function() { @@ -889,8 +879,8 @@ describe('Bucket', function() { describe('upload', function() { var basename = 'testfile.json'; - var filepath = 'test/testdata/' + basename; - var textFilepath = 'test/testdata/textfile.txt'; + var filepath = path.join(__dirname, 'testdata/' + basename); + var textFilepath = path.join(__dirname, 'testdata/textfile.txt'); var metadata = { a: 'b', c: 'd' }; beforeEach(function() { diff --git a/test/storage/channel.js b/packages/storage/test/channel.js similarity index 86% rename from test/storage/channel.js rename to packages/storage/test/channel.js index 60dad648aad..7825087f808 100644 --- a/test/storage/channel.js +++ b/packages/storage/test/channel.js @@ -21,10 +21,10 @@ 'use strict'; var assert = require('assert'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); -var ServiceObject = require('../../lib/common/service-object.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; function FakeServiceObject() { this.calledWith_ = arguments; @@ -42,22 +42,11 @@ describe('Channel', function() { var channel; before(function() { - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Channel = proxyquire('../src/channel.js', { + '@google-cloud/common': { + ServiceObject: FakeServiceObject + } }); - - Channel = require('../../lib/storage/channel.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { diff --git a/test/storage/file.js b/packages/storage/test/file.js similarity index 98% rename from test/storage/file.js rename to packages/storage/test/file.js index 9cef8af4421..379bbdc9512 100644 --- a/test/storage/file.js +++ b/packages/storage/test/file.js @@ -21,8 +21,8 @@ var duplexify; var extend = require('extend'); var format = require('string-format-obj'); var fs = require('fs'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); var request = require('request'); var stream = require('stream'); var through = require('through2'); @@ -30,9 +30,9 @@ var tmp = require('tmp'); var url = require('url'); var crypto = require('crypto'); -var Bucket = require('../../lib/storage/bucket.js'); -var ServiceObject = require('../../lib/common/service-object.js'); -var util = require('../../lib/common/util.js'); +var Bucket = require('../src/bucket.js'); +var ServiceObject = require('@google-cloud/common').ServiceObject; +var util = require('@google-cloud/common').util; var makeWritableStreamOverride; var handleRespOverride; @@ -93,28 +93,17 @@ describe('File', function() { var BUCKET; before(function() { - mockery.registerMock('gcs-resumable-upload', fakeResumableUpload); - mockery.registerMock('request', fakeRequest); - mockery.registerMock( - '../../lib/common/service-object.js', - FakeServiceObject - ); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + File = proxyquire('../src/file.js', { + 'gcs-resumable-upload': fakeResumableUpload, + request: fakeRequest, + '@google-cloud/common': { + ServiceObject: FakeServiceObject, + util: fakeUtil + } }); - - File = require('../../lib/storage/file.js'); duplexify = require('duplexify'); }); - after(function() { - mockery.deregisterAll(); - mockery.disable(); - }); - beforeEach(function() { STORAGE = { createBucket: util.noop, @@ -1433,7 +1422,7 @@ describe('File', function() { }); describe('getSignedPolicy', function() { - var credentials = require('../testdata/privateKeyFile.json'); + var credentials = require('./testdata/privateKeyFile.json'); beforeEach(function() { var storage = BUCKET.storage; @@ -1737,7 +1726,7 @@ describe('File', function() { }); describe('getSignedUrl', function() { - var credentials = require('../testdata/privateKeyFile.json'); + var credentials = require('./testdata/privateKeyFile.json'); beforeEach(function() { var storage = BUCKET.storage; diff --git a/test/storage/index.js b/packages/storage/test/index.js similarity index 93% rename from test/storage/index.js rename to packages/storage/test/index.js index 146b73879f9..8f5adf7376f 100644 --- a/test/storage/index.js +++ b/packages/storage/test/index.js @@ -19,11 +19,12 @@ var arrify = require('arrify'); var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); var nodeutil = require('util'); +var proxyquire = require('proxyquire'); -var Service = require('../../lib/common/service.js'); -var util = require('../../lib/common/util.js'); +var Service = require('@google-cloud/common').Service; +var util = require('@google-cloud/common').util; +var PKG = require('../package.json'); var fakeUtil = extend({}, util); @@ -59,23 +60,15 @@ describe('Storage', function() { var Bucket; before(function() { - mockery.registerMock('../../lib/common/service.js', FakeService); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - mockery.registerMock('../../lib/common/stream-router.js', fakeStreamRouter); - mockery.registerMock('../../lib/storage/channel.js', FakeChannel); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Storage = proxyquire('../', { + '@google-cloud/common': { + Service: FakeService, + util: fakeUtil, + streamRouter: fakeStreamRouter + }, + './channel.js': FakeChannel, }); - - Bucket = require('../../lib/storage/bucket.js'); - Storage = require('../../lib/storage'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); + Bucket = Storage.Bucket; }); beforeEach(function() { @@ -117,6 +110,7 @@ describe('Storage', function() { assert.deepEqual(calledWith.scopes, [ 'https://www.googleapis.com/auth/devstorage.full_control' ]); + assert.strictEqual(calledWith.userAgent, PKG.name + '/' + PKG.version); }); }); diff --git a/test/testdata/privateKeyFile.json b/packages/storage/test/testdata/privateKeyFile.json similarity index 100% rename from test/testdata/privateKeyFile.json rename to packages/storage/test/testdata/privateKeyFile.json diff --git a/packages/storage/test/testdata/testfile.json b/packages/storage/test/testdata/testfile.json new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/testdata/textfile.txt b/packages/storage/test/testdata/textfile.txt similarity index 100% rename from test/testdata/textfile.txt rename to packages/storage/test/testdata/textfile.txt diff --git a/packages/translate/package.json b/packages/translate/package.json new file mode 100644 index 00000000000..94886c35451 --- /dev/null +++ b/packages/translate/package.json @@ -0,0 +1,72 @@ +{ + "name": "@google-cloud/translate", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google Cloud Translate Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google translate", + "translate" + ], + "dependencies": { + "arrify": "^1.0.0", + "extend": "^3.0.0", + "@google-cloud/common": "^0.1.0", + "is": "^3.0.1", + "propprop": "^0.3.0" + }, + "devDependencies": { + "mocha": "^2.1.0", + "proxyquire": "^1.7.10" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/translate/index.js b/packages/translate/src/index.js similarity index 97% rename from lib/translate/index.js rename to packages/translate/src/index.js index 42f49792da1..7b6acfff3fd 100644 --- a/lib/translate/index.js +++ b/packages/translate/src/index.js @@ -21,15 +21,18 @@ 'use strict'; var arrify = require('arrify'); +var common = require('@google-cloud/common'); var extend = require('extend'); var is = require('is'); var prop = require('propprop'); +var PKG = require('../package.json'); +var USER_AGENT = PKG.name + '/' + PKG.version; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; /** * With [Google Translate](https://cloud.google.com/translate), you can @@ -64,7 +67,7 @@ var util = require('../common/util.js'); * @param {string} options.key - An API key. * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); @@ -345,6 +348,9 @@ Translate.prototype.request = function(reqOpts, callback) { reqOpts = extend(true, {}, reqOpts, { qs: { key: this.key + }, + headers: { + 'User-Agent': USER_AGENT } }); diff --git a/system-test/translate.js b/packages/translate/system-test/translate.js similarity index 97% rename from system-test/translate.js rename to packages/translate/system-test/translate.js index 0e65927072a..7824f65a838 100644 --- a/system-test/translate.js +++ b/packages/translate/system-test/translate.js @@ -20,8 +20,8 @@ var assert = require('assert'); var extend = require('extend'); var prop = require('propprop'); -var env = require('./env.js'); -var Translate = require('../lib/translate/index.js'); +var env = require('../../../system-test/env.js'); +var Translate = require('../').Translate; var API_KEY = process.env.GCLOUD_TESTS_API_KEY; diff --git a/test/translate/index.js b/packages/translate/test/index.js similarity index 96% rename from test/translate/index.js rename to packages/translate/test/index.js index a9fa7dee8d3..d7267f0857f 100644 --- a/test/translate/index.js +++ b/packages/translate/test/index.js @@ -18,10 +18,11 @@ var assert = require('assert'); var extend = require('extend'); -var mockery = require('mockery-next'); var prop = require('propprop'); +var proxyquire = require('proxyquire'); -var util = require('../../lib/common/util.js'); +var util = require('@google-cloud/common').util; +var PKG = require('../package.json'); var makeRequestOverride; var fakeUtil = extend({}, util, { @@ -41,19 +42,11 @@ describe('Translate', function() { var translate; before(function() { - mockery.registerMock('../../lib/common/util.js', fakeUtil); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Translate = proxyquire('../', { + '@google-cloud/common': { + util: fakeUtil + } }); - - Translate = require('../../lib/translate/index.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { @@ -381,6 +374,9 @@ describe('Translate', function() { var expectedReqOpts = extend(true, {}, reqOpts, { qs: { key: translate.key + }, + headers: { + 'User-Agent': PKG.name + '/' + PKG.version } }); var BASE_URL = 'https://www.googleapis.com/language/translate/v2'; diff --git a/packages/vision/package.json b/packages/vision/package.json new file mode 100644 index 00000000000..ee733771a88 --- /dev/null +++ b/packages/vision/package.json @@ -0,0 +1,82 @@ +{ + "name": "@google-cloud/vision", + "version": "0.0.0", + "author": "Google Inc.", + "description": "Google Cloud Vision Client Library for Node.js", + "contributors": [ + { + "name": "Burcu Dogan", + "email": "jbd@google.com" + }, + { + "name": "Johan Euphrosine", + "email": "proppy@google.com" + }, + { + "name": "Patrick Costello", + "email": "pcostell@google.com" + }, + { + "name": "Ryan Seys", + "email": "ryan@ryanseys.com" + }, + { + "name": "Silvano Luciani", + "email": "silvano@google.com" + }, + { + "name": "Stephen Sawchuk", + "email": "sawchuk@gmail.com" + } + ], + "main": "./src/index.js", + "files": [ + "./src/*", + "AUTHORS", + "CONTRIBUTORS", + "COPYING" + ], + "repository": "googlecloudplatform/gcloud-node", + "keywords": [ + "google apis client", + "google api client", + "google apis", + "google api", + "google", + "google cloud platform", + "google cloud", + "cloud", + "google vision", + "vision" + ], + "dependencies": { + "arrify": "^1.0.0", + "async": "^1.4.2", + "extend": "^3.0.0", + "@google-cloud/common": "^0.1.0", + "@google-cloud/storage": "^0.1.0", + "is": "^3.0.1", + "propprop": "^0.3.0", + "request": "^2.70.0", + "rgb-hex": "^1.0.0", + "string-format-obj": "^1.0.0" + }, + "devDependencies": { + "async": "^1.4.2", + "deep-strict-equal": "^0.1.0", + "mocha": "^2.1.0", + "multiline": "^1.0.2", + "normalize-newline": "^2.0.0", + "proxyquire": "^1.7.10", + "tmp": "0.0.27" + }, + "scripts": { + "publish": "../../scripts/publish", + "test": "mocha test/*.js", + "system-test": "mocha system-test/*.js --no-timeouts --bail" + }, + "license": "Apache-2.0", + "engines": { + "node": ">=0.12.0" + } +} diff --git a/lib/vision/index.js b/packages/vision/src/index.js similarity index 99% rename from lib/vision/index.js rename to packages/vision/src/index.js index 048eacf5ca3..5f27980c576 100644 --- a/lib/vision/index.js +++ b/packages/vision/src/index.js @@ -22,6 +22,7 @@ var arrify = require('arrify'); var async = require('async'); +var common = require('@google-cloud/common'); var rgbHex = require('rgb-hex'); var extend = require('extend'); var format = require('string-format-obj'); @@ -30,30 +31,31 @@ var is = require('is'); var nodeutil = require('util'); var prop = require('propprop'); var request = require('request'); +var PKG = require('../package.json'); /** * @type {module:storage/file} * @private */ -var File = require('../storage/file.js'); +var File = require('@google-cloud/storage').File; /** * @type {module:common/grpc-service} * @private */ -var GrpcService = require('../common/grpc-service.js'); +var GrpcService = common.GrpcService; /** * @type {module:common/service} * @private */ -var Service = require('../common/service.js'); +var Service = common.Service; /** * @type {module:common/util} * @private */ -var util = require('../common/util.js'); +var util = common.util; var VERY_UNLIKELY = 0; var UNLIKELY = 1; @@ -86,7 +88,7 @@ var VERY_LIKELY = 4; * @param {object} options - [Configuration object](#/docs). * * @example - * var gcloud = require('gcloud')({ + * var gcloud = require('google-cloud')({ * keyFilename: '/path/to/keyfile.json', * projectId: 'grape-spaceship-123' * }); @@ -104,7 +106,8 @@ function Vision(options) { projectIdRequired: false, scopes: [ 'https://www.googleapis.com/auth/cloud-platform' - ] + ], + userAgent: PKG.name + '/' + PKG.version }; Service.call(this, config, options); diff --git a/system-test/data/index.yaml b/packages/vision/system-test/data/index.yaml similarity index 100% rename from system-test/data/index.yaml rename to packages/vision/system-test/data/index.yaml diff --git a/system-test/data/logo.jpg b/packages/vision/system-test/data/logo.jpg similarity index 100% rename from system-test/data/logo.jpg rename to packages/vision/system-test/data/logo.jpg diff --git a/system-test/data/rushmore.jpg b/packages/vision/system-test/data/rushmore.jpg similarity index 100% rename from system-test/data/rushmore.jpg rename to packages/vision/system-test/data/rushmore.jpg diff --git a/system-test/data/text.png b/packages/vision/system-test/data/text.png similarity index 100% rename from system-test/data/text.png rename to packages/vision/system-test/data/text.png diff --git a/system-test/vision.js b/packages/vision/system-test/vision.js similarity index 99% rename from system-test/vision.js rename to packages/vision/system-test/vision.js index aa2e909d518..56b94bd5080 100644 --- a/system-test/vision.js +++ b/packages/vision/system-test/vision.js @@ -24,8 +24,8 @@ var multiline = require('multiline'); var normalizeNewline = require('normalize-newline'); var path = require('path'); -var env = require('./env.js'); -var Vision = require('../lib/vision/index.js'); +var env = require('../../../system-test/env.js'); +var Vision = require('../'); describe('Vision', function() { var vision; diff --git a/test/vision/index.js b/packages/vision/test/index.js similarity index 98% rename from test/vision/index.js rename to packages/vision/test/index.js index 3128a6f169f..ead61cc00c0 100644 --- a/test/vision/index.js +++ b/packages/vision/test/index.js @@ -18,17 +18,18 @@ var assert = require('assert'); var async = require('async'); +var deepStrictEqual = require('deep-strict-equal'); var extend = require('extend'); var fs = require('fs'); -var deepStrictEqual = require('deep-strict-equal'); -var mockery = require('mockery-next'); var nodeutil = require('util'); var prop = require('propprop'); +var proxyquire = require('proxyquire'); var tmp = require('tmp'); -var GrpcService = require('../../lib/common/grpc-service.js'); -var Service = require('../../lib/common/service.js'); -var util = require('../../lib/common/util.js'); +var GrpcService = require('@google-cloud/common').GrpcService; +var Service = require('@google-cloud/common').Service; +var util = require('@google-cloud/common').util; +var PKG = require('../package.json'); var fakeUtil = extend({}, util); @@ -56,22 +57,16 @@ describe('Vision', function() { var vision; before(function() { - mockery.registerMock('request', fakeRequest); - mockery.registerMock('../../lib/storage/file.js', FakeFile); - mockery.registerMock('../../lib/common/service.js', FakeService); - mockery.registerMock('../../lib/common/util.js', fakeUtil); - - mockery.enable({ - useCleanCache: true, - warnOnUnregistered: false + Vision = proxyquire('../', { + request: fakeRequest, + '@google-cloud/storage': { + File: FakeFile + }, + '@google-cloud/common': { + Service: FakeService, + util: fakeUtil + } }); - - Vision = require('../../lib/vision/index.js'); - }); - - after(function() { - mockery.deregisterAll(); - mockery.disable(); }); beforeEach(function() { @@ -113,6 +108,7 @@ describe('Vision', function() { assert.deepEqual(calledWith.scopes, [ 'https://www.googleapis.com/auth/cloud-platform' ]); + assert.strictEqual(calledWith.userAgent, PKG.name + '/' + PKG.version); }); }); diff --git a/scripts/docs.js b/scripts/docs.js index faee12a0185..24937d5cd76 100644 --- a/scripts/docs.js +++ b/scripts/docs.js @@ -27,12 +27,12 @@ var format = require('string-format-obj'); var OUTPUT_FOLDER = './docs/json/master'; var IGNORE = [ - './lib/common/*', - './lib/datastore/entity.js', - './lib/datastore/request.js', - './lib/pubsub/iam.js', - './lib/storage/acl.js', - './lib/bigtable/mutation.js' + './packages/common/src/*', + './packages/datastore/src/entity.js', + './packages/datastore/src/request.js', + './packages/pubsub/src/iam.js', + './packages/storage/src/acl.js', + './packages/bigtable/src/mutation.js' ]; function isPublic(block) { @@ -97,11 +97,11 @@ function createUniqueMethodList(list, method) { function getId(fileName) { var hooks = { - 'index': 'gcloud' + 'index': 'google-cloud' }; var id = fileName - .replace(/^(\.\/)?lib\//, '') + .replace(/^(\.\/)?packages\//, '') .replace('/index.js', '') .replace('.js', ''); @@ -139,7 +139,7 @@ function getParent(id) { } function getChildren(id) { - var childrenGlob = './lib/' + id + '/*'; + var childrenGlob = './packages/' + id + '/*'; return globby .sync(childrenGlob, { ignore: IGNORE }) @@ -266,7 +266,7 @@ function getMixinMethods(comments) { return getTagsByType(block, 'mixes').length; }).map(function(block) { var mixin = getTagsByType(block, 'mixes')[0]; - var mixinFile = path.join('./lib', mixin.string.replace('module:', '') + '.js'); + var mixinFile = path.join('./packages', mixin.string.replace('module:', '').replace('/', '/src/') + '.js'); var mixinContents = fs.readFileSync(mixinFile, 'utf8', true); var docs = parseFile(mixinFile, mixinContents); var methods = docs.methods.filter(function(method) { @@ -311,7 +311,7 @@ function parseFile(fileName, contents) { function createTypesDictionary(docs) { return docs.map(function(service) { var id = service.id; - var title = [id === 'gcloud' ? 'Node.js' : service.name]; + var title = [id === 'google-cloud' ? 'Node.js' : service.name]; var contents = service.path.replace('docs/json/master/', ''); if (service.parent) { @@ -330,7 +330,7 @@ function createTypesDictionary(docs) { }); } -globby('./lib/*{,/*}.js', { ignore: IGNORE }).then(function(files) { +globby('./packages/*/src/*.js', { ignore: IGNORE }).then(function(files) { async.map(files, function(file, callback) { fs.readFile(file, 'utf8', function(err, contents) { if (err) { @@ -341,8 +341,11 @@ globby('./lib/*{,/*}.js', { ignore: IGNORE }).then(function(files) { var docs = parseFile(file, contents); var outputFile = path.join( OUTPUT_FOLDER, - file.replace('/lib', '').replace('.js', '.json') + file.replace('/packages', '').replace('/src/', '/').replace('.js', '.json') ); + if (outputFile.indexOf('google-cloud') !== -1) { + outputFile = outputFile.replace('/google-cloud/', '/'); + } fs.writeFile(outputFile, JSON.stringify(docs), function(err) { docs.path = outputFile; diff --git a/scripts/install b/scripts/install new file mode 100755 index 00000000000..576ea07145e --- /dev/null +++ b/scripts/install @@ -0,0 +1,48 @@ +#!/usr/bin/env node + +// Copyright 2016, Google, Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +var async = require('async'); +var fs = require('fs'); +var path = require('path'); + +require('shelljs/global'); + +// Install NPM dependencies, in up to 5 directories at a time +var queue = async.queue(function(directory, callback) { + installForDirectory(directory, callback); +}, 5); + +var files = fs.readdirSync(path.join(__dirname, '../packages')); +files.forEach(function(file) { + queue.push(file); +}); + +/** + * Install NPM dependencies within a single directory. + * + * @param {string} directory The name of the directory in which to install + * dependencies. + * @param {function} callback The callback function. + */ +function installForDirectory(directory, callback) { + console.log(directory + '...installing dependencies'); + exec('npm install', { + async: true, + cwd: path.join(__dirname, '../packages', directory) + }, function(err) { + console.log(directory + '...done'); + callback(err); + }); +} diff --git a/scripts/link b/scripts/link new file mode 100755 index 00000000000..7eb501640a6 --- /dev/null +++ b/scripts/link @@ -0,0 +1,82 @@ +#!/usr/bin/env node + +// Copyright 2016, Google, Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +var path = require('path'); + +require('shelljs/global'); + +// Doesn't depend on any other google-cloud* packages +link('common'); + +// These only depend on @google-cloud/common +[ + 'bigtable', + 'compute', + 'datastore', + 'dns', + 'pubsub', + 'resource', + 'storage', + 'translate' +].forEach(function(package) { + link(package, '@google-cloud/common'); + link(package); +}); + +// Depends on @google-cloud/common, @google-cloud/storage +[ + 'bigquery', + 'prediction', + 'vision' +].forEach(function(package) { + link(package, '@google-cloud/common'); + link(package, '@google-cloud/storage'); + link(package); +}); + +// Depends on @google-cloud/bigquery, @google-cloud/common, @google-cloud/pubsub, @google-cloud/storage +[ + 'bigquery', + 'common', + 'pubsub', + 'storage' +].forEach(function(package) { + link('logging', '@google-cloud/' + package); +}); +link('logging'); + +// Finally, link sub-packages into main package +[ + 'bigquery', + 'bigtable', + 'compute', + 'datastore', + 'dns', + 'logging', + 'prediction', + 'pubsub', + 'resource', + 'storage', + 'translate', + 'vision' +].forEach(function(package) { + link('google-cloud', '@google-cloud/' + package); +}); + +function link(directory, target) { + exec(target ? 'npm link ' + target : 'npm link', { + cwd: path.join(__dirname, '../packages', directory) + }); +} diff --git a/scripts/publish b/scripts/publish new file mode 100755 index 00000000000..28ab8c1d45d --- /dev/null +++ b/scripts/publish @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +// Copyright 2016, Google, Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +var path = require('path'); + +require('shelljs/global'); + +var cwd = pwd().toString(); + +cp(path.join(__dirname, '../AUTHORS'), cwd); +cp(path.join(__dirname, '../CONTRIBUTORS'), cwd); +cp(path.join(__dirname, '../COPYING'), cwd); +exec('echo "npm publish ."', { + cwd: cwd +}); +rm([ + path.join(cwd, 'AUTHORS'), + path.join(cwd, 'CONTRIBUTORS'), + path.join(cwd, 'COPYING') +]); diff --git a/scripts/uninstall b/scripts/uninstall new file mode 100755 index 00000000000..0d707ab6cd6 --- /dev/null +++ b/scripts/uninstall @@ -0,0 +1,37 @@ +#!/usr/bin/env node + +// Copyright 2016, Google, Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +var path = require('path'); + +require('shelljs/global'); + +function clean(directory) { + rm('-rf', path.join(__dirname, '../packages', directory, 'node_modules')); +} + + +clean('bigtable'); +clean('common'); +clean('compute'); +clean('datastore'); +clean('dns'); +clean('google-cloud'); +clean('logging'); +clean('prediction'); +clean('pubsub'); +clean('resource'); +clean('storage'); +clean('translate'); +clean('vision'); diff --git a/scripts/unlink b/scripts/unlink new file mode 100755 index 00000000000..842fdaabfb0 --- /dev/null +++ b/scripts/unlink @@ -0,0 +1,81 @@ +#!/usr/bin/env node + +// Copyright 2016, Google, Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +var path = require('path'); + +require('shelljs/global'); + +[ + 'bigquery', + 'bigtable', + 'compute', + 'datastore', + 'dns', + 'logging', + 'prediction', + 'pubsub', + 'resource', + 'storage', + 'translate', + 'vision' +].forEach(function(package) { + unlink('google-cloud', '@google-cloud/' + package); +}); + +// Depends on @google-cloud/bigquery, @google-cloud/common, @google-cloud/pubsub, @google-cloud/storage +[ + 'bigquery', + 'common', + 'pubsub', + 'storage' +].forEach(function(package) { + unlink('logging', '@google-cloud/' + package); +}); +unlink('logging'); + +// Depends on @google-cloud/common, @google-cloud/storage +[ + 'bigquery', + 'prediction', + 'vision' +].forEach(function(package) { + unlink(package, '@google-cloud/common'); + unlink(package, '@google-cloud/storage'); + unlink(package); +}); + +// These only depend on @google-cloud/common +[ + 'bigtable', + 'compute', + 'datastore', + 'dns', + 'pubsub', + 'resource', + 'storage', + 'translate' +].forEach(function(package) { + unlink(package, '@google-cloud/common'); + unlink(package); +}); + +// Doesn't depend on any other google-cloud* packages +unlink('common'); + +function unlink(directory, target) { + exec(target ? 'npm unlink ' + target : 'npm unlink', { + cwd: path.join(__dirname, '../packages', directory) + }); +} \ No newline at end of file diff --git a/test/docs.js b/test/docs.js index ef0362036f3..cc17453bd9f 100644 --- a/test/docs.js +++ b/test/docs.js @@ -17,13 +17,13 @@ 'use strict'; var fs = require('fs'); -var gcloud = require('../'); +var gcloud = require('../packages/google-cloud'); var glob = require('glob'); var mitm = require('mitm'); var prop = require('propprop'); var vm = require('vm'); -var util = require('../lib/common/util.js'); +var util = require('../packages/common').util; function runCodeInSandbox(code, sandbox) { vm.createContext(sandbox); @@ -99,7 +99,7 @@ describe('documentation', function() { }, {}); var sandbox = { - gcloud: gcloud, + 'google-cloud': gcloud, require: require, process: process, console: mockConsole, @@ -120,8 +120,10 @@ describe('documentation', function() { fileDocBlocks.methods.forEach(function(method) { var code = method.examples.map(prop('code')).join('\n') - .replace(/require\(\'gcloud\'\)/g, 'require(\'..\/\')') - .replace(/require\(\'gcloud/g, 'require(\'..') + .replace( + /require\(\'google-cloud\'\)/g, + 'require(\'../packages/google-cloud\')' + ) .replace('require(\'express\')', FakeExpress.toString()); var displayName = filename diff --git a/test/testdata/privateKeyFile-2.json b/test/testdata/privateKeyFile-2.json deleted file mode 100644 index f462a3ea951..00000000000 --- a/test/testdata/privateKeyFile-2.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "private_key_id": "8", - "private_key": "-----BEGIN RSA PRIVATE KEY-----IIBOgIBAAJBAK8Q+ToR4tWGshaKYRHKJ3ZmMUF6jjwCS/u1A8v1tFbQiVpBlxYB\npaNcT2ENEXBGdmWqr8VwSl0NBIKyq4p0rhsCAQMCQHS1+3wL7I5ZzA8G62Exb6RE\nINZRtCgBh/0jV91OeDnfQUc07SE6vs31J8m7qw/rxeB3E9h6oGi9IVRebVO+9zsC\nIQDWb//KAzrSOo0P0yktnY57UF9Q3Y26rulWI6LqpsxZDwIhAND/cmlg7rUz34Pf\nSmM61lJEmMEjKp8RB/xgghzmCeI1AiEAjvVVMVd8jCcItTdwyRO0UjWU4JOz0cnw\n5BfB8cSIO18CIQCLVPbw60nOIpUClNxCJzmMLbsrbMcUtgVS6wFomVvsIwIhAK+A\nYqT6WwsMW2On5l9di+RPzhDT1QdGyTI5eFNS+GxY\n-----END RSA PRIVATE KEY-----", - "client_email": "secondpart@firstpart.com", - "client_id": "9", - "type": "service_account" -}