SlideShare a Scribd company logo
1 of 67
Download to read offline
Desenvolvimento
Ágil com Ruby on
Rails
segunda-feira, 29 de abril de 13
http://bit.ly/agile-webdev-rails
segunda-feira, 29 de abril de 13
segunda-feira, 29 de abril de 13
segunda-feira, 29 de abril de 13
"Programmers should
always be interested in
learning new languages,
preferably from an
unfamiliar paradigm"
"97Things Every Programmer Should Know"
segunda-feira, 29 de abril de 13
segunda-feira, 29 de abril de 13
Ruby on Rails é um
framework em Ruby
segunda-feira, 29 de abril de 13
https://www.ruby-toolbox.com/categories/web_app_frameworks
Sinatra, Padrino,
Merb, Espresso
segunda-feira, 29 de abril de 13
Conhecendo um pouco
de Ruby
segunda-feira, 29 de abril de 13
Ruby From Other
Languages
http://bit.ly/ruby-from-other
segunda-feira, 29 de abril de 13
Interpretado
#app.rb
puts “Meet2Brains”
$ ruby app.rb
Meet2Brains
segunda-feira, 29 de abril de 13
Uso de Blocos
my_list = [1,2,3,4,5]
my_list.each do |item|
# deal with item
end
segunda-feira, 29 de abril de 13
Tudo tem valor
x = 10
y = 11
z = if x < y
1
else
2
end
z # => 1
segunda-feira, 29 de abril de 13
Tudo é objeto
10.times{ |n| puts n }
segunda-feira, 29 de abril de 13
Tudo é objeto
10.times{ |n| puts n }
10.class
=> Fixnum
segunda-feira, 29 de abril de 13
Tudo é objeto
10.times{ |n| puts n }
10.class
=> Fixnum
Fixnum.class
=> Class
segunda-feira, 29 de abril de 13
Tudo é objeto
10.times{ |n| puts n }
10.class
=> Fixnum
Fixnum.class
=> Class
Fixnum.ancestors
=> [Fixnum, Integer, Numeric,
Comparable, Object, Kernel,
BasicObject]
segunda-feira, 29 de abril de 13
# This
1 + 2
# Is the same as this ...
1.+(2)
# Which is the same as this:
1.send "+", 2
segunda-feira, 29 de abril de 13
# This
1 + 2
# Is the same as this ...
1.+(2)
# Which is the same as this:
1.send "+", 2
segunda-feira, 29 de abril de 13
Metaprogramação
segunda-feira, 29 de abril de 13
segunda-feira, 29 de abril de 13
class Car
def inspect
“Cheap car”
end
end
segunda-feira, 29 de abril de 13
class Car
def inspect
“Cheap car”
end
end
other_car = Car.new
other_car.inspect # => “Cheap car”
segunda-feira, 29 de abril de 13
class Car
def inspect
“Cheap car”
end
end
other_car = Car.new
other_car.inspect # => “Cheap car”
segunda-feira, 29 de abril de 13
class Car
def inspect
“Cheap car”
end
end
porsche = Car.new
porsche.inspect # => “Cheap car”
def porsche.inspect
“Expensive car”
end
porsche.inspect # => “Expensive car”
other_car = Car.new
other_car.inspect # => “Cheap car”
segunda-feira, 29 de abril de 13
class Car
def inspect
“Cheap car”
end
end
porsche = Car.new
porsche.inspect # => “Cheap car”
def porsche.inspect
“Expensive car”
end
porsche.inspect # => “Expensive car”
other_car = Car.new
other_car.inspect # => “Cheap car”
segunda-feira, 29 de abril de 13
class Fixnum
def hours
self * 3600 # number of seconds/hour
end
alias hour hours
end
# 14 hours from 00:00 January 1st
Time.mktime(2006, 01, 01) + 14.hours
# => Sun Jan 01 14:00:00
segunda-feira, 29 de abril de 13
class Fixnum
def hours
self * 3600 # number of seconds/hour
end
alias hour hours
end
# 14 hours from 00:00 January 1st
Time.mktime(2006, 01, 01) + 14.hours
# => Sun Jan 01 14:00:00
Time.mktime(2006, 01, 01) + 14.hours
# => Sun Jan 01 14:00:00
segunda-feira, 29 de abril de 13
class Fixnum
def hours
self * 3600 # number of seconds/hour
end
alias hour hours
end
# 14 hours from 00:00 January 1st
Time.mktime(2006, 01, 01) + 14.hours
# => Sun Jan 01 14:00:00
Time.mktime(2006, 01, 01) + 14.hours
# => Sun Jan 01 14:00:00
segunda-feira, 29 de abril de 13
Time.now + 2.days
# => 2013-05-01 12:40:57 -0300
#Rails
segunda-feira, 29 de abril de 13
Time.now + 2.days
# => 2013-05-01 12:40:57 -0300
#Rails
segunda-feira, 29 de abril de 13
segunda-feira, 29 de abril de 13
Dica?
segunda-feira, 29 de abril de 13
http://tryruby.org
segunda-feira, 29 de abril de 13
RubyGems
segunda-feira, 29 de abril de 13
Software Package
segunda-feira, 29 de abril de 13
Autenticação
Paginação
Imagens
Tasks
Filas...
segunda-feira, 29 de abril de 13
segunda-feira, 29 de abril de 13
$ gem install rails
segunda-feira, 29 de abril de 13
$ gem install rails
segunda-feira, 29 de abril de 13
Ruby on Rails
segunda-feira, 29 de abril de 13
Agil
segunda-feira, 29 de abril de 13
MVC
segunda-feira, 29 de abril de 13
Rails Philosophy
segunda-feira, 29 de abril de 13
Don’t Repeat Yourself
(DRY)
segunda-feira, 29 de abril de 13
Layouts, Views, Partials
segunda-feira, 29 de abril de 13
Layouts, Views, Partials
# application.html.erb
<html>
<body>
<%= yield %>
</body>
</html
segunda-feira, 29 de abril de 13
Layouts, Views, Partials
# application.html.erb
<html>
<body>
<%= yield %>
</body>
</html
# clientes/index.html.erb
<h1>Clientes</h1>
<table>
...
</table>
segunda-feira, 29 de abril de 13
Helpers
FORMS, TAGS, HTML BLOCKS, SUPPORT,
FORMATS, ...
segunda-feira, 29 de abril de 13
Helpers
FORMS, TAGS, HTML BLOCKS, SUPPORT,
FORMATS, ...
<%= form_for @article do |f| %>
<%= f.text_field :title %>
<%= f.text_area :body, size: "60x12" %>
<%= f.submit "Create" %>
<% end %>
segunda-feira, 29 de abril de 13
Model - Scope
segunda-feira, 29 de abril de 13
Model - Scope
@published = Post.where(published: true)
segunda-feira, 29 de abril de 13
Model - Scope
@published = Post.where(published: true)
class Post < ActiveRecord::Base
scope :published, where(published: true)
end
segunda-feira, 29 de abril de 13
Model - Scope
@published = Post.where(published: true)
class Post < ActiveRecord::Base
scope :published, where(published: true)
end
@published = Post.published
segunda-feira, 29 de abril de 13
Convention over
Configuration (CoC)
segunda-feira, 29 de abril de 13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#config/routes.rb
resources :posts
#app/controllers/posts_controller.rb
class PostsController < ApplicationController
def index
@posts = Post.published
end
# ...
end
#app/views/posts/index.html.erb
<h1>Posts</h1>
<ul>
<%= render @posts %>
</ul>
#app/views/posts/_post.html.erb
<li><%= post.title %></li>
segunda-feira, 29 de abril de 13
RESTful
segunda-feira, 29 de abril de 13
resources	
  :photos
segunda-feira, 29 de abril de 13
Migrations
Migrations are a convenient way for you to
alter your database in a structured and
organized manner
segunda-feira, 29 de abril de 13
class CreateProducts < ActiveRecord::Migration
  def up
    create_table :products do |t|
      t.string :name
      t.text :description
 
      t.timestamps
    end
  end
 
  def down
    drop_table :products
  end
end
segunda-feira, 29 de abril de 13
Testes
TDD, BDD
segunda-feira, 29 de abril de 13
Extensível
Autenticação, paginação, manipulação/upload de imagens,
webservice, privilégios, pdf, csv, xml, json, filas,
monitoramento, database drivers, ...
segunda-feira, 29 de abril de 13
Quem usa?
segunda-feira, 29 de abril de 13
www.adena.com.br
segunda-feira, 29 de abril de 13
http://rubyonrails.org/applications
segunda-feira, 29 de abril de 13
Referências
http://bit.ly/ZV7NLZ
segunda-feira, 29 de abril de 13
segunda-feira, 29 de abril de 13

More Related Content

Viewers also liked

Sort overview of what we do
Sort overview of what we doSort overview of what we do
Sort overview of what we doJoe Tillman
 
Softskill (telkom)
Softskill (telkom)Softskill (telkom)
Softskill (telkom)Fauzan Agam
 
Occupational drivers license austin 
Occupational drivers license austin Occupational drivers license austin 
Occupational drivers license austin Alysha Nieol
 
Glacier National Park Vacation
Glacier National Park VacationGlacier National Park Vacation
Glacier National Park Vacationlnystrom
 
Métricas Web com Google Analytics: indo muito além das visitas
Métricas Web com Google Analytics: indo muito além das visitasMétricas Web com Google Analytics: indo muito além das visitas
Métricas Web com Google Analytics: indo muito além das visitasmeet2Brains
 
Whitney Warrington: Exploring Manhattan’s Flatiron District
Whitney Warrington: Exploring Manhattan’s Flatiron DistrictWhitney Warrington: Exploring Manhattan’s Flatiron District
Whitney Warrington: Exploring Manhattan’s Flatiron DistrictWhitney Warrington
 
Tgs. p erbedaan bahasa indonesia dengan bahasa melayu.artayahonest
Tgs. p erbedaan bahasa indonesia dengan bahasa melayu.artayahonestTgs. p erbedaan bahasa indonesia dengan bahasa melayu.artayahonest
Tgs. p erbedaan bahasa indonesia dengan bahasa melayu.artayahonestArtaya Honest
 
Ringkasan mahabrata by artaya honest
Ringkasan mahabrata by artaya honestRingkasan mahabrata by artaya honest
Ringkasan mahabrata by artaya honestArtaya Honest
 

Viewers also liked (12)

Sort overview of what we do
Sort overview of what we doSort overview of what we do
Sort overview of what we do
 
Softskill (telkom)
Softskill (telkom)Softskill (telkom)
Softskill (telkom)
 
20121622
2012162220121622
20121622
 
Occupational drivers license austin 
Occupational drivers license austin Occupational drivers license austin 
Occupational drivers license austin 
 
GIT - GOOD PRACTICES
GIT - GOOD PRACTICESGIT - GOOD PRACTICES
GIT - GOOD PRACTICES
 
Glacier National Park Vacation
Glacier National Park VacationGlacier National Park Vacation
Glacier National Park Vacation
 
Best personal work so far
Best personal work so farBest personal work so far
Best personal work so far
 
Métricas Web com Google Analytics: indo muito além das visitas
Métricas Web com Google Analytics: indo muito além das visitasMétricas Web com Google Analytics: indo muito além das visitas
Métricas Web com Google Analytics: indo muito além das visitas
 
Whitney Warrington: Exploring Manhattan’s Flatiron District
Whitney Warrington: Exploring Manhattan’s Flatiron DistrictWhitney Warrington: Exploring Manhattan’s Flatiron District
Whitney Warrington: Exploring Manhattan’s Flatiron District
 
Tgs. p erbedaan bahasa indonesia dengan bahasa melayu.artayahonest
Tgs. p erbedaan bahasa indonesia dengan bahasa melayu.artayahonestTgs. p erbedaan bahasa indonesia dengan bahasa melayu.artayahonest
Tgs. p erbedaan bahasa indonesia dengan bahasa melayu.artayahonest
 
e-lkartu (euskara)
e-lkartu (euskara)e-lkartu (euskara)
e-lkartu (euskara)
 
Ringkasan mahabrata by artaya honest
Ringkasan mahabrata by artaya honestRingkasan mahabrata by artaya honest
Ringkasan mahabrata by artaya honest
 

More from meet2Brains

Por que minha empresa deve construir um planejamento digital?
Por que minha empresa deve construir um planejamento digital?Por que minha empresa deve construir um planejamento digital?
Por que minha empresa deve construir um planejamento digital?meet2Brains
 
Marketing digital, quem precisa?
Marketing digital, quem precisa?Marketing digital, quem precisa?
Marketing digital, quem precisa?meet2Brains
 
Design sem Designer: como, onde e por que o Design acontece
Design sem Designer: como, onde e por que o Design aconteceDesign sem Designer: como, onde e por que o Design acontece
Design sem Designer: como, onde e por que o Design acontecemeet2Brains
 
Cutesquares: De Cuteland para o mundo
Cutesquares: De Cuteland para o mundoCutesquares: De Cuteland para o mundo
Cutesquares: De Cuteland para o mundomeet2Brains
 
Como ser um bom programador
Como ser um bom programadorComo ser um bom programador
Como ser um bom programadormeet2Brains
 
Programando para o Google Chrome
Programando para o Google ChromeProgramando para o Google Chrome
Programando para o Google Chromemeet2Brains
 
E-commerce: indo além da tecnologia
E-commerce: indo além da tecnologiaE-commerce: indo além da tecnologia
E-commerce: indo além da tecnologiameet2Brains
 
Mídias Sociais não é só Facebook!
Mídias Sociais não é só Facebook!Mídias Sociais não é só Facebook!
Mídias Sociais não é só Facebook!meet2Brains
 
PicPay: uma nova forma de comprar
PicPay: uma nova forma de comprarPicPay: uma nova forma de comprar
PicPay: uma nova forma de comprarmeet2Brains
 
Projetar pensando na experiência do usuário
Projetar pensando na experiência do usuárioProjetar pensando na experiência do usuário
Projetar pensando na experiência do usuáriomeet2Brains
 
Mobile: o que já está acontecendo e o que é futuro?
Mobile: o que já está acontecendo e o que é futuro?Mobile: o que já está acontecendo e o que é futuro?
Mobile: o que já está acontecendo e o que é futuro?meet2Brains
 
Angular JS, você precisa conhecer
Angular JS, você precisa conhecerAngular JS, você precisa conhecer
Angular JS, você precisa conhecermeet2Brains
 
Rock pigeon - do zero até o começo
Rock pigeon - do zero até o começoRock pigeon - do zero até o começo
Rock pigeon - do zero até o começomeet2Brains
 
Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...
Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...
Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...meet2Brains
 
Getting Real: conceitos para construir projetos de sucesso
Getting Real: conceitos para construir projetos de sucessoGetting Real: conceitos para construir projetos de sucesso
Getting Real: conceitos para construir projetos de sucessomeet2Brains
 
Desenvolvendo para windows phone, um novo paradigma
Desenvolvendo para windows phone, um novo paradigmaDesenvolvendo para windows phone, um novo paradigma
Desenvolvendo para windows phone, um novo paradigmameet2Brains
 
De serviço a produto com uma plataforma de e-commerce
De serviço a produto com uma plataforma de e-commerceDe serviço a produto com uma plataforma de e-commerce
De serviço a produto com uma plataforma de e-commercemeet2Brains
 
WebApps e Frameworks Javascript
WebApps e Frameworks JavascriptWebApps e Frameworks Javascript
WebApps e Frameworks Javascriptmeet2Brains
 
De aprendizado à utilidade pública
De aprendizado à utilidade públicaDe aprendizado à utilidade pública
De aprendizado à utilidade públicameet2Brains
 
Arquitetura evolutiva
Arquitetura evolutivaArquitetura evolutiva
Arquitetura evolutivameet2Brains
 

More from meet2Brains (20)

Por que minha empresa deve construir um planejamento digital?
Por que minha empresa deve construir um planejamento digital?Por que minha empresa deve construir um planejamento digital?
Por que minha empresa deve construir um planejamento digital?
 
Marketing digital, quem precisa?
Marketing digital, quem precisa?Marketing digital, quem precisa?
Marketing digital, quem precisa?
 
Design sem Designer: como, onde e por que o Design acontece
Design sem Designer: como, onde e por que o Design aconteceDesign sem Designer: como, onde e por que o Design acontece
Design sem Designer: como, onde e por que o Design acontece
 
Cutesquares: De Cuteland para o mundo
Cutesquares: De Cuteland para o mundoCutesquares: De Cuteland para o mundo
Cutesquares: De Cuteland para o mundo
 
Como ser um bom programador
Como ser um bom programadorComo ser um bom programador
Como ser um bom programador
 
Programando para o Google Chrome
Programando para o Google ChromeProgramando para o Google Chrome
Programando para o Google Chrome
 
E-commerce: indo além da tecnologia
E-commerce: indo além da tecnologiaE-commerce: indo além da tecnologia
E-commerce: indo além da tecnologia
 
Mídias Sociais não é só Facebook!
Mídias Sociais não é só Facebook!Mídias Sociais não é só Facebook!
Mídias Sociais não é só Facebook!
 
PicPay: uma nova forma de comprar
PicPay: uma nova forma de comprarPicPay: uma nova forma de comprar
PicPay: uma nova forma de comprar
 
Projetar pensando na experiência do usuário
Projetar pensando na experiência do usuárioProjetar pensando na experiência do usuário
Projetar pensando na experiência do usuário
 
Mobile: o que já está acontecendo e o que é futuro?
Mobile: o que já está acontecendo e o que é futuro?Mobile: o que já está acontecendo e o que é futuro?
Mobile: o que já está acontecendo e o que é futuro?
 
Angular JS, você precisa conhecer
Angular JS, você precisa conhecerAngular JS, você precisa conhecer
Angular JS, você precisa conhecer
 
Rock pigeon - do zero até o começo
Rock pigeon - do zero até o começoRock pigeon - do zero até o começo
Rock pigeon - do zero até o começo
 
Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...
Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...
Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...
 
Getting Real: conceitos para construir projetos de sucesso
Getting Real: conceitos para construir projetos de sucessoGetting Real: conceitos para construir projetos de sucesso
Getting Real: conceitos para construir projetos de sucesso
 
Desenvolvendo para windows phone, um novo paradigma
Desenvolvendo para windows phone, um novo paradigmaDesenvolvendo para windows phone, um novo paradigma
Desenvolvendo para windows phone, um novo paradigma
 
De serviço a produto com uma plataforma de e-commerce
De serviço a produto com uma plataforma de e-commerceDe serviço a produto com uma plataforma de e-commerce
De serviço a produto com uma plataforma de e-commerce
 
WebApps e Frameworks Javascript
WebApps e Frameworks JavascriptWebApps e Frameworks Javascript
WebApps e Frameworks Javascript
 
De aprendizado à utilidade pública
De aprendizado à utilidade públicaDe aprendizado à utilidade pública
De aprendizado à utilidade pública
 
Arquitetura evolutiva
Arquitetura evolutivaArquitetura evolutiva
Arquitetura evolutiva
 

Desenvolvimento Ágil com Ruby on Rails