conhecendo ruby on rails
DESCRIPTION
TRANSCRIPT
Conhecendo Ruby on RailsSé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
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
Rubyhttp://www.ruby-lang.org/pt/
Thursday, October 4, 12
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
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úsculaEx: nome
Também existe variável de instância de classe!
Thursday, October 4, 12
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
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 eachindex = 0while index < lengthyield 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 Professordef initializer(nome)@nome = nome
end
def nome@nome
endend
p = Professor.new(“José”)p.nome #retorna “José”
Thursday, October 4, 12
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
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
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
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
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
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
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
- VMThursday, October 4, 12
Railshttp://rubyonrails.com.br/
Thursday, October 4, 12
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
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 RailsThursday, 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
- 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
MVCThursday, 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::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
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:
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
Ciclo de testesThursday, October 4, 12
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
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:
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
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 config/routes.rb => root :to => “home#index”
$ vim app/views/home/index.html.erb => <h1> Hello Rails! </h1>
Thursday, October 4, 12
Quem utiliza RailsThursday, 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: [email protected]: @sergiohenriquefb: /sergiohenriquemiranda
Thursday, October 4, 12