Skip to content

Instantly share code, notes, and snippets.

@davidbiehl
davidbiehl / paged_enumerator.rb
Last active August 29, 2015 14:01
PagedEnumerator for processing paginated API responses
# Public: Abstracts pagination into an Enumerator so all of the objects for
# a given response can be retreived without having to know that they were
# split into pages from the server
#
# Examples
#
# orders = client.get("orders", limit: 10)
#
# paged = PagedEnumerator.new(orders) do |response, yielder|
# response.body["orders"].each do |obj|
@davidbiehl
davidbiehl / queryString.js
Created May 23, 2014 22:06
Query string to Object conversion in JavaScript
define([], function() {
/*
Public: Returns the query string decoded as an Object
queryArg - a String that is a query string. eg: "one=1&two=2&three"
Returns an Object
*/
return function(queryArg) {
var query = queryArg || window.location.search.substring(1);
@davidbiehl
davidbiehl / gist:92920ad5d9be9892f8bc
Created May 28, 2014 19:30
Waiting for multiple AJAX requests, the latter is conditional
new RSVP.promise(function(resolve, reject) {
var promise = new RSVP.promise(function(resovle, reject) {
request({
dataType: 'json',
url: window.ENV.prependHost + "/sa/api/v2/auth"
})
.then(resolve) // if the first is a success, just resolve!
.catch(function() { // not a success, trying again
request({
dataType: 'json',
@davidbiehl
davidbiehl / cr_b_gone.rb
Created July 25, 2014 22:14
Recursively Removes Carriage Returns from Ruby Files
Dir.glob(File.join(%w(** *.rb))) do |filename|
buffer = File.open(filename, "r").read
File.open(filename, "w") do |output|
output.puts buffer.gsub(/\r\n/, "\n")
end
end
@davidbiehl
davidbiehl / Vagrantfile
Created August 7, 2014 14:43
My Favorite Vagrantfile (CentOS 6 with Librarian Puppet)
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos64"
config.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210.box"
@davidbiehl
davidbiehl / identity_map.js.coffee
Created October 16, 2014 14:00
Promising Identity Map for Backbone (Draft)
App.module "Data", (Data, App, Backbone, Marionette, $, _)->
class Data.IdentityMap
constructor: (@collection, opts={})->
@promiseAll = false
@promiseEach = {}
if opts.fetch == false
@promiseAll = $.Deferred()
@promiseAll.resolve @collection
@davidbiehl
davidbiehl / mutant_collection.js.coffee
Created October 16, 2014 22:31
Mutant Collection
class MutantCollection extends Backbone.Collection
constructor: (collection, mutator, options = {})->
super(collection.map(mutator), options)
@listenTo collection, 'reset', ->
@reset collection.map(mutator)
@listenTo collection, 'add', (model)->
@add mutator(model)
App.module "Lib", (Lib, App, Backbone, Marionette, $, _)->
class Lib.EventRouter
constructor: (opts = {})->
@events = _.extend(_.result(@, "events"), _.result(opts, "events"))
@vent = _.result(opts, "vent") || _.result(@, "vent")
@namespace = _.result(opts, "namespace") || _.result(@, "namespace")
@controller = _.result(opts, "controller") || _.result(@, "controller") || @router.controller
@event(name, route) for name, route of @events
App.module "Lib", (Lib, App, Backbone, Marionette, $, _)->
class Lib.ResourceAppRouter extends Marionette.AppRouter
constructor: (opts = {})->
@resource = _.result(opts, "resource") || @resource || throw "A ResourceRouter needs a resource defined"
delete opts.resource
super(opts)
@appRoute @resource , "index"
@appRoute "@resource/new" , "new"
@appRoute "#{@resource}/:id" , "show"
App.module "Lib", (Lib, App, Backbone, Marionette, $, _)->
class Lib.ResourceEventRouter extends App.Lib.EventRouter
constructor: (opts = {})->
@resource = _.result(opts, "resource") || _.result(@, "resource")
opts.namespace = @resource
opts.events ||= {}
resourceEvents =
index : @resource
new : "#{@resource}/new"