Skip to content

Instantly share code, notes, and snippets.

View thegrubbsian's full-sized avatar

JC Grubbs thegrubbsian

View GitHub Profile
@thegrubbsian
thegrubbsian / current_timezone.js
Created September 30, 2012 21:45
Get the Current Timezone Offset in Hours in JavaScript, adjusting for Daylight Savings Time
function currentTimezoneOffset() {
var dstPeriod = {
2012: [new Date(2012, 2, 11), new Date(2012, 10, 4)],
2013: [new Date(2013, 2, 10), new Date(2013, 10, 3)],
2014: [new Date(2014, 2, 9), new Date(2014, 10, 2)],
2015: [new Date(2015, 2, 8), new Date(2015, 10, 1)],
2016: [new Date(2016, 2, 13), new Date(2016, 10, 6)],
2017: [new Date(2017, 2, 12), new Date(2017, 10, 5)],
2018: [new Date(2018, 2, 11), new Date(2018, 10, 4)],
2019: [new Date(2019, 2, 10), new Date(2019, 10, 3)],
@thegrubbsian
thegrubbsian / object.rb
Created August 28, 2012 15:41
Using Rails try() for chaining multiple methods
class Object
def try_all(*methods)
values = [self]
methods.each do |method|
value = values.last.try(method)
return nil if value.nil?
values << value
end
values.last
@thegrubbsian
thegrubbsian / jquery.metadata.js
Created September 6, 2011 18:08
jQuery Table Plugins
/*
* Metadata - jQuery plugin for parsing metadata from elements
*
* Copyright (c) 2006 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Revision: $Id: jquery.metadata.js 3640 2007-10-11 18:34:38Z pmclanahan $
@thegrubbsian
thegrubbsian / backbone.events.extensions.js
Created September 8, 2012 04:10
Proxy or forward Backbone events through a mediator
(function() {
var proxy = function(source, eventName) {
var _self = this;
source.on(eventName, function(evt) {
var args = Array.prototype.slice.apply(arguments).splice(1);
args.unshift(evt);
_self.trigger.apply(_self, args);
});
};
require File.expand_path(File.dirname(__FILE__) + '/neo')
# Greed is a dice game where you roll up to five dice to accumulate
# points. The following "score" function will be used to calculate the
# score of a single roll of the dice.
#
# A greed roll is scored as follows:
#
# * A set of three ones is 1000 points
#
@thegrubbsian
thegrubbsian / callbacks.rb
Created February 9, 2013 15:54
Code for the "Rails No Nos" blog post.
class Order < ActiveRecord::Base
has_many :line_items
before_save :update_total
def update_total
self.total = line_items.pluck(:price).inject(:+)
end
@thegrubbsian
thegrubbsian / pdf_layer_example.rb
Created January 14, 2013 01:29
Sample using iText via JRuby to render a PDF with layers.
require "java"
Dir["#{File.dirname(__FILE__)}/itext-5.3.5/\*.jar"].each { |jar| require jar }
import com.itextpdf.text.BaseColor
import com.itextpdf.text.Document
import com.itextpdf.text.Paragraph
import com.itextpdf.text.Element
import com.itextpdf.text.pdf.ColumnText
import com.itextpdf.text.pdf.PdfWriter
import com.itextpdf.text.pdf.PdfContentByte
@thegrubbsian
thegrubbsian / backbone_base.js
Last active December 10, 2015 15:18
Backbone Extensions Stuff
Backbone.Base = function() {
this.initialize.apply(this, arguments);
};
Backbone.Base.extend = Backbone.Model.extend;
_.extend(Backbone.Base.prototype, Backbone.Events, {
initialize: function() {}
});
// This is a combination of two modified files from jQuery Mobile,
// jquery.mobile.vmouse.js and jquery.mobile.event.js
// They were modified to only provide the touch event shortcuts, and
// avoid the rest of the jQuery Mobile framework.
// The normal jQuery Mobile license applies. http://jquery.org/license
//
// This plugin is an experiment for abstracting away the touch and mouse
// events so that developers don't have to worry about which method of input
// the device their document is loaded on supports.
//
@thegrubbsian
thegrubbsian / jst_filter.rb
Created December 14, 2012 20:13
Simple filter for Rake Pipeline that will compile ERB/JST style templates into a templates.js file.
require "ejs"
class JstFilter < Rake::Pipeline::Filter
def initialize(output_filename=nil, &block)
block = proc { output_filename }
super(&block)
end
def generate_output(inputs, output)