Skip to content

Instantly share code, notes, and snippets.

Foodiddlybar
@samstokes
samstokes / gemver.rb
Created September 22, 2010 14:06
Returns the currently activated version of the named gem.
def gemver(gem); Gem.loaded_specs[gem.to_s].version; end
@samstokes
samstokes / chunked.rb
Created November 8, 2010 12:29
Splits an enumerable into chunks. One-liner for use in Heroku console.
module Enumerable; def chunked(n); i=0; inject([]) {|chunks, item| if i % n == 0; chunks << [item]; else; chunks.last << item; end; i += 1; chunks }; end; end
@samstokes
samstokes / ip2int.rb
Created November 9, 2010 12:19
Converts an IP address from 'dotted string' representation to a 32-bit integer.
def ip2int(dotted)
dotted.split('.').map(&:to_i).
zip([24, 16, 8, 0]).
inject(0) do |s, (segment, shift)|
s + (segment << shift)
end
end
@samstokes
samstokes / map_chain.rb
Created November 9, 2010 15:13
Map a series of methods successively, plus extra goodies
require 'blankslate'
# Instead of writing
#
# > (1..3).map(&:even?).map(&:to_s).map(&:upcase).map(&:reverse)
# => ["ESLAF", "EURT", "ESLAF"]
#
# write the more concise
#
# > (1..3).map_chain.even?.to_s.upcase.reverse.result
@samstokes
samstokes / synchronous_deferrable.rb
Created December 30, 2010 22:40
Example of using Deferrable to provide an asynchronous API to a synchronous method.
def do_funky_stuff
d = EM::DefaultDeferrable.new
# do some long-running thing synchronously
d.succeed
return d
end
do_funky_stuff.callback { sleep 5; puts 'Done!' } # blocks for 5 seconds
# prints "Done!"
@samstokes
samstokes / module_inclusion_overriding.rb
Created January 21, 2011 00:31
Specs for when module inclusion does and doesn't cause method overriding
module Existing
def twinge
"Existing#twinge"
end
def prunge
"Existing#prunge"
end
end
# module included in another module
@samstokes
samstokes / synchronous_shim_example.rb
Created March 20, 2011 05:25
Callbacks? What callbacks?
require 'em-http'
require 'hpricot'
class EM::HttpRequest
synchronous_shim! :get
end
Hpricot(EM::HttpRequest.new('http://www.samstokes.co.uk/').get.response).at(:title).inner_text
# => "Sam Stokes"