git ssb

0+

Piet / ssb-loomio



Tree: 468d684bfde5b5b265ab076477d4c4930e4d8dc8

Files: 468d684bfde5b5b265ab076477d4c4930e4d8dc8 / README.md

3257 bytesRaw

scuttle-poll

Create and vote on polls on ssb

background details relevant to understanding what this module does

repos:

Usage

var isPoll = require('scuttle-poll/isPoll')

isPoll(msg)
// => Boolean
var scuttle = require('scuttle-poll')(server)

var opts = {
  title: 'where shall we have our community meeting?'
  choices: [
    'in person',
    'talky.io',
    'mumble',
  ]
}
scuttle.poll.async.publishChooseOne(opts, (err, poll) => {
  if (err) throw err

  var myPosition 
  scuttle.position.async.publishPosition(myPosition, cb)
})

where server is a scuttlebot instance (or a remote connection provided by ssb-client)

Note - server can also be an observeable which resolves to a scuttlebot instance (this is more experimental, it will turn your sync functions into obs functions)

Dependencies

Requires a scuttlebutt server with the following plugins installed:

API

var Scuttle = require('scuttle-poll')
var scuttle = Scuttle(server)

Methods

scuttle.poll.sync.isPoll(msg) => Boolean

Takes a msg or the contents of a msg

You can also check for subtypes of poll e.g.

isPoll.chooseOne(msg)
// => Boolean

scuttle.poll.async.get(key, cb)

fetches all the messages associated with a particular poll, and returns a delightfully accessible object:

{
  key:       MessageKey,
  value:     MessageValue,

  author:    FeedId,
  title:     String,
  body:      (String|Null),

  positions: Array,
  results:   Array,
  errors:    Object
}

scuttle.poll.async.publishChooseOne(opts, cb)

// NOT BUILT YET

where opts is an object of form:

{
  title: String,    // required
  choices: Array,   // required
  body: String,
}

and cb is a callback of signature (err, newPollMsg)

Install

With npm installed, run

$ npm install scuttle-poll

Schemas

Poll

Poll message content

{
  type:       'poll',          // required
  pollDetails: PollDetails     // required
  title:       String,         // required
  closesAt:    Integer         // required
  body:        String,
  channel,
  mentions,
  recps
}

Where PollDetails is an object which has the details needed for each type of poll: Dot, Proposal, Score

Dot vote PollDetails

{
  type: 'dot', // required
  maxStanceScore: 'Integer >= 0', // required
  maxChoiceScore: 'Integer >= 0', //optional
  choices: Array, // required
}

Proposal PollDetails

{
  type: 'proposal', // required
  proposal: String, // required
}

Score PollDetails

{
  type: 'score', // required
  maxChoiceScore: 'Integer >= 0', //required
  choices: Array, // required
}

Position

{
  type:           'position',
  root:            MessageKey,
  positionDetails: Object
}

chooseOne positionDetails:

{
  choice:

}

Acknowledgments

scuttle-poll was inspired by Loomio! Massive thanks to Rob Guthrie and James Kiesel for spending time giving us a brain dump of their data model.

See Also

License

MIT

Built with git-ssb-web