Skip to content

Commit

Permalink
readme test
Browse files Browse the repository at this point in the history
  • Loading branch information
rjrodger committed Mar 10, 2016
1 parent 44f8b58 commit 8509c1f
Show file tree
Hide file tree
Showing 5 changed files with 176 additions and 68 deletions.
1 change: 0 additions & 1 deletion .eslintrc
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
{
"extends": "standard",
"extends": "seneca",
"rules": {
"no-labels": 0,
Expand Down
3 changes: 2 additions & 1 deletion balance-client.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
MIT License,
Copyright (c) 2015, Richard Rodger and other contributors.
Copyright (c) 2015-2016, Richard Rodger and other contributors.
*/

'use strict'
Expand Down Expand Up @@ -230,6 +230,7 @@ function add_target ( seneca, target_map, pat, action ) {

targetdesc = targetdesc || { index: 0, targets: [] }
target_map[patkey] = targetdesc

targetdesc.targets.push( { action: action, id: action.id } )
}

Expand Down
184 changes: 124 additions & 60 deletions doc/balance-client.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,39 @@ <h1>balance-client.js</h1>
<div class="content"><div class='highlight'><pre> }
})

<span class="hljs-built_in">module</span>.exports = <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">options</span>) </span>{

<span class="hljs-built_in">module</span>.exports = balance_client

<span class="hljs-keyword">var</span> global_target_map = {}

<span class="hljs-keyword">var</span> preload = balance_client.preload = <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
<span class="hljs-keyword">var</span> seneca = <span class="hljs-keyword">this</span>

seneca.options({
transport: {
balance: {
makehandle: <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">config</span>) </span>{
<span class="hljs-keyword">var</span> instance_map =
(global_target_map[seneca.id] =
global_target_map[seneca.id] || {id: seneca.id})

<span class="hljs-keyword">var</span> target_map =
(instance_map[config.pg] =
instance_map[config.pg] || {pg: config.pg, id: <span class="hljs-built_in">Math</span>.random()})

target_map.pg = config.pg

<span class="hljs-keyword">return</span> <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"> pat, action </span>) </span>{
add_target( seneca, target_map, pat, action )
}
}
}
}
})
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">balance_client</span> (<span class="hljs-params">options</span>) </span>{
<span class="hljs-keyword">var</span> seneca = <span class="hljs-keyword">this</span>
<span class="hljs-keyword">var</span> target_map = {}
<span class="hljs-keyword">var</span> tu = seneca.export(<span class="hljs-string">'transport/utils'</span>)
<span class="hljs-keyword">var</span> modelMap = {
publish: publishModel,
Expand All @@ -83,7 +113,24 @@ <h1>balance-client.js</h1>

</div>

<div class="content"><div class='highlight'><pre> options = seneca.util.deepextend({}, options)
<div class="content"><div class='highlight'><pre> options = seneca.util.deepextend({}, options)</pre></div></div>

</li>


<li id="section-4">
<div class="annotation">

<div class="pilwrap ">
<a class="pilcrow" href="#section-4">&#182;</a>
</div>
<p>fix for Seneca 1.0.0</p>

</div>

<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> (<span class="hljs-string">'1.0.0'</span> === seneca.version) {
preload.call(seneca)
}

<span class="hljs-keyword">var</span> model = options.model

Expand All @@ -98,16 +145,6 @@ <h1>balance-client.js</h1>
<span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">'model must be a string or function'</span>)
}

seneca.options({
transport: {
balance: {
handle: <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"> pat, action </span>) </span>{
add_target( pat, action )
}
}
}
})

seneca.add({
role: <span class="hljs-string">'transport'</span>, hook: <span class="hljs-string">'client'</span>, type: <span class="hljs-string">'balance'</span>
}, hook_client)
Expand All @@ -118,34 +155,16 @@ <h1>balance-client.js</h1>

seneca.add({
role: <span class="hljs-string">'transport'</span>, type: <span class="hljs-string">'balance'</span>, remove: <span class="hljs-string">'client'</span>
}, remove_client)</pre></div></div>

</li>


<li id="section-4">
<div class="annotation">

<div class="pilwrap ">
<a class="pilcrow" href="#section-4">&#182;</a>
</div>
<p>TODO: handle duplicates</p>

</div>

<div class="content"><div class='highlight'><pre>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add_target</span> (<span class="hljs-params"> pat, action </span>) </span>{
<span class="hljs-keyword">var</span> patkey = make_patkey( pat )
<span class="hljs-keyword">var</span> targetdesc = target_map[patkey]
}, remove_client)

targetdesc = targetdesc || { index: <span class="hljs-number">0</span>, targets: [] }
target_map[patkey] = targetdesc
targetdesc.targets.push( { action: action, id: action.id } )
}
seneca.add({
role: <span class="hljs-string">'transport'</span>, type: <span class="hljs-string">'balance'</span>, get: <span class="hljs-string">'target-map'</span>
}, get_client_map)


<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">remove_target</span> (<span class="hljs-params"> pat, action_id </span>) </span>{
<span class="hljs-keyword">var</span> patkey = make_patkey( pat )
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">remove_target</span> (<span class="hljs-params"> target_map, pat, config </span>) </span>{
<span class="hljs-keyword">var</span> action_id = config.id || seneca.util.pattern(config)
<span class="hljs-keyword">var</span> patkey = make_patkey( seneca, pat )
<span class="hljs-keyword">var</span> targetdesc = target_map[patkey]

targetdesc = targetdesc || { index: <span class="hljs-number">0</span>, targets: [] }
Expand All @@ -164,26 +183,9 @@ <h1>balance-client.js</h1>
}


<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">make_patkey</span> (<span class="hljs-params"> pat </span>) </span>{
<span class="hljs-keyword">if</span> ( _.isString( pat ) ) {
pat = Jsonic(pat)
}

<span class="hljs-keyword">var</span> keys = _.keys(seneca.util.clean(pat)).sort()
<span class="hljs-keyword">var</span> cleanpat = {}

_.each( keys, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">k</span>) </span>{
cleanpat[k] = pat[k]
})

<span class="hljs-keyword">var</span> patkey = seneca.util.pattern( cleanpat )
<span class="hljs-keyword">return</span> patkey
}


<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add_client</span> (<span class="hljs-params">msg, done</span>) </span>{
<span class="hljs-keyword">if</span> ( !msg.config.id ) {
msg.config.id = <span class="hljs-keyword">this</span>.util.pattern( msg.config )
<span class="hljs-keyword">if</span> ( !msg.config.pg ) {
msg.config.pg = <span class="hljs-keyword">this</span>.util.pincanon( msg.config.pin || msg.config.pins )
}

<span class="hljs-keyword">this</span>.client( msg.config )
Expand All @@ -192,20 +194,43 @@ <h1>balance-client.js</h1>


<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">remove_client</span> (<span class="hljs-params">msg, done</span>) </span>{
<span class="hljs-keyword">if</span> ( !msg.config.id ) {
msg.config.id = <span class="hljs-keyword">this</span>.util.pattern( msg.config )
<span class="hljs-keyword">var</span> seneca = <span class="hljs-keyword">this</span>

<span class="hljs-keyword">if</span> ( !msg.config.pg ) {
msg.config.pg = <span class="hljs-keyword">this</span>.util.pincanon( msg.config.pin || msg.config.pins )
}

remove_target( msg.config.pin, msg.config.id )
<span class="hljs-keyword">var</span> instance_map = global_target_map[seneca.id] || {}
<span class="hljs-keyword">var</span> target_map = instance_map[msg.config.pg] || {}

<span class="hljs-keyword">var</span> pins = msg.config.pin ? [msg.config.pin] : msg.config.pins

_.each( pins, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">pin</span>) </span>{
remove_target( target_map, pin, msg.config )
})

done()
}


<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">get_client_map</span> (<span class="hljs-params">msg, done</span>) </span>{
<span class="hljs-keyword">var</span> seneca = <span class="hljs-keyword">this</span>
<span class="hljs-keyword">var</span> instance_map = global_target_map[seneca.id] || {}
done(<span class="hljs-literal">null</span>, <span class="hljs-literal">null</span> == msg.pg ? instance_map : instance_map[msg.pg])
}


<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">hook_client</span> (<span class="hljs-params">args, clientdone</span>) </span>{
<span class="hljs-keyword">var</span> seneca = <span class="hljs-keyword">this</span>

<span class="hljs-keyword">var</span> type = args.type
<span class="hljs-keyword">var</span> client_options = seneca.util.clean(_.extend({}, options[type], args))

<span class="hljs-keyword">var</span> pg = <span class="hljs-keyword">this</span>.util.pincanon( client_options.pin || client_options.pins )

<span class="hljs-keyword">var</span> instance_map = global_target_map[seneca.id] || {}
<span class="hljs-keyword">var</span> target_map = instance_map[pg] || {}

<span class="hljs-keyword">var</span> model = client_options.model || actorModel
model = _.isFunction(model) ? model : ( modelMap[model] || actorModel )

Expand Down Expand Up @@ -268,6 +293,45 @@ <h1>balance-client.js</h1>

</li>


<li id="section-5">
<div class="annotation">

<div class="pilwrap ">
<a class="pilcrow" href="#section-5">&#182;</a>
</div>
<p>TODO: handle duplicates</p>

</div>

<div class="content"><div class='highlight'><pre><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add_target</span> (<span class="hljs-params"> seneca, target_map, pat, action </span>) </span>{
<span class="hljs-keyword">var</span> patkey = make_patkey( seneca, pat )
<span class="hljs-keyword">var</span> targetdesc = target_map[patkey]

targetdesc = targetdesc || { index: <span class="hljs-number">0</span>, targets: [] }
target_map[patkey] = targetdesc
targetdesc.targets.push( { action: action, id: action.id } )
}


<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">make_patkey</span> (<span class="hljs-params"> seneca, pat </span>) </span>{
<span class="hljs-keyword">if</span> ( _.isString( pat ) ) {
pat = Jsonic(pat)
}

<span class="hljs-keyword">var</span> keys = _.keys(seneca.util.clean(pat)).sort()
<span class="hljs-keyword">var</span> cleanpat = {}

_.each( keys, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">k</span>) </span>{
cleanpat[k] = pat[k]
})

<span class="hljs-keyword">var</span> patkey = seneca.util.pattern( cleanpat )
<span class="hljs-keyword">return</span> patkey
}</pre></div></div>

</li>

</ul>
</div>
</body>
Expand Down
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@
"lodash": "4.0.0"
},
"devDependencies": {
"code": "^1.5.0",
"coveralls": "^2.11.6",
"docco": "0.7.0",
"eslint-config-seneca": "1.1.2",
"eslint-plugin-standard": "1.3.1",
"lab": "6.2.0",
"code": "1.5.x",
"coveralls": "2.11.x",
"docco": "0.7.x",
"eslint-config-seneca": "1.1.x",
"eslint-plugin-standard": "1.3.x",
"lab": "6.2.x",
"seneca": "senecajs/seneca"
},
"peerDependencies": {
Expand Down
44 changes: 44 additions & 0 deletions test/balance-client.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,50 @@ describe('#balance-client', function () {
})


it('readme', { parallel: false, timeout: 3333 }, function (done) {

function make_server (port) {
return Seneca({log: 'test'})
.listen({port: function () { return port }})
.add('a:1', function (msg, done) {
done(null, {a: 1, p: port})
})
}

var s0 = make_server('47000')
var s1 = make_server('47001')

s0.ready(s1.ready.bind(s1, function () {
Seneca({tag: 'c0', log: 'test', debug: {short_logs: true}})
.use('..')

.client( {type: 'balance'} )
.client( {port: 47000} )
.client( {port: 47001} )

.ready( function () {
this.act( 'a:1', function (e, o) {
expect(o.p).to.equal('47000')

this.act( 'a:1', function (e, o) {
expect(o.p).to.equal('47001')

this.act( 'a:1', function (e, o) {
expect(o.p).to.equal('47000')

this.act( 'a:1', function (e, o) {
expect(o.p).to.equal('47001')

done()
})
})
})
})
})
}))
})


it('add-remove', { parallel: false }, function (done) {
var s0 =
Seneca(testopts)
Expand Down

0 comments on commit 8509c1f

Please sign in to comment.