This file contains 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
ENV["RAILS_ENV"] ||= 'test' | |
cur_dir = File.expand_path(File.dirname(__FILE__) + '/..') | |
$LOAD_PATH << "#{cur_dir}" | |
if defined? Bundler | |
# Most likely going with the full env | |
require 'spec_helper' | |
else | |
$LOAD_PATH << "#{cur_dir}/app/models" |
This file contains 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
class PasswordChanger | |
def initialize(account) | |
@account = account | |
end | |
def change_password_for(user, old_password, new_password) | |
unless user.authenticated?(old_password) | |
raise PasswordIncorrect | |
end |
This file contains 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
def close | |
ticket_manager.solve_ticket(ticket) | |
rescue TicketManager::Unauthorized | |
flash[:error] = "You are not authorized to solve this ticket." | |
end |
This file contains 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
def create | |
@profile = ProfileManager.create(params[:profile]) | |
rescue ProfileManager::CreationFailed => e | |
render :new, :errors => e.errors | |
end |
This file contains 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
class SpamMarker | |
def mark_comment_as_spam(comment) | |
author = comment.author | |
comment.mark_as_spam! | |
author.suspend! | |
end | |
end |
This file contains 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
class TicketFinder | |
def initialize(account, user) | |
# These would be current_account and current_user from the perspective of | |
# the controller layer. | |
raise unless account.present? && user.account == account | |
@account = account | |
@user = user | |
end |
This file contains 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
class Issue < ActiveRecord::Base | |
# This is a very simplifed version of the old method. | |
def merge_issues(sources, options = {}) | |
target = self | |
comment = options[:comment] | |
transaction do | |
sources.each do |source| | |
source.merge_into(target, :comment => comment) | |
end |
This file contains 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
class Middleware | |
# Processes a request before it reaches the application. | |
# | |
# The middleware can change the flow of the request/response chain by: | |
# - Raising an exception, which will halt the process | |
# - Returning an instance of Response, which will go through the middleware layer | |
# | |
# Returning any other value will not do anything. | |
def process_request(request) | |
# ... |
This file contains 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
# | |
# A benchmark testing the performance of three methods of delegation: | |
# | |
# - Manually defining delegation methods | |
# - Metaprogramming using __send__ | |
# - Metaprogramming without using __send__ | |
# | |
# Note that the manual way of doing it is much faster if the arity of the | |
# target method is known. However, this benchmark is only meant to test | |
# the issue of __send__, and so we define the delegation methods with |
This file contains 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 'rubygems' | |
require 'backports' # aliases Proc#=== to Proc#call | |
rs = (0..10000).to_a.sample(30) | |
rs.each do |r| | |
case r | |
when lambda { |n| n.zero? } then puts "#{r} is zero" | |
when lambda { |n| (n % 5).zero? } then puts "#{r} is fiven" | |
when lambda { |n| (n % 4).zero? } then puts "#{r} is fourven" |