2. Introdução ao Ruby on Rails > Palestrante
Juan Maiz Lulkin Flores da Cunha
WWR person/9354
vice-campeão mundial de
defender of the favicon
3. Introdução ao Ruby on Rails > História
História
David Heinemeier Hanson (DHH)
Martin Fowler
37Signals
4. Introdução ao Ruby on Rails > Ruby on Rails
Ruby on Rails
Ruby
Model View Controller
Princípios
Comunidade
And so much more
5. Introdução ao Ruby on Rails > Ruby on Rails > Ruby
Ruby
Smalltalk
elegância conceitual
Python
facilidade de uso
Perl
pragmatismo
6. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Smalltalk
Smalltalk
1 + 1
=> 2
1.+(1)
=> 2
1.send('+',1)
=> 2
7. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Python
Python
for 1 in 1..10
puts i
end
1
2
3
4
5
6
8. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Perl
Perl
ls = %w{smalltalk python perl}
=> ["smalltalk", "python", "perl"]
ls.map{|l| “Ruby é como #{l}. ” }.join
=> “Ruby é como smalltalk. Ruby é como
python. Ruby é como perl.
9. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Hello
Ruby
5.times{ p “ybuR olleH”.reverse }
"Hello Ruby"
"Hello Ruby"
"Hello Ruby"
"Hello Ruby"
"Hello Ruby"
=> 5
10. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Conceitos
Ruby
Totalmente OO
Mixins (toma essa!)
Classes “abertas”
Blocos
Bibliotecas
11. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Conceitos > Totalmente OO
Totalmente OO
42.class
=> Fixnum
Fixnum.class
=> Class
12. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Conceitos > Mixins (toma essa!)
Mixins (toma essa!)
module Cool
def is_cool!
“#{self} is cool!”
end
end
13. Introdução ao Ruby on Rails > Ruby on Rails > Ruby > Conceitos > Classes “abertas”
Classes “abertas”
class String
include Cool
end
puts “Ruby”.is_cool!
Ruby is cool!
16. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller
Model View Controller
Model
dados e lógica de domínio
View
interface
Controller
caminhos e distribuição
17. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model
Model
ActiveRecord
Migrações
Operações básicas
Relações
Validações
Acts as
Named scopes
Adicionar métodos
18. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Migrações
Migrações
class CreateEvents < ActiveRecord::Migration
def self.up
create_table :events do |t|
t.string :name, :null => false
t.boolean :active, :default => true
t.integer :year, :null => false
t.timestamps
end
end
end
19. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Operações básicas
Operações básicas
Insert
Event.create :name => 'RS on Rails',
:year => Date.today.year
e = Event.new
e.name = 'RS on Rails'
e.year = 2009
e.save
20. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Operações básicas
Operações básicas
Select
Event.all :conditions => 'active',
:order => 'created_at',
:limit => 10
e = Event.first
e = Event.find 1
e = Event.find_by_name 'RS on Rails'
e = Event.find_by_year 2009
21. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Operações básicas
Operações básicas
Update
Event.update_all 'active = true'
e = Event.first
e.name = 'other name'
e.save
e.update_attribute :active => false
e.toggle! :active
22. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Operações básicas
Operações básicas
Delete
Event.delete_all
e = Event.first
e.destroy
23. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Relações
Relações
class Event < ActiveRecord::Base
has_many :talks
end
class Talk < ActiveRecord::Base
belongs_to :event
has_one :speaker
end
24. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Relações
Relações
rsr = Event.find_by_name('rsrails')
talk = rsr.talks.first
talk.name
=> “Introdução ao Ruby on Rails”
talk.speaker.name
=> “Juan Maiz Lulkin”
25. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Validações
Validações
class Event < ActiveRecord::Base
validates_presence_of :name, :year
validates_numericality_of :year
validates_inclusion_of :year,
:in => 2009..2099
validates_length_of :name,
:minimum => 4
validates_format_of :name,
:with => /[A-Z]d+/
end
26. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Acts as
Acts As
class Category < ActiveRecord::Base
acts_as_tree
enb
Category.find(10).parent
Category.find(20).children
27. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Acts as
Acts As
class Doc < ActiveRecord::Base
acts_as_versioned
end
doc = Doc.create :name = '1 st name'
doc.version
=> 1
doc.update_attribute :name, '2 nd name'
doc.version
=> 2
doc.revert_to(1)
doc.name
=> 1 st name
28. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Named scopes
Named scopes
class Product < ActiveRecord::Base
named_scope :top, :order => 'rank desc'
named_scope :ten, :limit => 10
named_scope :between, lambda{|min,max|
{:conditions => [“price between ? and ?”, min, max]}}
end
Product.between(0,100).top.ten
29. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Model > Adicionar métodos
Adicionar métodos
class Product < ActiveRecord::Base
def +(product)
price + product.price
end
end
foo = Product.find(1)
bar = Product.find(2)
foo + bar
30. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Controller
Controller
URL: http://seusite.com/events/rsrails
class EventsController < ApplicationController
def show
name = params[:id]
@event = Event.find_by_name(name)
end
end
31. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > View
View
app/views/events/show.html.haml
#content
%h1 Palestras
%ul
- for talk in @event.talks
%li= talk.title
* Você está usando HAML, não?
32. Introdução ao Ruby on Rails > Ruby on Rails > Princípios
Princípios
Convention Over Configuration
Se é usado na maior parte dos
casos, deve ser o padrão.
Don't Repeat Yourself
Mixins, plugins, engines, gems...
Métodos ágeis
BDD, TDD, integração contínua,
deployment...
33. Introdução ao Ruby on Rails > Ruby on Rails > Princípios > CoC
Convention Over Configuration
XML YAML
development:
adapter: postgresql
encoding: unicode
database: events_development
pool: 5
username: event_admin
password: *****
34. Introdução ao Ruby on Rails > Ruby on Rails > Princípios > CoC
Convention Over Configuration
rsrails = Event.find(1)
=> assume campo “id” na tabela “events”
rsrails.talks
=> assume uma tabela “talks” com um
fk “event_id”
rsrails.talks.first.speaker
=> assume campo “speaker_id” em “talks”
como fk para tabela “speakers”
35. Introdução ao Ruby on Rails > Ruby on Rails > Princípios > CoC
Convention Over Configuration
script/generate scaffold Event
name:string
year:integer
active:boolean
37. Introdução ao Ruby on Rails > Ruby on Rails > Princípios > Métodos ágeis
Métodos ágeis
class EventTest < ActiveSupport::TestCase
test "creation" do
assert Event.create :name => 'rsrails',
:year => 2009
end
end
38. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Princípios > Métodos ágeis
Métodos ágeis
rake integrate
cap deploy
39. Introdução ao Ruby on Rails > Ruby on Rails > Model View Controller > Princípios > Métodos ágeis
Métodos ágeis
Getting Real
http://gettingreal.37signals.com/
40. Introdução ao Ruby on Rails > Ruby on Rails > Comunidade
Comunidade
Lista rails-br
Ruby Inside (.com e .com.br)
Working With Rails
41. Introdução ao Ruby on Rails > Ruby on Rails > And so much more
And so much more
Internacionalização (i18n)
Rotas
Cache
Ajax
Background Jobs
...