Skip to content

Instantly share code, notes, and snippets.

View renato-zannon's full-sized avatar

Renato Zannon renato-zannon

View GitHub Profile
@renato-zannon
renato-zannon / named_dynamic_methods.rb
Created September 20, 2011 13:53
A simple practice to help your fellow workers navigate your dynamic ruby code
# It's common, while creating a bunch of very similar methods, to create
# a loop to define them all at once. (Very simple) example follows:
week_days = %w[sunday monday tuesday wednesday thursday friday saturday]
week_days.each do |day|
define_method("events_on_#{day}") do
events.select { |event| event.day == day }
end
end
@renato-zannon
renato-zannon / gist:1290010
Created October 15, 2011 19:14
Inject alternate implementation
module Inject
class Injector
def self.inject(*args, &block)
options = args.last.kind_of?(Hash) ? args.pop : {}
target = options[:receiver] || block.binding.eval("self")
modules = args
modules.each { |mod| mod.before_inject(target) if mod.respond_to?(:before_inject)}
return_value = new(modules).inject_into(target, &block)
import Control.Monad
data Tree a = EmptyTree | Node a (Tree a) (Tree a)
(<<) EmptyTree value = Node value EmptyTree EmptyTree
(<<) (Node value left right) newValue = if newValue < value
then Node value (left << newValue) right
else Node value left (right << newValue)
toArray EmptyTree = []
@renato-zannon
renato-zannon / xmonad-unity.desktop
Created January 13, 2012 13:18
Unity Panel + XMonad config
# /usr/share/xsessions/xmonad-unity.desktop
[Desktop Entry]
Encoding=UTF-8
Name=XMonad/Unity
Comment=Xmonad+Unity
Exec=gnome-session --session=xmonad_unity
Icon=xmonad.png
Type=Application
@renato-zannon
renato-zannon / user.rb
Created June 9, 2012 05:33
Strategy pattern to follow users
class User < Struct.new(:username, :private)
alias_method :private?, :private
def follow
follow_strategy.call
end
private
def follow_strategy
@renato-zannon
renato-zannon / module.rb
Created September 4, 2012 04:07
Subclass module + use module_eval to define methods
class AttributeAccessor < Module
def initialize(name)
@name = name
module_eval { define_accessors }
end
private
def define_accessors
ivar = "@#{@name}"
# Depends on gems eventmachine, em-http-request,
# and em-resolv-replace (for # async DNS)
require 'eventmachine'
require 'em-http'
require 'fiber'
require 'em-resolv-replace'
def make_request_to(url)
connection = EventMachine::HttpRequest.new(url)
require 'nokogiri'
require 'rspec'
describe "nth-child" do
let(:doc) do
Nokogiri::HTML(<<-HTML)
<html>
<body>
<p id="first"></p>
<p id="second"></p>
@renato-zannon
renato-zannon / patch.rb
Created March 20, 2014 19:21
Fix rails 2.3 filter_parameter_logging for ruby 2.x
# The filter_parameter_logging method, used to filter request parameters
# (such as passwords) from the log, defines a protected method called
# filter_parameter when called. Its existence is later tested using
# respond_to?, without the include_private parameter. Due to the respond_to?
# behavior change, the method existence is never detected, and parameter
# filtering stops working.
require 'action_controller'
module ParameterFilterPatch
def respond_to?(method, include_private = false)
@renato-zannon
renato-zannon / results
Created June 5, 2014 22:11
Rust: Semaphores vs channels
running 2 tests
test with_channels ... bench: 876410 ns/iter (+/- 655463)
test with_semaphores ... bench: 513476 ns/iter (+/- 711503)
test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured