Skip to content

Instantly share code, notes, and snippets.

@zspecza
zspecza / react-page.js
Last active August 29, 2015 14:24
A simple, isomorphic, state-based routing component wrapper around Page.js for React
import page from 'page'
import pathToRegExp from 'path-to-regexp'
import querystring from 'querystring'
import HomePage from './components/HomePage'
import ProfilePage from './components/ProfilePage'
import NotFoundPage from './components/NotFoundPage'
// generate expression for iterating over object keys
function entries(obj) {
@zspecza
zspecza / simple-slack.js
Last active August 20, 2019 11:57
A simplified API for working with Slack
import fetch, {
Response } from 'node-fetch';
import qs from 'querystring';
import WebSocket from 'ws';
class SimpleSlack {
baseURL = 'https://slack.com/api/';
eventListeners = {};
connection = null;
@zspecza
zspecza / index.js
Created February 15, 2016 17:02
requirebin sketch
// vars ending in $ are streams
var flyd = require('flyd')
var botkit = require('botkit')
var controller = botkit.slackbot(/*...*/)
var direct_message$ = flyd.stream()
var conversation$ = flyd.stream()
findSomething((error, something) => {
if (error) {
throw new Error(error)
}
transformSomething(something, (error, transformed) => {
if (error) {
throw new Error(error)
}
validateTransformed(transformed, (error, validated) => {
if (error) {
findSomething()
.then((something) => transformSomething(something))
.then((transformed) => validateTransformed(transformed))
.then((validated) => console.log('data is valid:', validated)
.catch((error) => console.error(new Error(error))
findSomething()
.then(transformSomething)
.then(validateTransformed)
.then((validated) => console.log('data is valid:', validated))
.catch((error) => console.error(new Error(error))
const getValidatedTransformation = sequentialCallback(
findSomething,
transformSomething,
validateTransformed
)
getValidatedTransformation((error, validated) => {
if (error) {
console.error(new Error(error))
} else {
const validateTransformation = sequentialCallback(
transformSomething,
validateSomething
)
const something = { foo: 'bar' }
validateTransformation(something, (error, validated) => {
if (error) {
console.error(new Error(error))
const validateTransformation = sequentialCallback(
transformSomething,
validateTransformed,
(validated, callback) => callback(null, validated, 'data is valid:')
)
validateTransformation({ foo: 'bar' }, (error, validated, label) => {
if (error) {
console.error(new Error(error))
} else {
function sequentialCallback (...fns) {
return (...args) => {
const done = args.pop()
const next = (error, ...args) => {
if (error) return done(error)
if (fns.length) {
const fn = fns.shift()
return fn(...args, next)
}
return done(null, ...args)