Skip to content

Instantly share code, notes, and snippets.

View nthj's full-sized avatar

Nathaniel Jones nthj

  • Orlando, FL
View GitHub Profile
@nthj
nthj / password.rb
Created June 6, 2011 04:15
Password value object for MongoMapper documents
# In a MongoMapper::Document,
# simply add
# key :password, Password
# your password will be automatically hashed,
# and you can compare plain-text passwords with the user's hashed password, ruby style:
# User.first.password == '1234'
# => true
#
# Also, prevents passwords from being leaked onto the console or error messages:
# User.first.password
@nthj
nthj / constituent_importer.rb
Created June 6, 2011 03:58
Constituent Importer for Capvoice
# constituent_importer.rb
#
# When the customer uploads an Excel file,
# we generate a unique ID for the file and
# store it on our AWS/S3 jobs bucket.
#
# Then we create a job with that unique ID,
# and our background workers execute the job as follows
class ConstituentImporter < Struct.new(:job_object_id)
@nthj
nthj / hash.rb
Created April 5, 2011 01:31
Ruby Hash filter (Array#map for Hashes)
# This isn't mine
# I can't remember where I found it, but mad props to whoever created it
class Hash
def filter
result = self.map do |k, v|
r = yield v
[k, r]
end
Hash[*result.flatten]
@nthj
nthj / object.rb
Created April 5, 2011 01:27
Ruby object extension for use with HAML
# Easily add id and class attributes to HAML elements
#
# %li{ account.element.to_hash } ->
# <li class='account' id='account-7'>
#
# %span{ account.element.button.to_hash } ->
# <span class='account-button' id='account-7-button'>
#
# %span{ :class => account.element.save.button.class } ->
# <span class='account-save-button'>
@nthj
nthj / string.rb
Created April 5, 2011 00:53
Ruby string extensions for easily defining questionable methods like "email?"
class String
def questionable
questionable? ? to_s : "#{to_s}?"
end
def questionable!
replace questionable
end
def questionable?
@nthj
nthj / application_controller.rb
Created April 1, 2011 19:32
Rails controller before/after shortcuts (ruby 1.9.2 compatible)
class ApplicationController < ActionController::Base
extend Filterable
after_update -> { user.clear_cache! }
end
module AccessibleBlock
extend ActiveSupport::Concern
module ClassMethods
@accessible_block = false
def key(*arguments, &block)
super
attr_accessible arguments[0] if @accessible_block
end