Skip to content

Instantly share code, notes, and snippets.

View jwietelmann's full-sized avatar

Joel Wietelmann jwietelmann

View GitHub Profile
@jwietelmann
jwietelmann / rack_reverse_proxy_by_adam.rb
Created January 14, 2016 22:46
"keep in mind that there are a few things here that don't work super well: Jekyll dies if you're missing a trailing slash. it appears to handle that internally by always redirecting to a url with a trailing slash. presumably there's some regular expression or something that we could use to handle the cases, but I didn't have time to solve that p…
require File.expand_path('../boot', __FILE__)
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module MyProject
class Application < Rails::Application
@jwietelmann
jwietelmann / wordpress_controller.rb
Created January 12, 2016 17:39
A hacky way to consume WP-API content and provide it to Rails views.
require 'faraday'
class WordpressController < ApplicationController
@@wp_client = Faraday.new(url: "http://#{ENV['WP_DOMAIN']}") do |builder|
builder.adapter Faraday.default_adapter
builder.headers = {'Content-Type' => 'application/json'}
builder.request :url_encoded
end
@jwietelmann
jwietelmann / every_controller_spec.rb
Created January 12, 2016 17:37
An RSpec sanity check to run against every Rails controller.
# What the heck is this spec about?
#
# It's a gut-check that runs against every controller in the application.
# It is NOT a replacement for writing controller specs for each controller.
#
# What this does is things like check to make sure you didn't forget to lock
# down the index action of a controller to authorized users, checks to see if
# common routes are throwing silly errors, etc.
#
# Your controller passing these tests does not guarantee that it is healthy.
var sys = require('child_process');
function commandExists(cmd) {
var exists = false;
sys.exec(cmd, function(err) {
if(err === null) // of maybe: if(!err instanceof Error)
exists = true;
});
@jwietelmann
jwietelmann / gist:4252663
Created December 10, 2012 19:17
jitsu start error
error: Error running command start
error: Nodejitsu Error (500): Internal Server Error
error: There was an error while attempting to deploy the app
error:
error: tar exited with code: 2
error: Error output from Haibu:
error:
error: Error: tar exited with code: 2
error: at ChildProcess.Tar.init (/root/haibu-orchestra/node_modules/haibu/lib/haibu/repositories/tar.js:58:26)
error: at ChildProcess.EventEmitter.emit (events.js:91:17)
@jwietelmann
jwietelmann / mongoose-single-subdoc.js
Created November 30, 2012 04:18
Hack to fake single subdoc field in a mongoose schema
// mongoose doesn't like single embedded schemas
// it likes them as arrays of an embedded schema
// so this is a cheater hack to fake a single subdoc
// it creates a field named `_yourField` and a virtual named `yourField`
// and it makes sure the array keeps just one element in it
// USAGE EXAMPLE:
/*
var models = require('models')
, ChildSchema = models.ChildSchema
, singleSubdoc = require('mongoose-single-subdoc');
var mongoose = require('mongoose');
module.exports = exports = function(schema, options) {
schema.method('massAssign', function(fields) {
for(var i in schema.tree) {
if(schema.tree[i].protect || fields[i] == null) continue;
this[i] = fields[i];
}
});
schema.static('massAssign', function(fields) {
models.util = {
singleSubDoc: function(schema, virtualName) {
var realName = '_' + virtualName;
schema.virtual(virtualName)
.get(function() {
if(this[realName].length) return this[realName][0];
else return null;
})
.set(function(value) {
this[realName] = [value];
@jwietelmann
jwietelmann / handlebars_helpers.coffee
Created September 25, 2012 18:26
Shared Handlebars.js helpers for both Node.js and web client
helpers =
test: (templateName) ->
"THIS IS A TEST"
addHelpers = (handlebars) -> handlebars.registerHelper name, fn for name, fn of helpers
# server-side
if module? && module.exports?
module.exports = addHelpers
@jwietelmann
jwietelmann / handlebone.js.coffee
Created July 9, 2012 17:41
Handlebars view helpers build out tree of View objects
# patched version of Handlebars with helper - passes current view to next context
Handlebars.registerHelper "with", (context, options) ->
context.view = this.view if this.view # the patch
options.fn context
# patched version of Handlebars each helper - passes current view to next context
Handlebars.registerHelper "each", (context, options) ->
fn = options.fn
inverse = options.inverse
ret = ""