Diego Alvarez Nogueira

Blog sobre Ruby on Rails.

Fala galera!
Vai uma dica muito legal, para quem quiser montar um script que precise executar comandos no console, como exemplo:

  • cd /home
  • pwd
  • top
  • ps aux
  • entre outros…

Basta usar o método system(“comando”).
Vamos abrir o console do ruby para exemplificar, então, abra o console e digite irb.

system('ls -lha')

Read the rest of this entry »

  • 2 Comments
  • Filed under: Ruby on Rails, ruby
  • Fala pessoal!

    Recentemente estava tendo um problema para utilizar um plugin javascript, que precisava de um retorno json, no seguinte formato por exemplo:

    [{"value":"2","caption":"AK"},{"value":"1","caption":"AL"}]
    

    Então criei uma action para retonar os devidos valores:

      def states
        respond_to do |format|
          format.json do
            state = State.find(:all)
            render :json => state
          end
        end
      end
    

    Sendo que por padrão estava sendo retornado:

    [{"state":{"id":"2","name":"AK"}},{"state":{"id":"1","name":"AL"}}]
    

    Por padrão o método to_json, através da configuração ActiveRecord::Base.include_root_in_json = true , inclui em seu retorno o root, que no caso é o nome de nosso modelo.

    Então para resolvermos o problema, basta informar para não incluir o root no retorno do json, assim:

      def states
        ActiveRecord::Base.include_root_in_json = false
        respond_to do |format|
          format.json do
            states = State.find(:all)
            render :json => states
          end
        end
      end
    

    O plugin, ainda pedia que retornássemos dois campos, “value” e “caption”, e no meu caso estava retornando os campos da tabela, “id” e “name”.
    Então para resolvermos isso, basta passar o parâmetro :select do método find, ficando assim:

      def states
        ActiveRecord::Base.include_root_in_json = false
        respond_to do |format|
          format.json do
            states = State.find(:all, :select => "name AS caption, id AS value", :order => 'name')
            render :json => states
          end
        end
      end
    

    Pronto! Agora nosso retorno será exatamente como o plugin requer.

    [{"value":"2","caption":"AK"},{"value":"1","caption":"AL"}]
    

    Bem pessoal, espero que tenha ajudado de alguma forma, assim como me ajudou!

    Abraços

  • 0 Comments
  • Filed under: Ruby on Rails, json
  • Olá pessoal!

    Recentemente tive a necessidade de migrar meu blog que estava hospedado no wordpress.com(diegonogueira.wordpress.com) para um domínio próprio em um servidor diferente(diegonogueira.com.br), pois precisava ter mais controle sobre meu blog, por exemplo: instalar novos plugins, temas, incluir um google adsense, etc..
    Porém não queria perder meus posts, comentários, posicionamento do google e etc.

    Bem depois de rodar um pouco na net, consegui fazer a migração e quero compartilhar com vocês todo o passo a passo.

    Vamos trabalhar com os seguintes exemplos:
    1- exemplo.wordpress.com (blog no wordpress que será migrado)
    2- exemplo.com.br (novo blog)

    ATENÇÃO: Este processo, pode demorar algunas horas ou dependendo alguns dias, então esteja ciente que o seu blog ficará fora do ar.
    E o custo será de aproximadamente $20.00

    1º Passo

    Alugar um provedor de hospedagem que suporte(php, mysql), ou se você tiver um servidor próprio melhor ainda.
    Instale também o wordpress.

    OBS: Existem alguns provedores de hospedagem que já vem com opção de instalar o wordpress

    2º Passo

    Comprar o domínio desejado, no caso exemplo.com.br e configurar o DNS para apontar para o servidor que acabamos de alugar.

    NOTA: Só passe para o 3º passo, quando seu domínio estiver devidamente configurado, apontando para o novo servidor.

    3º Passo

    Agora vamos exportar todos os posts, comentários e etc do blog antigo exemplo.wordpress.com.

    Acesse o painel de seu blog, e vá até Ferramentas>>Exportar, e faça o download do arquivo.

    4º Passo

    Na nova instalação do wordpress, vamos importar todo o conteúdo exportado anteriormente.

    Para isso acesse o painel de controle de seu novo blog e vá no menu Ferramentas >> Importar. Agora importe o arquivo e teremos todos conteúdo que tinhamos antes.

    5º Passo

    Bem, agora você terá que mudar o DNS do seu domínio para apontar para o wordpress.
    Então vá na sua configuração de DNS e faça:

    1- Copie tudo que estiver lá, pois iremos retornar para o original em breve.
    2- Apague todas a entradas DNS
    3- Altere o master para ns1.wordpress.com
    4- Altere o slave para ns2.wordpress.com

    Caso você não consiga alterar o DNS, provavelmente ainda não esta liberado para o seu domínio, então vamos entrar em contado com o suporte e solicitar que permitam o acesso ao DNS do wordpress.
    Mande um e-mail para support@wordpress.com, se quiser pode usar o seguinte modelo:

    Assunto: Help with Domain Mapping
    Mensagem:
    To Wordpress Support Team,
    I have being using the wordpress hosting on the last year, and now I'm migrating my blog to my own server.
    The alteration procedure done through wordpress admin page didn't worked.
    I would like that you manually insert my new dns entries on your DNS server. Could it be possible?
    Here is my new dns entry: exemplo.com.br
    I'm looking forward to hearing from you.
    Cheers,

    ATENÇÃO: Lembre-se que ao fazer essa passo, seu domínio não ira mais apontar para o seu servidor de hospedagem e se você tiver e-mails configurados para este domínio, o mesmo não estará disponível.

    6º Passo

    Acesse o painel do antigo wordpress, e vá para Melhorias>>Domínios, digite o domínio desejado, no caso exemplo.com.br e clique em adicionar domínio ao blog.

    Bom, agora você terá que pagar $9.97, via paypal ou via cartão de crédito.

    Após a inclusão do seu domínio exemplo.com.br, marque o mesmo como primário.

    NOTA1: Pagamento realizado com paypal, pode demorar muito tempo, já com o cartão de crédito é efetuado na hora.

    NOTA2: Pronto, agora é só aguardar até que seu domínio novo exemplo.com.br esteja sendo redirecionado para exemplo.wordpress.com para prosseguir para o próximo passo.

    7º Passo

    Vamos para o penúltimo passo. Altere novamente as entradas DNS, sendo que agora vamos voltar para as configurações que copiamos (5º Passo), lembram? Vamos apontar para o novo servidor.

    NOTA: Tenha certeza de que foi alterado corretamente para o novo servidor antes de prosseguir para o próximo passo.

    8º Passo

    Em fim, o último passo!
    Volte ao painel de administração do seu blog antigo exemplo.wordpress.com. Vamos novamente para o menu Melhorias>>Domínio. Agora basta clicar em Renew no seu novo domínio exemplo.com.br. Será necessário pagar $10.00 para efetivação do serviço.

    Esse pagamento vale por 1 ano, após esse período se você quiser continuar com o serviço de redirecionamento, terá que pagar para renovar por mais 1 ano. Acredito que 1 ano é o suficiente.

    Bem é isso, espero que tenham gostado!

    Forte abraço!

  • 0 Comments
  • Filed under: wordpress
  • Por Bruno Costa
    (brtotal5@gmail.com)

    Quem nunca teve seu “branco criativo”?

    Alguns meditam, outros jogam video game (de preferência jogos de última geração), outros vão dar uma volta..o certo é que todos nós já passamos por isso não é mesmo?

    Nessa temida hora que entra em cena o principal aliado dos designers de plantão:  as referências!

    Todo o bom Designer, seja de interfaces, seja web designer, tanto faz, tem nos seus favoritos os sites que lhe inspiram e novas idéias fresquinhas acabam surgindo. Afinal, reiventar é a moda: filmes, carros, roupas, tudo hoje em dia segue essa tendência do minimalista ao “over” temos uma reinvenção de algo ou alguma coisa que já deu certo.

    Bom eu listei 10 sites que considero muito bons para buscar inspiração (e coloca bom nisso) espero que possa ser útil a todos!!!

    10° lugar:

    Creanet

    Site da agência interativa mais bacana que conheci nos últimos tempos, todo em flash com um visual super atual que une um conceito arrojado de interatividade com um design clean e sofisticado.

    9° lugar:

    Newcastle

    Empresa de webdesign, o site impressiona, a mim pelo menos, pelo belo estilo CSS + WEB 2.0

    Coloco ele como um dos meus favoritos!

    8° lugar

    Fuel Brand

    Navegação e Simplicidade. Esse site mostra que podemos fazer algo diferente e sair do lugar comum, mesmo que investindo no simples.

    7° lugar:

    Mauricio Guimarães

    Portifólio incrível. Flash muito bem feito.

    6° lugar:

    NetDreams

    Site para referências, possui várias categorias legais como melhores e-commerce e etc.

    5° lugar:

    HBO

    Muito bom!!!!

    4° lugar:

    Sony

    Muito bem feito. O site é bacana principalmente por causa do menu, muito legal!!!

    3° lugar:

    Smashing Magazine

    Site com conteúdo para dar e vender, na minha opinião o melhor site para referências, tutoriais e etc.

    2° lugar:

    PS3

    Site do Playstation 3.

    1° lugar:

    The Best Designs

    Cara, se você quer ver bons sites esse é o lugar!!!!!!!

    Galera essa é a lista de sites que eu uso para buscar inspiração, não só de visual, também de conteúdo, organização , tendências e etc…

    Depois vou fazer uma seleção apenas dos nacionais ok????

    Abraços a todos!

  • 2 Comments
  • Filed under: Design
  • Fala galera!!

    Vou falar um pouco de um recurso muito legal do rails, polymorphic routes.

    Quem nunca esteve na seguinte situação:
    Ter um controller ou uma view que precisam ser utilizadas por vários outros modelos, por exemplo:

    person_photos_url(@person)
    city_photos_url(@person)
    state_photos_url(@person)
    

    No exemplo precisamos utilizar photos para “People“, “City” e “State“, mas como faremos isso se precisamos definir as rotas especificamentes no controller e nas views? Muito simples, utilizaremos polymorphic routes!

    Vejam alguns exemplos:

    OBS: Não é obrigatório ter uma associação polimórfica para utilizar este recurso. Para tudo ficar de forma dinâmica, dentro do controller photos, carregaremos o modelo para uma variavel de nome padrão, por exemplo “@object“, mas ou menos assim:

    before_filter :load_object
    
    ...
    
    def load_object
     @object = if params[:person_id]
      Person.find(params[:person_id])
     elsif params[:city_id]
      City.find(params[:city_id])
     elsif params[:state_id]
      State.find(params[:state_id]
     else
      redirect_to access_denied_url
     end
    
    end
    
    ...
    

    Agora basta incluir a chamada polymorphic_url onde for necessário que ele transformará na rota necessária para seu modelo, vejamos algumas rotas:

    #Index
    #person_photos_url(@person) -> /people/1/photos
    #city_photos_url(@city) -> /cities/1/photos
    polymorphic_url(@object, :photos)
    
    #New
    #new_person_photo_url(@person) -> /people/1/photos/new
    #new_city_photo_url(@city) -> /cities/1/photos/new
    new_polymorphic_url(@object, :photo)
    
    #Edit
    #edit_person_photo_url(@person, @photo) -> /people/1/photos/1/edit
    #edit_city_photo_url(@city, @photo) -> /cities/1/photos/1/edit
    edit_polymorphic_url(@object, @photo)
    
    #Show
    #person_photos_url(@person, @photo) -> /people/1/photos/1
    #city_photos_url(@city, @photo) -> /city/1/photos/1
    polymorphic_url(@object, @photo)
    

    Essas chamadas podem ser utilizadas tanto em controllers, quanto em views:

    
    ...
    
    #Controller
    redirect_to polymorphic_url(@object, :photos)
    
    ...
    
    #View
    <% form_for polymorphic_url(@object, :photo) do |f| %>
    ...
    <% end %>
    
    <%= link_to "New Photo", pholymorphic_url(@object, :photo) %>
    

    E não acaba por aqui!!!

    #Index Comment
    #edit_person_photo_comments_url(@person, @photo) -> /people/1/photos/1/comments
    #edit_city_photo_comments_url(@city, @photo) -> /cities/1/photos/1/comments
    polymorphic_url(@person, @photo, :comments)
    
    #New Comment
    #new_person_photo_comment_url(@person, @photo) -> /people/1/photos/1/comments/new
    #new_city_photo_comment_url(@city, @photo) -> /cities/1/photos/1/comments/new
    polymorphic_url(@person, @photo, :comment)
    
    #Edit Comment
    #edit_person_photo_comment_url(@person, @photo, @comment) -> /people/1/photos/1/comments/1/edit
    #edit_city_photo_comment_url(@city, @photo, @comment) -> /cities/1/photos/1/comments/1/edit
    polymorphic_url(@person, @photo, @comment)
    

    E por ai vai…

    É isso ai galera! Espero que tenha ajudado em alguma forma!

    Abraços!

  • 0 Comments
  • Filed under: Ruby on Rails
  • Ruby on rails na prática!


    Olá pessoal!
    Escrevi uma matéria bem legal na revista TIdigital na edição dezembro/2009 sobre ruby on rails (Ruby on rails na prática). Caso queiram conferir já esta nas bancas.

    Abraços a todos!

    Olá pessoal!!

    Recentemente tive vários problemas ao tentar conectar o ruby com o banco postgres via dbi com a porta diferente da padrão 5432. Era erro atrás de erro, só conseguia conectar com a porta padrão 5432, mas queria utilizar outra, por exemplo, 5433. Até que consegui assim:

    require 'dbi'
    con=["DBI:Pg:dbname=nome_do_banco;host=localhost;port=porta", "nome_do_usuario", "senha"]
    DBI.connect(*con)
    

    É isso ai!
    Abraços!

    Fala galera!

    Vai uma dica para quem precisa testar com rspec um controle que esta utilizando nested attributes.
    Digamos que temos um model assim e que criou toda estrutura utilizando o script/generate rspec_scaffold product:

    class Product < ActiveRecord::Base
    
      #validates
      validates_presence_of :name
      validates_presence_of :line_id
    
      #associations
      has_many :photos, :as => :photograph, :dependent => :delete_all
    
      #nested attributes
      accepts_nested_attributes_for :photos, :allow_destroy => true,
                                    :reject_if => proc { |s| s['image'].blank?}
    end
    

    Provavelmente na hora que rodar um rake spec, você terá um erro em:

      describe "GET new" do
        it "assigns a new product as @product" do
          Product.stub!(:new).and_return(mock_product)
          get :new
          assigns[:product].should equal(mock_product)
        end
      end
    

    Então vamos alterar para que este teste passe:

      describe "GET new" do
        it "assigns a new product as @product" do
          product_model = mock_model(Product, :photos => mock_model(Photo))
          Product.stub!(:new).and_return product_model
          product_model.photos.should_receive(:build)
          get :new
          assigns[:product].should equal(product_model)
        end
      end
    

    Pronto, agora seu teste ira passar!

  • 1 Comment
  • Filed under: Ruby on Rails, rspec
  • Fala galera! Achei um vídeo muito legal sobre Desenvolvimento ágil.

    http://improveit.com.br/xp

    Espero que gostem!

    abraços

    Materiais sobre cucumber

    Fala galera!

    Separei vários materiais legais de Cucumber na Internet, e gostaria de compartilhar com vocês:

    Artigos

    http://jefferson.eti.br/?p=96

    http://cassiomarques.wordpress.com/2008/11/16/testes-funcionais-no-rails-usando-o-cucumber/

    ScreenCasts

    http://railscasts.com/episodes/155-beginning-with-cucumber

    http://railscasts.com/episodes/159-more-on-cucumber

    Documentação

    http://rdoc.info/projects/aslakhellesoy/cucumber

    Apostilas

    austin-on-rails_cukes

    Se eu achar mais algum material, coloco aqui para vocês.

    Fiquem a vontade para me enviar materiais também, ok?

    Abraços