From eb1b942b888468d03e591ea4fcc36842d25f4f25 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Mon, 24 Jun 2013 16:57:16 -0700 Subject: [PATCH] Update README --- README.md | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/index.js | 17 +++++++++++++ package.json | 2 +- 3 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 lib/index.js diff --git a/README.md b/README.md index 8c46f4a..c5c0cf3 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,75 @@ asteroid-storage-service ======================== Aseteroid Storage Service + + +## Storage + +The `asteroid-storage-service` service is designed to make it easy to upload and download files to various infrastructure providers. **_Special attention has been paid so that methods are streams and pipe-capable._** + +To get started with a `asteroid-storage-service` client just create one: + +``` js + var client = require('asteroid-storage-service').createClient({ + // + // The name of the provider (e.g. "file") + // + provider: 'provider-name', + + // + // ... Provider specific credentials + // + }); +``` + +Each compute provider takes different credentials to authenticate; these details about each specific provider can be found below: + +* [Azure](docs/providers/azure.md#using-storage) +* [Rackspace](docs/providers/rackspace/storage.md) +* [Amazon](docs/providers/amazon.md#using-storage) + +Each instance of `storage.Client` returned from `storage.createClient` has a set of uniform APIs: + + +### Container +* `client.getContainers(function (err, containers) { })` +* `client.createContainer(options, function (err, container) { })` +* `client.destroyContainer(containerName, function (err) { })` +* `client.getContainer(containerName, function (err, container) { })` + + +### File +* `client.upload(options, function (err) { })` +* `client.download(options, function (err) { })` +* `client.getFiles(container, function (err, files) { })` +* `client.getFile(container, file, function (err, server) { })` +* `client.removeFile(container, file, function (err) { })` + +Both the `.upload(options)` and `.download(options)` have had **careful attention paid to make sure they are pipe and stream capable:** + +### Upload a File +``` js + var storage = require('asteroid-storage-service'), + fs = require('fs'); + + var client = storage.createClient({ /* ... */ }); + + fs.createReadStream('a-file.txt').pipe(client.upload({ + container: 'a-container', + remote: 'remote-file-name.txt' + })); +``` + +### Download a File +``` js + var storage = require('asteroid-storage-service'), + fs = require('fs'); + + var client = storage.createClient({ /* ... */ }); + + client.download({ + container: 'a-container', + remote: 'remote-file-name.txt' + }).pipe(fs.createWriteStream('a-file.txt')); +``` + diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..503ca4c --- /dev/null +++ b/lib/index.js @@ -0,0 +1,17 @@ +exports.createClient = function (options) { + options = options || {}; + var provider = options.provider || 'file'; + + if ('function' !== typeof provider) { + try { + // Try to load the provider from providers folder + provider = require('./providers/' + provider); + } catch (err) { + // Fall back to pkgcloud + return require('pkgcloud').storage.createClient(options); + } + } + + return new provider(options); + +} \ No newline at end of file diff --git a/package.json b/package.json index fa5caca..29efc10 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "asteroid-storage-service", "description": "Asteroid Storage Service", "version": "0.0.1", - "main": "index.js", + "main": "lib/index.js", "scripts": { "test": "./node_modules/.bin/mocha --timeout 30000 test/*test.js" },