chuck
Version:
Chuck Norris joke dispenser.
27 lines (23 loc) • 1.12 kB
text/coffeescript
http = require 'http'
module.exports = class ChuckNorris
constructor: (='Chuck', ='Norris') ->
# Joke interface.
id: (id, cb) -> 'jokes/'+id, cb
random: (c, cb) -> if not cb then 'jokes/random', c else 'jokes/random/'+c, cb
# Utility interface
count: (cb) -> 'jokes/count', cb
categories: (cb) -> 'categories', cb
# Make requests of varying data depth.
_joke: (f, cb) -> f, (err, data) -> if err then cb err else cb null, data.joke.replace /"/g,'"'
_jokes: (f, cb) -> f, (err, data) -> if err then cb err else cb null, data.map (val) -> val.joke.replace /"/g,'"'
_value: (f, cb) -> f, (err, data) -> if err then cb err else cb null, data.value
_req: (f, cb) ->
opts =
path:'/'+f+'?firstName='++'&lastName='+
host: 'api.icndb.com'
port: 80
http.get opts, (res) ->
data = ''
res.on 'data', (chunk) => data += chunk
res.on 'end', =>
try cb null, JSON.parse data catch err then cb new Error 'Response could not be parsed, api.icndb.com may be down.'