quarta-feira, 26 de março de 2014

How to test Prawn + Rspec + Capybara on Ruby on Rails?



Eu estava procurando como testar Prawn + Rspec + Capybara no Ruby on Rails e encontrei alguns exemplos na Internet, mas, na maioria dos casos, os testes envolvendo o  Prawn + Rspec estavam no "formado ruby", sem os famosos arquivos de view *.pdf.prawn. Decidi então testar de um modo diferente pois eu queria testar do mesmo jeito que o usuário usa a aplicação, clicando em um link/botão e vendo um PDF no navegador.

Pois bem, esse teste pode ser feito com o Rspec + Capybara + PDF-Inspector que inspeciona o PDF, validando o conteúdo gerado.

Para fazer o teste siga os passos:

>> Você pode ver o exemplo completo no Github <<

Criando o PDF e visualizando no seu browser.

1) Coloque essas gems na sua Gemfile:
  • gem 'prawn'
  • gem 'prawnto_2', :require => 'prawnto'
  • gem 'rspec-rails', '~> 2.0'
  • gem 'capybara'
  • gem 'pdf-inspector'

2) Crie um link com o famoso helper "link_to" garantindo que o  :format => :pdf  foi usado.
  • link_to "click here to generates the PDF", my_link_path(:format => :pdf)

3) Garanta que o controller/action usados no link renderiza o formato PDF.
  • respond_to {|format| format.pdf}
4) Crie uma view com a extensão *.pdf.prawn e coloque os comandos prawn dentro dela para gerar seu PDF.

5) Neste momento, o link pode ser clicado e vocẽ verá o PDF no seu navegador.


Criando os testes com Rspec + Capybara + PDF-Inspector

1) Garanta que o Capybara esteja integrado com o rspec-rails, para isso, no arquivo spec_helper.rb coloque as duas seguintes linhas:
  • require "capybara/rspec"
  • require " capybara/rails"
3) Em alguns casos é necessário incluir a Capybara DSL no Rspec config do do arquivo spec_helper.rb também:
  • Rspec.configure {|config| config.include Capybara::DSL}
4) Crie seu teste:
  • require "spec_helper"

  • describe "Testing Prawn" do
  •     context "PDF" do
  •         it "Shows a PDF by clicking in the link" do
  •             visit "/my_link.pdf"
  •             ext_analysis = PDF::Inspector::Text.analyse(page.body)
  •             expect(ext_analysis.strings).to be_include("some text that you put in your pdf")
  •         end
  •     end
  • end 
Tudo pronto!



Este é o teste que tenho usado para garantir os passos que o usuário fará e também garantir que o conteúdo gerado pelo prawn é o esperado.

Talvez essas explicação não tenha sido o bastante, então, lembre-se que você pode ver o exemplo completo no Github!



==============
In English...

I was searching how to test Prawn + Rspec + Capybara on Ruby on Rails then I found some examples in a Internet but, in the most of cases, the test made by Prawn + Rspec were in "ruby format", without the famous *.pdf.prawn view files. Then I decided to do a test of a different way, because I have want to test in the same way how the user to do when use the application, clicking in a button/link and see  a PDF in a browser.

This test can be done by using Rspec + Capybara + PDF-Inspector that inspect the pdf, validating the generated content.

To do this test follow the steps

>> You can see the entire example on Github <<

Creating and using the PDF with views on your browser.

1) Put these gems on you Gemfile:
  • gem 'prawn'
  • gem 'prawnto_2', :require => 'prawnto'
  • gem 'rspec-rails', '~> 2.0'
  • gem 'capybara'
  • gem 'pdf-inspector'

2) Creates a link with the famous "link_to" helper on the view that goes a link to your PDF and ensure the :format => :pdf are setted.
  • link_to "click here to generates the PDF", my_link_path(:format => :pdf)

3) Ensure that the controller/action that you put in the link render the PDF format.
  • respond_to {|format| format.pdf}
4) Creates a view with the *.pdf.prawn extension and put the prawn commands inside to generates your PDF.

5) In this time, the link can be clicked and you will see the PDF in your browser.


Creating the tests with Rspec + Capybara + PDF-Inspector

1) Ensure the Capybara is integrated with rspec-rails, for this, in the spec_helper.rb file put the two follow lines:
  • require "capybara/rspec"
  • require " capybara/rails"
3) In some cases is needed to include the Capybara DSL on config Rspec, in spec_helper.rb too:
  • Rspec.configure {|config| config.include Capybara::DSL}
4) Creates your test:

  • require "spec_helper"

  • describe "Testing Prawn" do
  •     context "PDF" do
  •         it "Shows a PDF by clicking in the link" do
  •             visit "/my_link.pdf"
  •             ext_analysis = PDF::Inspector::Text.analyse(page.body)
  •             expect(ext_analysis.strings).to be_include("some text that you put in your pdf")
  •         end
  •     end
  • end 
All done!



This is the test that I been used to guarantee the steps that the user will do and the same time guarantee that the content generated from the prawn is the expected.

Maybe this explanation is not enough to you understand, then, remember that you can see the entire example on Github!



sexta-feira, 21 de março de 2014

CPF Utils, mais uma 'gem' na praça! :)

Acabei de publicar uma 'gem' para efeito de estudos. Ela se chama CPF Utils e tem o objetivo de ajudar os desenvolvedores na hora de gerar CPF's para testes, bem como validar CPF's, dentre outras funcionalidades que podem ser vistas no README do projeto.

Pois bem, como as funcionalidades podem interessar aos meus amigos desenvolvedores Ruby/Rails, segue o link (https://github.com/jacksonpires/cpf_utils) para o repositório do Github, bem como o link (https://rubygems.org/gems/cpf_utils) para a página do repositório Rubygems.



Vale ressaltar que todo o código está documentado e coberto por testes unitários usando Rspec.

Que venham as críticas! :)

sexta-feira, 14 de março de 2014

Ponteiros em Linguagem C

Como funcionam os ponteiros em C?

Essa é a pergunta campeã em sala de aula, por isso resolvi compartilhar aqui. Então vamos lá!

Se voltarmos à definição de variável, que é um espaço alocado na memória, podemos imaginar o seguinte:

1 - Quando declaramos uma variável, um espaço é reservado/alocado na memória do seu computador.
2 - Esse espaço que foi reservado/alocado tem um nome que foi dado pelo programador. Ex: int minha_variavel;
3 - Mesmo definindo um nome para a variável (no caso acima "minha_variavel") ela possui um endereço físico, por exemplo 0x4A1, que é o endereço de memória onde a variável, de fato, reside.

Pois bem, o que geralemente explico é que um ponteiro nada mais é do que uma variável que guarda o endereço de outra variável ou mesmo um endereço de memória. A imagem abaixo demonsta bem isso.


No caso acima, a variável "A" possui o valor "5" e o endereço de memória "0x3E8", já o ponteiro "p" possui o valor do "0x3E8" que é o endereço de "A" e possui seu próprio endereço "0x3C0".

Pronto, sabendo disso, podemos demostrar um algoritmo exemplo, mas antes precisamos saber a sintaxe de declaração de ponteiros, que para a linguagem C (o exemplo abaixo foi feito no DEV C++) é apenas colocar um asterísco antes do nome do ponteiro, como pode ser visto na linha 6 do algoritmo exemplo.

Seguindo o algoritmo exemplo, verificamos que na linha 8 a variável "a" recebe o valor inteiro 32, e na sequência (linha 9) o ponteiro "b" recebe o endereço de memória de "a" (o  & na linguagem C é o operador de endereço, retornando o endereço físico da variável), ou seja, "b" aponta para "a", por isso chamamos de ponteiro!

Por fim, fiz vários printf's para demonstrar o valor de cada um dos elementos envolvidos. Perceba que na linha 15 imprimo o ponteiro "b" precidido de um asterísco "*", que nesse caso significa que será impresso o conteúdo de quem o ponteiro "b" aponta (não confunda com o asterísco na declaração do ponteiro!).


  1. #include
  2. #include

  3. main(){
  4.  int a;
  5.  int *b;

  6.  a = 32;
  7.  b = &a;

  8.  printf("Eu sou o conteudo de A: %d\n", a);
  9.  printf("Eu sou o endereco de A: %x\n", &a);
  10.  printf("Eu sou o conteudo de B: %x\n", b);
  11.  printf("Eu sou o endereco de B: %x\n", &b);
  12.  printf("Eu sou o A através de B: %d\n", *b);

  13.  system("pause");
  14. }

É isso, espero que esse post ajude a entender nossos famosos ponteiros!

Um abraço!

terça-feira, 21 de janeiro de 2014

Aulas grátis de Ruby on Rails para iniciantes! #Updated

Olá Pessoal!

Olha eu voltando a postar algo por aqui. :)

Bem, acabei de lançar um novo projeto que deve interessar aos meus colegas desenvolvedores.

Pois bem, dias atrás comecei a publicar, no meu canal do youtube, uma série de aulas sobre Ruby on  Rails, dedicado à pessoas que estão iniciando na área.


A ideia inicial é postar vídeos de no máximo 15 minutos todas as sextas-feiras.

Desde já, agradeço a todos que estão enviando feedback, e peço que continuem enviando, pois são eles que motivam esse tipo de projeto.

Um abraço e boas aulas! ;)


#Update 07/02/2014

Aos interessados, fiz uma playlist no youtube para facilitar o acompanhamento.

sexta-feira, 12 de julho de 2013

Novo projeto no ar! (Site para resolução de questões de concurso público)

Boa tarde, amigos!

É com muito prazer que venho divulgar o mais novo site de resolução de concursos públicos! É ele, o site Mania de Concurseiro (www.maniadeconcurseiro.com.br).



A ideia do site é ajudar a todos que precisam estudar para concursos públicos através da resolução de questões de provas já realizadas. Para isso, todos os internautas podem contribuir enviando questões para o site e em contrapartida recebem uma pontuação, que pode ser trocada facilmente por acesso VIP, por exemplo.

A colaboração dos internautas visa contruirmos a maior base de questões de concurso para que todos desfrutem do bem maior, o estudo e o sucesso na aprovação do concurso desejado.

Além disso o site foi desenvolvido com o objetivo de ser rápido e eficiente na pesquisa e resoluções das questões, afinal, perder tempo é a última coisa que um concurseiro quer.

Em se tratando de serviços extras o site conta com os simulados, que são provas criadas pelo próprio usuário e que podem ser respondidas online ou ter um PDF gerado e baixado para que o aluno estude off-line, ou ainda, para que um professor possa passar para sua turma as questões de determinado concurso.

Enfim, queremos que o Mania de Concurseiro seja uma referência quando se tratar do ecossistema para estudos de concurso público.

É isso... Esperamos que ele ajude bastante aos atuais e futuros concurseiros!

[]'s

quarta-feira, 3 de julho de 2013

Novo Layout 2013

É isso aí!
Como de costume, uma mudança anual no layout do site. Dessa vez um tema bem dinâmico.
Lembrando que o blog agora já tem 6 aninhos... Como o tempo passa rápido, hein!?
Espero que apreciem! :)



[]s

terça-feira, 14 de maio de 2013

SWEBOK Traduzido para o português / PT-BR

Resolvi fazer esse post apenas para registrar um projeto que iniciei e participei em 2008 e até hoje ainda rende bons olhos.

Estou falando do Projeto SWEBOK, um documento tido como "O manual do Eng. de Software", traduzido para o PT-BR, que hoje ainda encontra-se no Wikidot (http://esl20081.wikidot.com/) e contou com a ajuda de diversas pessoas para que pudéssemos concluir toda a tradução.




Só contextualizando, esse projeto eu iniciei quando fiz minha pós-graduação em Eng. de Software em 2008 na UFLA. A princípio, a ideia foi dividir o documento em partes onde cada aluno ficaria responsável pela tradução de uma porção do texto, ou mesmo um capítulo todo, e foi isso que fizemos, chegando a traduzirmos 80% do total na época.

Juntando-se a isso, minha orientadora do TCC da época, Ângela Alves, ao ver o trabalho gostou da iniciativa e incentivou diversas outras turmas a ajudarem e a fazerem o mesmo com outras publicações.

Pois bem, estamos em 2013 e ainda hoje temos novos alunos e colaboradores entrando no projeto e contribuindo de alguma forma.

Gostaria então de agradecer a todos que participaram e participam desse "movimento" que tem ajudado bastante gente.

É como costumo dizer, "Ninguém melhor que todos juntos!"

Um abraço!