- O documento apresenta Sérgio Henrique Miranda Junior e sua experiência com Ruby on Rails. Ele descreve sua empresa Dito Internet e alguns projetos desenvolvidos com Rails, como a plataforma social e o aplicativo Tim Beta. O documento também fornece uma introdução sobre Ruby, Rails, MVC, testes automatizados e outras funcionalidades do framework.
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
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
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
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