recaptcha is a gem that uses google's CAPTCHA service.
A CAPTCHA is a program that can tell whether its user is a human or a computer.

To Setup recaptcha on local machine we need to add the gem,

 gem "recaptcha", :require => "recaptcha/rails" 

then we need to obtain private and public key by registering to this url

 http://www.google.com/recaptcha/whyrecaptcha 

While registration we can choose if we need public and private keys which work on
particular domain or we can choose to use it on any domain.

Once we have the public and private key we can create an initializer and
configure them in our application using,

Recaptcha.configure do |config|
  config.public_key  = '6Lc6BAAAAAAAAChqRbQZcn_yyyyyyyyyyyyyyyyy'
  config.private_key = '6Lc6BAAAAAAAAKN3DRm6VA_xxxxxxxxxxxxxxxxx'
  config.proxy = 'http://myproxy.com.au:8080'
end

Once configuration is done we can use the recaptcha_tags in our view using,

 <%= recaptcha_tags %> 

To verify whether the text entered by user matches the captcha, we use the method
"verify_recaptcha" in controller, it basically returns true or false.


respond_to do |format|
  if verify_recaptcha && @post.save
    ...
  else
    ...
  end
end

To use recaptcha with devise registration form we need to overide the devise create
method as follows,


  class RegistrationsController < Devise::RegistrationsController
    def create
      if verify_recaptcha
        super
      else
        build_resource(sign_up_params)
        clean_up_passwords(resource)
        flash.now[:alert] = "There was an error with the recaptcha code below. Please re-enter the code."
        flash.delete :recaptcha_error
        render :new
      end
    end
  end

The styles for the recaptcha widget are from the gem itself so while integrating for me the
UI was breaking and there were overlapse of text, so to fix them i had to override the
default styles using,


#recaptcha_response_field {
  height: 20px;
}
td div.recaptcha_input_area {
  height: 0px !important;
}