inspired-server
Version:
A RESTful entity server
48 lines (46 loc) • 1.3 kB
text/coffeescript
http = require 'http'
Q = require 'q'
class AdapterRestAPI
constructor: (@options = {}) ->
migrate: (classes) ->
query: (method, path, data) ->
deferred = Q.defer()
options = {
host: @options.host || 'localhost'
port: @options.port || 8765
method: method
path: path
}
request = http.request options, (response) ->
result = ''
response.on 'data', (chunk) -> result += chunk
response.on 'end', ->
if result isnt ""
deferred.resolve JSON.parse result
else
deferred.resolve()
request.on 'error', (e) ->
deferred.reject e
request.write(data) if data?
request.end()
return deferred.promise
getOne: (name, uuid) ->
@query 'GET', "/#{name}/#{uuid}.json"
getAll: (name, condition) ->
@query 'GET', "/#{name}.json"
.then (result) ->
(value for key, value of result._links)
saveOne: (name, uuid, entity) ->
if uuid?
@query 'PUT', "/#{name}/#{uuid}.json", JSON.stringify entity
else
@query 'POST', "/#{name}.json", JSON.stringify entity
deleteOne: (name, uuid) ->
@query 'DELETE', "/#{name}/#{uuid}.json"
deleteAll: (name, condition) ->
@query 'DELETE', "/#{name}.json"
headAll: (name, condition) ->
@query 'HEAD', "/#{name}.json"
countAll: (name, condition) ->
@headAll name, condition
module.exports = AdapterRestAPI