SlideShare una empresa de Scribd logo
1 de 51
Descargar para leer sin conexión
Conhecendo Ruby on Rails
                          Sérgio Henrique Miranda Junior


Thursday, October 4, 12
Sumário

              - Sobre mim

              - Dito Internet

              - Ruby

              - Ruby on Rails

              - Fazendo acontecer



Thursday, October 4, 12
Quem sou eu?



                          - Sérgio Henrique Miranda Júnior

                          - Engenheiro de software @ Dito Internet

                          - Bacharel em Ciência da Computação




Thursday, October 4, 12
Dito Internet
              - Nasceu em 2008
              - Desde o início trabalha com Ruby on Rails
              - Possui grandes clientes: Gorverno de Minas, TIM, UOL,
              RG/A, Giovanni Draft e Lápis Raro
              - Desenvolve produtos próprios: Plataforma Social,
              Odrible e GraphMonitor
              - Somos uma das primeiras empresas da América Latina
              a ser qualificada em desenvolvimento de apps no
              exclusivo programa de Marketing do Facebook(PMD)


Thursday, October 4, 12
Tim Beta



              - Plataforma desenvolvida para o público jovem da TIM
              - Aplicativo no facebook e orkut
              - Um portal onde você pode conectar todas suas
              contas (facebook, orkut, twitter e foursquare)

              - Mais de 3.5 milhões de pessoas!




Thursday, October 4, 12
Plataforma Social


           - Possui 4 módulos que permitem utilizar
           a influência das amizades para gerar novos
           negócios para as marcas




            Social apps          Módulos sociais             Gamification             Analytics

       Criamos interações       Levamos as redes           Utilizamos mecânicas    Transformamos todas as
       e engajamento            sociais para dentro        de games (rankings,     ações dos usuários
       para as marcas através   do seu website (login,     badges e níveis) para   em relatórios com um
       de apps dentro das       compartilhamento e dados   aumentar a fidelização   rico conjunto de
       redes sociais.           ligados às amizades).      do público alvo.        dados.



Thursday, October 4, 12
Ruby
                          http://www.ruby-lang.org/pt/




Thursday, October 4, 12
Ruby



              - Linguagem de programação lançada em 1995
              - Desenvolvida por um japonês: Yukihiro “Matz”
              Matsumoto
              - Popularizada em 2006 graças ao Ruby on Rails
              - Totalmente gratuita
              - Linguagem interpretada



Thursday, October 4, 12
Ruby
       Tudo é objeto:

          >> 1500.class
          => Fixnum
          >> 1333.even?
          => false
          >> “Fumec”.length
          => 5



Thursday, October 4, 12
Ruby
       Variáveis:
        - Tipagem dinâmica
        - Não precisam ser declaradas
         Variáveis globais começam com o símbolo: $
            Ex: $diretorio

         Variáveis de instância começam com o símbolo: @
            Ex: @salario

         Variáveis de classe começam com o símbolo: @@
            Ex: @@contador

         Variáveis locais começam com letra minúscula
            Ex: nome

         Também existe variável de instância de classe!

Thursday, October 4, 12
Ruby
       Variáveis:
        - O que fazer quando é preciso validar o tipo da variável
        que está sendo passada?

             Duck typing:
                   - Se anda como um pato...
                   - Faz “quack” como um pato...
                   - Provavelmente é um pato!



Thursday, October 4, 12
Ruby
       Símbolos:
               name = twitter_api[:screen_name]

              O que são:
               - Basicamente é uma string interna
                   - Existe somente uma cópia de cada símbolo na
                   memória.
                   - Persistem na memória até o programa ser finalizado



Thursday, October 4, 12
Ruby
       Blocos:

          object.each do |elemento|
            realize_alguma_acao(elemento)
          end


         Estamos passando um bloco de código para o
         método each que irá chamar o método yield para
         executar o bloco de código passado.
          def each
            index = 0
            while index < length
            yield arr[index]
            index += 1
          end

Thursday, October 4, 12
Ruby
       Blocos:
            É uma feature muito importante da linguagem. Vários
            métodos das bibliotecas padrões utilizam blocos em
            suas implementações
           File.open(‘path_to_file’) do |arquivo|
             faca_algo_com(arquivo)
           end




   Feature interessante:
    O método open sabe quando seu bloco foi finalizado
    e automaticamente fecha o arquivo para você.
Thursday, October 4, 12
Ruby
       Classes:
        - Definição de classe é bem simples e possui o método
        initializer como construtor.

          class Professor
            def initializer(nome)
              @nome = nome
            end

            def nome
              @nome
            end
          end

          p = Professor.new(“José”)
          p.nome #retorna “José”


Thursday, October 4, 12
Ruby
       Classes:
        - Existe uma maneira mais simples de fazer getters e
        setters
                    - attr_reader
                    - attr_writer
                    - attr_accessor

          class Professor
            attr_accessor :nome
            def initializer(nome)
              @nome = nome
            end
          end
          p = Professor.new(“José”)
          p.nome #retorna “José”
          p.nome = “José Francisco”

Thursday, October 4, 12
Ruby
       Classes:
        - As classes no ruby nunca são fechadas. A qualquer
        momento você pode abrir qualquer classe e adicionar
        novos métodos ou alterar o comportamento de um
        método existente
          class Fixnum
            def +(another_integer)
              self * another_integer
            end
          end


          >> 5 + 2 # mesma coisa que -> 5.+(2)
          => 10 #oooopssss! with great power comes great responsibility!




Thursday, October 4, 12
Ruby
       Classes:
             - Herança é expressada de uma maneira bem simples

          class Professor < Profissional
            def metodo_sobrescrito(nome)
              # super sem nenhum argumento irá passar todos os
              # argumentos recebidos para o método da classe pai
              resultado = super
              resultado
            end
          end




Thursday, October 4, 12
Ruby
       Métodos:
        - Definição de método é bem simples, basta utilizar a
        keyword def
             - Ruby suporta valor default e número variável de
             argumentos

          def metodo_qualquer(arg1, arg2 = “teste”)
            puts arg1
            puts arg2
          end


       metodo_qualquer(1) #imprime na saida padrão: 1/n “teste”

       metodo_qualquer(0, “Fumec”) #imprime na saida padrão: 0/n “Fumec”


Thursday, October 4, 12
Ruby
       Métodos:
             - Exemplo de número variável de argumentos

           def estudar(materia, *livros)
             livros.each do |livro|
               leia(livro)
             end
           end


           estudar(“Ruby”, “Design Patterns in Ruby”, “The well
           grounded Rubyist”)

           estudar(“Rails”, “The Rails 3 Way”, “Rails Recipes”,
           “Crafting Rails Applications”)



Thursday, October 4, 12
Ruby
       Módulos:
             - Agrupam métodos, constantes e variáveis de classe
             - Não podem ser instanciados ou feitos como sub-classe

          module QualquerCoisa
            def self.algum_metodo
              ...
            end
          end


          QualquerCoisa.algum_metodo




Thursday, October 4, 12
Ruby
       Gem:
             - É o gerenciador de pacotes da linguagem Ruby
             - Pode ser até uma aplicação completa


          gem install devise

          gem install mysql2

          gem install mechanize




Thursday, October 4, 12
Ruby
       Ecossistema:
        - Garbage Collector
             - Builtin classes
             - Standard Library
             - String enconding/transcoding
             - Regexp engine
             - Utilitários (ferramentas de debug, formatação de
             strings ...)
             - Parser
             - VM
Thursday, October 4, 12
Rails
                          http://rubyonrails.com.br/




Thursday, October 4, 12
Rails



              - Lançado em julho de 2004
              - Extraído da ferramenta de gestão de projetos
              Basecamp
              - Tornar o desenvolvimento web mais rápido e simples
              - Em 2006 a Apple anunciou que o Mac OS X
              começaria a vir com o Rails.



Thursday, October 4, 12
Rails
       O que é um framework?
            “Conjunto de componentes de software que
            provêem uma arquitetura e estrutura básicas para o
            desenvolvimento de uma aplicação. É uma aplicação
            semi pronta que deve ser extendida e personalizada.”




Thursday, October 4, 12
Aprendendo Rails
Thursday, October 4, 12
Rails
       Filosofia do rails:
              - DRY(Don’t Repeat Yourself): é uma sugestão para não repetir o
              mesmo código em vários lugares.

              - Convention over Configuration: o rails faz suposições
              sobre o que você quer fazer e como você fará o que
              deseja.

              - REST (Representational State Transfer): é uma maneira de organizar
              sua aplicação em recursos e verbos padrões utilizados
              pelo protocolo HTTP

Thursday, October 4, 12
Rails
       MVC:
             - É um design pattern que separa a representação dos
             dados da regra de negócio
             - Permite testar cada parte separadamente
             Componentes:
                   - Model: regra de negócio
                   - View: gera a interface com o usuário
                   - Controller: recebe evento do mundo externo,
                   interage com o model e retorna a view correta
                   para o usuário
Thursday, October 4, 12
MVC
Thursday, October 4, 12
Rails
       Sub-componentes:
              - Action Mailer:
                   É um framework para desenvolver serviços de entrega de
                   emails

              - Action Pack:
                   É um framework para responder e receber requisições web.
                   Fornece mecanismos para rotas, definições de controllers
                   que implementam ações e renderização de views para
                   respostas às requisições

              - Active Model:
                   Fornece várias interfaces que podem ser utilizadas pelo model

Thursday, October 4, 12
Rails
       Sub-componentes:
             - ActiveRecord:
                  Conecta classes a tabelas de bancos relacionais. Seguindo as
                  convenções do rails a configuração da camada de persistência é
                  quase zero.

             - ActiveSupport:
                  É uma coleção de classes utilitárias e extensões a standard
                  library, que são úteis ao Rails.




Thursday, October 4, 12
Rails
       Exemplo de código AR:
          class Person < ActiveRecord::Base
             validates :email, :presence => true
             validates :surname, :presence => true, :if => "name.nil?"

                 has_many :books
          end

          class Book < ActiveRecord::Base
             validates :name, :presence => true

                belongs_to :person
          end


          p = Person.new(:email => nil, :name => nil, :surname => “Miranda”)
          p = Person.valid? #false
          puts p.errors #email can’t be blank


          p1 = Person.first
          p1_books = p1.books



Thursday, October 4, 12
Rails
       Ambientes:

             - Teste:
                  É o ambiente que sua app executa quando seus testes
                  automatizados estão sendo executados


             - Desenvolvimento:
                  É o ambiente que sua app executa quando você está
                  desenvolvendo suas funcionalidades


             - Produção:
                  É o ambiente que sua app roda quando está no ar sendo
                  utilizada por usuários reais
Thursday, October 4, 12
Rails
       Organização de pastas:

              - sua_app
                 - app
                 - config
                 - db
                 - doc
                 - lib
                 - log
                 - public
                 - script
                  - test
                  - tmp
                  - vendor
Thursday, October 4, 12
Rails
       Desenvolvimento orientado a teste:

             - Testes são feitos antes da implementação
             - Rails já vem preparado para o desenvolvimento
             orientado a testes

             - Framework para BDD: RSpec




Thursday, October 4, 12
Rails
       Desenvolvimento orientado a teste:
             - Exemplo de teste automatizado utilizando Rspec


            describe Teacher do
              describe "requirements" do
                it "should have a name" do
                  t = Teacher.new(:name => nil)
                  t.should_not be_valid
                end
              end
            end




Thursday, October 4, 12
Ciclo de testes
Thursday, October 4, 12
Rails
       Migrations:
             - É uma forma eficiente de alterar a base de dados
             - Mantém o controle das alterações feitas
             - Garante estrutura de bases idênticas
             - Facilita modificações na base de dados de produção
          class CreateTeacher < ActiveRecord::Migration
            def change
              create_table :teachers do |t|
                t.string :name
                t.string :cpf
                t.timestamps
              end
            end
          end

Thursday, October 4, 12
Rails
       Assets pipeline:

             - É um framework para concatenar e reduzir ou
             comprimir. É utilizado para JavaScript e CSS
             - Adiciona a possibilidade de escrever os assets em
             outra linguagem como: CoffeScript, Sass, etc




Thursday, October 4, 12
Rails
       Rake:
            - É um software que gerencia tarefas. Similar ao make.
            - Tarefas são colocadas em um Rakefile, que contêm
            código ruby
            - Migrations e testes automatizados são todos
            executados utilizando o Rake!
          namespace :namespace_da_sua_task do
            desc “descrição da sua task”
            task :nome_da_sua_task => :dependencia_da_sua_task do
              tarefa_a_ser_executada
            end
          end
          $ rake namespace_da_sua_task:nome_da_sua_task

Thursday, October 4, 12
Rails
       Scaffold:
        - É gerador de código que proporciona um
        desenvolvimento mais rápido
           rails generate scaffold Post nome:string titulo:string
           conteudo:string




Thursday, October 4, 12
Rails
       Scaffold:
                 db/migrate/20100207214725_create_posts.rb                          Migrate para criar a tabela no banco
                                   app/models/post.rb                                 Model para representar o post
                                  test/unit/post_test.rb                                 Testes para o model Post
                                  test/fixtures/posts.yml                    Fixtures para serem utilizadas nos testes com posts
                                     config/routes.rb                            Adição do recurso post ao arquivo de rota
                           app/controllers/posts_controller.rb                        Controller para o recurso post
                             app/views/posts/index.html.erb                        View para ação index do recurso post
                              app/views/posts/edit.html.erb                        View para ação edit do recurso post
                             app/views/posts/show.html.erb                         View para ação show do recurso post
                              app/views/posts/new.html.erb                         View para ação new do recurso post
                             app/views/posts/_form.html.erb            Partial para representar o formulario utilizado no recurso post
                      test/functional/posts_controller_test.rb                    Testes para o controller do recurso post
                               app/helpers/posts_helper.rb                   Helpers para serem utilizados com o recurso post
                          test/unit/helpers/posts_helper_test.rb         Helpers para serem utilizados nos testes do recurso post
                           app/assets/javascripts/posts.js.coffee                      Javascript para o recurso post
                           app/assets/stylesheets/posts.css.scss                          Css para o recurso post
                      app/assets/stylesheets/scaffolds.css.scss                  Estilo para as views geradas com scaffold
Thursday, October 4, 12
Rails
       Console:
             - É um prompt de comando utilizado para interagir com
             a base e testar código sem precisar utilizar a interface
             web

         $ rails c

         >> Post.all
         >> Post.first
         >> p = Post.new(:nome => “Teste”, :titulo => “titulo
         teste”, :conteudo => “Conteudo do post”)




Thursday, October 4, 12
Rails
       Hello Rails:
         $ rails new hello_rails
         $ cd hello_rails
         $ rails server

         $ rails generate controller home index
         $ rm public/index.html
         $ vim app/views/home/index.html.erb => <h1> Hello Rails! </h1>
         $ vim config/routes.rb => root :to => “home#index”




Thursday, October 4, 12
Quem utiliza Rails
Thursday, October 4, 12
um presente pra
                             vocês...


Thursday, October 4, 12
Vota Três Pontas




                                      https://github.com/sergiotp/vota_trespontas
                          É um app feito em dois dias para validar a estatistica eleitoral na cidade de Três Pontas


Thursday, October 4, 12
não virem refém do
                  framework


Thursday, October 4, 12
Não tenho um talento especial. Eu
                          sou apenas apaixonadamente curioso




Thursday, October 4, 12
Obrigado!
   e-mail: sergio.miranda@dito.com.br
   twitter: @sergiohenrique
   fb: /sergiohenriquemiranda
Thursday, October 4, 12

Más contenido relacionado

La actualidad más candente

Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPDaniel Brandão
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonGuilherme Garcia
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptRogério Moraes de Carvalho
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...Rogério Moraes de Carvalho
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming LibraryMario Guedes
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
Java cert programmer
Java cert programmerJava cert programmer
Java cert programmerRegis Melo
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-paneRafael Pinheiro
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetosFrancisco Santos
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo Dayvson
 
Aula 3 introducao a orientação a objetos
Aula 3   introducao a orientação a objetosAula 3   introducao a orientação a objetos
Aula 3 introducao a orientação a objetosRafael Pinheiro
 

La actualidad más candente (20)

Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
SEA Rails na pratica
SEA Rails na praticaSEA Rails na pratica
SEA Rails na pratica
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
PHP - Strings
PHP - StringsPHP - Strings
PHP - Strings
 
Java cert programmer
Java cert programmerJava cert programmer
Java cert programmer
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-pane
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Linguagem Java
Linguagem JavaLinguagem Java
Linguagem Java
 
Csharp
CsharpCsharp
Csharp
 
Aula 3 introducao a orientação a objetos
Aula 3   introducao a orientação a objetosAula 3   introducao a orientação a objetos
Aula 3 introducao a orientação a objetos
 

Similar a Conhecendo Ruby on Rails e suas principais características

Ruby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito maisRuby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito maisWende Mendes
 
Ruby, Simples e Expressivo
Ruby, Simples e ExpressivoRuby, Simples e Expressivo
Ruby, Simples e ExpressivoRodrigo Martins
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Zarathon Maia
 
Ruby: Simples e Expressivo - Women Techmakers João Pessoa
Ruby: Simples e Expressivo - Women Techmakers João PessoaRuby: Simples e Expressivo - Women Techmakers João Pessoa
Ruby: Simples e Expressivo - Women Techmakers João PessoaWomen Techmakers João Pessoa
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funcionaRodrigo Serradura
 
Ruby para programadores PHP
Ruby para programadores PHPRuby para programadores PHP
Ruby para programadores PHPJuan Maiz
 
Ruby para-programadores-php
Ruby para-programadores-phpRuby para-programadores-php
Ruby para-programadores-phpJuan Maiz
 
Introdução a Ruby on Rails
Introdução a Ruby on RailsIntrodução a Ruby on Rails
Introdução a Ruby on RailsRodrigo Serradura
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Railsoverduka
 
Não é Feitiçaria, é Tecnologia
Não é Feitiçaria, é TecnologiaNão é Feitiçaria, é Tecnologia
Não é Feitiçaria, é TecnologiaAdler Medrado
 
[GTS-BA] Tech-Talk: Testes em ruby
[GTS-BA] Tech-Talk: Testes em ruby[GTS-BA] Tech-Talk: Testes em ruby
[GTS-BA] Tech-Talk: Testes em rubyGTS Bahia
 

Similar a Conhecendo Ruby on Rails e suas principais características (20)

Paradigmas do Ruby
Paradigmas do RubyParadigmas do Ruby
Paradigmas do Ruby
 
Curso ruby on rails
Curso ruby on railsCurso ruby on rails
Curso ruby on rails
 
Ruby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito maisRuby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito mais
 
Ruby, Simples e Expressivo
Ruby, Simples e ExpressivoRuby, Simples e Expressivo
Ruby, Simples e Expressivo
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
Ruby: Simples e Expressivo - Women Techmakers João Pessoa
Ruby: Simples e Expressivo - Women Techmakers João PessoaRuby: Simples e Expressivo - Women Techmakers João Pessoa
Ruby: Simples e Expressivo - Women Techmakers João Pessoa
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funciona
 
Ruby para programadores PHP
Ruby para programadores PHPRuby para programadores PHP
Ruby para programadores PHP
 
Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on Rails
 
Ruby para-programadores-php
Ruby para-programadores-phpRuby para-programadores-php
Ruby para-programadores-php
 
Introdução a Ruby
Introdução a RubyIntrodução a Ruby
Introdução a Ruby
 
Introdução a Ruby on Rails
Introdução a Ruby on RailsIntrodução a Ruby on Rails
Introdução a Ruby on Rails
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Ruby
RubyRuby
Ruby
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Rails
 
Ruby e Rails
Ruby e RailsRuby e Rails
Ruby e Rails
 
Ruby
RubyRuby
Ruby
 
Não é Feitiçaria, é Tecnologia
Não é Feitiçaria, é TecnologiaNão é Feitiçaria, é Tecnologia
Não é Feitiçaria, é Tecnologia
 
[GTS-BA] Tech-Talk: Testes em ruby
[GTS-BA] Tech-Talk: Testes em ruby[GTS-BA] Tech-Talk: Testes em ruby
[GTS-BA] Tech-Talk: Testes em ruby
 

Conhecendo Ruby on Rails e suas principais características

  • 1. Conhecendo Ruby on Rails Sérgio Henrique Miranda Junior Thursday, October 4, 12
  • 2. Sumário - Sobre mim - Dito Internet - Ruby - Ruby on Rails - Fazendo acontecer Thursday, October 4, 12
  • 3. Quem sou eu? - Sérgio Henrique Miranda Júnior - Engenheiro de software @ Dito Internet - Bacharel em Ciência da Computação Thursday, October 4, 12
  • 4. Dito Internet - Nasceu em 2008 - Desde o início trabalha com Ruby on Rails - Possui grandes clientes: Gorverno de Minas, TIM, UOL, RG/A, Giovanni Draft e Lápis Raro - Desenvolve produtos próprios: Plataforma Social, Odrible e GraphMonitor - Somos uma das primeiras empresas da América Latina a ser qualificada em desenvolvimento de apps no exclusivo programa de Marketing do Facebook(PMD) Thursday, October 4, 12
  • 5. Tim Beta - Plataforma desenvolvida para o público jovem da TIM - Aplicativo no facebook e orkut - Um portal onde você pode conectar todas suas contas (facebook, orkut, twitter e foursquare) - Mais de 3.5 milhões de pessoas! Thursday, October 4, 12
  • 6. Plataforma Social - Possui 4 módulos que permitem utilizar a influência das amizades para gerar novos negócios para as marcas Social apps Módulos sociais Gamification Analytics Criamos interações Levamos as redes Utilizamos mecânicas Transformamos todas as e engajamento sociais para dentro de games (rankings, ações dos usuários para as marcas através do seu website (login, badges e níveis) para em relatórios com um de apps dentro das compartilhamento e dados aumentar a fidelização rico conjunto de redes sociais. ligados às amizades). do público alvo. dados. Thursday, October 4, 12
  • 7. Ruby http://www.ruby-lang.org/pt/ Thursday, October 4, 12
  • 8. Ruby - Linguagem de programação lançada em 1995 - Desenvolvida por um japonês: Yukihiro “Matz” Matsumoto - Popularizada em 2006 graças ao Ruby on Rails - Totalmente gratuita - Linguagem interpretada Thursday, October 4, 12
  • 9. Ruby Tudo é objeto: >> 1500.class => Fixnum >> 1333.even? => false >> “Fumec”.length => 5 Thursday, October 4, 12
  • 10. Ruby Variáveis: - Tipagem dinâmica - Não precisam ser declaradas Variáveis globais começam com o símbolo: $ Ex: $diretorio Variáveis de instância começam com o símbolo: @ Ex: @salario Variáveis de classe começam com o símbolo: @@ Ex: @@contador Variáveis locais começam com letra minúscula Ex: nome Também existe variável de instância de classe! Thursday, October 4, 12
  • 11. Ruby Variáveis: - O que fazer quando é preciso validar o tipo da variável que está sendo passada? Duck typing: - Se anda como um pato... - Faz “quack” como um pato... - Provavelmente é um pato! Thursday, October 4, 12
  • 12. Ruby Símbolos: name = twitter_api[:screen_name] O que são: - Basicamente é uma string interna - Existe somente uma cópia de cada símbolo na memória. - Persistem na memória até o programa ser finalizado Thursday, October 4, 12
  • 13. Ruby Blocos: object.each do |elemento| realize_alguma_acao(elemento) end Estamos passando um bloco de código para o método each que irá chamar o método yield para executar o bloco de código passado. def each index = 0 while index < length yield arr[index] index += 1 end Thursday, October 4, 12
  • 14. Ruby Blocos: É uma feature muito importante da linguagem. Vários métodos das bibliotecas padrões utilizam blocos em suas implementações File.open(‘path_to_file’) do |arquivo| faca_algo_com(arquivo) end Feature interessante: O método open sabe quando seu bloco foi finalizado e automaticamente fecha o arquivo para você. Thursday, October 4, 12
  • 15. Ruby Classes: - Definição de classe é bem simples e possui o método initializer como construtor. class Professor def initializer(nome) @nome = nome end def nome @nome end end p = Professor.new(“José”) p.nome #retorna “José” Thursday, October 4, 12
  • 16. Ruby Classes: - Existe uma maneira mais simples de fazer getters e setters - attr_reader - attr_writer - attr_accessor class Professor attr_accessor :nome def initializer(nome) @nome = nome end end p = Professor.new(“José”) p.nome #retorna “José” p.nome = “José Francisco” Thursday, October 4, 12
  • 17. Ruby Classes: - As classes no ruby nunca são fechadas. A qualquer momento você pode abrir qualquer classe e adicionar novos métodos ou alterar o comportamento de um método existente class Fixnum def +(another_integer) self * another_integer end end >> 5 + 2 # mesma coisa que -> 5.+(2) => 10 #oooopssss! with great power comes great responsibility! Thursday, October 4, 12
  • 18. Ruby Classes: - Herança é expressada de uma maneira bem simples class Professor < Profissional def metodo_sobrescrito(nome) # super sem nenhum argumento irá passar todos os # argumentos recebidos para o método da classe pai resultado = super resultado end end Thursday, October 4, 12
  • 19. Ruby Métodos: - Definição de método é bem simples, basta utilizar a keyword def - Ruby suporta valor default e número variável de argumentos def metodo_qualquer(arg1, arg2 = “teste”) puts arg1 puts arg2 end metodo_qualquer(1) #imprime na saida padrão: 1/n “teste” metodo_qualquer(0, “Fumec”) #imprime na saida padrão: 0/n “Fumec” Thursday, October 4, 12
  • 20. Ruby Métodos: - Exemplo de número variável de argumentos def estudar(materia, *livros) livros.each do |livro| leia(livro) end end estudar(“Ruby”, “Design Patterns in Ruby”, “The well grounded Rubyist”) estudar(“Rails”, “The Rails 3 Way”, “Rails Recipes”, “Crafting Rails Applications”) Thursday, October 4, 12
  • 21. Ruby Módulos: - Agrupam métodos, constantes e variáveis de classe - Não podem ser instanciados ou feitos como sub-classe module QualquerCoisa def self.algum_metodo ... end end QualquerCoisa.algum_metodo Thursday, October 4, 12
  • 22. Ruby Gem: - É o gerenciador de pacotes da linguagem Ruby - Pode ser até uma aplicação completa gem install devise gem install mysql2 gem install mechanize Thursday, October 4, 12
  • 23. Ruby Ecossistema: - Garbage Collector - Builtin classes - Standard Library - String enconding/transcoding - Regexp engine - Utilitários (ferramentas de debug, formatação de strings ...) - Parser - VM Thursday, October 4, 12
  • 24. Rails http://rubyonrails.com.br/ Thursday, October 4, 12
  • 25. Rails - Lançado em julho de 2004 - Extraído da ferramenta de gestão de projetos Basecamp - Tornar o desenvolvimento web mais rápido e simples - Em 2006 a Apple anunciou que o Mac OS X começaria a vir com o Rails. Thursday, October 4, 12
  • 26. Rails O que é um framework? “Conjunto de componentes de software que provêem uma arquitetura e estrutura básicas para o desenvolvimento de uma aplicação. É uma aplicação semi pronta que deve ser extendida e personalizada.” Thursday, October 4, 12
  • 28. Rails Filosofia do rails: - DRY(Don’t Repeat Yourself): é uma sugestão para não repetir o mesmo código em vários lugares. - Convention over Configuration: o rails faz suposições sobre o que você quer fazer e como você fará o que deseja. - REST (Representational State Transfer): é uma maneira de organizar sua aplicação em recursos e verbos padrões utilizados pelo protocolo HTTP Thursday, October 4, 12
  • 29. Rails MVC: - É um design pattern que separa a representação dos dados da regra de negócio - Permite testar cada parte separadamente Componentes: - Model: regra de negócio - View: gera a interface com o usuário - Controller: recebe evento do mundo externo, interage com o model e retorna a view correta para o usuário Thursday, October 4, 12
  • 31. Rails Sub-componentes: - Action Mailer: É um framework para desenvolver serviços de entrega de emails - Action Pack: É um framework para responder e receber requisições web. Fornece mecanismos para rotas, definições de controllers que implementam ações e renderização de views para respostas às requisições - Active Model: Fornece várias interfaces que podem ser utilizadas pelo model Thursday, October 4, 12
  • 32. Rails Sub-componentes: - ActiveRecord: Conecta classes a tabelas de bancos relacionais. Seguindo as convenções do rails a configuração da camada de persistência é quase zero. - ActiveSupport: É uma coleção de classes utilitárias e extensões a standard library, que são úteis ao Rails. Thursday, October 4, 12
  • 33. Rails Exemplo de código AR: class Person < ActiveRecord::Base validates :email, :presence => true validates :surname, :presence => true, :if => "name.nil?" has_many :books end class Book < ActiveRecord::Base validates :name, :presence => true belongs_to :person end p = Person.new(:email => nil, :name => nil, :surname => “Miranda”) p = Person.valid? #false puts p.errors #email can’t be blank p1 = Person.first p1_books = p1.books Thursday, October 4, 12
  • 34. Rails Ambientes: - Teste: É o ambiente que sua app executa quando seus testes automatizados estão sendo executados - Desenvolvimento: É o ambiente que sua app executa quando você está desenvolvendo suas funcionalidades - Produção: É o ambiente que sua app roda quando está no ar sendo utilizada por usuários reais Thursday, October 4, 12
  • 35. Rails Organização de pastas: - sua_app - app - config - db - doc - lib - log - public - script - test - tmp - vendor Thursday, October 4, 12
  • 36. Rails Desenvolvimento orientado a teste: - Testes são feitos antes da implementação - Rails já vem preparado para o desenvolvimento orientado a testes - Framework para BDD: RSpec Thursday, October 4, 12
  • 37. Rails Desenvolvimento orientado a teste: - Exemplo de teste automatizado utilizando Rspec describe Teacher do describe "requirements" do it "should have a name" do t = Teacher.new(:name => nil) t.should_not be_valid end end end Thursday, October 4, 12
  • 38. Ciclo de testes Thursday, October 4, 12
  • 39. Rails Migrations: - É uma forma eficiente de alterar a base de dados - Mantém o controle das alterações feitas - Garante estrutura de bases idênticas - Facilita modificações na base de dados de produção class CreateTeacher < ActiveRecord::Migration def change create_table :teachers do |t| t.string :name t.string :cpf t.timestamps end end end Thursday, October 4, 12
  • 40. Rails Assets pipeline: - É um framework para concatenar e reduzir ou comprimir. É utilizado para JavaScript e CSS - Adiciona a possibilidade de escrever os assets em outra linguagem como: CoffeScript, Sass, etc Thursday, October 4, 12
  • 41. Rails Rake: - É um software que gerencia tarefas. Similar ao make. - Tarefas são colocadas em um Rakefile, que contêm código ruby - Migrations e testes automatizados são todos executados utilizando o Rake! namespace :namespace_da_sua_task do desc “descrição da sua task” task :nome_da_sua_task => :dependencia_da_sua_task do tarefa_a_ser_executada end end $ rake namespace_da_sua_task:nome_da_sua_task Thursday, October 4, 12
  • 42. Rails Scaffold: - É gerador de código que proporciona um desenvolvimento mais rápido rails generate scaffold Post nome:string titulo:string conteudo:string Thursday, October 4, 12
  • 43. Rails Scaffold: db/migrate/20100207214725_create_posts.rb Migrate para criar a tabela no banco app/models/post.rb Model para representar o post test/unit/post_test.rb Testes para o model Post test/fixtures/posts.yml Fixtures para serem utilizadas nos testes com posts config/routes.rb Adição do recurso post ao arquivo de rota app/controllers/posts_controller.rb Controller para o recurso post app/views/posts/index.html.erb View para ação index do recurso post app/views/posts/edit.html.erb View para ação edit do recurso post app/views/posts/show.html.erb View para ação show do recurso post app/views/posts/new.html.erb View para ação new do recurso post app/views/posts/_form.html.erb Partial para representar o formulario utilizado no recurso post test/functional/posts_controller_test.rb Testes para o controller do recurso post app/helpers/posts_helper.rb Helpers para serem utilizados com o recurso post test/unit/helpers/posts_helper_test.rb Helpers para serem utilizados nos testes do recurso post app/assets/javascripts/posts.js.coffee Javascript para o recurso post app/assets/stylesheets/posts.css.scss Css para o recurso post app/assets/stylesheets/scaffolds.css.scss Estilo para as views geradas com scaffold Thursday, October 4, 12
  • 44. Rails Console: - É um prompt de comando utilizado para interagir com a base e testar código sem precisar utilizar a interface web $ rails c >> Post.all >> Post.first >> p = Post.new(:nome => “Teste”, :titulo => “titulo teste”, :conteudo => “Conteudo do post”) Thursday, October 4, 12
  • 45. Rails Hello Rails: $ rails new hello_rails $ cd hello_rails $ rails server $ rails generate controller home index $ rm public/index.html $ vim app/views/home/index.html.erb => <h1> Hello Rails! </h1> $ vim config/routes.rb => root :to => “home#index” Thursday, October 4, 12
  • 47. um presente pra vocês... Thursday, October 4, 12
  • 48. Vota Três Pontas https://github.com/sergiotp/vota_trespontas É um app feito em dois dias para validar a estatistica eleitoral na cidade de Três Pontas Thursday, October 4, 12
  • 49. não virem refém do framework Thursday, October 4, 12
  • 50. Não tenho um talento especial. Eu sou apenas apaixonadamente curioso Thursday, October 4, 12
  • 51. Obrigado! e-mail: sergio.miranda@dito.com.br twitter: @sergiohenrique fb: /sergiohenriquemiranda Thursday, October 4, 12