Skip to content

Instantly share code, notes, and snippets.

@pcreux
pcreux / client.rb
Last active Mar 16, 2021
sonospi: Sonos + Ruby + Raspberry PI
View client.rb
require_relative './credentials'
class SonosClient
BASE_URL = 'https://api.ws.sonos.com/control/api/v1'
Error = Class.new(StandardError)
def get(path)
r = HTTP.auth("Bearer #{access_token}")
.get(BASE_URL + path)
@pcreux
pcreux / clone-heroku-app
Created Mar 4, 2021
Script to clone a heroku app. Handy when creating an actioncable app.
View clone-heroku-app
#!/usr/bin/env ruby
# Copy a heroku app (buildpacks, add-ons, labs, config, users).
# This script is idempotent so it can run against an existing app.
#
# Usage:
# $> clone-heroku-app source-app target-app
require 'json'
@pcreux
pcreux / README.md
Last active Oct 10, 2020
Failsafe: degrade user experience and notify when something goes wrong.
View README.md

Failsafe

When something goes wrong I want to degrade the user experience (instead of returning a 500 - Server Error) And I want to be notified about the failure

Usage

Wrap non mission critical code:

@pcreux
pcreux / circleci-trace
Created Nov 21, 2019
Generate a trace of your circleci workflows
View circleci-trace
#!/usr/local/env ruby
#
# Generate html traces from CircleCI workflows
#
require 'json'
require 'http'
OWNER = 'githubowner'
REPO = 'githubrepo'
@pcreux
pcreux / format_bundle_outdated.rb
Created May 31, 2019
Format 'bundle outdated' into a CSV file ordered by version delta
View format_bundle_outdated.rb
#!/usr/bin/env ruby
#
# Run `bundle outdated | format_bundle_outdated`
# to get a CSV file listing the columns below for all outdated gems.
COLUMNS = [ "name", "newest", "installed", "requested", "groups", "delta" ].join(",")
class Version < Struct.new(:major, :minor, :patch, :beta)
def self.build(string)
new(*string.split('.').map(&:to_i))
@pcreux
pcreux / 000 Oh no conditionals!.png
Last active Jun 6, 2018
Turning imperative conditionals into declarative rules
@pcreux
pcreux / Gemfile
Created Apr 19, 2018
Minimal setup to run a static site on Heroku.
View Gemfile
# no ruby gems required
@pcreux
pcreux / extract-migration
Created Oct 6, 2017
Extract all new migrations from the current branch over to a new branch (suffixed with "-migration")
View extract-migration
#!/bin/sh
# Extract all new migrations from the current branch over to a new branch (suffixed with "-migration")
set -ev
export branch=`git rev-parse --abbrev-ref HEAD`
git checkout master
git pull
git checkout -b $branch-migration
git checkout $branch -- db engines/*/db
@pcreux
pcreux / rtt
Last active Mar 30, 2021
Run tests for all changed app, lib and test files
View rtt
#!/usr/bin/env ruby
# Run unit test for all added or changed app, lib and test files.
# Ex:
# * `rtt` will run tests for all files changed since the last commit
# * `rtt master` will run tests for all files different from master
if ARGV[0]
files = `git diff --name-only $(git merge-base HEAD #{ARGV[0]})..$(git rev-parse --abbrev-ref HEAD)`.split("\n")
else
files = `git status -s`.split("\n").map { |f| f.split(' ').last }
@pcreux
pcreux / mktest
Created Jun 14, 2017
Generate a test file. `mktest app/models/user.rb` => `test/models/user_test.rb`
View mktest
#!/usr/bin/env ruby
DESC = "
Generate test file
Example: mktest app/services/user/create.rb will generate test/services/user/create_test.rb
"