Ruby on Rails 2.2 Como Criar Rss Feed

Hoje vou mostrar como criar Rss Feed no Ruby on Rails 2.2, no final você vai dar risada, de tão simples que é. Vamos lá!

Geralmente a action index é responsável por fazer a listagem das informações, ela pode ser parecer com isso:

1
2
3
def index
  @histories = History.find :all, :limit => 10
end

ou como abaixo, quando você está usando o plugin will_paginate:

1
2
3
def index
  @histories = History.paginate :all, :page => params[:page]
end

Não vamos precisar mexer em nada na action index.

Você precisa criar um novo template chamado index.rss.builder, que deve estar localizado em app/views/histories/index.rss.builder com o seguinte conteúdo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
xml.instruct! 'xml', :version => "1.0"
xml.rss :version => "2.0" do
  xml.channel do
    xml.title "Notícias"
    xml.description "Últimas Notícias"
    xml.language('pt-BR')
    xml.link formatted_histories_url(:rss)
 
    for history in @histories
      xml.item do
        xml.title history.title
        xml.description history.content
        xml.pubDate history.created_at.to_s(:rfc822)
        xml.link history_url(history)
        xml.guid history_url(history)
      end
    end
  end
end

Pronto! O que você não acredita que está pronto? É verdade falta adicionar o link no template index.html.erb para ver o Rss Feed.

No template index.html.erb adicione:

1
<%= link_to " RSS Feed", formatted_histories_url(:rss) %>

Para acessar o Rss Feed visite: http://localhost:3000/histories.rss.

Não esqueça de definir no seu arquivo config/routes.rb que o model history trabalha com urls RESTful:

1
map.resources :histories

Uhmm! Não estou feliz ainda, acho que dá para melhorar mais, é verdade podemos adicionar:

1
	<link href="http://localhost:3000/histories.rss" rel="alternate" title="RSS" type="application/rss+xml" />

Entre as tags:

1
<head>...</head>

do HTML, fazendo isso o navegador adiciona o ícone de Feed na barra de endereço e deixa a coisa mais intuitiva para o usuário.

Vamos fazer isso de uma forma mais elegante e dinâmica.

No layout da sua aplicação adicionei yield :auto_discovery entre as tags head do HTML:

1
2
3
4
5
<head>
...
  <%= yield :auto_discovery %>
...
</head>

Agora no template index.html.erb adicione:

1
2
3
<% content_for :auto_discovery do %>
  <%= auto_discovery_link_tag(:rss, :action => :index, :format => :rss) %>
<% end %>

Agora sim ficou legal! ;-)

Mais informações assista aqui: http://media.railscasts.com/videos/087_generating_rss.mov.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

Posted in Ruby on Rails at fevereiro 7th, 2009. No Comments.

Ruby on Rails helper para criar o Mapa do Site

Mapa do Site

Mapa do Site

Hoje eu precisei criar o “Mapa do Site”, conforme imagem acima, procurei por alguns plugins para fazer isso, mas infelizmente não encontrei nada da forma que eu queria, então resolvi implementar o meu próprio helper.

Através das tags htmls ul e li é possível gerar essa estrutura.

Para implementar essa funcionalidade eu desenvolvi o seguinte helper:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
module SitemapHelper
 
  def sitemap
    map =
    {
      link_to("Página Inicial", root_url) =>
        {
          "Informação" => [link_to("Notícias", histories_path), link_to("Newsletters", newsletters_path)],
          "Capacitação e Aperfeiçoamento" => [link_to("Serviços", services_path), link_to("Institucionais", institutionals_path), link_to("Eventos", events_path), link_to("Melhores Práticas", best_practices_path), link_to("Podcasts", podcasts_path), link_to("Tvs", tvs_path), link_to("Degustações", tastings_path)],
          "Editora" => [link_to("Produtos", products_path)],
          link_to("Grupo", groups_path) => nil
        }
    }
 
    content_tag(:ul, generate_map(map))
  end
 
  def generate_map(elements)
    html = ''
 
    elements.each do |key, value|
      html << content_tag(:li, key)
 
      if !value.nil? and value.length > 0
        html << content_tag(:ul, generate_map(value.sort))
      end
    end
 
    return html
  end
 
end

No código acima eu criei um método chamado sitemap, dentro desse método existe um hash chamado map, nesse hash eu defino a hierarquia dos links.

O outro método é o generate_map, ele é responsável por gerar a estrutura html em listas através das tags html ul e li. Esse método usa recursividade (o grande amigo dos programadores ;-)).

Feito tudo isso, agora no template eu só chamo o helper, por exemplo no index.html.erb:

1
<%= sitemap %>

É possível chamar esse helper nos templates de erro 404, assim melhora a navegação para o usuário.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

Posted in Ruby on Rails at fevereiro 6th, 2009. No Comments.

Ruby on Rails como exportar ou gerar CSV

Para exportar ou gerar CSV no Ruby on Rails existe a gem FasterCSV.

Instalação:

1
sudo gem install fastercsv

Como usar:

Crie a action csv e o método privado stream_csv (necessário para fazer o download do csv) no controller.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Admin::NewslettersController < ApplicationController
  def csv
    newsletters = Newsletter.find(:all)
    stream_csv do |csv|
      csv << ["nome", "email"]
      newsletters.each do |n|
        csv << [n.name, n.email]
      end
    end
  end
 
  private
 
  def stream_csv
    filename = "newsletters.csv"
 
    #this is required if you want this to work with IE
    if request.env['HTTP_USER_AGENT'] =~ /msie/i
      headers['Pragma'] = 'public'
      headers["Content-type"] = "text/plain"
      headers['Cache-Control'] = 'no-cache, must-revalidate, post-check=0, pre-check=0'
      headers['Content-Disposition'] = "attachment; filename=\"#{filename}\""
      headers['Expires'] = "0"
    else
      headers["Content-Type"] ||= 'text/csv'
      headers["Content-Disposition"] = "attachment; filename=\"#{filename}\""
    end
 
    render :text => Proc.new { |response, output|
      csv = FasterCSV.new(output, :row_sep => "\r\n")
      yield csv
    }
  end
end

Documentação do FasterCSV: http://fastercsv.rubyforge.org/.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

Posted in Ruby on Rails at fevereiro 4th, 2009. No Comments.

Ruby on Rails 2.2 toda a documentação em um comando rake doc:guides

Uma boa documentação é tudo para um ótimo desenvolvedor, tecnologias bem documentadas sempre vão para frente.

Nesse aspecto o Ruby on Rails mostra a sua qualidade, possui uma ótima documentação da sua api: http://api.rubyonrails.org e outros materiais: http://rubyonrails.org/documentation.

Se contar a imensidão de blogs, pdfs, sites, podcasts, videocasts e exemplos que são encontrados na internet.

Se não bastasse tudo isso o Ruby on Rails disponibiliza toda a sua documentação off-line, com várias dicas e exemplos. Basta você digitar no diretório do seu projeto:

1
rake doc:guides

Será criado o diretório doc/guides com toda documentação para você consultar e usar de forma rápida e objetiva.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

Posted in Ruby on Rails at fevereiro 3rd, 2009. No Comments.

Ruby on Rails routes RESTful usando only

Quando você usa no arquivo routes.rb:

1
map.resources :photos

O Rails cria 7 actions padrões (index, show, new, create, edit, update, e destroy).

Você pode querer apenas usar as actions index e show, desta forma é possível fazer a seguinte configuração:

1
map.resources :photos, : only => [:index, :show]

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

Posted in Ruby on Rails at fevereiro 2nd, 2009. No Comments.

Ruby on Rails como colocar um captcha no formulário, instalação e uso do plugin Simple Captcha

Conheço um plugin chamado Simple Captcha, eu acho ele muito bom e satifaz todas as minhas necessidades.

Vou explicar como instalar e usar:

Instalação ImageMagick e RMagick::

Como o captcha trabalha com geração dinâmica de imagens e necessário instalar essas libs:

1
2
3
sudo apt-get install imagemagick
sudo apt-get install libmagick9-dev
sudo gem install rmagick

Instalação do plugin Simple Captcha:

No diretório do projeto digite o seguinte:

1
ruby script/plugin install svn://rubyforge.org/var/svn/expressica/plugins/simple_captcha

Configuração da aplicação:

No diretório do projeto digite:

1
rake simple_captcha:setup

O comando acima irá criar um arquivo de migração para armazenar os captchas gerados no banco de dados, também irá criar um partial para exibir o captcha na view.

Agora faça o migrate:

1
rake db:migrate

É necessário adicionar uma rota no arquivo config/routes.rb, essa rota será responsável por gerar as imagens:

1
map.simple_captcha '/simple_captcha/:action', :controller => 'simple_captcha'

Adicione a seguinte linha no arquivo app/controllers/application.rb:

1
2
3
ApplicationController < ActionController::Base
  include SimpleCaptcha::ControllerHelpers
end

Como usar:

No seu formulário na view adicione o seguinte:

1
<%= show_simple_captcha( : object=> "user" ) %>

Onde : object => “user” é o nome do seu model.
Obs.: Eu deixei separado o dois pontos, : object => “user” porque o wordpress troca por desenhos smiley, na hora de codificar deixa tudo junto.

No model adicione a seguinte linha:

1
2
3
class User < ActiveRecord::Base
  apply_simple_captcha
end

Agora no controller ao invés de usar:

1
@user.save

Use:

1
@user.save_with_captcha

O método @user.save funciona corretamente, mas não leva em consideração o novo campo captcha, por isso é necessário usar o método @user.save_with_captcha.

Outras opções de uso e configuração, para ver outras alternativas eu sugiro que leia: http://expressica.com/simple_captcha/.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

Posted in Ruby on Rails at fevereiro 1st, 2009. No Comments.

Como instalar a gem rmagick no Ubuntu

Para instalar a gem rmagick no Ubuntu faça o seguinte:

Instale o imagemagick:

1
sudo apt-get install imagemagick

Instale a lib dev do imagemagick:

1
sudo apt-get install libmagick9-dev

Finalmente instale a gem rmagick:

1
sudo gem install rmagick

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

Posted in Ubuntu at fevereiro 1st, 2009. No Comments.

 Assinar RSS Feed