Skip to content

Category Archives: rails

CloudFront Invalidation from Ruby

Since none of the examples that I could find on the internet of how to invalidate a cloudfront asset in ruby were correct, I decided to post my solution: require 'rubygems' # may not be needed require 'openssl' require 'digest/sha1' require 'net/https' require 'base64' class CloudfrontInvalidator def initialize(aws_account, aws_secret, distribution) @aws_account = aws_account @aws_secret = […]

Making your Plugin or Gem configurable

Recently I added a configuration mechanism to Webrat. It was surprisingly easy, and mainly copied from rails core. I would suggest adding somthing like this to any plugin that has more than a few features or ones that users have asked to have turned off. First off you’re going to have to create the actual […]

generator_missing plugin release

I just posted my initial cut of my generator_missing plugin. This plugin is meant to be a repository of additional generators to help workflow. The current ones are: Library: Generates a non active record ruby object and a test class. lib/library_name.rb test/unit/library_name_test.rb Module: Generates a basic module under lib and its tests. lib/module_name.rb test/unit/module_name_test.rb, with […]

RDocul.us launch

I was tired of not having up to date docs for the rails gems and plugins that I use, so I created RDocul.us. Bascially, anyone is free to submit any github based rails plugin or gem and it will be kept up to date on RDocul.us. Once it’s approved it will be automatically updated within […]

testing named scopes

Named scopes are a nice feature that came out in rails 2.1, however, testing them is not very obvious. Say we have a named scope in our member object which looks like this: class Member < ActiveRecord::Base named_scope :active, {:conditions => {:status => Member::STATUS_ACTIVE}} end There are 2 things we need to do to test […]

testing protected and private methods in ruby

When I was looking for how to test protected an private methods in ruby on the net, I found many sites arguing whether you should, and several methods for doing so. I am of the opinion that if your method contains any logic at all, it should have a test. Some examples of what I […]

hiding production database info from source control with capistrano

Whether you are working on an open source app or an enterprise app, it is a good idea to keep the production database connection information out of source control. To do so, add the following to your deploy.rb file: task :overwrite_database_yml_file do run "[ -f /var/rails/#{application}/database.yml ] &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; cp -f /var/rails/#{application}/database.yml #{latest_release}/config/ || echo 'database.yml […]

new has_a block

Pretty simple post, but any ruby object can be post conifged in a line with somthing like: User.new(:name => “tony”){|u| u.save} which is great for active record tests. Or in a bigger example: @trip = Trip.new{|t| t.save!} @invite1 = Invitation.new(:user => users(:aaron), :status => Invitation::STATUS_MAYBE){|i| i.save} @invite1 = Invitation.new(:user => users(:aaron), :status => Invitation::STATUS_MAYBE){|i| i.save}

rcov and rails

rcov and Rails I had the good fortune of attending Rails Conf recently on behalf of the consulting company I work for, Asynchrony Solutions. One of the topics at the great Refactotem tutorial (hosted by the guys from Relevance) was rcov, a code coverage tool for Ruby. One of the things I missed in, or […]

ruby on rails (2.0.1, 2.0.2) and oracle on FC8

Get the following rpm’s from oracle oracle-instantclient-basic-10.2.0.3-1.i386.rpm oracle-instantclient-devel-10.2.0.3-1.i386.rpm (Note: this should work fine with the newer versions as well) As root cd PATH_TO_RPMS rpm -ivh oracle-instantclient-basic-10.2.0.3-1.i386.rpm oracle-instantclient-devel-10.2.0.3-1.i386.rpm echo /usr/lib/oracle/10.2.0.3/client/lib/ > /etc/ld.so.conf.d/oracle-instant-client-i386.conf This last step, the echo, is a bit of magic. The conf files in /etc/ld.so.conf.d are run before each command is invoked to set […]