Entendendo Rails

  • Published on
    06-Jan-2016

  • View
    21

  • Download
    1

Embed Size (px)

DESCRIPTION

Entendendo Rails. Fabio Akita Surgeworks Brazil Rails Practice Manager www.akitaonrails.com. 37signals. Criado por David Heinemeier Hansson, em 2004 Extrado do aplicativo Basecamp Feito em Ruby, em vez de PHP ou Java Lanamento da verso 1.0 em dez/2005. O que Rails?. - PowerPoint PPT Presentation

Transcript

<ul><li><p>Entendendo RailsFabio AkitaSurgeworks Brazil Rails Practice Managerwww.akitaonrails.com</p></li><li><p>37signalsCriado por David Heinemeier Hansson, em 2004</p><p>Extrado do aplicativo Basecamp</p><p>Feito em Ruby, em vez de PHP ou Java</p><p>Lanamento da verso 1.0 em dez/2005</p></li><li><p>O que Rails?full stack web framework</p><p>Framework completo para desenvolvimento de aplicativo Web</p><p>Pacote MVC (Model-View-Controller)Action Pack (Action Controller e Action View)Active Record</p><p>Suporte a envio e recebimento de e-mailsAction Mailer</p><p>Suporte a Web ServicesAction WebServices</p></li><li><p>Arquitetura Rails</p></li><li><p>Por que Ruby?Linguagem DinmicaFortemente TipadaMuito ExpressivaAltamente ProdutivaTotalmente Orientado a ObjetosHerana de SmallTalk e LispSimples sem ser complexaSintaxe familiar e coerentePermite criao de Linguagem Especfica de Domnio (DSL)</p></li><li><p>Comeo SimplesWindows: Instant Railswiki.rubyonrails.com/rails/pages/InstantRails</p><p>Mac e Linux: FiveRuns RB-Installwww.fiveruns.com/products/rm/install</p></li><li><p>Comeo PadroInstalar Ruby 1.8.6www.ruby-lang.org/en/downloads</p><p>Instalar RubyGems (Mac ou Linux)rubyforge.org/frs/?group_id=126</p><p>Instalar Rails (linha de comando)gem install rails</p><p>Instalar MySQL (suporta outros bancos)dev.mysql.com/downloads</p></li><li><p>Primeiro PassoSaber o que queremos:</p><p>David Hansson tem um screencast demonstrando a criao de um pequeno blog em 15 minutoshttp://media.rubyonrails.org/video/rails_take2_with_sound.mov</p><p>Queremos um blog semelhante</p></li><li><p>O Que temos no Blog?Uma tabela de PostsUma tabela associada de CommentsUma tela de listagem de PostsUma tela de criao e edio de PostsUma tela de detalhes do PostNo detalhe do Post vemos e adicionamos Comments</p><p>Faremos tudo em ingls. No difcil adaptar para Portugus, mas no escopo desta demonstrao</p></li><li><p>Novo Projetorails </p></li><li><p>Novo Banco de Dadoscreate database _</p></li><li><p>AmbientesRails vem preparado para lidar com trs ambientes diferentes:</p><p>Development (sandbox)</p><p>Test (testes unitrios, funcionais, integrados)</p><p>Production (produo)</p></li><li><p>Conveno sobre ConfiguraoEstrutura comum de diretrios</p></li><li><p>Configurao MnimaBanco de dadosNo exemplo, apenas colocando as senhas</p></li><li><p>Criando um Controllerscript/generate controller </p></li><li><p>Controllers e ActionsTodo Controller fica no diretrio:/app/controllers/_controller.rb</p><p>Todo Controller herda a classe ApplicationController</p><p>Todo aplicativo Rails criado com uma classe chamada ApplicationController, que herda de ActionController::Base, e base de todos os outros controllers</p><p>Todo mtodo de um controller chamado de Action</p></li><li><p>Criando uma ActionUma classe Controller pode ter quantas Actions quanto necessrias</p></li><li><p>Servidor de Teste: WEBRick</p></li><li><p>Roteamento Customizvelhttp://localhost:3000/:controller/:action/:id</p></li><li><p>Acessando uma ActionSeguindo a regra anterior de roteamentohttp://localhost:3000/blog/index</p><p>blog = app/controller/blog_controller.rbindex = mtodo index em BlogController</p></li><li><p>Criando uma View</p></li><li><p>Mais ConvenesAo final de toda Action, Rails chamar uma view com o mesmo nome da Action, no seguinte diretrio:/app/views//.</p><p>A extenso do arquivo pode ser:</p><p>.rhtml - Embedded Ruby (HTML+Ruby).rxml - XML Builder (Ruby puro).rjs - Javascript Generator (Ruby puro)</p><p>Este fluxo pode ser interrompido com uma chamada explcita ao mtodo render ou redirect_to</p></li><li><p>Implementando Postscript/generate model </p></li><li><p>MigrationManuteno de tabelas usando RubyIndependente de bancoMas tambm suporta SQL nativo</p></li><li><p>Rake: Ruby MakeExecuo de tarefas, implementadas em RubyPrimeira tarefa: manuteno das tabelas</p></li><li><p>rake migrateToda entidade criada com script/generate gera um arquivo de Migration no diretrio db/migrate</p><p>Todo arquivo Migration numerado:001_create_posts.rb</p><p>O comando rake migrate executa os arquivos em db/migrate</p><p>Usa a tabela schema_info no banco de dados para saber a partir de qual numerao comear</p><p>O gerenciamento do banco de dados feito totalmente em Ruby</p></li><li><p>Mapeando TabelasA classe Post j capaz de gerenciar os dados da tabela no banco de dadosNo h necessidade de explicitar o mapeamento das colunas do banco com atributos da classeRails no probe nada: se for necessrio existe como mapear uma coluna para outro atributo de nome diferente</p></li><li><p>Convenes de EntidadesToda entidade criada no diretrio padro:/app/models//.rb</p><p>Toda entidade herda diretamente da classe ActiveRecord::Base</p><p>No h necessidade de mapear manualmente cada coluna da tabela</p><p>Conveno: a classe tem o nome no singular (Post), a tabela tem o nome do plural (posts)</p><p>Conveno: Surrogate Key, toda tabela tem uma chave primria chamada id que um nmero auto-incrementvel</p></li><li><p>annotate_models</p></li><li><p>annotate_modelsPlugin de Dave Thomas</p><p>Instalao (via internet):script/plugin install annotate_models</p><p>Utilizao (via rake):rake annotate_models</p><p>L a tabela do banco de dados e coloca um cabealho como comentrio na classe entidade</p></li><li><p>Scaffold</p></li><li><p>ScaffoldColocar o mtodo scaffold : no controller suficiente</p><p>Telas CRUD (Create, Read, Update, Delete) geradas automaticamente em tempo de execuo (runtime)</p><p>CUIDADO: Rails NO Scaffold</p><p>Scaffold apenas uma pequena funcionalidade para facilitar prototipao</p></li><li><p>Configurando PostAcrescentando validao</p></li><li><p>Testando modificaoNo necessrio reiniciar servidor</p></li><li><p>Incrementando PostCriando novas colunas com Migrationscript/generate migration </p></li><li><p>Executando Migration</p></li><li><p>Criando um PostNovamente, sem reiniciar o servidor</p></li><li><p>Gerando o Scaffoldscript/generate scaffold </p></li><li><p>Arquivos GeradosToda execuo automtica de antes agora est exposta em arquivos que podemos editar como quisermosProvado: Rails no se restringe a Scaffold automtico</p></li><li><p>Modificando a Listagem/app/views/blog/list.rhtml</p></li><li><p>Testando a listagemhttp://localhost:3000/blog</p><p>Portanto, podemos alterar o layout ou qualquer cdigo como quisermos</p></li><li><p>Polmica do ScripletRails no utiliza taglibs</p><p>Ruby simples e expressiva o suficiente para no precisar de artifcios</p><p>Taglibs so simplificaes de lgica</p><p>Podemos fazer tudo de maneira simples e flexvel sem precisar aprender sintaxes complexas de XML</p></li><li><p>ExemplosTaglibs</p></li><li><p>Criar CommentHora de criar a entidade CommentLembrete: esta entidade ser associada a um Post</p></li><li><p>Rake outra vezObs: Comment pertence a Post atravs da coluna post_id.Conveno de Chave Estrangeira: _id</p></li><li><p>Associaes</p></li><li><p>Usando associaesCriando formulrio de Comment na tela de detalhe de um Post/app/views/blog/show.rhtml</p></li><li><p>PartialsDont Repeat Yourself (DRY)</p><p>Uma das maneiras de separar trechos de cdigo</p><p>Toda partial comea com underline _ "comment", :collection =&gt; @post.comments %&gt;</p><p>Associao has_many em Post automaticamente fornece um hash chamado comments (nome da outra entidade no plural)</p></li><li><p>Action para Comment {:action =&gt; 'add_comment', :id =&gt; @post } do |f| %&gt;Action esperada: add_commentPassando parmetros: params[:id] e params[:comment]Hash params[:comment] contm todos os campos do formulrio enviado.</p></li><li><p>Resultado FinalTela de Post com a lista de Comments</p></li><li><p>LayoutsTodo novo controller automaticamente ganha um layout no diretrio:/app/views/layouts/.rhtmlAs views desse controller preenchem o espao:</p></li><li><p>Testes UnitriosToda nova entidade ganha um arquivo para teste unitrio em:/app/test/unit/_test.rbDevemos seguir os preceitos de Test-Driven Development:Se no vale a pena testar, para que estamos codificando?</p></li><li><p>Ambiente de TesteOs testes acontecem em banco de dados separado do desenvolvimento_test</p><p>Cada teste roda de maneira isolada: os dados modificados em um teste no afetam outro teste</p><p>Cada teste unitrio tem um arquivo de fixture, carga de dados para testes:/app/test/fixture/.yml</p></li><li><p>Fixture YAMLYAML Aint a Markup LanguageManeira de serializar objetos Ruby em forma de textoFormato humanamente legvelMais leve e simples que XML</p></li><li><p>Rodando Testes UnitriosTodos os testes unitriosrake test:unitsApenas um teste unitrio:ruby test/unit/_test.rb</p></li><li><p>Testes FuncionaisTodo novo controller ganha uma classe de teste em:/app/test/functional/_controller_test.rbDevemos testar cada action do controllerMtodos como get e post simulam navegao com um browser</p></li><li><p>Rodando Testes FuncionaisTodos os testes funcionais:rake test:functionalsApenas um testes funcional:ruby test/functional/_controller_test.rb</p></li><li><p>Mais TestesTestes Unitrios devem testar todos os aspectos da entidade como associaes, validaes, callbacks, etc</p><p>Testes Funcionais devem testar todas as actions de um mesmo controller, todos os fluxos, redirecionamentos, filtros, etc</p><p>Testes Integrados servem para avaliar a navegao e fluxos entre actions de diferentes controllers. Funcionam de maneira semelhante a um teste funcional</p></li><li><p>AjaxRails o melhor modelo de framework para AjaxAjax codificado em Ruby puroIntegrao com as bibliotecas Prototype e Script.aculo.us</p><p>Ajax representa um passo em direo a um Aplicativo WebSem necessidade de recarregar a pgina toda a cada aoCapacidade de atualizar apenas trechos da telaCapacidade de realizar um post (submit) sem sair da pginaCapacidade de receber apenas a informao que precisa ser atualizada em vez de receber a pgina inteira</p></li><li><p>View AjaxfiedManeira simples: apenas trocar form_for para remote_form_for</p></li><li><p>Action Ajaxfiedrequest.xhr? checa se veio chamada via Ajax. Caso contrrio redireciona para a mesma action de antes, que retorna a pgina toda Desta vez guardamos o novo comment na varivel de instncia @comment</p></li><li><p>Arma Secreta: RJSMesma conveno: action add_comment espera encontrar a pgina /app/views/blog/add_comment.rjs</p></li><li><p>Ativando AjaxAtivado por controller, atravs de seu layout com o mtodo javascript_include_tag</p></li><li><p>Testando AjaxNa foto de tela no podemos mostrar o efeito. Recomendamos testar ao vivo. As possibilidades so enormes!</p></li><li><p>Active Record Interativoscript/consoleToda entidade criada pode ser manipulada pelo consoleFacilita testes antes de criar as actions</p></li><li><p>Produto FinalMini Blog criado conforme requerimentos iniciais (slide 9)</p><p>Plus: pequeno brinde via Ajax</p><p>Conseguimos criar entidades e tabelas sem mapear campo-a-campo manualmentedeixe o computador trabalhar por ns</p><p>Infraestrutura completa de testes unitrios, funcionais e integrados</p><p>Obs: este um aplicativo de demonstrao, muito mais ainda pode ser feito !</p></li><li><p>O que NO fizemosNo precisamos recompilar e reinstalar o aplicativo a cada mudana</p><p>No precisamos reiniciar o servidor a cada mudana</p><p>No precisamos mapear cada uma das colunas das tabelas para as entidades</p><p>No precisamos configurar dezenas de arquivos XML. Basicamente colocamos a senha do banco de dados, apenas</p><p>No precisamos usar Javascript para fazer Ajax: a maior parte pode ser feita com Ruby puro</p><p>No sentimos falta de taglibs: expresses Ruby, partials foram simples o suficiente</p><p>No precisamos codificar cdigo-cola, o framework possui padres espertos afinal, todo aplicativo Web tem a mesma infraestrutura</p></li><li><p>Linhas de CdigoEstatstica polmica mas relevanteRuby on Rails permite fazer muito mais com muito menos</p></li><li><p>Prximos PassosAprender mais!</p><p>Programming Ruby (livro gratuito! Em ingls)http://www.rubycentral.com/book/intro.html</p><p>Agile Web Development With Rails (livro mais famoso de Rails, em ingls)http://www.pragmaticprogrammer.com/titles/rails2/</p><p>Melhores websites sobre Ruby e Railshttp://del.icio.us/fabioakita/rubyonrails</p><p>Akita On Rails: principal site de Rails do Brasilhttp://www.akitaonrails.com</p></li><li><p> e TAMBMRepensando a Web com Rails</p><p>Primeiro livro de Ruby on Rails em portugus no Brasil</p><p>Documentao completa do Rails verso 1.1.2</p><p>Cada um dos tpicos desta demonstrao em detalhes</p><p>Por Fabio Akita (www.balanceonrails.com.br)Consultor SAP h 5 anosGerente de Projetos PMPDesenvolvedor Java h 8 anosUtilizando diversas plataformas de desenvolvimento h 14 anos</p><p>Pela editora Brasport, j disponvel!</p></li><li><p>DvidasSugestesCrticasParticipe de nosso grupo akitaonrails@googlegroups.com</p><p>Podem me escrever diretamentefabioakita@gmail.com</p></li></ul>