Mais uma introdução à filosofia das comunidades Ruby e Rails, com ênfase no Ecossistema mais do que na Tecnologia.
Vídeo da 37signals: http://www.vimeo.com/6028818
Vídeo do Uncle Bob: http://www.vimeo.com/5196176
51. Blaine Cook
http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
Friday, August 7, 2009
52. Para colocar as coisas em
perspectiva, o Friendster foi
escrito em Java e eles
mudaram para PHP. MySpace
foi escrito em ColdFusion e
eles mudaram para ASP.NET.
Blaine Cook
http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
Friday, August 7, 2009
53. Para colocar as coisas em
perspectiva, o Friendster foi
escrito em Java e eles
mudaram para PHP. MySpace
foi escrito em ColdFusion e
eles mudaram para ASP.NET.
Quando as pessoas caem em
problemas de escalabilidade,
normalmente acham que a
linguagem é o problema, mas
eu acho que isso raramente
é a realidade. Blaine Cook
http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
Friday, August 7, 2009
54. “O The New York Times usou Ruby on Rails para
agregar, analizar e mostrar os resultados das
eleições em quase tempo real em um de seus
sites mais acessados de todos os tempos.”
http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1
Friday, August 7, 2009
55. “O The New York Times usou Ruby on Rails para
agregar, analizar e mostrar os resultados das
eleições em quase tempo real em um de seus
sites mais acessados de todos os tempos.”
http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1
Friday, August 7, 2009
95. Rotas RESTFul
ActionController::Routing::Routes.draw do |map|
map.resources :products
map.resources :addresses
map.resources :orders, :has_many => [:line_items]
map.namespace :admin do |admin|
admin.resources :users
admin.resources :products
end
end
Friday, August 7, 2009
96. Rotas RESTFul
ActionController::Routing::Routes.draw do |map|
map.resources :products
map.resources :addresses
map.resources :orders, :has_many => [:line_items]
map.namespace :admin do |admin|
admin.resources :users
admin.resources :products
end
end
Friday, August 7, 2009
97. Rotas RESTFul
ActionController::Routing::Routes.draw do |map|
map.resources :products
map.resources :addresses
map.resources :orders, :has_many => [:line_items]
map.namespace :admin do |admin|
admin.resources :users
admin.resources :products
end
end
Friday, August 7, 2009
98. Rotas RESTFul
ActionController::Routing::Routes.draw do |map|
map.resources :products
map.resources :addresses
map.resources :orders, :has_many => [:line_items]
map.namespace :admin do |admin|
admin.resources :users
admin.resources :products
end
end
Friday, August 7, 2009
99. Rotas RESTFul
GET /products/new
ActionController::Routing::Routes.draw do |map|
GET /products
POST /products
map.resources :products
map.resources :addresses
map.resourcesGET /products/1 => [:line_items]
:orders, :has_many
map.namespaceGET /products/1/edit
:admin do |admin|
PUT /products/1
admin.resources :users
admin.resources :products
end DESTROY /products/1
end
Friday, August 7, 2009
100. Controller
class UsersController < Spree::BaseController
resource_controller
before_filter :initialize_extension_partials
actions :all, :except => [:index, :destroy]
show.before do
@orders = Order.checkout_completed(true)
.find_all_by_user_id(current_user.id)
end
create.after { self.current_user = @user }
create.response do |wants|
wants.html { redirect_back_or_default(products_path) }
end
end
Friday, August 7, 2009
101. Controller
class UsersController < Spree::BaseController
resource_controller
before_filter :initialize_extension_partials
actions :all, :except => [:index, :destroy]
show.before do
@orders = Order.checkout_completed(true)
.find_all_by_user_id(current_user.id)
end
create.after { self.current_user = @user }
create.response do |wants|
wants.html { redirect_back_or_default(products_path) }
end
end
Friday, August 7, 2009
102. Controller
class UsersController < Spree::BaseController
resource_controller
before_filter :initialize_extension_partials
actions :all, :except => [:index, :destroy]
show.before do
@orders = Order.checkout_completed(true)
.find_all_by_user_id(current_user.id)
end
create.after { self.current_user = @user }
create.response do |wants|
wants.html { redirect_back_or_default(products_path) }
end
end
Friday, August 7, 2009
103. Controller
class UsersController < Spree::BaseController
resource_controller
before_filter :initialize_extension_partials
actions :all, :except => [:index, :destroy]
show.before do
@orders = Order.checkout_completed(true)
.find_all_by_user_id(current_user.id)
end
create.after { self.current_user = @user }
create.response do |wants|
wants.html { redirect_back_or_default(products_path) }
end
end
Friday, August 7, 2009
104. Controller
class UsersController < Spree::BaseController
resource_controller
before_filter :initialize_extension_partials
actions :all, :except => [:index, :destroy]
show.before do
@orders = Order.checkout_completed(true)
/users/1
.find_all_by_user_id(current_user.id)
end
create.after { self.current_user = @user }
create.response do |wants|
wants.html { redirect_back_or_default(products_path) }
end
end
Friday, August 7, 2009
105. Migrations
class RenameAppConfiguration < ActiveRecord::Migration
def self.up
rename_table :app_configurations, :configurations
change_table :configurations do |t|
t.string :type
end
end
def self.down
change_table :configurations do |t|
t.remove :type
end
rename_table :configurations, :app_configurations
end
end
Friday, August 7, 2009
106. Migrations
class RenameAppConfiguration < ActiveRecord::Migration
def self.up
rename_table :app_configurations, :configurations
change_table :configurations do |t|
t.string :type
end
end
def self.down
change_table :configurations do |t|
t.remove :type
end
rename_table :configurations, :app_configurations
end
end
Friday, August 7, 2009
107. Migrations
class RenameAppConfiguration < ActiveRecord::Migration
def self.up
rename_table :app_configurations, :configurations
change_table :configurations do |t|
t.string :type
end
end
def self.down
change_table :configurations do |t|
t.remove :type
end
rename_table :configurations, :app_configurations
end
end
Friday, August 7, 2009
108. Migrations
class RenameAppConfiguration < ActiveRecord::Migration
def self.up
rename_table :app_configurations, :configurations
change_table :configurations do |t|
t.string :type
end
end
def self.down
change_table :configurations do |t|
t.remove :type
end
rename_table :configurations, :app_configurations
end
end
Friday, August 7, 2009
109. Migrations
class RenameAppConfiguration < ActiveRecord::Migration
def self.up
rename_table :app_configurations, :configurations
change_table :configurations do |t|
t.string :type
end
end rake db:migrate
def self.down
change_table :configurations do |t|
t.remove :type
end
rename_table :configurations, :app_configurations
end
end
Friday, August 7, 2009
112. describe BankAccount do
before :each do
@bank_account = BankAccount.new :balance => 250
end
it "should not be valid" do
@bank_account.should be_valid
end
it "should transfer funds successfully" do
@bank_account.should_receive(:transfer)
.with_args(:amount => 100)
.and_return(true)
@bank_account.execute_transaction(:amount => 100)
@bank_account.balance.should == 150
end
end
Friday, August 7, 2009
113. describe BankAccount do
before :each do
@bank_account = BankAccount.new :balance => 250
end
it "should not be valid" do
@bank_account.should be_valid
end
it "should transfer funds successfully" do
@bank_account.should_receive(:transfer)
.with_args(:amount => 100)
.and_return(true)
@bank_account.execute_transaction(:amount => 100)
@bank_account.balance.should == 150
end
end
Friday, August 7, 2009
114. describe BankAccount do
before :each do
@bank_account = BankAccount.new :balance => 250
end
it "should not be valid" do
@bank_account.should be_valid
end
it "should transfer funds successfully" do
@bank_account.should_receive(:transfer)
.with_args(:amount => 100)
.and_return(true)
@bank_account.execute_transaction(:amount => 100)
@bank_account.balance.should == 150
end
end
Friday, August 7, 2009
115. describe BankAccount do
before :each do
@bank_account = BankAccount.new :balance => 250
end
it "should not be valid" do
@bank_account.should be_valid
end
it "should transfer funds successfully" do
@bank_account.should_receive(:transfer)
.with_args(:amount => 100)
.and_return(true)
@bank_account.execute_transaction(:amount => 100)
@bank_account.balance.should == 150
end
end
Friday, August 7, 2009
117. Funcionalidade: Adição
Para evitar erros bobos
Como um péssimo matemático
Eu quero saber como somar dois números
Cenário: Adicionar dois números
Dado que eu digitei 50 na calculadora
E que eu digitei 70 na calculadora
Quando eu aperto o botão de soma
Então o resultado na calculadora deve ser 120
Friday, August 7, 2009
118. Funcionalidade: Adição
Para evitar erros bobos
Como um péssimo matemático
Eu quero saber como somar dois números
Cenário: Adicionar dois números
Dado que eu digitei 50 na calculadora
E que eu digitei 70 na calculadora
Quando eu aperto o botão de soma
Então o resultado na calculadora deve ser 120
Friday, August 7, 2009
119. Before do
@calc = Calculadora.new
end
Dado /que eu digitei (d+) na calculadora/ do |n|
@calc.push n.to_i
end
Quando 'eu aperto o botão de soma' do
@result = @calc.soma
end
Então /o resultado na calculadora deve ser (d*)/ do |result|
@result.should == result.to_i
end
Friday, August 7, 2009
120. Before do
@calc = Calculadora.new
end
Dado /que eu digitei (d+) na calculadora/ do |n|
@calc.push n.to_i
end
Quando 'eu aperto o botão de soma' do
@result = @calc.soma
end
Então /o resultado na calculadora deve ser (d*)/ do |result|
@result.should == result.to_i
end
Friday, August 7, 2009
121. Before do
@calc = Calculadora.new
end
Dado /que eu digitei (d+) na calculadora/ do |n|
@calc.push n.to_i
end
Quando 'eu aperto o botão de soma' do
@result = @calc.soma
end
Então /o resultado na calculadora deve ser (d*)/ do |result|
@result.should == result.to_i
end
Friday, August 7, 2009
122. Before do
@calc = Calculadora.new
end
Dado /que eu digitei (d+) na calculadora/ do |n|
@calc.push n.to_i
end
Quando 'eu aperto o botão de soma' do
@result = @calc.soma
end
Então /o resultado na calculadora deve ser (d*)/ do |result|
@result.should == result.to_i
end
Friday, August 7, 2009
123. class SignupTest < ActionController::IntegrationTest
def test_trial_account_sign_up
visit home_path
click_link "Sign up"
fill_in "Email", :with => "good@example.com"
select "Free account"
click_button "Register"
end
end
Friday, August 7, 2009
136. “Eles servem mais de 23 milhões de visitantes/mês. A conversão resultou em
20 mil linhas de Ruby em vez de 125 mil linhas de Java e, mais importante,
facilitou a dificuldade que tinham em manutenção. Eles também
finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores.
Uma vez completo e otimizado, o site deles agora é mais rápido que antes.”
http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails
Friday, August 7, 2009
137. “Eles servem mais de 23 milhões de visitantes/mês. A conversão resultou em
20 mil linhas de Ruby em vez de 125 mil linhas de Java e, mais importante,
facilitou a dificuldade que tinham em manutenção. Eles também
finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores.
Uma vez completo e otimizado, o site deles agora é mais rápido que antes.”
http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails
Friday, August 7, 2009
138. “Eles servem mais de 23 milhões de visitantes/mês. A conversão resultou em
20 mil linhas de Ruby em vez de 125 mil linhas de Java e, mais importante,
facilitou a dificuldade que tinham em manutenção. Eles também
finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores.
Uma vez completo e otimizado, o site deles agora é mais rápido que antes.”
http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails
Friday, August 7, 2009
139. “Eles servem mais de 23 milhões de visitantes/mês. A conversão resultou em
20 mil linhas de Ruby em vez de 125 mil linhas de Java e, mais importante,
facilitou a dificuldade que tinham em manutenção. Eles também
finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores.
Uma vez completo e otimizado, o site deles agora é mais rápido que antes.”
http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails
Friday, August 7, 2009