Conhecendo Ruby on Rails
-
Upload
sergio-henrique -
Category
Technology
-
view
469 -
download
2
description
Transcript of Conhecendo Ruby on Rails
![Page 1: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/1.jpg)
Conhecendo Ruby on RailsSérgio Henrique Miranda Junior
Thursday, October 4, 12
![Page 2: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/2.jpg)
Sumário
- Sobre mim
- Dito Internet
- Ruby
- Ruby on Rails
- Fazendo acontecer
Thursday, October 4, 12
![Page 3: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/3.jpg)
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
![Page 4: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/4.jpg)
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
![Page 5: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/5.jpg)
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
![Page 6: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/6.jpg)
Plataforma Social
Social apps AnalyticsGamificationMódulos sociais
- Possui 4 módulos que permitem utilizar a influência das amizades para gerar novos negócios para as marcas
Criamos interações e engajamento para as marcas através de apps dentro das redes sociais.
Levamos as redes sociais para dentro do seu website (login, compartilhamento e dados ligados às amizades).
Utilizamos mecânicas de games (rankings, badges e níveis) para aumentar a fidelização do público alvo.
Transformamos todas as ações dos usuários em relatórios com um rico conjunto de dados.
Thursday, October 4, 12
![Page 7: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/7.jpg)
Rubyhttp://www.ruby-lang.org/pt/
Thursday, October 4, 12
![Page 8: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/8.jpg)
Ruby
- Linguagem de programação lançada em 1995
- Popularizada em 2006 graças ao Ruby on Rails
- Totalmente gratuita
- Linguagem interpretada
- Desenvolvida por um japonês: Yukihiro “Matz” Matsumoto
Thursday, October 4, 12
![Page 9: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/9.jpg)
Ruby
Tudo é objeto:
>> 1500.class
=> Fixnum
>> 1333.even?
=> false
>> “Fumec”.length
=> 5
Thursday, October 4, 12
![Page 10: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/10.jpg)
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úsculaEx: nome
Também existe variável de instância de classe!
Thursday, October 4, 12
![Page 11: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/11.jpg)
Ruby
- O que fazer quando é preciso validar o tipo da variável que está sendo passada?
Variáveis:
Duck typing:
- Se anda como um pato...
- Faz “quack” como um pato...
- Provavelmente é um pato!
Thursday, October 4, 12
![Page 12: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/12.jpg)
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
![Page 13: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/13.jpg)
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 eachindex = 0while index < lengthyield arr[index]index += 1
end
Thursday, October 4, 12
![Page 14: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/14.jpg)
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
![Page 15: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/15.jpg)
Ruby
Classes:
- Definição de classe é bem simples e possui o método initializer como construtor.
class Professordef initializer(nome)@nome = nome
end
def nome@nome
endend
p = Professor.new(“José”)p.nome #retorna “José”
Thursday, October 4, 12
![Page 16: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/16.jpg)
Ruby
Classes:
- Existe uma maneira mais simples de fazer getters e setters
class Professorattr_accessor :nomedef initializer(nome)@nome = nome
endendp = Professor.new(“José”)p.nome #retorna “José”p.nome = “José Francisco”
- attr_accessor- attr_writer- attr_reader
Thursday, October 4, 12
![Page 17: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/17.jpg)
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 existenteclass Fixnumdef +(another_integer)self * another_integer
endend
>> 5 + 2 # mesma coisa que -> 5.+(2)=> 10 #oooopssss! with great power comes great responsibility!
Thursday, October 4, 12
![Page 18: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/18.jpg)
Ruby
Classes:
- Herança é expressada de uma maneira bem simples
class Professor < Profissionaldef metodo_sobrescrito(nome)# super sem nenhum argumento irá passar todos os# argumentos recebidos para o método da classe pairesultado = superresultado
endend
Thursday, October 4, 12
![Page 19: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/19.jpg)
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 arg1puts 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
![Page 20: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/20.jpg)
Ruby
Métodos:
def estudar(materia, *livros)livros.each do |livro|leia(livro)
endend
estudar(“Ruby”, “Design Patterns in Ruby”, “The well grounded Rubyist”)
estudar(“Rails”, “The Rails 3 Way”, “Rails Recipes”, “Crafting Rails Applications”)
- Exemplo de número variável de argumentos
Thursday, October 4, 12
![Page 21: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/21.jpg)
Ruby
Módulos:
- Agrupam métodos, constantes e variáveis de classe- Não podem ser instanciados ou feitos como sub-classe
module QualquerCoisadef self.algum_metodo...
endend
QualquerCoisa.algum_metodo
Thursday, October 4, 12
![Page 22: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/22.jpg)
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
![Page 23: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/23.jpg)
Ruby
Ecossistema:- Garbage Collector
- Builtin classes
- Standard Library
- String enconding/transcoding
- Regexp engine
- Utilitários (ferramentas de debug, formatação de strings ...)
- Parser
- VMThursday, October 4, 12
![Page 24: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/24.jpg)
Railshttp://rubyonrails.com.br/
Thursday, October 4, 12
![Page 25: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/25.jpg)
Rails
- Lançado em julho de 2004
- 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.
- Extraído da ferramenta de gestão de projetos Basecamp
Thursday, October 4, 12
![Page 26: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/26.jpg)
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
![Page 27: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/27.jpg)
Aprendendo RailsThursday, October 4, 12
![Page 28: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/28.jpg)
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
![Page 29: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/29.jpg)
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
- Controller : recebe evento do mundo externo, interage com o model e retorna a view corretapara o usuário
- View: gera a interface com o usuário
Thursday, October 4, 12
![Page 30: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/30.jpg)
MVCThursday, October 4, 12
![Page 31: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/31.jpg)
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
![Page 32: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/32.jpg)
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
![Page 33: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/33.jpg)
Rails
Exemplo de código AR:
class Person < ActiveRecord::Basevalidates :email, :presence => truevalidates :surname, :presence => true, :if => "name.nil?"
has_many :booksend
class Book < ActiveRecord::Base validates :name, :presence => true
belongs_to :personend
p = Person.new(:email => nil, :name => nil, :surname => “Miranda”)
p = Person.valid? #false
p1 = Person.first
p1_books = p1.books
puts p.errors #email can’t be blank
Thursday, October 4, 12
![Page 34: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/34.jpg)
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
![Page 35: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/35.jpg)
Rails
Organização de pastas:
- sua_app- app- config- db- doc- lib- log- public- script- test- tmp- vendor
Thursday, October 4, 12
![Page 36: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/36.jpg)
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
![Page 37: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/37.jpg)
Rails
Desenvolvimento orientado a teste:
describe Teacher do describe "requirements" do it "should have a name" do t = Teacher.new(:name => nil) t.should_not be_valid end endend
- Exemplo de teste automatizado utilizando Rspec
Thursday, October 4, 12
![Page 38: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/38.jpg)
Ciclo de testesThursday, October 4, 12
![Page 39: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/39.jpg)
Rails
Migrations:
class CreateTeacher < ActiveRecord::Migration def change create_table :teachers do |t| t.string :name t.string :cpf t.timestamps end endend
- É 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
Thursday, October 4, 12
![Page 40: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/40.jpg)
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
![Page 41: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/41.jpg)
Rails
Rake:
namespace :namespace_da_sua_task dodesc “descrição da sua task”task :nome_da_sua_task => :dependencia_da_sua_task dotarefa_a_ser_executada
endend
- É 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!
$ rake namespace_da_sua_task:nome_da_sua_task
Thursday, October 4, 12
![Page 42: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/42.jpg)
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
![Page 43: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/43.jpg)
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
![Page 44: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/44.jpg)
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
![Page 45: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/45.jpg)
Rails
Hello Rails:
$ rails new hello_rails
$ cd hello_rails
$ rails server
$ rails generate controller home index
$ rm public/index.html
$ vim config/routes.rb => root :to => “home#index”
$ vim app/views/home/index.html.erb => <h1> Hello Rails! </h1>
Thursday, October 4, 12
![Page 46: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/46.jpg)
Quem utiliza RailsThursday, October 4, 12
![Page 47: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/47.jpg)
um presente pra vocês...
Thursday, October 4, 12
![Page 48: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/48.jpg)
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
![Page 49: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/49.jpg)
não virem refém do framework
Thursday, October 4, 12
![Page 50: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/50.jpg)
Não tenho um talento especial. Eu sou apenas apaixonadamente curioso
Thursday, October 4, 12
![Page 51: Conhecendo Ruby on Rails](https://reader033.fdocuments.net/reader033/viewer/2022051323/5487ab70b47959e20c8b5577/html5/thumbnails/51.jpg)
Obrigado!e-mail: [email protected]: @sergiohenriquefb: /sergiohenriquemiranda
Thursday, October 4, 12