Skip to content

Instantly share code, notes, and snippets.

Kevin Rockwood rockwood

Block or report user

Report or block rockwood

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@rockwood
rockwood / archive_post_scenario.ex
Last active Nov 27, 2018
Ecto Soft-Delete Pattern
View archive_post_scenario.ex
defmodule MyApp.ArchivePostScenario do
alias MyApp.Repo
alias Ecto.Multi
alias __MODULE__.Query
def run(options) do
post = Keyword.fetch!(options, :post)
archive_and_delete([
comments: Query.comments(post),
@rockwood
rockwood / split_csv.bash
Last active Jun 29, 2018
Split CSV Files
View split_csv.bash
#!/usr/bin/env bash
input_file=$1
header_file=./output/headers.csv
rows_file=./output/rows.csv
mkdir -p ./output
head -1 $input_file > $header_file
tail -n +2 $input_file > $rows_file
@rockwood
rockwood / rps.ex
Created Jan 17, 2018
Rock Paper Scissors
View rps.ex
defmodule Rps do
def run(input) do
player1 = String.split(input, "")
player2 = Enum.shuffle(["r", "p", "s"])
result =
[player1, player2]
|> Enum.zip()
|> Enum.map(&result/1)
|> Enum.sum()
|> case do
View ranger.md

Ranger Keybindings

Search for a File / Directory

Key Binding Description
f search for file / directory

Copy, Rename/Move or Delete

@rockwood
rockwood / Readme.md
Last active May 4, 2018
Seoul Elixir Meetup
View Readme.md

1. Install Phoenix 1.3

mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez

2. Create a new Phoenix project

mix phx.new demo

3. Create the database

@rockwood
rockwood / bem.md
Created Apr 14, 2016
BEM Conventions
View bem.md

Dos:

Avoid page specific stylesheets

It's easy to organize styles by page when the app is small, but a year from now we'll probably have 50+ pages and having a separate stylesheet for each page will result in tons of duplication.

Use the grid as much as possible

The grid has a ton of feature and it's really customizable from variables.scss. Anywhere you're doing multi-column layouts, try to use the grid.

View gist:5c5a2e31ddf3941422f0
class TestServer
def initialize(options)
@server_port = options.fetch(:server_port)
@client_port = options.fetch(:client_port)
end
def start
@pid = spawn(command)
end
View gist:ea59c05b2378f5e73bb9
# Taken from https://gist.github.com/mattwynne/1228927
#
# usage:
# it "should return a result of 5" do
# eventually { long_running_thing.result.should eq(5) }
# end
#
module AsyncHelpers
def eventually(options = {})
timeout = options[:timeout] || 2
@rockwood
rockwood / data
Last active Aug 29, 2015
Heroku new pg:backups data script
View data
#!/bin/bash
set -x
set -e
DATABASE='YOUR_DEV_DATABASE'
HEROKU_APP='YOUR_HEROKU_APP'
dropdb ${DATABASE}
@rockwood
rockwood / RailsResourceCollectionExtension.coffee
Last active Aug 29, 2015
RailsResourceCollectionExtension
View RailsResourceCollectionExtension.coffee
angular.module("rails").factory "RailsResourceCollection", (_) ->
class RailsResourceCollection
constructor: (models=[]) ->
@models = models
angular.module("rails").factory "RailsResourceCollectionMixin", (RailsResourceCollection) ->
RailsResourceCollectionMixin = ->
RailsResourceCollectionMixin.extended = (Resource) ->
Resource.intercept "afterResponse", (result, resource, context) ->
You can’t perform that action at this time.