From 242b7be1ba37af8291222eed48dbc6addd67804b Mon Sep 17 00:00:00 2001 From: JT Date: Fri, 4 Jan 2013 14:47:11 +0000 Subject: [PATCH 1/3] Update to v3. Not 100% sure this works yet --- lib/browserstack.js | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/lib/browserstack.js b/lib/browserstack.js index 11f915d..43cf20d 100644 --- a/lib/browserstack.js +++ b/lib/browserstack.js @@ -263,7 +263,50 @@ Client.createVersion( 2, { } }); +Client.createVersion( 3, { + _getBrowsers: function( fn ) { + this.request({ + path: this.path( "/browsers" ) + }, function( error, osBrowsers ) { + if ( error ) { + return fn( error ); + } + + function reduce( arr ) { + if( Array.isArray( arr )){ + return [].concat.apply( [], arr.map( reduce ) ); + } else { + return arr; + } + } + fn( null, reduce(Object.keys( osBrowsers ).map(function( os ) { + return Object.keys( osBrowsers[ os ] ).map(function( osVersion ) { + return osBrowsers[ os ][ osVersion ].map(function( browser ) { + if ( browser.devices ){ + return browser.devices.map(function( device ){ + return { + browser: browser.browser, + device: device, + os: os, + os_version: osVersion + }; + }); + } else { + browser.os = os; + browser.os_version = osVersion; + return browser; + } + }); + }); + }))); + }); + }, + + getBrowserId: function( browser ) { + return browser.os + ":" + browser.os_version + ":" + (browser.browser || browser.device); + } +}); module.exports = { createClient: function( settings ) { From 0552e3a07a1c2d1e89c5a9ce52e10fd93ab5bb36 Mon Sep 17 00:00:00 2001 From: JT Date: Fri, 8 Feb 2013 21:01:46 +0000 Subject: [PATCH 2/3] Now the nice people at browserstack have added flat mode, much neater --- lib/browserstack.js | 37 ++----------------------------------- 1 file changed, 2 insertions(+), 35 deletions(-) diff --git a/lib/browserstack.js b/lib/browserstack.js index 43cf20d..ea52c01 100644 --- a/lib/browserstack.js +++ b/lib/browserstack.js @@ -266,41 +266,8 @@ Client.createVersion( 2, { Client.createVersion( 3, { _getBrowsers: function( fn ) { this.request({ - path: this.path( "/browsers" ) - }, function( error, osBrowsers ) { - if ( error ) { - return fn( error ); - } - - function reduce( arr ) { - if( Array.isArray( arr )){ - return [].concat.apply( [], arr.map( reduce ) ); - } else { - return arr; - } - } - - fn( null, reduce(Object.keys( osBrowsers ).map(function( os ) { - return Object.keys( osBrowsers[ os ] ).map(function( osVersion ) { - return osBrowsers[ os ][ osVersion ].map(function( browser ) { - if ( browser.devices ){ - return browser.devices.map(function( device ){ - return { - browser: browser.browser, - device: device, - os: os, - os_version: osVersion - }; - }); - } else { - browser.os = os; - browser.os_version = osVersion; - return browser; - } - }); - }); - }))); - }); + path: this.path( "/browsers?flat=true" ) + }, fn ); }, getBrowserId: function( browser ) { From 6e958560ec237fa48c0ef7880af5a8886aa661f1 Mon Sep 17 00:00:00 2001 From: JT Date: Mon, 18 Mar 2013 17:11:32 +0000 Subject: [PATCH 3/3] Update README.md with details of V3 changes. I think this covers everything. --- readme.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index fc21757..a253230 100644 --- a/readme.md +++ b/readme.md @@ -30,15 +30,19 @@ client.getBrowsers(function( error, browsers ) { A common pattern in the API is a "browser object" which is just a plain object with the following properties: * `os`: The operating system. +* `os_version`: The operating system or device version. * `browser`: The browser name. +* `browser_version`: The browser version (`null` for mobile devices) * `device`: The device name. -* `version`: The browser or device version. A browser object may only have one of `browser` or `device` set; which property is set will depend on `os`. *V1 does not support multiple operating systems. As such, there is no `os` version, and browser objects will always use `browser`.* +*Multiple OS versions are not supported prior to V3. In V1 and V2 `os_version` and `browser_version` are not present, and +`version` is used for browser or device version.* + ### worker objects Worker objects are extended [browser objects](#browser-objects) which contain the following additional properties: @@ -70,8 +74,10 @@ Creates a worker. * `settings`: A hash of settings for the worker (an extended [browser object](#browser-objects)). * `os`: Which OS to use for the new worker. + * `os_version`: Which OS version to use (see note above about `os_version` pre-V3) * `browser`/`device`: Which browser/device to use in the new worker. Which property to use depends on the OS. - * `version`: Which version of the specified browser to use. + * `browser_version`: Which version of the specified browser to use (for V3). + * `version`: Which version of the specified browser to use (for V1 or v2). * `url` (optional): Which URL to navigate to upon creation. * `timeout` (optional): Maximum life of the worker (in seconds). Use 0 for "forever" (BrowserStack will kill the worker after 1,800 seconds). * `callback` (`function( error, worker )`): A callback to invoke when the API call is complete.