Recent Posts

RSpec: It Should Behave Like

August 19, 2008

I was going through an older project of ours and cleaning up some specs and noticed how often we were doing the same thing in several places. When we started the project, we didn’t get the benefits of shared groups. Now that we have some time to go through and update some of our older specs, I’ve been trying to take advantage of the features currently available in RSpec. One feature that I haven’t seen a lot of mention of by people is shared groups, so I thought I’d take a few minutes to write up a quick intro to using it.

To pick some low-hanging fruit, let’s take an all-too-familiar method, which you might be familiar with… login_required. Sound familiar? Have you found yourself stubbing login_required over and over throughout your specs?


describe Admin::DohickiesController, ‘index’ do

before( :each ) do
controller.stub!( :login_required )
Dohicky.should_receive( :paginate ).and_return( Array.new )
get :index
end


end\

If you’re requiring that a user should be logged in when interacting with most of the application (as in the case of an administration section/namespace), you might want to consolidate some of your work into one shared specification group. The basic premise behind this is that you can write a typical describe block and load it into any other spec groups that you need. For example, in our case, we’ll need to stub login_required in several places. We can set this up in one shared group and reference it wherever necessary.

For example, here is what we’ll start off with.


describe “an admin user is signed in” do
before( :each ) do
controller.stub!( :login_required )
end
end

describe Admin::DohickiesController, ‘index’ do
…\

However, the new describe block isn’t accessible from the block at the bottom of the example… yet. To do this, we just need to pass the option: :shared => true as you’ll see in the following example.


describe “an admin user is signed in”, :shared => true doruby\ `before( :each ) doruby\ controller.stub!( :login_required )ruby\ `endruby
end``ruby\

Great, now we can reference it by referring to it with: it_should_behave_like SharedGroupName. In our example above, this would look like:


describe “an admin user is signed in” do
before( :each ) do
controller.stub!( :login_required )
end
end

describe Admin::DohickiesController, ‘index’ do
it_should_behave_like “an admin user is signed in”

before( :each ) do
Dohicky.should_receive( :paginate ).and_return( Array.new )
get :index
end


end

describe Admin::DohickiesController, ‘new’ do
it_should_behave_like “an admin user is signed in”

before( :each ) do
dohicky = mock_model( Dohicky ) Dohicky.should_receive( :new ).and_return( dohicky )
get :new
end

…\

That’s it! Pretty simple, eh? We can now reference this shared group in any describe blocks that we want to. A benefit to this approach is that we can make change the authentication system (say, we decide to switch it entirely and/or even just change method names, set any other prerequisites necessary when an admin is signed in), we’ll have a single place to change in our specs. (tip: you can put these in your spec_helper file)

You can learn more about it_should_behave_like and other helpful features on the RSpec documentation site.

If you have any suggestions on better ways of handling things like this, please follow up and share your solutions. I’m always looking to sharpen my tools. :-)

Update

In response, Bryan Helmkamp suggests that a better solution is to define a method in our specs like, for example: build_mock_user_and_login. then calling it in our before(:each). So, maybe the approach above isn’t the most ideal method but I did wantt o draw some attention to it_should_behave_like. I suppose that I need a better example.. another post, perhaps? :-)

Also, Ed Spencer has posted an article titled, DRYing up your CRUD controller RSpecs, which will introduce you mor to it_should_behave_like.

Thanks for feedback people!

  • [Be Careful that you don’t Stub your Big
Toe](http://www.robbyonrails.com/articles/2007/02/13/be-careful-that-you-dont-stub-your-big-toe)
```text
-   [Spec Your
```text
Views](http://www.robbyonrails.com/articles/2007/08/02/spec-your-views)

Things.app syncs with the iPhone!

August 18, 2008

Awesome. Things 1.1 for the iPhone was just pushed to the Apple iTunes Store, which means… I can finally sync my Things.app with my iPhone!

I’ve been using Things for quite a while to manage my life (work and personal) and bringing this to my phone definitely makes my day.

For more information about Things, visit the following sites:

(iPhone)

I’ll post a review in the coming days as I get a chance to play with it. Just wanted to share the news. :-)

Alan Cooper @ Agile2008 slides

August 12, 2008

Alan Cooper, author of About Face, has slides from his presentation at Agile 2008 online.

If anybody knows if there is video of this talk, please let me know. :-)

Here are a few skitches from the slideshow.

::: thumbnail The Wisdom of
Experience :::

::: thumbnail The Wisdom of
Experience :::

::: thumbnail The Wisdom of
Experience :::

::: thumbnail The Wisdom of
Experience :::

::: thumbnail The Wisdom of
Experience :::

Expanding Rails Boxcar packages

August 04, 2008

If you’re in the market for a new hosting provider for your Ruby on Rails application, you might take a look at the new options for Rails Boxcar. We recently expanded our service offerings into three pricing tiers as well as custom packages for those who need a bit more.

A few things that we’ve recently added support for:

  • Provide us your SSH key during sign up!
-   Allows us to keep your server even more secure by avoiding
    sending passwords over the net
-   Other fun features related to this coming soon
```bash
-   Auto-configured Nginx w/Mongrel cluster
-   Phusion Passenger (**mod_rails**) support! (for those with
```text
mixed-environments)
```text
-   Continued development of [Boxcar
```text
Conductor](http://github.com/planetargon/boxcar-conductor/tree/master))
  • …more in the works!

The best part is that we can get you up and running with a new Boxcar now for as low as $59/month USD.

For more information, visit: http://railsboxcar.com

If you have any questions, don’t hesitate to contact us.

Pair Programming and Micro Projects

July 31, 2008

It’s been quiet because I’ve been busy over the past few months. Projects, vacations, and pair programming with our new developer, Nigel. ;-)

Pair
programming{width=”500” height=”333”}

In other news, Chris and I launched http://ohmyscience.org (on twitter) in an effort to get a small one-night micro-project out the door.

::: thumbnail Oh My Science 2014 replacing god with reason... one tweet at a
time :::

I have a growing list of a few micro-projects that I hope to be helping get developed and launched before the summer is over. Stay tuned!

::: thumbnail Oh My Science 2014 replacing god with reason... one tweet at a
time :::

I hope that you’re all enjoying your summer!

Ruby 1.8.7 on MacPorts causing some problems

June 20, 2008

It appears that MacPorts has upgraded to Ruby 1.8.7, which is good news if you’re running Rails 2.1… but if you have an older Rails application… it’s not going to work too well.

In order to get Ruby 1.8.6 installed with the latest MacPorts, you’ll need to do the following.

Basecamp...

June 04, 2008

Kudos to the 37signals team for launching what looks like a nice way to get the word out about their products.

I’ve been using Basecamp for three years and it’s been a great tool for collaborating with our clients.

Basecamp{border=”0” height=”250” width=”300”}

Disclaimer: This is my get-rich-quick scheme for the day.

New Boxcar plans announced!

May 30, 2008

Yesterday we announced our new suite of plans for Rails Boxcar. You can now get started with a pre-configured VPS designed by Rails developers like you for as low as $59/month.

You can check out our new rates here:

If you’re at RailsConf, be sure to introduce yourself and ask for details. :-)

Meet us at RailsConf

May 28, 2008

If you’re coming to Portland for RailsConf or CabooseConf, be sure to introduce yourself (and we’ll try to do the same). A few of us from Planet Argon will be attending the conference. I thought that I’d make it easy to spot us by putting some faces to our names.

In corner #1 we have Alex Malinovich who is our Director of Deployment Services. If you have any questions about hosting options, deployment tips, and scaling your Ruby on Rails application.. be sure to tug on his shoulder. I also overheard that he’ll be giving people discounts on our Boxcar products to those he meets in person.

Alex{width=”500” height=”333”}
[Alex Malinovich, Director of Deployment Services]{.small}

In corner #2, we have Andy Delcambre who is on our development team. You might remember Andy from his series of blog posts/tutorials on using Git and getting Basecamp RSS feeds working in Google Reader via a Mongrel-based proxy (our team is still using this approach using this after ten months!).

Andy{width=”333” height=”500”}
[Andy Delcambre, Software Developer]{.small}

In corner #3, we have Gary Blessington who has been leading our design and development team. If you’re looking for a job working with Ruby on Rails, be sure to introduce yourself to Gary as he’s hoping to meet up with several applicants who will be in Portland this week.

IMG_9286
copy.jpg{width=”500” height=”333”}
[Gary Blessington, Director of Design and Development]{.small}

In corner #4… is me. I’m not doing any talks this year so I plan to do wander around stress-free as I’m not finishing my slides at the last minute or preparing for panel talks. I’m happy to field questions and exchange stories with you. :-)

me...{width=”500” height=”333”}
[Robby Russell]{.small}

We are hiring. so feel free to introduce yourself to any of the faces above.

…and most importantly, I hope you have a great time in Portland!

Coming to Portland for RailsConf or CabooseConf

May 23, 2008

If you’re coming to Portland, Oregon for RailsConf 2008 or CabooseConf… I’d like to invite you all to check out our collection of articles that we wrote to highlight some stuff to do in town. We’ll be posting a few more before the conference, but wanted to help you all plan out your visit in our wonderful little city.
Portland{width=”500” height=”333”}

Portland Revealed series

  • [Episode 2:
Beertown](http://blog.planetargon.com/2007/5/10/portland-revealed-episode-2-beertown)
```ruby
-   [Episode 3: Get
```text
outdoors](http://blog.planetargon.com/2007/5/11/portland-revealed-episode-3-get-outdoors)
```ruby
-   [Episode 4: Stay Awake During
```text
RailsConf](http://blog.planetargon.com/2007/5/16/portland-revealed-episode-4-stay-awake-during-railsconf)
```ruby
-   [Episode 5: Places to
```text
Work](http://blog.planetargon.com/2007/5/16/portland-revealed-episode-5-places-to-work)

::: thumbnail beertown
[Uploaded with plasq’s Skitch!]{style=”font-family: Lucida Grande, Trebuchet, sans-serif, Helvetica, Arial; font-size: 10px; color: #808080”} :::

Stay tuned as we’ll be posting more over the next week.