Skip to content

Commit

Permalink
got all the initial tests passing, next step namespace createion dest…
Browse files Browse the repository at this point in the history
…ruction updation
  • Loading branch information
grahamjenson committed Dec 22, 2014
1 parent 560e067 commit 852da40
Show file tree
Hide file tree
Showing 5 changed files with 131 additions and 125 deletions.
123 changes: 5 additions & 118 deletions index.coffee
Original file line number Diff line number Diff line change
@@ -1,120 +1,7 @@
#Setup the environment variables
environment = require './config/environment'

#PROMISES LIBRARY
bb = require 'bluebird'
HapiGER = require('./lib/hapi_server.coffee')

# HAPI STACK
Hapi = require 'hapi'
Joi = require 'joi'

# GER
g = require 'ger'
knex = g.knex # postgres client
r = g.r #rethink client

#ESMs
PsqlESM = g.PsqlESM
MemESM = g.MemESM
RethinkDBESM = g.RethinkDBESM

Utils = {}

Utils.handle_error = (logger, err, reply) ->
if err.isBoom
logger.log(['error'], err)
reply(err)
else
console.log "Unhandled Error", err, err.stack
logger.log(['error'], {error: "#{err}", stack: err.stack})
reply({error: "An unexpected error occurred"}).code(500)


class HapiGER

initialize: () ->
bb.try( => @init_server())
.then( => @setup_server())
.then( => @add_server_methods())
.then( => @add_server_routes())

init_server: (esm = 'mem') ->
#SETUP SERVER
@_server = new Hapi.Server()
@_server.connection({ port: process.env.PORT });
@_esm = MemESM
@info = @_server.info
(new @_esm('default')).initialize() #add the default namespace

create_namespace: (namespace) ->
(new @_esm(namespace)).initialize()

setup_server: ->
@load_server_plugin('good', environment.logging_options)

add_server_routes: ->
@load_server_plugin('./lib/the_hapi_ger', {ESM : @_esm, ESM_OPTIONS : {}})

add_server_methods: ->


server_method: (method, args = []) ->
d = bb.defer()
@_server.methods[method].apply(@, args.concat((err, result) ->
if (err)
d.reject(err)
else
d.resolve(result)
))
d.promise


start: ->
@start_server()

stop: ->
@stop_server()



load_server_plugin: (plugin, options = {}) ->
d = bb.defer()
@_server.register({register: require(plugin), options: options}, (err) ->
if (err)
d.reject(err)
else
d.resolve()
)
d.promise

start_server: ->
d = bb.defer()
@_server.start( =>
d.resolve(@)
)
d.promise

stop_server: ->
d = bb.defer()
@_server.stop( ->
d.resolve()
)
d.promise






#AMD
if (typeof define != 'undefined' && define.amd)
define([], -> return HapiGER)
#Node
else if (typeof module != 'undefined' && module.exports)
module.exports = HapiGER;
else
#not being required
hapiger = new HapiGER()
hapiger.initialize()
.then( -> hapiger.start())
.catch((e) -> console.log "ERROR"; console.log e.stack)
hapiger = new HapiGER()
hapiger.initialize()
.then( -> hapiger.start())
.catch((e) -> console.log "ERROR"; console.log e.stack)
112 changes: 112 additions & 0 deletions lib/hapi_server.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
#Setup the environment variables
environment = require '../config/environment'

#PROMISES LIBRARY
bb = require 'bluebird'

# HAPI STACK
Hapi = require 'hapi'
Joi = require 'joi'

# GER
g = require 'ger'
knex = g.knex # postgres client
r = g.r #rethink client

#ESMs
PsqlESM = g.PsqlESM
MemESM = g.MemESM
RethinkDBESM = g.RethinkDBESM

Utils = {}

Utils.handle_error = (logger, err, reply) ->
if err.isBoom
logger.log(['error'], err)
reply(err)
else
console.log "Unhandled Error", err, err.stack
logger.log(['error'], {error: "#{err}", stack: err.stack})
reply({error: "An unexpected error occurred"}).code(500)


class HapiGER

initialize: () ->
bb.try( => @init_server())
.then( => @setup_server())
.then( => @add_server_methods())
.then( => @add_server_routes())

init_server: (esm = 'mem') ->
#SETUP SERVER
@_server = new Hapi.Server()
@_server.connection({ port: process.env.PORT });
@_esm = MemESM
@info = @_server.info
(new @_esm('default')).initialize() #add the default namespace

create_namespace: (namespace) ->
(new @_esm(namespace)).initialize()

destroy_namespace: (namespace) ->
(new @_esm(namespace)).destroy()

setup_server: ->
@load_server_plugin('good', environment.logging_options)

add_server_routes: ->
@load_server_plugin('./the_hapi_ger', {ESM : @_esm, ESM_OPTIONS : {}})

add_server_methods: ->


server_method: (method, args = []) ->
d = bb.defer()
@_server.methods[method].apply(@, args.concat((err, result) ->
if (err)
d.reject(err)
else
d.resolve(result)
))
d.promise


start: ->
@start_server()

stop: ->
@stop_server()



load_server_plugin: (plugin, options = {}) ->
d = bb.defer()
@_server.register({register: require(plugin), options: options}, (err) ->
if (err)
d.reject(err)
else
d.resolve()
)
d.promise

start_server: ->
d = bb.defer()
@_server.start( =>
d.resolve(@)
)
d.promise

stop_server: ->
d = bb.defer()
@_server.stop( ->
d.resolve()
)
d.promise


#AMD
if (typeof define != 'undefined' && define.amd)
define([], -> return HapiGER)
else if (typeof module != 'undefined' && module.exports)
module.exports = HapiGER;
11 changes: 9 additions & 2 deletions lib/the_hapi_ger.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ GERAPI =
ger.get_action(action)
)
.then( (act) ->
console.log act
throw Boom.notFound('action not found') if not act
reply(act)
)
Expand All @@ -149,6 +150,12 @@ GERAPI =
plugin.route(
method: 'GET',
path: '/{namespace}/recommendations',
config:
validate:
query:
person: Joi.any().required()
action: Joi.any().required()

handler: (request, reply) =>
#TODO change type of recommendation based on parameters, e.g. for person action if they are included

Expand All @@ -158,9 +165,9 @@ GERAPI =

get_namespace_ger(request.params.namespace)
.then( (ger) ->
ger.recommendations_for_person(person, action, {explain: explain})
ger.recommendations_for_person(person, action)
)
.spread( (recommendations) ->
.then( (recommendations) ->
reply(recommendations)
)
.catch((err) -> Utils.handle_error(request, err, reply))
Expand Down
2 changes: 1 addition & 1 deletion node_modules/ger/ger.coffee

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions test/spec_helper.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ global.GERClient = require 'ger-client'
fs = require('fs');
path = require 'path'

HapiGER = require('../index.coffee')
HapiGER = require('../lib/hapi_server.coffee')

global.bootstrap_stream = ->
fs.createReadStream(path.resolve('./test/test_events.csv'))
Expand All @@ -24,12 +24,12 @@ global.start_server = server.initialize()
.then( -> server)

global.start_server_w_client = () ->
namespace = "tenant_#{Math.floor((1 + Math.random()) * 0x10000000)}"
start_server.then( (server) ->
server.create_namespace(namespace)
server.destroy_namespace('default_ns')
.then( -> server.create_namespace('default_ns'))
)
.then( ->
new GERClient("#{server.info.uri}/#{namespace}")
new GERClient("#{server.info.uri}/default_ns")
)

global.requests = {}
Expand Down

0 comments on commit 852da40

Please sign in to comment.