Tuesday, October 30, 2007
Tuesday, October 23, 2007
Autocomplete in Rails 2.0
1. Install the auto_complete plugin.
script/plugin install http://svn.rubyonrails.org/rails/plugins/auto_complete
2. Turn off CSRF protection. Read Ryan's post.
You will get ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.3.7707/lib/action_controller/request_forgery_protection.rb:73
error if you don't turn it off.
script/plugin install http://svn.rubyonrails.org/rails/plugins/auto_complete
2. Turn off CSRF protection. Read Ryan's post.
You will get ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.3.7707/lib/action_controller/request_forgery_protection.rb:73
error if you don't turn it off.
Thursday, October 18, 2007
Testing Rails 2.0 Http Authentication
Peepcode Rails 2 - New features for your applications by Ryan Daigle shows one way of testing your controllers that use Rails 2.0 http authentication. Another way would be to use mocks. I will post an example when I get back from TDD with Rails training here in Columbus, Ohio.
Testing ActiveMerchant Billing
There are some good resources for ActiveMerchant billing plugin such as:
1. Processing Credit Cards
2. Active Merchant and AuthorizeNet
3. Active Merchant Thread
4. Good blog post on ActiveMerchant
Gotchas:
1. The transaction key that is provided by AuthorizeNet expires automatically in 24 hours. So you must recreate it. Login to your AuthorizeNet test account, go to settings -> Create a new Transaction key.
Use this your login id and the newly generated transaction key in the following code.
require File.dirname(__FILE__) + '/../test_helper'
class ActiveMerchantTest < Test::Unit::TestCase
include ActiveMerchant::Billing
def test_gateway
ActiveMerchant::Billing::Base.mode = :test
creditcard = ActiveMerchant::Billing::CreditCard.new(
:first_name => "dummy",
:last_name => "dummmy 2",
:number => "4779139500118580",
:verification_value => "410",
:type => "Visa",
:month => "10",
:year => "2008"
)
options = {
:name => "Bugs Bunny",
:email => "bbunny@gmail.com",
:phone => "4048615540",
:card_code => "410",
:order_id => "12345",
:description => "Conference reservation",
:billing_address => {
:address1 => "1234 Facke street",
:city => "Wichita",
:state => "Kansas",
:zip => "27606",
:country => "US" }
}
# If you do not immediately disable the old value, it will automatically expire in 24 hours.
gateway = AuthorizeNetGateway.new({:login => "Your API Login ID",
:password => "Your Transaction Key"})
response = gateway.purchase(10000, creditcard, options)
puts response.inspect
assert response.success?
end
end
The output response:
Response
1. Processing Credit Cards
2. Active Merchant and AuthorizeNet
3. Active Merchant Thread
4. Good blog post on ActiveMerchant
Gotchas:
1. The transaction key that is provided by AuthorizeNet expires automatically in 24 hours. So you must recreate it. Login to your AuthorizeNet test account, go to settings -> Create a new Transaction key.
Use this your login id and the newly generated transaction key in the following code.
require File.dirname(__FILE__) + '/../test_helper'
class ActiveMerchantTest < Test::Unit::TestCase
include ActiveMerchant::Billing
def test_gateway
ActiveMerchant::Billing::Base.mode = :test
creditcard = ActiveMerchant::Billing::CreditCard.new(
:first_name => "dummy",
:last_name => "dummmy 2",
:number => "4779139500118580",
:verification_value => "410",
:type => "Visa",
:month => "10",
:year => "2008"
)
options = {
:name => "Bugs Bunny",
:email => "bbunny@gmail.com",
:phone => "4048615540",
:card_code => "410",
:order_id => "12345",
:description => "Conference reservation",
:billing_address => {
:address1 => "1234 Facke street",
:city => "Wichita",
:state => "Kansas",
:zip => "27606",
:country => "US" }
}
# If you do not immediately disable the old value, it will automatically expire in 24 hours.
gateway = AuthorizeNetGateway.new({:login => "Your API Login ID",
:password => "Your Transaction Key"})
response = gateway.purchase(10000, creditcard, options)
puts response.inspect
assert response.success?
end
end
The output response:
Response
Sunday, October 14, 2007
Extremely Simple Calendar Integration for Rails
Finally found a calendar that is very easy to install and use. Nice calendar. I had to change the width for the select in css to 60px, since I am displaying time also. The syntax:
<%= calendar_date_select_tag "event[departure]",
@event.departure.to_s,
:time => true %>
<%= calendar_date_select_tag "event[departure]",
@event.departure.to_s,
:time => true %>
Upgrading Rails 1.2.5 version
ERROR: While executing gem ... (OpenURI ::HTTPError)
404 Not Found
To resolve this issue during upgrade:
1. sudo gem update --system
2. sudo gem install rails --include-dependecies
#2 worked when the server came back up.
404 Not Found
To resolve this issue during upgrade:
1. sudo gem update --system
2. sudo gem install rails --include-dependecies
#2 worked when the server came back up.
Saturday, October 13, 2007
Testing Emails in Rails 2.0
There is a new assert_emails that can be used like:
assert_emails 1 do
UserMailer.deliver_signup_notification(@user)
end
There is also negated version : assert_no_emails that takes a block.
assert_emails 1 do
UserMailer.deliver_signup_notification(@user)
end
There is also negated version : assert_no_emails that takes a block.
Friday, October 12, 2007
How to use alias for Textmate Rails projects
My ~/.bash_profile looks like this:
PATH="/usr/local/subversion/bin:$PATH"
PATH="/opt/local/bin:$PATH"
PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"
export PATH
PS1='\t:\w > '
export EDITOR='mate -w'
export JAVA_HOME=/usr
export MANPATH=$MANPATH:/opt/local/share/man
export INFOPATH=$INFOPATH:/opt/local/share/info
export atom="$HOME/work/atomizer"
export ard="$HOME/work/zepho/remote/trunk"
export astro="$HOME/clients/ge/astroceleb"
export star="$HOME/clients/ge/starstories"
alias matom="mate $atom"
alias mard="mate $ard"
alias mastro="mate $astro"
alias mstar="mate $star"
alias off="sudo shutdown -h now"
Example : matom opens the atomizer project.
PATH="/usr/local/subversion/bin:$PATH"
PATH="/opt/local/bin:$PATH"
PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"
export PATH
PS1='\t:\w > '
export EDITOR='mate -w'
export JAVA_HOME=/usr
export MANPATH=$MANPATH:/opt/local/share/man
export INFOPATH=$INFOPATH:/opt/local/share/info
export atom="$HOME/work/atomizer"
export ard="$HOME/work/zepho/remote/trunk"
export astro="$HOME/clients/ge/astroceleb"
export star="$HOME/clients/ge/starstories"
alias matom="mate $atom"
alias mard="mate $ard"
alias mastro="mate $astro"
alias mstar="mate $star"
alias off="sudo shutdown -h now"
Example : matom opens the atomizer project.
How to configure Western Digital External Hard Disk for sharing on a network
1. Connect the WD MyBook to the Linksys router using USB cable.
2. Open the admin interface using the browser. In the Storage tab create a new share.
3. Make sure that All Partitions share is selected.
4. Open the finder and browse to the Network -> MsHome folder. Click on Linksyswrt350N and select the share that you created. Click ok. Now you can view the external drive from all the computers connected to the router.
Still have not figured out how to pick up the changes on the external drive from the computer that did change it. I have to reconnect to see the modifications. There has to be a better way.
2. Open the admin interface using the browser. In the Storage tab create a new share.
3. Make sure that All Partitions share is selected.
4. Open the finder and browse to the Network -> MsHome folder. Click on Linksyswrt350N and select the share that you created. Click ok. Now you can view the external drive from all the computers connected to the router.
Still have not figured out how to pick up the changes on the external drive from the computer that did change it. I have to reconnect to see the modifications. There has to be a better way.
How to setup mac ox for Facebook call back URL
1. Type ifconfig en0 in the terminal. The output will be like:
en0: flags=8863 mtu 1500
inet6 fe80::211:24ff:fed6:3436%en0 prefixlen 64 scopeid 0x4
inet AAA.XXX.Z.YYY netmask 0xffffff00 broadcast 192.168.1.255
ether 00:11:24:d6:34:36
media: autoselect (1000baseT) status: active
2. Go to Linksys, Applications and Gaming tab, Port Range Forwarding and give a name for the application, specify start and end port (ex 3000 &B 3010), Protocol is both, To IP Address will have AAA.XXX.Z.YYY value, check the enabled box. Click on Save Settings.
3. In setup, DDNS tab, select DynDNS.org as the DDNS service and provide the username, password and hostname that you specified when you created an account with DynDNS.com site. System value is Capture(ddn.dynamic)Dynamic. All other values are default. Click Update and Save Settings.
4. Login to Facebook and specify the hostname and values for other parameters consistent with the above steps.
That's it. Now you can run the Facebook app and it will call your Rails app running on your machine.
en0: flags=8863
inet6 fe80::211:24ff:fed6:3436%en0 prefixlen 64 scopeid 0x4
inet AAA.XXX.Z.YYY netmask 0xffffff00 broadcast 192.168.1.255
ether 00:11:24:d6:34:36
media: autoselect (1000baseT
2. Go to Linksys, Applications and Gaming tab, Port Range Forwarding and give a name for the application, specify start and end port (ex 3000 &B 3010), Protocol is both, To IP Address will have AAA.XXX.Z.YYY value, check the enabled box. Click on Save Settings.
3. In setup, DDNS tab, select DynDNS.org as the DDNS service and provide the username, password and hostname that you specified when you created an account with DynDNS.com site. System value is Capture(ddn.dynamic)Dynamic. All other values are default. Click Update and Save Settings.
4. Login to Facebook and specify the hostname and values for other parameters consistent with the above steps.
That's it. Now you can run the Facebook app and it will call your Rails app running on your machine.
Thursday, October 11, 2007
How to make Textmate recognize html.erb format of Rails 2.0
Just change the type to HTML (Rails) by changing the menu at the bottom of the Textmate window.
Tuesday, October 09, 2007
RSpec Not Implemented Feature
In the regular test unit, I do something like:
def test_load_upcoming_events_for_the_week
puts "Not Implemented : test_load_upcoming_events_for_the_week"
assert true
end
def test_load_top_4_categories
puts "Not Implemented : test_load_top_4_categories"
assert true
end
All my to do items goes into the autotest output and I have easy access to my to do list.
def test_load_upcoming_events_for_the_week
puts "Not Implemented : test_load_upcoming_events_for_the_week"
assert true
end
def test_load_top_4_categories
puts "Not Implemented : test_load_top_4_categories"
assert true
end
All my to do items goes into the autotest output and I have easy access to my to do list.
Integrating Flash With Rails
1. Install flashobject helper rails plugin
script/plugin install http://lipsiasoft.googlecode.com/svn/trunk/flashobject_helper
2. Include <%= javascript_include_tag :defaults %>
3. In the view: <%= flashobject_tag "/flash/demo.swf %>
script/plugin install http://lipsiasoft.googlecode.com/svn/trunk/flashobject_helper
2. Include <%= javascript_include_tag :defaults %>
3. In the view: <%= flashobject_tag "/flash/demo.swf %>
Monday, October 08, 2007
Using Capistrano 1.4.1 when you already have 2.0
1. sudo gem install daemons gem_plugin mongrel mongrel_cluster --include-dependencies
2. sudo gem install capistrano -v 1.4.1
3. cap _1.4.1_ long_deploy
2. sudo gem install capistrano -v 1.4.1
3. cap _1.4.1_ long_deploy
Sunday, October 07, 2007
Sake Headaches on Rails 2.0 Preview release
1. sudo gem install ruby2ruby -y
2. sudo gem install sake
3. sake -i bootstrap.rake
throws the error:
/usr/local/lib/ruby/gems/1.8/gems/sake-1.0.11/lib/sake.rb:315:in `parse': /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:2028:in `const_missing': uninitialized constant Sake::TasksFile::RAILS_ROOT (NameError)
2. sudo gem install sake
3. sake -i bootstrap.rake
throws the error:
/usr/local/lib/ruby/gems/1.8/gems/sake-1.0.11/lib/sake.rb:315:in `parse': /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake.rb:2028:in `const_missing': uninitialized constant Sake::TasksFile::RAILS_ROOT (NameError)
RESTful authentication with Rails 2.0
1. script/generate authenticated user --include-activation creates Rails 1.2.3 style migration.
So, I changed it to:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users, :force => true do |t|
t.string :login, :email, :remember_token
t.string :crypted_password, :limit => 40
t.string :salt, :limit => 40
t.string :activation_code, :limit => 40
t.datetime :remember_token_expires_at, :activated_at
t.timestamps
end
end
def self.down
drop_table "users"
end
end
2. The routes.rb looks like:
ActionController::Routing::Routes.draw do |map|
map.resources :users
map.resource :session
map.connect '', :controller => 'home', :action => 'index'
map.with_options :controller => "users" do |page|
page.signup "/signup", :action => "new"
page.activate "/activate/:activation_code", :action => "activate"
end
# Install the default routes as the lowest priority.
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
I had to define named route for signup because if I use new_user method in the application.rhtml, I kept getting error.
I don't know how to define the route in a RESTful way for activation. So I have named route for it.
3. In the form:
<% form_for @user do |f| -%>
<% end -%>
That's it. I am able to signup and activate using Rails 2.0. Of course I had to rename the .rhtml files to .html.erb. Now the Textmate shortcuts are broken, since it recogizes only rhtml files.
So, I changed it to:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users, :force => true do |t|
t.string :login, :email, :remember_token
t.string :crypted_password, :limit => 40
t.string :salt, :limit => 40
t.string :activation_code, :limit => 40
t.datetime :remember_token_expires_at, :activated_at
t.timestamps
end
end
def self.down
drop_table "users"
end
end
2. The routes.rb looks like:
ActionController::Routing::Routes.draw do |map|
map.resources :users
map.resource :session
map.connect '', :controller => 'home', :action => 'index'
map.with_options :controller => "users" do |page|
page.signup "/signup", :action => "new"
page.activate "/activate/:activation_code", :action => "activate"
end
# Install the default routes as the lowest priority.
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
I had to define named route for signup because if I use new_user method in the application.rhtml, I kept getting error.
I don't know how to define the route in a RESTful way for activation. So I have named route for it.
3. In the form:
<% form_for @user do |f| -%>
<% end -%>
That's it. I am able to signup and activate using Rails 2.0. Of course I had to rename the .rhtml files to .html.erb. Now the Textmate shortcuts are broken, since it recogizes only rhtml files.
Saturday, October 06, 2007
AJAX Popup box
Thursday, October 04, 2007
Avoid Heavy Response Processing in Rails
I am half-way through the Topfunky's Peepcode Code Review pdf book. It is very well written.
In my previous job, I had to find a way of processing records that was created by users and send them to an external vendor. My pointy haired boss told me to spawn a thread for this purpose. I suggested using some kind of messaging system for obvious reasons. In the end we compromised and settled for Rake task and cron job combination.
Peepcode's book talks about this issue in detail.
In my previous job, I had to find a way of processing records that was created by users and send them to an external vendor. My pointy haired boss told me to spawn a thread for this purpose. I suggested using some kind of messaging system for obvious reasons. In the end we compromised and settled for Rake task and cron job combination.
Peepcode's book talks about this issue in detail.
Tuesday, October 02, 2007
uninitialized constant Rails::Initializer::MemCache
1. sudo port install memcached
2. sudo gem install memcache-client
That got rid of the error message.
2. sudo gem install memcache-client
That got rid of the error message.
Subscribe to:
Posts (Atom)