Nokogiri
30/06/2010Não sei se todo mundo já precisou disso mas provavelmente possa precisar. Surgiu um novo projeto para a nossa equipe no trabalho onde temos que criar um robô para ficar “lendo” um site de tempos em tempos…
Não sei se todo mundo já precisou disso mas provavelmente possa precisar. Surgiu um novo projeto para a nossa equipe no trabalho onde temos que criar um robô para ficar “lendo” um site de tempos em tempos…
Hoje fui agraciado com a presença de um Ipad em casa e claro a primeira coisa que fiz foi testar minhas aplicações nele.
Logo percebi que não estava tudo certo, a aplicação responde como se fosse um Iphone.
Vamos ao caso:
Primeiro vamos criar uma aplicação rails normal para testar esse reconhecimento.
rails new iphone_ipad
Agora criamos nossa home:
rails g controller home
rm public/index.html
No arquivo config/routes.rb colocamos nosso controller home como root da aplicação:
root :to => "home#index"
E alterar a linha para reconhecer controller e action com format
match ':controller(/:action(.:format))'
Repare que agora no rails 3 podemos indicar o controller e a action de forma bem mais simples. Declarando nossa action index no arquivo app/controllers/home_controller.rb
class HomeController < ApplicationController
def index
end
end
E a view em app/views/home/index.html.erb com o código:
<h1>Titulo Home</h1>
Tudo muito simples e fácil, agora temos que adicionar o reconhecimento de dispositivos móveis, no nosso caso iphone e ipad e para isso temos que olhar a propriedade do agente da requisição http.
Para isso funcionar vamos primeiro criar os mime types em config/initializers/mime_types.rb
Mime::Type.register_alias "text/html", :iphone
Mime::Type.register_alias "text/html", :ipad
E no controller adicionar os novos tipos de resposta:
class HomeController < ApplicationController
respond_to :html, :iphone, :ipad
def index
end
end
Agora precisamos criar a função para reconhecer os formatos em app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
layout 'application'
before_filter :set_iphone_or_ipad_format
def set_iphone_or_ipad_format
format = is_iphone_or_ipad_request?
unless format.nil?
request.format = format
end
end
def is_iphone_or_ipad_request?
request.user_agent =
Mais uma vez recomeçando este blog, agora com mais ruby. Estava procurando por um CMS escrito em rails para deixar de lado o wordpress e encontrei o toto…