Redis is my favourite key/value store; it’s flexible, easy to set up and insanely fast. [EventMachine][] is a popular Ruby library for doing asynchronous I/O using an event loop. Bindings already [exist][em-redis] for accessing a Redis server using EM’s async-I/O (courtesy of Jonathan Broad), but unfortunately the resulting code has to use [Continuation-Passing Style][cps] via Ruby blocks. A very basic example of what that looks like follows:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| namespace :harmony do | |
| desc "Munges the data" | |
| task :munge => :environment do | |
| docs_with_publish = Item.collection.find({'publish' => {'$exists' => true}}).to_a | |
| puts "Item count: #{Item.count}" | |
| puts "Items with publish key: #{docs_with_publish.size}" | |
| docs_with_publish.each do |hash| | |
| hash.delete('publish') |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require 'pp' | |
| require 'rubygems' | |
| require 'mongo_mapper' | |
| MongoMapper.database = 'testing' | |
| class Rating | |
| include MongoMapper::EmbeddedDocument | |
| key :user_id, ObjectId |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require 'httparty' | |
| require 'json' | |
| class Campfire | |
| include HTTParty | |
| base_uri 'https://YOUR_DOMAIN.campfirenow.com' | |
| basic_auth 'YOUR_API_KEY', 'X' # yes, that is a literal X string. it's needed to satisfy basic_auth(), but campfire ignores it. | |
| headers 'Content-Type' => 'application/json' | |
| def self.speak(message) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Just drop this little diddy in your app to get some (not perfect) information on query times and such | |
| # This will eventually become an official plugin but for those who can't wait, enjoy. | |
| if defined?(NewRelic) | |
| module MMNewRelicTracing | |
| def self.included(model) | |
| model.metaclass.class_eval do | |
| add_method_tracer :find, 'Database/#{self.name}/find' | |
| add_method_tracer :find!, 'Database/#{self.name}/find!' | |
| add_method_tracer :paginate, 'Database/#{self.name}/paginate' | |
| add_method_tracer :first, 'Database/#{self.name}/first' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # This is how you can get a user's location using MacRuby and CoreLocation | |
| framework 'CoreLocation' | |
| def locationManager(manager, didUpdateToLocation: new_location, fromLocation: old_location) | |
| puts "location: #{new_location.description}" | |
| exit | |
| end | |
| loc = CLLocationManager.alloc.init | |
| loc.delegate = self |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| namespace :resque do | |
| desc "Process exactly one job and quit" | |
| task :work_one => :setup do | |
| require 'resque' | |
| worker = nil | |
| queues = (ENV['QUEUES'] || ENV['QUEUE']).to_s.split(',') | |
| begin | |
| worker = Resque::Worker.new(*queues) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # I have a repo with two commits | |
| failbowl:temp(master) grb$ git shortlog | |
| Gary Bernhardt (2): | |
| commit 1 | |
| commit 2 | |
| # I destroy the second commit | |
| failbowl:temp(master) grb$ git reset --hard HEAD^ | |
| HEAD is now at 7454aa7 commit 1 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* This is when a refactoring really pays off. | |
| * | |
| * In order to make your code more modular, avoid hard-coding assumptions (or refactor them away). | |
| * The most fundamental, anti-modular assumption in Object-Oriented software is the concrete type of objects. | |
| * Any time you write "new MyClass" in your code (or in Ruby MyClass.new) you've hardcoded | |
| * an assumption about the concrete class of the object you're allocating. These makes it impossible, for example, | |
| * for someone to later add logging around method invocations of that object, or timeouts, or whatever. | |
| * | |
| * In a very dynamic language like Ruby, open classes and method aliasing mitigate this problem, but | |
| * they don't solve it. If you manipulate a class to add logging, all instances of that class will have |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| module ParameterizedConcern | |
| def extended(mod = nil, &block) | |
| unless mod | |
| @extended_block = block | |
| return | |
| end | |
| mod.module_eval(&@extended_block) if @extended_block | |
| end |