circuits v0.3.1
circuits
A simple socket-io framework for client and server communcation around CRUD operations
Usage
install using npm
npm install circuitsBasic client server example source
# port to listen to
testPort = 8001
# create a server
httpServer = http.Server()
# instantiate a Circuits server with a controller router
server = new Server httpServer, (controller)->
switch controller
# match against the requested router to a specific one
# every router needs to implement the CRUD operation
# it needs to support
when 'echo' then {
"read" : (message, id, cb)->
# the first argument for the callback is
cb(null,message)
}
httpServer.listen testPort
client = sioc.connect("http://localhost:#{testPort}")
client.on 'connect', ->
client.emit Operation, 'echo', CRUD.read, 'any bats in here?',(err, data)->
if (data == 'any bats in here?')
console.log 'No bats here I guess..'
process.exit()ToDo: Example using Circuits with a Backbone model Example using Circuits with a Backbone collection Example using Circuits with Express framework
Whats in the box?
create Circuits server instance
new circuits.Server( httpServer, controllerResolver, [acl, redisHost, redisDB, redis, redisPort, circuitChannel] )
httpServerinstance ofrequire('http').ServercontrollerResolverfunction that returns an object with mapping to CRUD operation for provided controller nameaclthe ACL object, if none provided it allowes everythingredisHostIP address of your redis (default is "127.0.0.1")redisDBredis db to use (default is 10 )redisPortredis port (deault is 6379)circuitChannelname space for communication between Circuits instances
messages
circuits.Messages
is a map of String => String of supported Circuits messages
the Operation message is a request for a message to be dispatched to respective controller on the server
arguments
| name | type | description |
|---|---|---|
controller name | String | the controller to dispatch this message to |
crudOp | circuits.CRUD.{create,read..} | the crud operation |
params | Object | parameters to be passed |
operation params | Object* | depending on the CRUD operation, a set of required fields |
required operation params for the different CRUD operations
CRUD.create
| name | type | description |
|---|---|---|
data | Object | the object to be created |
CRUD.read
| name | type | description |
|---|---|---|
id | String | resource id |
CRUD.update
| name | type | description |
|---|---|---|
id | String | resource id |
data | Object | the object to update with |
CRUD.delete
| name | type | description |
|---|---|---|
id | String | resource id |
CRUD operations
circuits.CRUD
is simply a map of String => String ofcreate, read,update, delete and patch
ACL
circuits.ACL constructor arguments
| name | type | description |
|---|---|---|
rules | Object | mapping of controllers to allowed crud operations and respective user groups |
controller+crud groups | function(userID, callback = function(err, groups)) | function that returns groups for a given user ID |
optional check | function(userID, model, modelId, crudOp, callback = function(message,boolean) | an optional check for special cases were you want to enforce a finer grained ACL, for example for when only a creater of a resource is only allowed to do a write operation on that model.. |
example of a controller+crud group rules
{
"MyModel" : {
"create" : ["public"],
"read" : ["public"],
"update" : ["users"],
"delete" : []
},
"SecretModel" : {
"create" : ["users"],
"read" : ["users"],
"update" : ["users"],
"delete" : ["users"]
}
}is simply an object mapping controllers to respective allowed crud operations
High Level Design
11 years ago
11 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
13 years ago
