SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
globo
 .com
        Dando os primeiros passos
        com rails

                       Marcos Sousa
                       @marcos_sousa
                       www.marcossousa.com
                       falecomigo@marcossousa.com
Marcos Sousa
                                          Desenvolvedor por paixão
                                          7 anos de experiência
                                          Java, Ruby, Javascript, SQL


                                           Isso mesmo! SQL!

        Piloto de F1 nas horas vagas :)
globo
 .com     Rails do básico ao avançado
...construindo pixel a
                                       pixel o maior portal
                                      brasileiro de internet
globo
 .com   Rails do básico ao avançado
Começando com ruby
                                      Hist óri co




globo
 .com   Rails do básico ao avançado
Hist óri co

                Criado em 1993 por Yukihiro

                Primeira lista em inglês 1999

                2000 - Programming Ruby - Primeiro livro em inglês

                2003 - Início do rails

                2004 - Primeiro release público

                2010 - Rails 3.0

                2011 - Rails 3.1

globo
 .com   Rails do básico ao avançado
Características
                                       Propósitos e Objetivos




globo
 .com   Rails do básico ao avançado
Propósitos e Objetivos

                Dinâmica

                Linguagem simples e humana

                Todas as classes são abertas

                Meta programação

                Multi-plataforma (Unix/Windows)

                Herança simples e mixins

                Garbage Collector

globo
 .com   Rails do básico ao avançado
Instalação


                                      Já vem instalado


                                                                instalação via apt-get, yum, rvm, etc



                                      one click install
                                      http://rubyinstaller.org/downloads/




globo
 .com   Rails do básico ao avançado
O Básico de Ruby
                                      M é tod os bá sic os




globo
 .com   Rails do básico ao avançado
C o m a nd os b á si c os

        “foo”.methods

        50.times.each do | i | puts “that’s cool #{i}” end

        father.children.map { |child| child.name } ou
        father.children.map(&:name)

        children_name.join(‘,’)

        foo.nil? or self.name.present?

        1.day.ago ou 3.years.from_now
globo
 .com    Rails do básico ao avançado
C lo u sure s com p roc

        def say_hello
          "Hello dear #{yield}"
        end

        person = "Vanessa"

        puts say_hello { person }




globo
 .com    Rails do básico ao avançado
Mod ul es

        module Singer
          def sing; puts “I’m singing” end
        end

        class Bird << Animal
          include Singer
          # ...
        end

        yellow_bird = Bird.new
        yellow_bird.sing
globo
 .com    Rails do básico ao avançado
Gh ost cla ss

        class Person
          def walk; puts “I’m walking” end
        end
        programmer = Pesrson.new
        programmer.instance_eval do
          def code
              puts “Ruby rocks!”
          end
        end
        programmer.respond_to? :code
        Pesrson.new.respond_to? :code
globo
 .com    Rails do básico ao avançado
Forw a rd a bl e
        class Basic
          def aumount(days); 65.80 * days end
        end

        require “forwardable”
        class Rental::Car
          extend Forwardable
          attr_acessor :type
          def_delegator :type, :ammount
        end
        rental = Bird::Car.new :type => Bird::Type::Basic.new
        rental.amount(3)
globo
 .com    Rails do básico ao avançado
D e l ega t e em r a ils
        class Basic
          def aumount(days); 65.80 * days end
        end

        class Rental::Car
          attr_acessor :type
          delegate :amount, :to => :type, :allow_nil => true
        end
        rental = Bird::Car.new :type => Bird::Type::Basic.new
        rental.amount(3)



globo
 .com    Rails do básico ao avançado
Rails - Básico
               cr ia n do ap p , s ca ffold i ng, rot a s, migrat ion




globo
 .com   Rails do básico ao avançado
c ri and o ap li c açã o




                                      $ rails new myinvestiments




globo
 .com   Rails do básico ao avançado
c ri and o ap li c açã o


group     :development, :test do
  gem     'rspec-rails'
  gem     'capybara', '~> 1.0.0'
  gem     'factory_girl', '~> 1.3.3'
  gem     'factory_girl_rails'
end


                                      $ rails generate rspec:install


globo
 .com   Rails do básico ao avançado
R E ST on ra il s
        HTTP             URL           Controller   action    propósito de uso
        GET             /posts           posts      index     listagem de todos os posts

        GET          /posts/new          posts       new      gera o HTML usado para criação de um post

        POST            /posts           posts      create    cria um novo post

        GET            /posts/2          posts       show     exibe um determinado post
                                                              gera o HTML usado para editar um post
        GET        /posts/2/edit         posts       edit
                                                              específico
        PUT            /posts/2          posts      update    atualiza os dados de um determinado post

    DELETE             /posts/2          posts      destroy   remove um determinado post

globo
 .com    Rails do básico ao avançado
R E ST on R ail s
        Código               Status      Verbos HTTP Cenário
                                         GET/DELETE/
          200                   OK                     ação executada com sucesso
                                            PUT

          201                Created        POST       indica que o conteúdo submetido foi criado

                                         GET/DELETE/   indica que não encontrou o recurso
          404              Not found
                                            PUT        informado
                                                       o verbo usado não é suportado pelo
          406          Not Acceptable
                                                       recurso usado
                       Internal Server                 algum falha foi encontrada durante a
          500                               Todos
                            error                      execução


globo
 .com   Rails do básico ao avançado
C ri a nd o C RUD c om sca ffold




        $ rails g scaffold portifolio_item stock_symbol:string
                         current_price:float




globo
 .com   Rails do básico ao avançado
R o d a nd o os te ste s




                           $ RAILS_ENV=test bundle exec rake spec




globo
 .com   Rails do básico ao avançado
Validações de modelo

                 validates_presence_of              validates_length_of

                 validates_uniqueness_of            validates_numericality_of

                 validates_associated               validates_size_of

                 validates_format_of

                 validates_inclusion_of




globo
 .com   Rails do básico ao avançado
Testes de validação de modelo com remarkable

        should validate_presence_of :stock_symbol

        should accept_nested_attributes_for :orders, :accept => { :quantity => 1.0 }

        should have_many :orders

        should_validate_associated :orders, :builder => proc{ |p| p.orders.build
        (:quantity => 100, :unit_price => 23.87) }

        should validate_uniqueness_of(:stock_symbol)

        should have_scope(:visible, :conditions => {:visible => true})

globo
 .com   Rails do básico ao avançado
Mais um exemplo usando generators




        $ rails g model order portifolio_item:references quantity:float
        unit_price:float tax:float booked_at:datetime traded_at:datetime




globo
 .com   Rails do básico ao avançado
Mais um exemplo usando generators




        $ rails g model order portifolio_item:references quantity:float
        unit_price:float tax:float booked_at:datetime traded_at:datetime



                                                belongs_to




globo
 .com   Rails do básico ao avançado
Rails - Avançado
         m a s s a s s i g n m e n t, acceptance tests, nestled
                  at t r i b u t e s , a ja x , a sset s p ip eline




globo
 .com   Rails do básico ao avançado
Mass assignment




globo
 .com   Rails do básico ao avançado
Mass assignment




globo
 .com   Rails do básico ao avançado
Mass assignment




globo
 .com   Rails do básico ao avançado
Mass assignment




globo
 .com   Rails do básico ao avançado
Possível usar
                                      Mass assignment      roles
                                                        :as => :admin




globo
 .com   Rails do básico ao avançado
Possível usar
                                             Mass assignment                       roles
                                                                                 :as => :admin




                                                      O update é assim:
                                      item.update_attributes(params[:item], :as => :admin)




globo
 .com   Rails do básico ao avançado
Testes de integração




                   $ rails g rspec:integration portifolio_items




globo
 .com   Rails do básico ao avançado
Principais métodos
          visit new_portifolio_item_path

          click_on('New portifolio item') #botões e links

          fill_in('Stock symbol', :with => ‘TAMM4’) #caixas de textos

          choose('Buy Order') #radio button

          check('Scheduled order') #checkbox

          select('High risk', :from => 'Items Group') #combobox

          have_xpath('//button[@id=”id” and @class=”disabled”]')

          have_content('Portifolio item saved successfully')

globo
 .com   Rails do básico ao avançado
Exemplo
context "campanha com apenas formulário de perguntas" do
   it "dado que preenche todos os dados vai para página vai para página de edição" do
        visita_formulario_da_campanha(@campanha)
        page.should have_content("Musas do Brasileirão 2011")
        page.should have_xpath("//li[@id='aba_form_1' and contains(@class,'active')]")
        fill_in("Nome", :with => "Nicole Bahls")
        select("Flamengo", :from => "Time do coração")
        click_on('enviar inscrição')
        page.should have_content("Parabéns, sua inscrição foi enviada com sucesso!")
        page.should have_no_xpath("//input[@id='enviarOutroVideo']")
   end
end


globo
 .com    Rails do básico ao avançado
Nested attributes

                 Permite gerenciar múltiplos modelos dependentes

                Baixa complexidade comparado com outras soluções
            accepts_nested_attributes_for :orders
                 <%= f.fields_for do |order| %>
                     <div class="field">
                          <%= order.label :quantity %><br />
                          <%= f.text_field :quantity %>
                     </div>
                     ...
globo
 .com   Rails do básico ao avançado
Ajax in Rails = UJS

    <%= link_to "Destroy", portifolio, :confirm => 'Are you sure?',
            :method => :delete, :remote => true

        Gera
    <a href="/portifolio_item/1" data-confirm="Are you sure?"
            data-method="delete" data-remote="true"
            rel="nofollow">Destroy</a>




globo
 .com   Rails do básico ao avançado
Ajax in Rails = UJS

    <%= link_to "Destroy", portifolio, :confirm => 'Are you sure?',
            :method => :delete, :remote => true

        Gera
    <a href="/portifolio_item/1" data-confirm="Are you sure?"
            data-method="delete" data-remote="true"
            rel="nofollow">Destroy</a>


                      Qual é a mágica? Onde está o JS gerado?


globo
 .com   Rails do básico ao avançado
View de uma requisição rails

    <% if @portifolio.destroyed? %>

         $("table").replaceWith(<%=js render :partial =>
    'portifolio_items/table' %>);

    <% else %>

         $("#messages").html(<%=js render flash_messages %>)

    <% end %>




globo
 .com   Rails do básico ao avançado
View de uma requisição rails

    <% if @portifolio.destroyed? %>

         $("table").replaceWith(<%=js render :partial =>
    'portifolio_items/table' %>);

    <% else %>

         $("#messages").html(<%=js render flash_messages %>)

    <% end %>


                             A resposta é um arquivo Javascript!


globo
 .com   Rails do básico ao avançado
Assets pipeline

                Reune e comprime arquivos JS e CSS

                Gera fingerprint para os arquivos estáticos

                Permite usar CoffeeScript para JS e SaaS para CSS
                com ERB

                Pode visualizar path no console:
                Rails.application.config.assets.paths

                              $ bundle exec rake assets:precompile


globo
 .com   Rails do básico ao avançado
Fazendo o deploy
        Capistrano >= 2.8.0 só adicionar receita no Capfile
    load 'deploy/assets'

        ou
    before :"deploy:symlink", :"deploy:assets"

    desc "Compile assets"

    task :assets do

        run "cd #{realease_path}; RAILS_ENV=#{rails_env} bundle exec
                rake assets:precompile"

    end


globo
 .com   Rails do básico ao avançado
What’s next??


globo
 .com   Rails do básico ao avançado

Mais conteúdo relacionado

Semelhante a Dando os primeiros passos com rails

Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on RailsCJR, UnB
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on RailsWhitesmith
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails introNuno Silva
 
Minicurso Ruby on Rails - Wake Up Systems
Minicurso Ruby on Rails - Wake Up SystemsMinicurso Ruby on Rails - Wake Up Systems
Minicurso Ruby on Rails - Wake Up SystemsWakeUpSystems
 
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
 
Atualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xAtualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xRodrigo Urubatan
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsLucas Caton
 
Ruby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhosRuby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhosjpaulolins
 
Testes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsTestes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsThiago Cifani
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVMWilliam Gouvea
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechRafael Gomes
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Introducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com RailsIntroducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com RailsKaton Agência Digital
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Rodrigo Urubatan
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009Caue Guerra
 

Semelhante a Dando os primeiros passos com rails (20)

Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on Rails
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on Rails
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails intro
 
Minicurso Ruby on Rails - Wake Up Systems
Minicurso Ruby on Rails - Wake Up SystemsMinicurso Ruby on Rails - Wake Up Systems
Minicurso Ruby on Rails - Wake Up Systems
 
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
 
Atualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xAtualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.x
 
Aula Ruby
Aula RubyAula Ruby
Aula Ruby
 
Ruby on Rails em 30 minutos
Ruby on Rails em 30 minutosRuby on Rails em 30 minutos
Ruby on Rails em 30 minutos
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
Ruby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhosRuby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhos
 
Testes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsTestes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on Rails
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma Fintech
 
Curso rails
Curso railsCurso rails
Curso rails
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Introducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com RailsIntroducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com Rails
 
Quasar framework
Quasar frameworkQuasar framework
Quasar framework
 
Teste Watir
Teste WatirTeste Watir
Teste Watir
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009
 

Dando os primeiros passos com rails

  • 1. globo .com Dando os primeiros passos com rails Marcos Sousa @marcos_sousa www.marcossousa.com falecomigo@marcossousa.com
  • 2. Marcos Sousa Desenvolvedor por paixão 7 anos de experiência Java, Ruby, Javascript, SQL Isso mesmo! SQL! Piloto de F1 nas horas vagas :) globo .com Rails do básico ao avançado
  • 3. ...construindo pixel a pixel o maior portal brasileiro de internet globo .com Rails do básico ao avançado
  • 4. Começando com ruby Hist óri co globo .com Rails do básico ao avançado
  • 5. Hist óri co Criado em 1993 por Yukihiro Primeira lista em inglês 1999 2000 - Programming Ruby - Primeiro livro em inglês 2003 - Início do rails 2004 - Primeiro release público 2010 - Rails 3.0 2011 - Rails 3.1 globo .com Rails do básico ao avançado
  • 6. Características Propósitos e Objetivos globo .com Rails do básico ao avançado
  • 7. Propósitos e Objetivos Dinâmica Linguagem simples e humana Todas as classes são abertas Meta programação Multi-plataforma (Unix/Windows) Herança simples e mixins Garbage Collector globo .com Rails do básico ao avançado
  • 8. Instalação Já vem instalado instalação via apt-get, yum, rvm, etc one click install http://rubyinstaller.org/downloads/ globo .com Rails do básico ao avançado
  • 9. O Básico de Ruby M é tod os bá sic os globo .com Rails do básico ao avançado
  • 10. C o m a nd os b á si c os “foo”.methods 50.times.each do | i | puts “that’s cool #{i}” end father.children.map { |child| child.name } ou father.children.map(&:name) children_name.join(‘,’) foo.nil? or self.name.present? 1.day.ago ou 3.years.from_now globo .com Rails do básico ao avançado
  • 11. C lo u sure s com p roc def say_hello "Hello dear #{yield}" end person = "Vanessa" puts say_hello { person } globo .com Rails do básico ao avançado
  • 12. Mod ul es module Singer def sing; puts “I’m singing” end end class Bird << Animal include Singer # ... end yellow_bird = Bird.new yellow_bird.sing globo .com Rails do básico ao avançado
  • 13. Gh ost cla ss class Person def walk; puts “I’m walking” end end programmer = Pesrson.new programmer.instance_eval do def code puts “Ruby rocks!” end end programmer.respond_to? :code Pesrson.new.respond_to? :code globo .com Rails do básico ao avançado
  • 14. Forw a rd a bl e class Basic def aumount(days); 65.80 * days end end require “forwardable” class Rental::Car extend Forwardable attr_acessor :type def_delegator :type, :ammount end rental = Bird::Car.new :type => Bird::Type::Basic.new rental.amount(3) globo .com Rails do básico ao avançado
  • 15. D e l ega t e em r a ils class Basic def aumount(days); 65.80 * days end end class Rental::Car attr_acessor :type delegate :amount, :to => :type, :allow_nil => true end rental = Bird::Car.new :type => Bird::Type::Basic.new rental.amount(3) globo .com Rails do básico ao avançado
  • 16. Rails - Básico cr ia n do ap p , s ca ffold i ng, rot a s, migrat ion globo .com Rails do básico ao avançado
  • 17. c ri and o ap li c açã o $ rails new myinvestiments globo .com Rails do básico ao avançado
  • 18. c ri and o ap li c açã o group :development, :test do gem 'rspec-rails'   gem 'capybara', '~> 1.0.0'   gem 'factory_girl', '~> 1.3.3'   gem 'factory_girl_rails' end $ rails generate rspec:install globo .com Rails do básico ao avançado
  • 19. R E ST on ra il s HTTP URL Controller action propósito de uso GET /posts posts index listagem de todos os posts GET /posts/new posts new gera o HTML usado para criação de um post POST /posts posts create cria um novo post GET /posts/2 posts show exibe um determinado post gera o HTML usado para editar um post GET /posts/2/edit posts edit específico PUT /posts/2 posts update atualiza os dados de um determinado post DELETE /posts/2 posts destroy remove um determinado post globo .com Rails do básico ao avançado
  • 20. R E ST on R ail s Código Status Verbos HTTP Cenário GET/DELETE/ 200 OK ação executada com sucesso PUT 201 Created POST indica que o conteúdo submetido foi criado GET/DELETE/ indica que não encontrou o recurso 404 Not found PUT informado o verbo usado não é suportado pelo 406 Not Acceptable recurso usado Internal Server algum falha foi encontrada durante a 500 Todos error execução globo .com Rails do básico ao avançado
  • 21. C ri a nd o C RUD c om sca ffold $ rails g scaffold portifolio_item stock_symbol:string current_price:float globo .com Rails do básico ao avançado
  • 22. R o d a nd o os te ste s $ RAILS_ENV=test bundle exec rake spec globo .com Rails do básico ao avançado
  • 23. Validações de modelo validates_presence_of validates_length_of validates_uniqueness_of validates_numericality_of validates_associated validates_size_of validates_format_of validates_inclusion_of globo .com Rails do básico ao avançado
  • 24. Testes de validação de modelo com remarkable should validate_presence_of :stock_symbol should accept_nested_attributes_for :orders, :accept => { :quantity => 1.0 } should have_many :orders should_validate_associated :orders, :builder => proc{ |p| p.orders.build (:quantity => 100, :unit_price => 23.87) } should validate_uniqueness_of(:stock_symbol) should have_scope(:visible, :conditions => {:visible => true}) globo .com Rails do básico ao avançado
  • 25. Mais um exemplo usando generators $ rails g model order portifolio_item:references quantity:float unit_price:float tax:float booked_at:datetime traded_at:datetime globo .com Rails do básico ao avançado
  • 26. Mais um exemplo usando generators $ rails g model order portifolio_item:references quantity:float unit_price:float tax:float booked_at:datetime traded_at:datetime belongs_to globo .com Rails do básico ao avançado
  • 27. Rails - Avançado m a s s a s s i g n m e n t, acceptance tests, nestled at t r i b u t e s , a ja x , a sset s p ip eline globo .com Rails do básico ao avançado
  • 28. Mass assignment globo .com Rails do básico ao avançado
  • 29. Mass assignment globo .com Rails do básico ao avançado
  • 30. Mass assignment globo .com Rails do básico ao avançado
  • 31. Mass assignment globo .com Rails do básico ao avançado
  • 32. Possível usar Mass assignment roles :as => :admin globo .com Rails do básico ao avançado
  • 33. Possível usar Mass assignment roles :as => :admin O update é assim: item.update_attributes(params[:item], :as => :admin) globo .com Rails do básico ao avançado
  • 34. Testes de integração $ rails g rspec:integration portifolio_items globo .com Rails do básico ao avançado
  • 35. Principais métodos visit new_portifolio_item_path click_on('New portifolio item') #botões e links fill_in('Stock symbol', :with => ‘TAMM4’) #caixas de textos choose('Buy Order') #radio button check('Scheduled order') #checkbox select('High risk', :from => 'Items Group') #combobox have_xpath('//button[@id=”id” and @class=”disabled”]') have_content('Portifolio item saved successfully') globo .com Rails do básico ao avançado
  • 36. Exemplo context "campanha com apenas formulário de perguntas" do it "dado que preenche todos os dados vai para página vai para página de edição" do visita_formulario_da_campanha(@campanha) page.should have_content("Musas do Brasileirão 2011") page.should have_xpath("//li[@id='aba_form_1' and contains(@class,'active')]") fill_in("Nome", :with => "Nicole Bahls") select("Flamengo", :from => "Time do coração") click_on('enviar inscrição') page.should have_content("Parabéns, sua inscrição foi enviada com sucesso!") page.should have_no_xpath("//input[@id='enviarOutroVideo']") end end globo .com Rails do básico ao avançado
  • 37. Nested attributes Permite gerenciar múltiplos modelos dependentes Baixa complexidade comparado com outras soluções accepts_nested_attributes_for :orders <%= f.fields_for do |order| %> <div class="field"> <%= order.label :quantity %><br /> <%= f.text_field :quantity %> </div> ... globo .com Rails do básico ao avançado
  • 38. Ajax in Rails = UJS <%= link_to "Destroy", portifolio, :confirm => 'Are you sure?', :method => :delete, :remote => true Gera <a href="/portifolio_item/1" data-confirm="Are you sure?" data-method="delete" data-remote="true" rel="nofollow">Destroy</a> globo .com Rails do básico ao avançado
  • 39. Ajax in Rails = UJS <%= link_to "Destroy", portifolio, :confirm => 'Are you sure?', :method => :delete, :remote => true Gera <a href="/portifolio_item/1" data-confirm="Are you sure?" data-method="delete" data-remote="true" rel="nofollow">Destroy</a> Qual é a mágica? Onde está o JS gerado? globo .com Rails do básico ao avançado
  • 40. View de uma requisição rails <% if @portifolio.destroyed? %> $("table").replaceWith(<%=js render :partial => 'portifolio_items/table' %>); <% else %> $("#messages").html(<%=js render flash_messages %>) <% end %> globo .com Rails do básico ao avançado
  • 41. View de uma requisição rails <% if @portifolio.destroyed? %> $("table").replaceWith(<%=js render :partial => 'portifolio_items/table' %>); <% else %> $("#messages").html(<%=js render flash_messages %>) <% end %> A resposta é um arquivo Javascript! globo .com Rails do básico ao avançado
  • 42. Assets pipeline Reune e comprime arquivos JS e CSS Gera fingerprint para os arquivos estáticos Permite usar CoffeeScript para JS e SaaS para CSS com ERB Pode visualizar path no console: Rails.application.config.assets.paths $ bundle exec rake assets:precompile globo .com Rails do básico ao avançado
  • 43. Fazendo o deploy Capistrano >= 2.8.0 só adicionar receita no Capfile load 'deploy/assets' ou before :"deploy:symlink", :"deploy:assets" desc "Compile assets" task :assets do run "cd #{realease_path}; RAILS_ENV=#{rails_env} bundle exec rake assets:precompile" end globo .com Rails do básico ao avançado
  • 44. What’s next?? globo .com Rails do básico ao avançado

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. QA come&amp;#xE7;a dia 6/6\n
  7. QA come&amp;#xE7;a dia 6/6\n
  8. QA come&amp;#xE7;a dia 6/6\n
  9. QA come&amp;#xE7;a dia 6/6\n
  10. QA come&amp;#xE7;a dia 6/6\n
  11. QA come&amp;#xE7;a dia 6/6\n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n