Skip to content

Instantly share code, notes, and snippets.

Avatar

Brandon Keepers bkeepers

View GitHub Profile
@bkeepers
bkeepers / application.rb
Created May 13, 2020
Add methods to `rails console`
View application.rb
module SailboatGuide
class Application < Rails::Application
console do
require 'console_helpers'
TOPLEVEL_BINDING.eval('self').extend ConsoleHelpers
end
end
end
@bkeepers
bkeepers / frameworks.md
Created May 14, 2013
Frameworks for building HTML+CoffeeScript+[CSS-preprocessor] sites.
@bkeepers
bkeepers / opensource-career.md
Last active Jan 20, 2018
Tell me your story about how open source has impacted your career.
View opensource-career.md

I’m working on a talk about the relationship between community participation and careers, and want to hear from people who feel like open source has impacted their career. Tell me your story!

Below are some questions related to get you started. Feel free to either fork this gist, blog your answers and send me the link, or email them directly to me at bkeepers@github.com. I will ask your permission before sharing anything about your story publicly.

  • How do you feel your participation in open source has impacted your career, both good and bad?

  • How did you first get exposed to open source? Why did you decide to learn more about it?

  • Do you code? If so, were you a coder when you got started with open source? Why did you learn to code?

@bkeepers
bkeepers / delete-comment.js
Created Sep 14, 2017
Probot app to delete 👍 and single emoji comments.
View delete-comment.js
// :+1: comments and single emoji
const pattern = /^\W*(:[\w-\+]+:|[\uE000-\uF8FF]|\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF])\W*$/g;
module.exports = robot => {
robot.on('issue_comment.created', context => {
if(context.payload.comment.body.match(pattern)) {
context.github.issues.deleteComment(context.issue());
}
})
}
@bkeepers
bkeepers / api_spec.rb
Created Sep 20, 2013
Use HyperClient to test your Hypermedia API
View api_spec.rb
# spec/features/api_spec.rb
require 'spec_helper'
describe 'API' do
class TestClient < Hyperclient::EntryPoint
def default_faraday_block
lambda do |faraday|
faraday.request :json
faraday.response :json, content_type: /\bjson$/
faraday.adapter :rack, Capybara.app
View serialPromise.js
// Turn any function calls on a promise into function calls on the result.
//
// For example:
//
// serialPromise(promise).foo();
//
// Is the same as calling:
//
// promise.then(result => result.foo());
//
View cucumber.textile

This post has sat as a draft on my computer for well over a year now. I always intended to finish it, but am beyond caring. So I’m just going to publish it in its current form in hopes that it sparks some interesting conversation and avoids beating a dead horse.

Cucumber is a divisive tool. Some people absolutely love it and have an irrational dedication to using it for every single project. Others hate it, either because they haven’t tried it, or tried it on one project and ended up with a steaming pile of sh…step definitions.

I’ve been using cucumber since one of the first few releases. While I have been burned by it on projects, I also have a great appreciation for it.

What’s wrong with cucumber? Technically, nothing. It’s a brilliant tool for creating DSLs to test our applications. The problem with cucumber is YOU: you don’t understand why to use it, when to use it or how to use it. Don’t worry, though, it’s not entirely your fault. Many people are responsible f

@bkeepers
bkeepers / gist:8337479
Created Jan 9, 2014
Follow link without sending referrer.
View gist:8337479
//= require lib/jquery
//= require csrf
function openWithoutReferrer(url) {
var site = window.open("", "hide_referrer");
site.document.open();
site.document.writeln('<script type="text/javascript">window.location = "' + url + '";</script>');
site.document.close();
}
@bkeepers
bkeepers / gist:6502229
Last active Dec 22, 2015
My micro-talk to the Grand Rapids Ruby Group on separating code and configuration.
View gist:6502229
/$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$$$$$
/$$__ $$ /$$__ $$| $$$ | $$| $$_____/|_ $$_/ /$$__ $$
| $$ \__/| $$ \ $$| $$$$| $$| $$ | $$ | $$ \__/
| $$ | $$ | $$| $$ $$ $$| $$$$$ | $$ | $$ /$$$$
| $$ | $$ | $$| $$ $$$$| $$__/ | $$ | $$|_ $$
| $$ $$| $$ | $$| $$\ $$$| $$ | $$ | $$ \ $$
@bkeepers
bkeepers / gist:6002211
Last active Dec 19, 2015
I'm looking for a better pattern for defining a method that takes a single object or an array of objects as an argument, does something with them, and then returns either a single object or an Array depending on what was passed to it.
View gist:6002211
def dress(dog_or_dogs)
dressed_dogs = Array(dog_or_dogs).map {|dog| DogSweater.new(dog) }
dog_or_dogs.respond_to?(:each) ? dressed_dogs : dressed_dogs.first
end
one_dog = dress(Dog.new)
all_my_dogs = dress([Dog.new, Dog.new, Dog.new])