When using markup like HTML, there is a distinction between structure and layout. HTML provides the structure and CSS provides the layout. You should be able to separate out the two. The HTML should still make sense and be organized even without the CSS. This idea is very well demonstrated with CSS Zen Garden.
Sunday, February 27, 2011
Why Haml?
When things are modular, simplicity and understanding have a chance to precipitate. Working with something that deals with a multitude of responsibilities is mentally tiring.
When using markup like HTML, there is a distinction between structure and layout. HTML provides the structure and CSS provides the layout. You should be able to separate out the two. The HTML should still make sense and be organized even without the CSS. This idea is very well demonstrated with CSS Zen Garden.
When using markup like HTML, there is a distinction between structure and layout. HTML provides the structure and CSS provides the layout. You should be able to separate out the two. The HTML should still make sense and be organized even without the CSS. This idea is very well demonstrated with CSS Zen Garden.
Thursday, February 10, 2011
Rails 3.0: Cucumber + Mocking
I know. Cucumber is used for integration tests. Integration tests and mocking shouldn't even be in the same sentence. However, there are times when practicality trumps theory.
For instance, emails. How do you ensure that emails have been sent/received?
Another example is MailChimp. When a user signs up, you add them to a MailChimp list. Now, whenever you need to create a user, your app hits MailChimp. Since you are suppose to start with a clean slate, you now need to clean out the MailChimp list. This gets tedious and time consuming.
To speed things up, you may want to mock certain tasks like these.
Cucumber supports RSpec mocking (aka doubles) pretty easily.
Open up features/support/local_env.rb (or your custom config file for Cucumber)
Done! Enjoy!
(Just as a note, I would test MailChimp without mocking when testing signup. I would mock it out in all other cases. Unfortunately, I haven't figured out how to test emails for real. If you have any suggestions, please leave a comment. I would love to hear it!)
For instance, emails. How do you ensure that emails have been sent/received?
Another example is MailChimp. When a user signs up, you add them to a MailChimp list. Now, whenever you need to create a user, your app hits MailChimp. Since you are suppose to start with a clean slate, you now need to clean out the MailChimp list. This gets tedious and time consuming.
To speed things up, you may want to mock certain tasks like these.
Cucumber supports RSpec mocking (aka doubles) pretty easily.
Open up features/support/local_env.rb (or your custom config file for Cucumber)
require 'cucumber/rspec/doubles'
Done! Enjoy!
(Just as a note, I would test MailChimp without mocking when testing signup. I would mock it out in all other cases. Unfortunately, I haven't figured out how to test emails for real. If you have any suggestions, please leave a comment. I would love to hear it!)
Friday, February 4, 2011
Rails 3.0: Devise + Mongoid + RSpec
Devise removes the mundane job of writing all the code required to handle a user account. Plus, it supports Mongoid.
The following is a non-exhaustive list of tasks Devise takes care of for you:
All this is available out of the box. Along with the goodies that are pre-packaged, Devise is fully customizable.
Install
You will need to setup your mailer if it isn't already setup. Devise depends on the default host being set, so ensure the following is set
Don't worry! Devise is smart and has already detected that you are using Mongoid at this point and not ActiveRecord. It has also created config/initializers/devise.rb. This is where you can configure Devise. Take some time to familiarize yourself with all the options and uncomment any that you would like to use. I'll wait.
Now you have access to things like
This generates a user model at app/models/user.rb with some Devise specific lines of code. Include the modules that you want and remove the ones you don't.
Believe it or not, Devise is now properly hooked up and ready!
To see all the routes
You will notice a bunch of user routes. Fire up your server and navigate to localhost:3000/users/sign_up. Voila!
As a quick reference, here are some useful routes:
https://github.com/plataformatec/devise
The following is a non-exhaustive list of tasks Devise takes care of for you:
- signup
- forgot/reset password (including emails)
- confirmation emails
- password encryption
- login
- logout
- editing account info
- locking accounts
- session expiration
All this is available out of the box. Along with the goodies that are pre-packaged, Devise is fully customizable.
Installation
Open Gemfilegem 'devise'
Install
bundle install rails generate devise:install
You will need to setup your mailer if it isn't already setup. Devise depends on the default host being set, so ensure the following is set
# ... other mailer settings config.action_mailer.default_url_options = { :host => 'localhost:3000' }
Don't worry! Devise is smart and has already detected that you are using Mongoid at this point and not ActiveRecord. It has also created config/initializers/devise.rb. This is where you can configure Devise. Take some time to familiarize yourself with all the options and uncomment any that you would like to use. I'll wait.
Test Helpers
If you are using RSpec, create spec/support/devise.rb withRSpec.configure do |config| config.include Devise::TestHelpers, :type => :controller end
Now you have access to things like
sign_in @user sign_out @user
Create a User model
It is time to create a User!rails generate devise user
This generates a user model at app/models/user.rb with some Devise specific lines of code. Include the modules that you want and remove the ones you don't.
Believe it or not, Devise is now properly hooked up and ready!
Routes
Devise automagically generates all the user routes required for handling the user account. If you look in config/routes.rb, you'll noticedevise_for :users
To see all the routes
rake routes
You will notice a bunch of user routes. Fire up your server and navigate to localhost:3000/users/sign_up. Voila!
As a quick reference, here are some useful routes:
- signup: new_user_registration_url
- edit account: edit_user_registration_url
- login: new_user_session_url
- logout: destroy_new_user_session_url
References
I encourage you to take a look at the Devise home page as there is a wealth of information there.https://github.com/plataformatec/devise
Subscribe to:
Posts (Atom)