Desenvolvimento
Ágil com Ruby on
Rails
terça-feira, 30 de abril de 13
Slide 2
Slide 2 text
http://bit.ly/agile-webdev-rails
terça-feira, 30 de abril de 13
Slide 3
Slide 3 text
terça-feira, 30 de abril de 13
Slide 4
Slide 4 text
terça-feira, 30 de abril de 13
Slide 5
Slide 5 text
"Programmers should
always be interested in
learning new languages,
preferably from an
unfamiliar paradigm"
"97 Things Every Programmer Should Know"
terça-feira, 30 de abril de 13
Slide 6
Slide 6 text
terça-feira, 30 de abril de 13
Slide 7
Slide 7 text
Ruby on Rails é um
framework em Ruby
terça-feira, 30 de abril de 13
Slide 8
Slide 8 text
https://www.ruby-toolbox.com/categories/web_app_frameworks
Sinatra, Padrino,
Merb, Espresso
terça-feira, 30 de abril de 13
Slide 9
Slide 9 text
Conhecendo um pouco
de Ruby
terça-feira, 30 de abril de 13
Slide 10
Slide 10 text
Ruby From Other
Languages
http://bit.ly/ruby-from-other
terça-feira, 30 de abril de 13
Slide 11
Slide 11 text
Interpretado
#app.rb
puts “Meet2Brains”
$ ruby app.rb
Meet2Brains
terça-feira, 30 de abril de 13
Slide 12
Slide 12 text
Uso de Blocos
my_list = [1,2,3,4,5]
my_list.each do |item|
# deal with item
end
terça-feira, 30 de abril de 13
Slide 13
Slide 13 text
Tudo tem valor
x = 10
y = 11
z = if x < y
1
else
2
end
z # => 1
terça-feira, 30 de abril de 13
Slide 14
Slide 14 text
Tudo é objeto
10.times{ |n| puts n }
terça-feira, 30 de abril de 13
Slide 15
Slide 15 text
Tudo é objeto
10.times{ |n| puts n }
10.class
=> Fixnum
terça-feira, 30 de abril de 13
Slide 16
Slide 16 text
Tudo é objeto
10.times{ |n| puts n }
10.class
=> Fixnum
Fixnum.class
=> Class
terça-feira, 30 de abril de 13
Slide 17
Slide 17 text
Tudo é objeto
10.times{ |n| puts n }
10.class
=> Fixnum
Fixnum.class
=> Class
Fixnum.ancestors
=> [Fixnum, Integer, Numeric,
Comparable, Object, Kernel,
BasicObject]
terça-feira, 30 de abril de 13
Slide 18
Slide 18 text
# This
1 + 2
# Is the same as this ...
1.+(2)
# Which is the same as this:
1.send "+", 2
terça-feira, 30 de abril de 13
Slide 19
Slide 19 text
# This
1 + 2
# Is the same as this ...
1.+(2)
# Which is the same as this:
1.send "+", 2
terça-feira, 30 de abril de 13
Slide 20
Slide 20 text
Metaprogramação
terça-feira, 30 de abril de 13
Slide 21
Slide 21 text
terça-feira, 30 de abril de 13
Slide 22
Slide 22 text
class Car
def inspect
“Cheap car”
end
end
terça-feira, 30 de abril de 13
Slide 23
Slide 23 text
class Car
def inspect
“Cheap car”
end
end
other_car = Car.new
other_car.inspect # => “Cheap car”
terça-feira, 30 de abril de 13
Slide 24
Slide 24 text
class Car
def inspect
“Cheap car”
end
end
other_car = Car.new
other_car.inspect # => “Cheap car”
terça-feira, 30 de abril de 13
Slide 25
Slide 25 text
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”
terça-feira, 30 de abril de 13
Slide 26
Slide 26 text
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”
terça-feira, 30 de abril de 13
Slide 27
Slide 27 text
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
terça-feira, 30 de abril de 13
Slide 28
Slide 28 text
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
terça-feira, 30 de abril de 13
Slide 29
Slide 29 text
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
terça-feira, 30 de abril de 13
Slide 30
Slide 30 text
Time.now + 2.days
# => 2013-05-01 12:40:57 -0300
#Rails
terça-feira, 30 de abril de 13
Slide 31
Slide 31 text
Time.now + 2.days
# => 2013-05-01 12:40:57 -0300
#Rails
terça-feira, 30 de abril de 13
Slide 32
Slide 32 text
terça-feira, 30 de abril de 13
Slide 33
Slide 33 text
Dica?
terça-feira, 30 de abril de 13
Slide 34
Slide 34 text
http://tryruby.org
terça-feira, 30 de abril de 13
Slide 35
Slide 35 text
RubyGems
terça-feira, 30 de abril de 13
Slide 36
Slide 36 text
Software Package
terça-feira, 30 de abril de 13
Slide 37
Slide 37 text
Autenticação
Paginação
Imagens
Tasks
Filas...
terça-feira, 30 de abril de 13
Slide 38
Slide 38 text
terça-feira, 30 de abril de 13
Slide 39
Slide 39 text
$ gem install rails
terça-feira, 30 de abril de 13
Slide 40
Slide 40 text
$ gem install rails
terça-feira, 30 de abril de 13
Slide 41
Slide 41 text
Ruby on Rails
terça-feira, 30 de abril de 13
Slide 42
Slide 42 text
Agil
terça-feira, 30 de abril de 13
Slide 43
Slide 43 text
MVC
terça-feira, 30 de abril de 13
Slide 44
Slide 44 text
Rails Philosophy
terça-feira, 30 de abril de 13
Slide 45
Slide 45 text
Don’t Repeat Yourself
(DRY)
terça-feira, 30 de abril de 13
Slide 46
Slide 46 text
Layouts, Views, Partials
terça-feira, 30 de abril de 13
Layouts, Views, Partials
# application.html.erb
<%= yield %>
Clientes
...
terça-feira, 30 de abril de 13
Slide 49
Slide 49 text
Helpers
FORMS, TAGS, HTML BLOCKS, SUPPORT,
FORMATS, ...
terça-feira, 30 de abril de 13
Slide 50
Slide 50 text
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 %>
terça-feira, 30 de abril de 13
Slide 51
Slide 51 text
Model - Scope
terça-feira, 30 de abril de 13
Slide 52
Slide 52 text
Model - Scope
@published = Post.where(published: true)
terça-feira, 30 de abril de 13
Slide 53
Slide 53 text
Model - Scope
@published = Post.where(published: true)
class Post < ActiveRecord::Base
scope :published, where(published: true)
end
terça-feira, 30 de abril de 13
Slide 54
Slide 54 text
Model - Scope
@published = Post.where(published: true)
class Post < ActiveRecord::Base
scope :published, where(published: true)
end
@published = Post.published
terça-feira, 30 de abril de 13
Slide 55
Slide 55 text
Convention over
Configuration (CoC)
terça-feira, 30 de abril de 13
Slide 56
Slide 56 text
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
Posts
<%= render @posts %>
#app/views/posts/_post.html.erb
<%= post.title %>
terça-feira, 30 de abril de 13
Slide 57
Slide 57 text
RESTful
terça-feira, 30 de abril de 13
Slide 58
Slide 58 text
resources
:photos
terça-feira, 30 de abril de 13
Slide 59
Slide 59 text
Migrations
Migrations are a convenient way for you to
alter your database in a structured and
organized manner
terça-feira, 30 de abril de 13
Slide 60
Slide 60 text
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
terça-feira, 30 de abril de 13
Slide 61
Slide 61 text
Testes
TDD, BDD
terça-feira, 30 de abril de 13
Slide 62
Slide 62 text
Extensível
Autenticação, paginação, manipulação/upload de imagens,
webservice, privilégios, pdf, csv, xml, json, filas,
monitoramento, database drivers, ...
terça-feira, 30 de abril de 13
Slide 63
Slide 63 text
Quem usa?
terça-feira, 30 de abril de 13
Slide 64
Slide 64 text
www.adena.com.br
terça-feira, 30 de abril de 13
Slide 65
Slide 65 text
http://rubyonrails.org/applications
terça-feira, 30 de abril de 13
Slide 66
Slide 66 text
Referências
http://bit.ly/ZV7NLZ
terça-feira, 30 de abril de 13