From e32090e3bb13c72bd50a739074d8bc8095689f23 Mon Sep 17 00:00:00 2001 From: nginnever <ginneversource@gmail.com> Date: Sat, 2 Jul 2016 12:12:07 -0700 Subject: [PATCH] feat(block): spec --- API/block/README.md | 76 +++++++++++++++++++++++++++++++++++++++ src/block.js | 87 +++++++++++++++++++++++++++++++++++++++++++++ src/index.js | 1 + 3 files changed, 164 insertions(+) create mode 100644 src/block.js diff --git a/API/block/README.md b/API/block/README.md index 5d8c88f6..e0252edf 100644 --- a/API/block/README.md +++ b/API/block/README.md @@ -1,2 +1,78 @@ block API ========= + +#### `get` + +> Get a raw IPFS block. + +##### `Go` **WIP** + +##### `JavaScript` - ipfs.block.get(multihash, [callback]) + +`multihash` is a [multihash][] which can be passed as + +- Buffer, the raw Buffer of the multihash +- String, the base58 encoded version of the multihash + +`callback` must follow `function (err, block) {}` signature, where `err` is an error if the operation was not successful and `block` is a [Block][]. + + +```js +ipfs.block.get(multihash, function (err, data) { + // data is the raw data contained in a block +}) +``` + +If no `callback` is passed, a promise is returned. + + + + +#### `put` + +> Stores input as an IPFS block. + +##### `Go` **WIP** + +##### `JavaScript` - ipfs.block.put(data, [callback]) + +Where `data` can be a + +- Buffer, requiring that the encoding is specified on the options. if no + encoding is specified, Buffer is treated as the Data field +- [Block][] instance + +`callback` has the signature `function (err, block) {}`, where `err` is an error +if the operation was not successful. and `block` is a [Block][]. + +If no `callback` is passed, a promise is returned. + + + + + +#### `stat` + +> Print information of a raw IPFS block. + +##### `Go` **WIP** + +##### `JavaScript` - ipfs.block.stat(multihash, [callback]) + +`multihash` is a [multihash][] which can be passed as: + +- Buffer, the raw Buffer of the multihash (or of and encoded version) +- String, the toString version of the multihash (or of an encoded version) + +`callback` must follow the signature `function (err, stats) {}`, where `err` is +an error if the operation was not successful and `stats` is an object with +the format + +```JavaScript +{ + Key: 'QmPTkMuuL6PD8L2SwTwbcs1NPg14U8mRzerB1ZrrBrkSDD', + Size: 10 +} +``` + +If no `callback` is passed, a promise is returned. \ No newline at end of file diff --git a/src/block.js b/src/block.js new file mode 100644 index 00000000..c81684af --- /dev/null +++ b/src/block.js @@ -0,0 +1,87 @@ +/* eslint-env mocha */ +/* globals apiClients */ +'use strict' + +const expect = require('chai').expect + +module.exports = (common) => { + describe.only('.block', () => { + const blorbKey = 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ' + const blorb = Buffer('blorb') + + it('returns an error when putting an array of files', () => { + return apiClients.a.block.put([blorb, blorb], (err) => { + console.log(err) + expect(err).to.be.an.instanceof(Error) + }) + }) + + it('block.put', (done) => { + apiClients.a.block.put(blorb, (err, res) => { + expect(err).to.not.exist + expect(res).to.have.a.property('Key', 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ') + done() + }) + }) + + it('block.get', (done) => { + apiClients.a.block.get(blorbKey, (err, res) => { + expect(err).to.not.exist + + let buf = '' + res + .on('data', function (data) { buf += data }) + .on('end', function () { + expect(buf).to.be.equal('blorb') + done() + }) + }) + }) + + it('block.stat', (done) => { + apiClients.a.block.stat(blorbKey, (err, res) => { + expect(err).to.not.exist + expect(res).to.have.property('Key') + expect(res).to.have.property('Size') + done() + }) + }) + + describe('promise', () => { + it('returns an error when putting an array of files', () => { + return apiClients.a.block.put([blorb, blorb]) + .catch((err) => { + expect(err).to.be.an.instanceof(Error) + }) + }) + + it('block.put', () => { + return apiClients.a.block.put(blorb) + .then((res) => { + expect(res).to.have.a.property('Key', 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ') + }) + }) + + it('block.get', (done) => { + return apiClients.a.block.get(blorbKey) + .then((res) => { + let buf = '' + res + .on('data', function (data) { buf += data }) + .on('end', function () { + expect(buf).to.be.equal('blorb') + done() + }) + }) + }) + + it('block.stat', () => { + return apiClients.a.block.stat(blorbKey) + .then((res) => { + expect(res).to.have.property('Key') + expect(res).to.have.property('Size') + }) + }) + }) + }) +} diff --git a/src/index.js b/src/index.js index f9ad0c53..ee35b234 100644 --- a/src/index.js +++ b/src/index.js @@ -6,3 +6,4 @@ exports.config = require('./config') exports.pin = require('./pin') exports.generic = require('./generic') exports.swarm = require('./swarm') +exports.block = require('./block')