Depois de apanhar um pouquinho com o meu amigo Vinicius, acostumei com algumas novidades do Rails 2.0:

O MySQL não é mais o padrão para estrutura básica do projeto, e sim o SqlLite. Então preste atenção ao criar um novo projeto. Se quiser colocar o MySQL como padrão use:

rails [nome_do_projeto] -d  mysql

No lugar do mysql pode ser qualquer adaptador, como oracle, por exemplo.

Lembre-se de usar o generate scaffold com a declaração dos atributos, assim já são criados as migrates da forma correta, o comando é:

ruby script/generate scaffold nome_do_modulo atributo:tipo

exemplo:

ruby script/generate scaffold tasks title:string check:boolean

isso gera a seguinte migrate:

class CreateTasks < ActiveRecord::Migration
  def self.up
      create_table :tasks do |t|
        t.string :title
        t.boolean :check
        t.timestamps
      end
  end

  def self.down
    drop_table :tasks
  end
end

O t.timestamp gera os campos created_at e updated_at no banco.

Não precisamos mais criar o banco via SQL. Para o Rails criar o banco baseado no database.yml use:

rake db:create:all

Para chamar um controller padrão podemos usar duas sintaxes no routes.rb :

map.root :controller => "nome_do_controller"

ou

map.connect '', :controller => "nome_do_controller"

Isso não é novo, apenas um outra sintax, e não esqueça de apagar o /public/index.html.

Depois que começei a usar o mecanismo de busca do Firefox apontando para o google, raramente visito a home. É bem mais prático digitar direto no navegador. :)

Que tal colocar o manual do PHP no mecanismo de busca do Firefox?

Certamente o ícone do google estará diferente. Isto significa que existe um mecanísmo de busca novo para adicionar.
Clique no ícone e depois em Adicionar “Manual PHP”.


O resultado final será esse.

Como não tenho IE7 instalado, alguém me diga se funciona nele.

Para quem ficava um tempão executando uma bateria de testes um a um no Selenium, a Thought Works criou o SeleniumGrid capaz de executar vários testes simultâneos, inclusive em sistemas operacionais distintos.

Posts Relacionados:

Jaybill McCarthy discute em seu post 10 mitos sobre PHP.

Concordo em todos, o único que ainda não soa bem para mim é:

Myth #8: PHP is only good for web applications

That was true once, but these days it’s pretty much general purpose. It has a command line interpreter that can be run completely independent of the web server (for scripts) but can still use your existing PHP code libraries. You can even knock together GUI applications using PHP-GTK. Admittedly, PHP’s lineage and primary purpose is web applications, but that’s far from all you can do with it.

Trabalho com o PHP em linha de comando também, mas ainda não me basearia para uma aplicação inteira. Opinião minha. Preciso estudar um pouco mais. Um teste legal seria portar uma aplicação OO Web para Desktop.

Para saber mais sobre PHP-GTK tem o livro do Pablo Dall’Oglio em português ou acesse:

De resto nem preciso comentar, esse é um artigo para esclarecer à várias pessoas que ainda duvidam do PHP.

Tive que atualizar meu BlogRoll por causa do Caio Moritz, que está de endereço novo, como ele mesmo disse, teve que “abrir a mão e comprar um domínio:P

O novo endereço é www.caiomoritz.com, comece o ano aproveitando os artigos sobre Rails e PHP!

O PHP sempre me surpreende com funções nativas, principalmente manipulação de arrays :)
Para conhecer sempre mais funções e sair do aperto, o Funcaday pode ajudar.

Funcaday é um site que permite explorar uma função a cada dia. Consiste em um calendário de funções PHP, e a cada dia uma função diferente é apresentada.

Os novatos podem aprender funções novas e os veteranos relembrar aquelas já esquecidas.

Um dica legal é assinar o feed e acompanhar as atualizações.

A cidade imperial vai se tornar reduto de estudantes e profissionais de TI.

Acontece em Petrópolis o PHP Now!, workshop organizado pelo LNCC – Laboratório Nacional de Computação Científica, instituto do Ministério da Ciência e Tecnologia, juntamente com a Calepino (empresa de desenvolvimento Web), com apoio do Sebrae, da Fundação Parque de Alta Tecnologia – Funpat e do Movimento Petrópolis-Tecnópolis.

A programação será composta de assuntos como:

  • Aplicações desktop com PHP-GTK
  • PHP e Flex
  • Criação de gráficos dinâmicos
  • Integração PHP + Java
  • Segurança em PHP
  • Web 2.0
  • E muito mais

O evento conta com diversos palestrantes como Pablo Dall’Oglio (autor de livros como “PHP – Programando com Orientação a Objetos” e intusiasta do PHP-GTK) e Manuel Lemos (mantenedor do PHPClasses.org o maior e mais conhecido repositório de classes PHP do mundo).

Data e horário:
- 24 de novembro de 2007, sábado, das 8h às 18h.

Local:
- LNCC – Av. Getúlio Vargas, 333 – Quitandinha – Petrópolis – RJ

Investimento (inclui subsídio a almoço no restaurante do LNCC):
- R$ 20,00

mais informações visite o site http://www.calepino.com/phpnow/

Este é um guia rápido para você utilizar o Selenium e o SimpleTest em testes de aceitação automatizados.

Selenium é uma ferramenta para testar aplicações web pelo navegador de forma automatizada, exatamente como o usuário faria.

SimpleTest é uma ferramenta para estrutura de testes unitários automáticos, seguindo o padrão XUnit.

Suponho que você já tenha instalado um servidor WEB com PHP e PEAR rodando. Além de ter uma JRE configurada.

Vamos começar instalando o Selenium
Baixe o Selenium Remote Control no endereço http://www.openqa.org/selenium-rc/ e o descompacte.

Terá uma pasta selenium-server-0.9.2 (esta é a versão que peguei), eu a copiei próxima da raiz, mas você pode deixar aonde quiser.

O selenium-server.jar é o nosso principal arquivo, ele é que interpreta os comandos e aciona o navegador.

Para acionar o servidor basta usar o comando java -jar selenium-server.jar no prompt de comando.

Uma dica importante:
Ao iniciar o servidor pela primeira vez irá aparecer à janela do Firewall do Windows, perguntando se deseja manter o aplicativo bloqueado, permita o acesso. Caso tenha escolhido outra opção, encerre o java/javaw.exe no Gerenciador de Arquivos do Windows e inicie o selenium-server novamente e desse vez permita o acesso.

Beleza, agora que o selenium já está funcionado você pode testa-lo pelo prompt mesmo, encerre com Ctrl+C e inicie novamente agora em modo interativo com java -jar selenium-server.jar -interactive. O modo interativo permite que você envie comandos a serem interpretados pelo navegador.

Inicia uma sessão de navegador do Firefox, se preferir Internet Explorer use “iexplore”.
cmd=getNewBrowserSession&1=*firefox&2=http://www.google.com

O prompt retorna a sessão em que o selenium vai conversar com o navegador. No meu caso 260113, substitua as chamadas daqui para frente pelo nº que aparecer aqui.
Got result: OK,260113 on session 260113

Abre o navegador com o endereço indicado.
cmd=open&1=http://www.google.com/webhp&sessionId=260113

Escreve a frase ola mundo na caixa de texto.
cmd=type&1=q&2=ola mundo&sessionId=260113

Clica no botão de pesquisa
cmd=click&1=btnG&sessionId=260113

Pega o título da página
cmd=getTitle&sessionId=260113

O resultado é o titulo da página
Got result: OK,ola mundo - Google Search on session 260113

Encerra a sessão e fecha o navegador
cmd=testComplete&sessionId=260113

Durante a execução dos comandos você pode reparar que uma janela do navegador é aberta e obedece aos comandos do servidor.

Nessa hora você me pergunta:
Ótimo, posso fazer o que fazia no navegador por meio de uma programinha e checar os resultados!!! Mas não tem um jeito mais fácil de fazer isso?
Claro que sim, vamos usar o selenium-cliente PHP e o SimpleTest para isso.

Copie a pasta selenium-php-client-driver-0.9.2 para o seu diretório www. Lá está o cliente selenium para php. Já temos um servidor para atender aos testes e agora mão a obra.
Corrija os caminhos do require_once antes de testar. Se precisar use a função set_include_path.

require_once"simpletest/simpletest.php";

require_once"simpletest/autorun.php";

require_once "Testing/Selenium.php";class GoogleTest extends UnitTestCase{

private $selenium;

/**

* Metodo é executado antes de cada teste.

* Testing_Selenium e inicia a sessão.

*/

public function setUp(){

$this->selenium = new Testing_Selenium("*firefox", "http://www.google.com");

$this->selenium->start();

}

/**

* Metodo é executado após a execução de cada teste.

* Encerra a sessão.

*/

public function tearDown(){

$this->selenium->stop();

}

/**

* Testa uma busca no google.

* É aberto o navegador.

* Escreve a frase ola mundo na caixa de texto.

* Clica no botão de pesquisa.

* Aguarda o carregamento ou 10s.

* testa se o padrão /ola mundo/ está no titulo da página.

*/

public function testGoogle(){

$this->selenium->open("/");

$this->selenium->type("q", "ola mundo");

$this->selenium->click("btnG");

$this->selenium->waitForPageToLoad(10000);

$this->assertPattern("/ola mundo/",$this->selenium->getTitle());

}

}

?>

Reinstalando meu FireFox e os plugins tive uma surpresa. O Web Developer do site oficial do FireFox não funciona na minha versão. Aparece a seguinte mensagem:

“Não compatível com o FireFox 2.0.0.7″

Tive que baixar direto do site do Chris Dederick, o mantenedor do plugin. Ficar sem o Web Developer, Jamais!!!

Visitando minhas galerias de CSS encontrei um site bem interessante e não foi o layout que me chamou atenção. Foi o Junction PHP.

Junction é a cola entre sua aplicação e o banco de dados.

Com essa frase Junction PHP resume seu papel na aplicação. Escrito em PHP 5 se baseia no conceito popular do Hibernate, mapeamento objeto-relacional via XML.

Como requisito nossas classes teem que ser POJO (POPO fica muito feio) ou seja, construtor padrão e métodos getX e setX para cada propriedade mapeada.

Considerei a documentação razoável, existe uma página para o desenvolvedor com wiki que ainda está muito vazia e o tratamento de erros está muito básico.
Agora podemos contar com mais essa opção de camada de persistência de objetos em PHP 5.

Próxima Página »