Skip to content

Instantly share code, notes, and snippets.

Steve Jorgensen stevecj

Block or report user

Report or block stevecj

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
@stevecj
stevecj / fieldset-alternatives.html
Created Jul 15, 2011
Spike of JS for forms with nested select-driven alternative fieldsets
View fieldset-alternatives.html
<!DOCTYPE html>
<html>
<head>
<style>
fieldset { display: block; }
.alternative { display:none; }
.alternative-selected { }
</style>
@stevecj
stevecj / enhanced_attributable.rb
Last active Sep 30, 2015
Ruby attr_accessor enhancement
View enhanced_attributable.rb
# Include this module in a class to add enhanced attr_accessor
# functionality. With this module included, ...
#
# * You may provide a block to an attr_accessor call that accepts
# a base attribute name and returns a default value for each
# instance attribute.
# * Any attribute name consisting of a base name followed by a
# "?" suffix represents a boolean attribute.
#
# If the including class has its own #initialize method, that
@stevecj
stevecj / ruby_module_nesting.rb
Created Mar 13, 2012
Ruby module nesting and scope of constant names
View ruby_module_nesting.rb
# == Module name assignment ==
# A Ruby module's name is determined when it first becomes
# assigned as the value of a top-level constant or of a
# constant in a module that has received a name.
# The module's name represents the hierarchy of containership,
# and is not dependent upon the execution path of the code
# that defined the module (as opposed to the module nesting
# for defined methods -- see below).
p [self, self.class, Module.nesting] # => [main, Object, []]
@stevecj
stevecj / ruby_nesting_unmuddling.rb
Created Mar 16, 2012
Understanding and unscrambling Ruby's weird module nesting behavior
View ruby_nesting_unmuddling.rb
# Get ourselves a clean, top-level binding.
def main_binding
binding
end
module ModuleUtils
module ModuleMethods ; end
self.extend ModuleMethods
module ModuleMethods
@stevecj
stevecj / computes_recursively.rb
Last active Nov 27, 2015
Fake tail recursion in Ruby without relying on tail optimization support in the Ruby VM
View computes_recursively.rb
# This is a mixin module that adds support for tail-recursive
# style programming in Ruby without relying on any true tail
# recursion optimization in the Ruby virtual machine.
#
# Since tail recursion calls are actually deferred until after
# returning from the method that invoked #tail, recursions can
# be "nested" to an unlimited depth without overflowing the
# stack.
#
# The including module can define tail-recursive methods within
@stevecj
stevecj / defines_interface.rb
Created Oct 11, 2012
Interfaces for Ruby
View defines_interface.rb
# A module for inclusion in a class of objects that delegate to and
# provide restricted interface definitions for underlying "occurrence"
# objects.
#
# This is useful for purposes such as to enforce the same API for a
# unit under test as for mocks and stubs of the same unit used for
# testing other units.
#
# This is a proof of concept demonstration and is not well-tested,
# production-ready code.
@stevecj
stevecj / sleep_request.rb
Last active Dec 11, 2015
Cleanly stoppable beaneater/beanstalkd agent. Waits for currently executing task to complete before stopping for INT (Ctrl+c) or TERM (kill) signals or receipt of an enqueued stop job.
View sleep_request.rb
#!/usr/bin/env ruby
require 'rubygems'
require 'bundler'
require 'beaneater'
beanstalk = Beaneater::Pool.new(['localhost:11300'])
sleep_tube = beanstalk.tubes['sleeper-take-a-nap']
sleep_tube.put '-'
@stevecj
stevecj / fiber_demo.rb
Created Feb 4, 2013
A demonstration of transfer of control to/from a Fiber in Ruby 1.9.x.
View fiber_demo.rb
fib = Fiber.new do |val|
puts ' -- 2 --'
puts 'fiber started & got: ' + val
puts 'now yield with "1st yield"'
val = Fiber.yield('fiber yield 1')
puts ' -- 4 --'
puts '1st yield got: ' + val
puts 'now yield with "2nd yield"'
@stevecj
stevecj / deferred_uniqueness_validations.rb
Created Mar 7, 2013
Allow any ActiveRecord uniqueness validation(s) to be deferred, and only check after a failed save due to uniqueness violation error from the database.
View deferred_uniqueness_validations.rb
# ./config/initializers/deferred_uniqueness_validations.rb
#
# This initializer adds support for deferred processing of
# ActiveRecord uniqueness validations. When a uniqueness
# validation is deferred using the :deferred => true option, it is
# not checked before save. Instead, if there is a uniqueness
# constraint defined for the column in the database, and if the
# save operation raises an ActiveRecord::RecordNotUnique
# exception, then the validation is performed so that the precise
# cause can be determined and the appropriate error information
@stevecj
stevecj / trinary.rb
Last active Aug 29, 2015
Stoopid Ruby trick <g>
View trinary.rb
class Trinary
class << self
def ~ ; ~new ; end
def -@ ; -new ; end
def +@ ; +new ; end
end
def initialize(digits=[])
@digits = digits
end
You can’t perform that action at this time.