{"push_id":744309695,"size":79,"distinct_size":16,"ref":"refs/heads/master","head":"c97071161206b8f8e236a348a6cb85164bd01da2","before":"cf4dee572e737355092afdbcbb4894889033df8a","commits":[{"sha":"02f630fbbeaf82701fc4daf1b0e75b9488d5542a","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Add middleware between Listener match and execute\n\nAllow injecting arbitrary code between the Listener match and execute\nsteps. Like in Express, middleware can interrupt the response process,\npreventing the Listener callback from ever being executed. Middleware\ncan perform operations both on the way towards the Listener callback\n(before callback execution) and on the way away from the Listener\ncallback (after callback execution/middleware interrupt).\n\nAs a side effect, listeners are now executed asynchronously. Behavior\naround message.done should remain the same (process until message.done\nis true).","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/02f630fbbeaf82701fc4daf1b0e75b9488d5542a"},{"sha":"e7c5321dc0bb17c692b124fc9c8004523efc89ae","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Add middleware documentation","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/e7c5321dc0bb17c692b124fc9c8004523efc89ae"},{"sha":"b51d10739b1b797efc1fb59cd93adca3bd6be50c","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Relax async version requirement\n\nEverything appears to work fine with 0.1.0, so relaxing the version\nrequirement.","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/b51d10739b1b797efc1fb59cd93adca3bd6be50c"},{"sha":"8fc0b98cd9d53b99e595896cfe69c8aa4d26b9d9","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Adjust error handling for Listener callback\n\nDue to the potentially asynchronous nature of middleware, we need to\npush the try-catch block down to surround just the listener callback. As\na result, middleware is responsible for catching its own exceptions and\nemitting an 'error' event.\n\nThe original try-catch is left in place to catch any errors in bad\nsynchronous middleware. Not guaranteed to catch it all, but might as\nwell catch some.","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/8fc0b98cd9d53b99e595896cfe69c8aa4d26b9d9"},{"sha":"13b5cf978ccebd42ed1e6a5623d674c72c696592","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Update docs for new middleware exception behavior","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/13b5cf978ccebd42ed1e6a5623d674c72c696592"},{"sha":"02ec566e1c0f350beeceb68a8a40db9b0eb506f7","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Defer to the event loop after testing each Listener\n\nIn the event of an entire middleware stack that never defers to the\nevent loop (or no middleware at all), an extremely long stack trace\nbuilds up (each listener building on the last). Instead, we defer to the\nevent loop after testing each listener, resulting in much more\nmanageable stack sizes. This should not change effective behavior of\nlistener processing unless a script relies on all listeners being\nevaluated in a single turn of the event loop (which is already really\nbad).","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/02ec566e1c0f350beeceb68a8a40db9b0eb506f7"},{"sha":"e09031fb3a892a8afe217079da5e49b048a50c1c","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Merge branch 'named-listeners' into middleware\n\nConflicts:\n\tdocs/scripting.md","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/e09031fb3a892a8afe217079da5e49b048a50c1c"},{"sha":"d3d7a8cda6c83b556dd13ef1d7e30ef49ae38cf6","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Use async.reduce for executing middleware","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/d3d7a8cda6c83b556dd13ef1d7e30ef49ae38cf6"},{"sha":"c7274bd79fbd404451541f741e8d48141684b729","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Move Middleware to a separate section","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/c7274bd79fbd404451541f741e8d48141684b729"},{"sha":"d8fee81f0429c304ad1ad0b1783e8f8b7e545fd4","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"s/addListenerMiddleware/listenerMiddleware/\n\nRename function to match convention","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/d8fee81f0429c304ad1ad0b1783e8f8b7e545fd4"},{"sha":"303837583f7ac87504225def471a2f35bfb785f8","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Doc updates for middleware","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/303837583f7ac87504225def471a2f35bfb785f8"},{"sha":"adcb80a989b09da619d17c3a7e790a8f89848fb2","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Merge remote-tracking branch 'upstream/master' into middleware\n\nConflicts:\n\tsrc/robot.coffee","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/adcb80a989b09da619d17c3a7e790a8f89848fb2"},{"sha":"3169c486d4f7c6f7d06160541c1caf37cbeaf359","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Fix the docs to match new method name","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/3169c486d4f7c6f7d06160541c1caf37cbeaf359"},{"sha":"8bc2ae7c8976094910dcf5a7cafa3bfa8970f9de","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Merge branch 'named-listeners' into middleware","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/8bc2ae7c8976094910dcf5a7cafa3bfa8970f9de"},{"sha":"8dd885c29162f3ad4ae2238208801cb38ddeb20f","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Fix a buggy example in the documentation","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/8dd885c29162f3ad4ae2238208801cb38ddeb20f"},{"sha":"e3b0160f136061a9ed061ad94049478ee569621f","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Sanity check arity of new middleware","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/e3b0160f136061a9ed061ad94049478ee569621f"},{"sha":"f470ce767d77040ad8af4c0fd67742589759db0c","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Handle errors in synchronous middleware\n\nIf synchronous middleware throws an exception,\n- catch the exception\n- emit an 'error' event\n- call the latest 'done' callback to unwind the middleware stack\n\nAsync middleware is still responsible for performing these steps after\nit yields to the event loop.","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/f470ce767d77040ad8af4c0fd67742589759db0c"},{"sha":"bd45534a4c67963affd08ef80915917bdd4bb1b1","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Rename an ignored variable","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/bd45534a4c67963affd08ef80915917bdd4bb1b1"},{"sha":"c5f91b0a0311b986195766c3254914eb59c088ac","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Cleanup syntax in middleware example","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/c5f91b0a0311b986195766c3254914eb59c088ac"},{"sha":"bbd1c1fe0d0767472d9c43f4d2071fd06273ee29","author":{"email":"f0f33dc61631a64709889ab6404f2fc4913e24bc@box.com","name":"Michael Ansel"},"message":"Document the middleware API","distinct":false,"url":"https://api.github.com/repos/michaelansel/hubot/commits/bbd1c1fe0d0767472d9c43f4d2071fd06273ee29"}]}