Skip to content

v0.28.0

Compare
Choose a tag to compare
@stephenplusplus stephenplusplus released this 11 Feb 00:08

Updating

$ npm install [email protected]

⚠️ Breaking Changes

BigQuery: table.insert method no longer generated an insertId for each row


Issue: #1066
PR: #1068

Previously, when inserting a row into a table, we generated an insertId automatically as a way to prevent duplication of entries. This value is not always necessary and can cause unintended side effects. A better option was found (thanks @vladmiller!), which is not defaulting a value, but providing a way to set an insertId manually.

Note that your code won't break with this change; only what is happening behind the scenes. You likely won't notice a difference, but it might be worth reading #1066 and #1068 to be certain.

Before
var row = {
  INSTNM: 'Motion Picture Institute of Michigan',
  CITY: 'Troy',
  STABBR: 'MI'
};

table.insert(row, function(err) {});
After
var row = {
  insertId: 1,
  json: {
    INSTNM: 'Motion Picture Institute of Michigan',
    CITY: 'Troy',
    STABBR: 'MI'
  }
};

var options = {
  raw: true
};

table.insert(row, options, function(err) {});

Datastore: Setting a descending order on a query is now an option


Issue: #1061 (Thanks, @krisnye!)
PR: #1069

Before
var query = dataset.createQuery('Person');
var descendingQuery = query.order('-name');
After
var query = dataset.createQuery('Person');
var descendingQuery = query.order('name', {
  descending: true
});

Datastore: A query's filter operator is now a separate argument


Issue: #1062 (Thanks again, @krisnye!)
PR: #1069

Before
var query = dataset.createQuery('Company');
var googleFilter = query.filter('name =', 'Google');
var sizeFilter = query.filter('size <', 400);
After
var query = dataset.createQuery('Company');
var googleFilter = query.filter('name', 'Google');
var sizeFilter = query.filter('size', '<', 400);

Storage: File#createResumableUpload separates metadata from options


Issue: #818 (comment), googleapis/gcs-resumable-upload#6, #1099
PR: #1100

Before
var metadata = {
  contentType: 'image/png'
};

file.createResumableUpload(metadata, function(err, uri) {});
After
var options = {
  origin: 'http://my-site.com',
  metadata: {
    contentType: 'image/png'
  }
};

file.createResumableUpload(options, function(err, uri) {});

Hello, Translate!

(#977, #1023)

Translate text between thousands of languages. See the complete API documentation for more examples.

An API key is required for this API. See Identifying your application to Google.

var gcloud = require('gcloud');

var translate = gcloud.translate({
  key: 'API Key' // See https://cloud.google.com/translate/v2/using_rest#auth
});

// Translate a string of text.
translate.translate('Hello', 'es', function(err, translation) {
  if (!err) {
    // translation = 'Hola'
  }
});

// Detect a language from a string of text.
translate.detect('Hello', function(err, results) {
  if (!err) {
    // results = {
    //   language: 'en',
    //   confidence: 1,
    //   input: 'Hello'
    // }
  }
});

// Get a list of supported languages.
translate.getLanguages(function(err, languages) {
  if (!err) {
    // languages = [
    //   'af',
    //   'ar',
    //   'az',
    //   ...
    // ]
  }
});

Features

  • Core (#1030, #1048): Provide more detailed API error messages.
  • Datastore (#1040, #1043): Recognize DATASTORE_DATASET environment variable to define the name of your dataset.
  • Storage (#1099, #1100): Set an origin for a resumable upload URI.

Fixes

  • BigQuery (#1114, #1116): Correctly instantiate Table objects from dataset#getTables. (Thanks, @nikhilbobb!)
  • Datastore (#1092, #1093): Inherit previously-set options from the gcloud module into a Dataset object. (Thanks, @thesandlord!)
  • Storage (#1058): Set a generation on file#getSignedUrl. (Thanks, @simonfan!)

Thank you!

If you catch any regressions, please open an issue. See the Contributing guide for how to get started.