Skip to content

Instantly share code, notes, and snippets.

View dasch's full-sized avatar
💭
LOOKING INTENTLY INTO THE VOID

Daniel Schierbeck dasch

💭
LOOKING INTENTLY INTO THE VOID
View GitHub Profile
@dasch
dasch / ticket_finder.rb
Created December 18, 2011 11:44
Composable Security
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
class SpamMarker
def mark_comment_as_spam(comment)
author = comment.author
comment.mark_as_spam!
author.suspend!
end
end
def create
@profile = ProfileManager.create(params[:profile])
rescue ProfileManager::CreationFailed => e
render :new, :errors => e.errors
end
def close
ticket_manager.solve_ticket(ticket)
rescue TicketManager::Unauthorized
flash[:error] = "You are not authorized to solve this ticket."
end
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
@dasch
dasch / faster_helper.rb
Created January 25, 2012 12:18 — forked from dnagir/faster_helper.rb
The spec helper I use to run faster specs
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"
class Blog
attr_writer :post_maker
def new_post(options = {})
post_maker.new(options).tap do |p|
p.blog = self
end
end
private
# Incidentally, I wrote this as "RickScore" first. Perhaps an interesting
# concept? ;-)
score = RockScore.for_term("apple")
if score.available?
"Score: #{score.value}"
else
"Could not calculate score"
end
class RockScore
def initialize(value)
@value = value
end
def available?
[email protected]?
end
def value
class Score
attr_reader :value
def initialize(value)
@value = value
end
def available?
true
end