miércoles, 13 de mayo de 2009

ruby on rails, googlebot(at)googlebot.com, No HTTP_REFERER, canonical and consistent websites



When you have an exception from the system, something like:


Subject: [ERROR] ships#flag_choice (ActionController::RedirectBackError) "No HTTP_REFERER was set in the request to this action, so redirect_to :back could not be called successfully. If this is a test, make sure to specify request.env[\"HTTP_REFERER\"]."


A ActionController::RedirectBackError occurred in ships#flag_choice:

No HTTP_REFERER was set in the request to this action, so redirect_to :back could not be called successfully. If this is a test, make sure to specify request.env["HTTP_REFERER"].




Is your chance to make a better website, a browseable website for robots.



Here you have:

app/controllers/application.rb

before_filter :load_url_back

def flag_choice
set_locale(params[:id])
session["lang"] = "#{params[:id]}"
#redirect_to :back
redirect_to params[:url_back]
end

def load_url_back
@url_back = "http://" + request.env["HTTP_HOST"]
+ request.env["REQUEST_URI"]
end


apps/views/layouts/application.html.erb

<%= link_to(image_tag('ingles.png'),
:action => 'flag_choice', :id => 'en_EN',
:url_back => @url_back ) %>
<%= link_to(image_tag('esp.png'),
:action => 'flag_choice', :id => 'es_AR',
:url_back => @url_back ) %>





Now we have consistent links that can be saved in any place, and consulted without history of browser navigation. This makes your links independent from where you came from.
And in the controller you are working in a request that just need canonical information from the HTTP Request.

domingo, 10 de mayo de 2009

viernes, 8 de mayo de 2009

ruby on rails, ActiveResource::Base, paginate, WillPaginate, RESTful xml resource and paginate

This sample assume that you have a service in the server that respond .xml


class NoteIntranet < ActiveResource::Base
self.site = INTRANET_CREDENTIALS[:site]
self.element_name = 'note'
cattr_reader :per_page
@@per_page = 20
def self.paginate(*args)
options = args.pop
@@per_page = options.delete(:per_page) || @@per_page
WillPaginate::Collection.create((options.delete(:page) || 1), @@per_page) do |pager|
all_elements = self.find(:all, options)
result = all_elements[pager.offset, pager.per_page].to_a
# inject the result array into the paginated collection:
pager.replace(result)
unless pager.total_entries
# the pager didn't manage to guess the total count, do it manually
pager.total_entries = all_elements.size
end
end
end

end


In the controller you may have conditions that are defined in the service, an example is a filter:


@notes = NoteIntranet.paginate(:page => params[:page], :params => { :title => params[:title] })


In the server service, in the controller you have:


@notes = Note.paginate(:page => params[:page], :conditions => ["title like '%?%'",params[:title]] )


This idea came from Gasper - Luis Guardiola

miércoles, 29 de abril de 2009

Flash Messages, System Messages, Ruby on Rails, by style, debug and test

controller:

flash[:notice] = "Correct things."
flash[:error] = "Alert things."
flash[:debug] = "Simple debug."


views/layouts:

<%- flash.each do |name, msg| -%>
<%= content_tag :div, msg, :id => "flash_#{name}" %>
<%- end -%>


css out of dev, in test, this can help you in both environments:

#debug{
display:none;
}

domingo, 26 de abril de 2009

ruby on rails i18n

An approach:

$script/plugin install git://github.com/svenfuchs/rails-i18n.git

$cp config/locales/en.yml config/locales/es-ar.yml

config/environment.rb

config.time_zone = 'Buenos Aires'
config.i18n.default_locale = :"es-ar"


app/views/payment_operation/show.html.erb

<%= t('views.payment.show_title', :count => @foo.size, :bar => @foo.name) %>


config/locales/es-ar.yml

es-ar:
views:
payment:
show_title:
zero: "Mostrando operación de pago y {{bar}}."
one: "Mostrando operación de pago y {{bar}}."
many: "Mostrando operación de pago y {{bar}}."

martes, 21 de abril de 2009

Survive in php.. a logger method.


function logger($msg){
if(!isset($GLOBALS['logger'])){
$GLOBALS['logger'] = fopen("/var/www/apps/logs/dev.log","a");
}
fwrite($GLOBALS['logger'],"$msg\n");
}

function request($id = ''){
logger("dir/file.php::request(id[".$id."])");
...
}

miércoles, 15 de abril de 2009

Conceptual views and Implementation Details.

FSM. Finite State Machine. This is real.

http://blog.objectmentor.com/articles/2008/11/27/the-truth-about-bdd

Languages, are implementation details?

http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise

jueves, 26 de marzo de 2009

jquery jcarousel fade efect



Change this file:
jquery.jcarousel.js

Add this lines: starting in line 431
next: function() {
this.stopAuto();
$('#mycarousel').fadeOut(1000);
if (this.tail != null && !this.inTail)
this.scrollTail(false);
else
this.scroll(((this.options.wrap == 'both' || this.options.wrap == 'last') && this.options.size != null && this.last == this.options.size) ? 1 : this.first + this.options.scroll);
$('#mycarousel').fadeIn(1000);
},


viernes, 13 de febrero de 2009

xubuntu ruby on rails



Xubuntu 8.10 install.
$sudo aptitude install ruby
http://www.ruby-lang.org
http://rubyonrails.org
http://www.rubygems.org


$sudo aptitude install libyaml-ruby
$sudo aptitude install libzlib-ruby
$sudo aptitude install curl
$curl -O http://files.rubyforge.vm.bytemark.co.uk/rubygems/rubygems-1.3.1.tgz
$tar -xvzf rubygems-1.3.1.tgz
$sudo ruby setup.rb
$rm -r rubygems-1.3.1
$rm rubygems-1.3.1.tgz
( $gem
The program 'gem' can be found in the following packages:
* rubygems1.8
* rubygems1.9 )
$sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
$gem --version
1.3.1
$sudo gem install rails


$sudo aptitude install mysql-server
$mysql -u root -p
mysql>create database stock_development;
mysql>create database stock_test;
mysql>create database stock_production;
mysql>grant all on stock_development.* to 'stock_user'@'localhost' identified by 'stock_user';
mysql>grant all on stock_test.* to 'stock_user'@'localhost' identified by 'stock_user';
mysql>grant all on stock_production.* to 'stock_user'@'localhost' identified by 'stock_user';
$sudo gem install mysql
no such file to load -- mkmf (LoadError)
$sudo aptitude install ruby1.8-dev
$sudo gem install mysql
/usr/bin/ruby1.8 extconf.rb install mysql
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
$sudo aptitude install libmysql-ruby


$mkdir src
$cd src
$rails stock
$cd stock
$script/console
(sh: irb: not found)
$sudo aptitude install irb1.8
$sudo ln -s /usr/bin/irb1.8 /usr/bin/irb
$script/console
no such file to load -- net/https
$sudo aptitude install libopenssl-ruby


$script/generate scaffold Provider name:string iva_type:integer
$rake db:migrate


$sudo aptitude install gedit


$sudo aptitude install git
$sudo aptitude install git-core
$git clone http://github.com/lguardiola/documentation_hacks
$cp -r documentation_hacks vendor/plugins
$rake doc:models:annotate


$script/plugin install git://github.com/technoweenie/restful-authentication.git
$script/generate authenticated user sessions
$script/plugin install git://github.com/timcharper/role_requirement.git
$script/generate roles Role User
No such file or directory - /home/maximilianou/src/stock1/app/controllers/application.rb
$cp app/controllers/application_controller.rb app/controllers/application.rb
$script/generate roles Role User
$mv app/controllers/application.rb app/controllers/application_controller.rb
$rake db:migrate