railties @ ruby mastersconf - 2011.02.26
DESCRIPTION
Railties presentation at Ruby MastersConf 2011.TRANSCRIPT
![Page 1: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/1.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILTIESOU
COMO DESENVOLVER PLUGINS/GEMS PARA RAILS
Sunday, November 6, 11
![Page 2: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/2.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
$ WHOAMI
Sunday, November 6, 11
![Page 3: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/3.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
CARLOS ANTONIO DA SILVA
@cantoniodasilva
Sunday, November 6, 11
![Page 4: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/4.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
COMECEI COM DESENVOLVIMENTO EM 2003
E COM RUBY E RAILS EM 2007
Sunday, November 6, 11
![Page 5: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/5.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
TRABALHO NA
Sunday, November 6, 11
![Page 6: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/6.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
DEVISE
Sunday, November 6, 11
![Page 7: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/7.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
SIMPLE_FORM
Sunday, November 6, 11
![Page 8: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/8.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RESPONDERS
Sunday, November 6, 11
![Page 9: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/9.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
THE ROAD SO FAR
RAILS 2.3
Sunday, November 6, 11
![Page 10: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/10.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
Já possuía a estrutura de Rails Engine.
Sunday, November 6, 11
![Page 11: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/11.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
Já possuía a estrutura de Rails Engine.
Mas...
Sunday, November 6, 11
![Page 12: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/12.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
Já possuía a estrutura de Rails Engine.
Mas... podemos dizer que era uma boa “gambiarra”.
Sunday, November 6, 11
![Page 13: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/13.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
http://thereifixedit.files.wordpress.com/2011/02/white-trash-repairs-traveling-for-kludgers.jpg
Sunday, November 6, 11
![Page 14: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/14.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
module Rails class Plugin
# Engines are plugins with an app/ directory. def engine? has_app_directory? end private
def has_app_directory? File.directory?(File.join(directory, 'app')) end endend
https://github.com/rails/rails/blob/2-3-stable/railties/lib/rails/plugin.rb
Sunday, November 6, 11
![Page 15: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/15.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
Diretórios como app/[models|controllers|helpers] e as rotas eram automaticamente carregados.
Sunday, November 6, 11
![Page 16: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/16.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
Diretórios como app/[models|controllers|helpers] e as rotas eram automaticamente carregados.
Mas eram fixos, não existia a possibilidade de nenhuma configuração de paths.
Sunday, November 6, 11
![Page 17: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/17.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3module Rails class Plugin
def view_path File.join(directory, 'app', 'views') end
def controller_path File.join(directory, 'app', 'controllers') end
def routing_file File.join(directory, 'config', 'routes.rb') end
private def app_paths [ File.join(directory, 'app', 'models'), File.join(directory, 'app', 'helpers'), controller_path, metal_path ] end endend
https://github.com/rails/rails/blob/2-3-stable/railties/lib/rails/plugin.rb
Sunday, November 6, 11
![Page 18: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/18.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
Tínhamos ORMs diferentes “integradas” ao Rails, como o Datamapper e o MongoMapper...
Sunday, November 6, 11
![Page 19: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/19.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
Tínhamos ORMs diferentes “integradas” ao Rails, como o Datamapper e o MongoMapper...
Que poderiam quebrar a cada novo patch release do Rails.
Sunday, November 6, 11
![Page 20: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/20.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
Não existia uma API pública definida para outros frameworks se integrarem.
Sunday, November 6, 11
![Page 21: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/21.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
Não existia uma API pública definida para outros frameworks se integrarem.
A solução: alias method chain / monkey patch.
Sunday, November 6, 11
![Page 22: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/22.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
http://thereifixedit.files.wordpress.com/2011/02/white-trash-repairs-you-spoiled-your-sweet-ride.jpg
Sunday, November 6, 11
![Page 23: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/23.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
O Rails sabia da existência do ActiveRecord...
Sunday, November 6, 11
![Page 24: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/24.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
O Rails sabia da existência do ActiveRecord...
Pois era ele o responsável por inicializar o ActiveRecord e os demais frameworks.
Sunday, November 6, 11
![Page 25: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/25.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
Isso quer dizer que, por mais que você estivesse utilizando o DataMapper ou MongoMapper, por
exemplo, o ActiveRecord sempre estaria lá.
Sunday, November 6, 11
![Page 26: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/26.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3module Rails class Initializer # Requires all frameworks specified by the Configuration#frameworks # list. By default, all frameworks (Active Record, Active Support, # Action Pack, Action Mailer, and Active Resource) are loaded. def require_frameworks configuration.frameworks.each { |framework| require(framework.to_s) } end
def load_observers if gems_dependencies_loaded && configuration.frameworks.include?(:active_record) ActiveRecord::Base.instantiate_observers end end
def initialize_database if configuration.frameworks.include?(:active_record) ActiveRecord::Base.configurations = configuration.database_configuration ActiveRecord::Base.establish_connection end end endend
Sunday, November 6, 11
![Page 27: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/27.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
module Rails class Configuration
private
def default_frameworks [ :active_record, :action_controller, :action_view, :action_mailer, :active_resource ] end
endend
Sunday, November 6, 11
![Page 28: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/28.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
SINGLERESPONSIBILITY
PRINCIPLE
RAILS 2.3
Sunday, November 6, 11
![Page 29: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/29.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
SINGLERESPONSIBILITY
PRINCIPLE
RAILS 2.3
Sunday, November 6, 11
![Page 30: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/30.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 2.3
Sunday, November 6, 11
![Page 31: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/31.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
NOW
RAILS 3
Sunday, November 6, 11
![Page 32: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/32.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 3
Modularidade.
API pública e bem definida.
Sunday, November 6, 11
![Page 33: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/33.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 3
HOOKS!
http://www.flickr.com/photos/ooh_food/3304708302/
Sunday, November 6, 11
![Page 34: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/34.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 3
O Rails não conhece o ActiveRecord.
Sunday, November 6, 11
![Page 35: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/35.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 3
O Rails não conhece o ActiveRecord.
O ActiveRecord é quem conta para o Rails como ele deve ser inicializado.
Sunday, November 6, 11
![Page 36: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/36.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 3
E isso acontece com todos os outros frameworks.
Sunday, November 6, 11
![Page 37: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/37.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 3
E isso acontece com todos os outros frameworks.
ActiveRecord
ActionMailer
ActionController
ActionView
ActiveResource
Sunday, November 6, 11
![Page 38: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/38.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 3
E isso acontece com todas as demais gems/plugins que se integram com o Rails.
Sunday, November 6, 11
![Page 39: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/39.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 3
E isso acontece com todas as demais gems/plugins que se integram com o Rails.
DataMapper
Devise
RSpec
Mongoid
outros...
Sunday, November 6, 11
![Page 40: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/40.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
EXEMPLO REAL???
Sunday, November 6, 11
![Page 41: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/41.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
module ActiveRecord class Railtie < Rails::Railtie config.active_record = ActiveSupport::OrderedOptions.new
config.generators.orm :active_record, :migration => true, :timestamps => true
config.app_middleware.insert_after "::ActionDispatch::Callbacks", "ActiveRecord::QueryCache"
rake_tasks do load "active_record/railties/databases.rake" end
console do ActiveRecord::Base end
initializer "active_record.logger" do ActiveSupport.on_load(:active_record) { self.logger ||= ::Rails.logger } end
config.after_initialize do ActiveSupport.on_load(:active_record) do instantiate_observers # .... end end endend
https://github.com/rails/rails/tree/3-0-stable/activerecord
Sunday, November 6, 11
![Page 42: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/42.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
SINGLERESPONSIBILITY
PRINCIPLE
RAILS 3
Sunday, November 6, 11
![Page 43: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/43.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 3
WIN!!!http://www.flickr.com/photos/simoncopping/5050597808/
Sunday, November 6, 11
![Page 44: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/44.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
Railties
WTF???
Sunday, November 6, 11
![Page 45: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/45.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
Railties
WTF???WTF???
Sunday, November 6, 11
![Page 46: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/46.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RailtiesWTF???
Sunday, November 6, 11
![Page 47: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/47.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RailtiesWTF???
Engine
Sunday, November 6, 11
![Page 48: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/48.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RailtiesWTF???
Application Engine
Sunday, November 6, 11
![Page 49: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/49.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RailtiesWTF???
Application
Initialization
Engine
Sunday, November 6, 11
![Page 50: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/50.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RailtiesWTF???
Application
Initialization
Engine
Generators
Sunday, November 6, 11
![Page 51: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/51.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RailtiesWTF???
Application
Initialization
Engine
Generators
HOOKSSunday, November 6, 11
![Page 52: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/52.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???CONFIGURAÇÃO
Sunday, November 6, 11
![Page 53: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/53.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
CONFIGURAÇÃO
https://github.com/plataformatec/responders
module Responders class Railtie < ::Rails::Railtie
config.responders = ActiveSupport::OrderedOptions.new
# Na configuração da app (application.rb): # config.responders.flash_keys = [:notice, :failure] endend
Sunday, November 6, 11
![Page 54: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/54.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???GENERATORS
Sunday, November 6, 11
![Page 55: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/55.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS
module MyGem class Railtie < ::Rails::Railtie
generators do require "my_gem/generator" end
endend
Sunday, November 6, 11
![Page 56: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/56.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS
Preciso realmente adicionar na Railtie?
Sunday, November 6, 11
![Page 57: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/57.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS
Preciso realmente adicionar na Railtie?
Não, se você seguir a convenção.
Sunday, November 6, 11
![Page 58: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/58.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS
https://github.com/plataformatec/simple_form
simple_form lib generators simple_form install_generator.rb templates simple_form.rb
rails generate simple_form:install
Sunday, November 6, 11
![Page 59: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/59.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS
https://github.com/plataformatec/simple_form
simple_form lib generators simple_form install_generator.rb templates simple_form.rb
Namespace
Generator
rails generate simple_form:install
Sunday, November 6, 11
![Page 60: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/60.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS
http://guides.rubyonrails.org/generators.html
module SimpleForm module Generators class InstallGenerator < Rails::Generators::Base desc "Copy SimpleForm default files" source_root File.expand_path('../templates', __FILE__)
def copy_initializers copy_file 'simple_form.rb', 'config/initializers/simple_form.rb' end end endend
rails generate simple_form:install
Sunday, November 6, 11
![Page 61: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/61.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS
Siga as convenções.
http://www.flickr.com/photos/jasonteale/1340004498/
Sunday, November 6, 11
![Page 62: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/62.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS
Siga as convenções.
E você será mais feliz =).
http://www.flickr.com/photos/jasonteale/1340004498/
Sunday, November 6, 11
![Page 63: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/63.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???GENERATORS - HOOKS
Sunday, November 6, 11
![Page 64: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/64.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS - ORM
https://github.com/mongoid/mongoid
module Rails module Mongoid class Railtie < Rails::Railtie
config.generators.orm :mongoid, :migration => false
end endend
Sunday, November 6, 11
![Page 65: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/65.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS - TEST FRAMEWORK
https://github.com/rspec/rspec-rails
module Rails module RSpec class Railtie < Rails::Railtie
config.generators.test_framework :rspec
end endend
Sunday, November 6, 11
![Page 66: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/66.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS - TEMPLATE ENGINE
https://github.com/nex3/haml
module Rails module Haml class Railtie < Rails::Railtie
config.generators.template_engine :haml
end endend
Sunday, November 6, 11
![Page 67: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/67.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
GENERATORS - MAIS OPÇÕES?
https://github.com/rails/rails/blob/3-0-stable/railties/lib/rails/generators.rb
:helper => true,:orm => nil,:integration_tool => nil,:performance_tool => nil,:resource_controller => :controller,:scaffold_controller => :scaffold_controller,:stylesheets => true,:test_framework => nil,:template_engine => :erb
Sunday, November 6, 11
![Page 68: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/68.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???RAKE TASKS
Sunday, November 6, 11
![Page 69: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/69.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
RAKE TASKS
module Rails module RSpec class Railtie < Rails::Railtie
rake_tasks do load "rspec/rails/tasks/rspec.rake" end
end endend
Sunday, November 6, 11
![Page 70: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/70.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???CONSOLE
Sunday, November 6, 11
![Page 71: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/71.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
CONSOLE
module ActiveRecord class Railtie < Rails::Railtie
# Forçar o carregamento do # ActiveRecord com o console. console do ActiveRecord::Base end endend
Sunday, November 6, 11
![Page 72: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/72.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
INITIALIZATION HOOKS
http://www.flickr.com/photos/mattbrett/224471090/
Sunday, November 6, 11
![Page 73: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/73.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
INITIALIZATION HOOKS
module MyGem class Railtie < Rails::Railtie
config.before_configuration { # Roda após criar a classe da Aplicação, mas # antes de rodar as configurações do usuário. }
endend
Sunday, November 6, 11
![Page 74: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/74.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
INITIALIZATION HOOKS
module MyGem class Railtie < Rails::Railtie
config.before_initialize { # Roda depois da configuração do usuário, mas # antes dos initializers. }
endend
Sunday, November 6, 11
![Page 75: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/75.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
INITIALIZATION HOOKS
module MyGem class Railtie < Rails::Railtie
config.to_prepare { # Roda antes de cada request em development, e # antes da primeira request em production. }
endend
Sunday, November 6, 11
![Page 76: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/76.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
INITIALIZATION HOOKS
module MyGem class Railtie < Rails::Railtie
config.before_eager_load { # Roda antes do Rails carregar todo o código # da aplicação. Isso só acontece com a opção # :cache_classes habilitada (production). }
endend
Sunday, November 6, 11
![Page 77: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/77.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
INITIALIZATION HOOKS
module MyGem class Railtie < Rails::Railtie
config.after_initialize { # Roda após a inicialização do Rails, # configurações do usuário e initializers, e o # próprio bloco to_prepare. É executado apenas # uma única vez, antes da primeira requisição. }
endend
Sunday, November 6, 11
![Page 78: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/78.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
Development
before_configuration=> Booting WEBrickbefore_initializeto_prepareafter_initialize[...] INFO WEBrick 1.3.1
to_prepareRequest...to_prepareRequest...to_prepare
Production (cache_classes)
before_configuration=> Booting WEBrickbefore_initializeto_preparebefore_eager_loadafter_initialize[...] INFO WEBrick 1.3.1
Request...Request...
INITIALIZATION HOOKS
Sunday, November 6, 11
![Page 79: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/79.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
Development
before_configuration=> Booting WEBrickbefore_initializeto_prepareafter_initialize[...] INFO WEBrick 1.3.1
to_prepareRequest...to_prepareRequest...to_prepare
Production (cache_classes)
before_configuration=> Booting WEBrickbefore_initializeto_preparebefore_eager_loadafter_initialize[...] INFO WEBrick 1.3.1
Request...Request...
INITIALIZATION HOOKS
Sunday, November 6, 11
![Page 80: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/80.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???INITIALIZERS
Sunday, November 6, 11
![Page 81: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/81.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
INITIALIZERS
module CarrierWave class Railtie < Rails::Railtie
# Initializers “customizados” initializer "carrierwave.setup_paths" do CarrierWave.root = Rails.root.join(Rails.public_path).to_s end
endend
https://github.com/jnicklas/carrierwave
Sunday, November 6, 11
![Page 82: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/82.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
INITIALIZERS
module MyGem class Railtie < Rails::Railtie
# Temos acesso ao objeto app para # obter as configs do usuário. initializer "my_gem.setup" do |app| # app.config end
endend
Sunday, November 6, 11
![Page 83: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/83.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???FRAMEWORK LOADING
Sunday, November 6, 11
![Page 84: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/84.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
FRAMEWORK LOADING
# Cada módulo avisa através do ActiveSupport# quando é carregado.
ActiveSupport.run_load_hooks( :active_record, ActiveRecord::Base)
Sunday, November 6, 11
![Page 85: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/85.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
FRAMEWORK LOADING
# E podemos executar código neste exato# momento, dentro do contexto do que está# sendo carregado.
ActiveSupport.on_load(:active_record) do include MyGem::ActiveRecordExtensionsend
ActiveSupport.on_load(:action_controller) do include MyGem::ActionControllerExtensionsend
Sunday, November 6, 11
![Page 86: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/86.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
E O QUE EU FAÇO COM ESSE NEGÓCIO DE
FRAMEWORK LOADING?
Sunday, November 6, 11
![Page 87: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/87.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
E O QUE EU FAÇO COM ESSE NEGÓCIO DE
FRAMEWORK LOADING?
Sunday, November 6, 11
![Page 88: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/88.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
FRAMEWORK LOADING + INITIALIZERS
module Devise class Engine < ::Rails::Engine
initializer "devise.url_helpers" do ActiveSupport.on_load(:action_controller) do include Devise::Controllers::Helpers include Devise::Controllers::UrlHelpers end end
endend
https://github.com/plataformatec/devise
Sunday, November 6, 11
![Page 89: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/89.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
FRAMEWORK LOADING
E você pode criar o seu hook.
ActiveSupport.run_load_hooks(:my_gem, MyGem)
ActiveSupport.on_load(:my_gem) do end
Sunday, November 6, 11
![Page 90: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/90.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???COMO EU CRIO UMA
RAILS::RAILTIE???
Sunday, November 6, 11
![Page 91: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/91.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
RAILS::RAILTIE => COMO?
module MyGem class Railtie < ::Rails::Railtie # Acabamos de criar nossa railtie.
endend
Sunday, November 6, 11
![Page 92: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/92.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???E QUANDO EU REALMENTE
PRECISO DE UMA RAILS::RAILTIE???
Sunday, November 6, 11
![Page 93: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/93.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
RAILS::RAILTIE => QUANDO?
• Precisar carregar generators em outro diretório;
• Precisar de rake tasks disponíveis na aplicação;• Precisar executar código ao carregar o console;
• Precisar rodar código no momento de inicialização de seu plugin/gem, como um initializer do Rails;
• Precisar extender as funcionalidades de algum dos frameworks;
Sunday, November 6, 11
![Page 94: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/94.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
EXEMPLO REAL???
Sunday, November 6, 11
![Page 95: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/95.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
module Responders class Railtie < ::Rails::Railtie config.responders = ActiveSupport::OrderedOptions.new config.generators.scaffold_controller = :responders_controller
# Add load paths straight to I18n, so engines and application can overwrite it require 'active_support/i18n' I18n.load_path << File.expand_path('../responders/locales/en.yml', __FILE__)
initializer "responders.flash_responder" do |app| if app.config.responders.flash_keys Responders::FlashResponder.flash_keys = app.config.responders.flash_keys end end endend
https://github.com/plataformatec/responders
Sunday, November 6, 11
![Page 96: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/96.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
Rails::EngineWTF???
Rails::Railtie + Paths + Autoload
Sunday, November 6, 11
![Page 97: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/97.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
app/controllersapp/helpersapp/mailersapp/modelsapp/viewsconfig/initializers/*.rbconfig/routes.rbconfig/locales/*.{rb,yml}liblib/tasks/*.rake
RAILS::ENGINE
Sunday, November 6, 11
![Page 98: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/98.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
Carrega automaticamente controllers, helpers, models, mailers e views dentro do
diretório app/.
O arquivo de rotas, initializers e locales são detectados e carregados quando em config/, seguindo a mesma estrutura da aplicação.
RAILS::ENGINE
Sunday, November 6, 11
![Page 99: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/99.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
O diretório lib é adicionado ao autoload_path do Rails.
Os arquivos lib/tasks/*.rake são automaticamente carregados, basta
seguir esta convenção.
RAILS::ENGINE
Sunday, November 6, 11
![Page 100: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/100.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
O que não é carregado automaticamente pela Engine:
migrations e assets na pasta public (javascripts, stylesheets, etc).
RAILS::ENGINE
Sunday, November 6, 11
![Page 101: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/101.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
RAILS::ENGINE
module MyGem class Engine < ::Rails::Engine
# Você pode alterar os load_paths padrão. paths.app.controllers << "lib/controllers"
endend
Sunday, November 6, 11
![Page 102: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/102.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???COMO EU CRIO UMA
RAILS::ENGINE???
Sunday, November 6, 11
![Page 103: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/103.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
RAILS::ENGINE => COMO?
module MyGem class Engine < ::Rails::Engine # Acabamos de criar nossa engine.
endend
Sunday, November 6, 11
![Page 104: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/104.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???E QUANDO EU PRECISO DE UMA
RAILS::ENGINE???
Sunday, November 6, 11
![Page 105: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/105.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
RAILS::ENGINE => QUANDO?
• Suas extensões precisarem de: rotas, controllers, views ou mailers, por exemplo.
Sunday, November 6, 11
![Page 106: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/106.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
EXEMPLO REAL???
Sunday, November 6, 11
![Page 107: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/107.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
module Devise class Engine < ::Rails::Engine config.devise = Devise
# Initialize Warden and copy its configurations. config.app_middleware.use Warden::Manager do |config| Devise.warden_config = config end
# Force routes to be loaded if we are doing any eager load. config.before_eager_load { |app| app.reload_routes! }
initializer "devise.url_helpers" do Devise.include_helpers(Devise::Controllers) end
initializer "devise.omniauth" do |app| Devise.omniauth_configs.each do |provider, config| app.middleware.use config.strategy_class, *config.args do |strategy| config.strategy = strategy end end
if Devise.omniauth_configs.any? Devise.include_helpers(Devise::OmniAuth) end end endend
https://github.com/plataformatec/devise
Sunday, November 6, 11
![Page 108: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/108.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
Rails::PluginWTF???
Rails::Engine + interno ao Rails
Sunday, November 6, 11
![Page 109: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/109.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
Engine com alguns conhecimentos extras para carregar os plugins.
RAILS::PLUGIN
Sunday, November 6, 11
![Page 110: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/110.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
Engine com alguns conhecimentos extras para carregar os plugins.
E você ganha de brinde a habilidade do Rails de carregar o arquivo
“init.rb” no diretório root do plugin.
RAILS::PLUGIN
Sunday, November 6, 11
![Page 111: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/111.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
RAILS::PLUGIN
Cada plugin em vendor/plugins é carregado pelo Rails como um Rails::Plugin.
Sunday, November 6, 11
![Page 112: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/112.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
RAILS::PLUGIN
Cada plugin em vendor/plugins é carregado pelo Rails como um Rails::Plugin.
Isto quer dizer que não é possível colocar uma Engine dentro de vendor/plugins, porque
os arquivos seriam carregados duas vezes.
Sunday, November 6, 11
![Page 113: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/113.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???COMO EU CRIO UM
RAILS::PLUGIN???
Sunday, November 6, 11
![Page 114: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/114.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
RAILS::PLUGIN => COMO?
rails plugin installrails server
Sunday, November 6, 11
![Page 115: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/115.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???E QUANDO EU PRECISO DE UM
RAILS::PLUGIN???
Sunday, November 6, 11
![Page 116: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/116.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
RAILS::PLUGIN => QUANDO?
Nunca. Lembre-se: é interno ao Rails.
Sunday, November 6, 11
![Page 117: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/117.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
Rails::ApplicationWTF???
Rails::Engine + App Bootstrap
Sunday, November 6, 11
![Page 118: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/118.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
Engine com super powers e a responsabilidade de coordenar o processo de inicialização da app.
RAILS::APPLICATION
Sunday, November 6, 11
![Page 119: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/119.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
Engine com super powers e a responsabilidade de coordenar o processo de inicialização da app.
Inicializa railties, engines e plugins.
RAILS::APPLICATION
Sunday, November 6, 11
![Page 120: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/120.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
Possui as configurações relativas a aplicação, como o “cache_classes”.
RAILS::APPLICATION
Sunday, November 6, 11
![Page 121: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/121.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
Possui as configurações relativas a aplicação, como o “cache_classes”.
Carrega e recarrega as rotas quando necessário, e constrói a estrutura de
middlewares da aplicação.
RAILS::APPLICATION
Sunday, November 6, 11
![Page 122: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/122.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
Highlander!
RAILS::APPLICATION
Sunday, November 6, 11
![Page 123: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/123.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
Highlander!
RAILS::APPLICATION
raise "You cannot have more than one Rails::Application" if Rails.application
https://github.com/rails/rails/blob/3-0-stable/railties/lib/rails/application.rb
Sunday, November 6, 11
![Page 124: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/124.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???COMO EU CRIO UMA RAILS::APPLICATION???
Sunday, November 6, 11
![Page 125: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/125.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
WTF???
RAILS::APPLICATION => COMO?
rails new my_appcd my_apprails server
Sunday, November 6, 11
![Page 126: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/126.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RESUMO
Sunday, November 6, 11
![Page 127: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/127.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
SIMPLE_FORM
Sunday, November 6, 11
![Page 128: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/128.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
SIMPLE_FORM
Não é uma Rails::Application.
Sunday, November 6, 11
![Page 129: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/129.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
SIMPLE_FORM
Não é uma Rails::Application.Não é um Rails::Plugin.
Sunday, November 6, 11
![Page 130: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/130.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
SIMPLE_FORM
Não é uma Rails::Application.Não é um Rails::Plugin.
(a não ser que seja instalado como tal)
Sunday, November 6, 11
![Page 131: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/131.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
SIMPLE_FORM
Não é uma Rails::Application.Não é um Rails::Plugin.
(a não ser que seja instalado como tal)
Não é uma Rails::Engine.
Sunday, November 6, 11
![Page 132: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/132.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
SIMPLE_FORM
Não é uma Rails::Application.Não é um Rails::Plugin.
(a não ser que seja instalado como tal)
Não é uma Rails::Engine.Não é uma Rails::Railtie.
Sunday, November 6, 11
![Page 133: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/133.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
SIMPLE_FORM
Nenhum hook é necessário, podemos apenas utilizar a
estratégia de framework loading sem precisar de uma Rails::Railtie.
Sunday, November 6, 11
![Page 134: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/134.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RESPONDERS
Sunday, November 6, 11
![Page 135: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/135.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RESPONDERS
Não é uma Rails::Application.
Sunday, November 6, 11
![Page 136: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/136.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RESPONDERS
Não é uma Rails::Application.Não é um Rails::Plugin.
Sunday, November 6, 11
![Page 137: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/137.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RESPONDERS
Não é uma Rails::Application.Não é um Rails::Plugin.
(a não ser que seja instalado como tal)
Sunday, November 6, 11
![Page 138: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/138.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RESPONDERS
Não é uma Rails::Application.Não é um Rails::Plugin.
(a não ser que seja instalado como tal)
Não é uma Rails::Engine.
Sunday, November 6, 11
![Page 139: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/139.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RESPONDERS
Não é uma Rails::Application.Não é um Rails::Plugin.
(a não ser que seja instalado como tal)
Não é uma Rails::Engine.É uma Rails::Railtie.
Sunday, November 6, 11
![Page 140: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/140.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RESPONDERS
Permite configuração através do objeto :config;Utiliza alguns hooks de inicialização;
Sobrescreve o :scaffold_generator para utilizar o seu próprio.
Sunday, November 6, 11
![Page 141: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/141.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
DEVISE
Sunday, November 6, 11
![Page 142: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/142.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
DEVISE
Não é uma Rails::Application.
Sunday, November 6, 11
![Page 143: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/143.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
DEVISE
Não é uma Rails::Application.Não é um Rails::Plugin.
Sunday, November 6, 11
![Page 144: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/144.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
DEVISE
Não é uma Rails::Application.Não é um Rails::Plugin.
(e NÃO DEVE ser instalado como tal)
Sunday, November 6, 11
![Page 145: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/145.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
DEVISE
Não é uma Rails::Application.Não é um Rails::Plugin.
(e NÃO DEVE ser instalado como tal)
É uma Rails::Engine e por consequência uma Rails::Railtie.
Sunday, November 6, 11
![Page 146: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/146.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
DEVISE
Permite configuração através do objeto :config;Utiliza alguns hooks de inicialização;
Adiciona middlewares;Possui funções similares a uma aplicação, com
controllers, helpers, mailers, views e rotas, mas não é capaz de rodar isoladamente.
Sunday, November 6, 11
![Page 147: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/147.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
CRIANDO UMA GEM
Sunday, November 6, 11
![Page 148: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/148.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLER
Sunday, November 6, 11
![Page 149: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/149.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLER
bundle gem ruby_masters
Sunday, November 6, 11
![Page 150: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/150.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLE GEM
Cria a estrutura de diretórios basica da gem.
Cria um arquivo Rakefile carregando tarefas do próprio Bundler.
Inicializa um repositório git.
Sunday, November 6, 11
![Page 151: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/151.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLE GEM
~/Projects [ree-1.8.7@rubymasters] $ bundle gem ruby_masters create ruby_masters/Gemfile create ruby_masters/Rakefile create ruby_masters/.gitignore create ruby_masters/ruby_masters.gemspec create ruby_masters/lib/ruby_masters.rb create ruby_masters/lib/ruby_masters/version.rbInitializating git repo in ~/Projects/ruby_masters
Sunday, November 6, 11
![Page 152: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/152.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLE GEM
Gemfile
source "http://rubygems.org"
# Specify your gem's dependencies in ruby_masters.gemspecgemspec
Sunday, November 6, 11
![Page 153: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/153.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLE GEM
Rakefile
require 'bundler'Bundler::GemHelper.install_tasks
Sunday, November 6, 11
![Page 154: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/154.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLE GEM
# -*- encoding: utf-8 -*-$:.push File.expand_path("../lib", __FILE__)require "ruby_masters/version"
Gem::Specification.new do |s| s.name = "ruby_masters" s.version = RubyMasters::VERSION s.platform = Gem::Platform::RUBY s.authors = ["TODO: Write your name"] s.email = ["TODO: Write your email address"] s.homepage = "" s.summary = %q{TODO: Write a gem summary} s.description = %q{TODO: Write a gem description}
s.rubyforge_project = "ruby_masters" # ... continuaend
ruby_masters.gemspec
Sunday, November 6, 11
![Page 155: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/155.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLE GEM
lib/ruby_masters.rb
module RubyMasters # Your code goes here...end
Sunday, November 6, 11
![Page 156: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/156.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLE GEM
lib/ruby_masters/version.rb
module RubyMasters VERSION = "0.0.1"end
Sunday, November 6, 11
![Page 157: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/157.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLE GEM
rake tasks
~/Projects/ruby_masters [ree-1.8.7@rubymasters] $ rake -Trake build # Build ruby_masters-0.0.1.gem into the pkg directoryrake install # Build and install ruby_masters-0.0.1.gem into system gemsrake release # Create tag v0.0.1 and build and push ruby_masters-0.0.1.gem to Rubygems
Sunday, November 6, 11
![Page 158: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/158.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILTIE?
Sunday, November 6, 11
![Page 159: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/159.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLE GEM + RAILTIE
lib/ruby_masters.rb
module RubyMasters class Railtie < Rails::Railtie # config.ruby_masters = ActiveSupport::OrderedOptions.new # rake_tasks {} # generators {} # console {} # config.to_prepare {} # initializer {} endend
Sunday, November 6, 11
![Page 160: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/160.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLE GEM + RAILTIE
Ou
Sunday, November 6, 11
![Page 161: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/161.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLE GEM + RAILTIE
lib/ruby_masters/railtie.rb
module RubyMasters class Railtie < Rails::Railtie # config.ruby_masters = ActiveSupport::OrderedOptions.new # rake_tasks {} # generators {} # console {} # config.to_prepare {} # initializer {} endend
lib/ruby_masters.rb
require "ruby_masters/railtie"
module RubyMasters # Your code goes here...end
Sunday, November 6, 11
![Page 162: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/162.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
BUNDLER <3
Sunday, November 6, 11
![Page 163: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/163.jpg)
Carlos Antonio @cantoniodasilvablog.plataformatec.com.br
RAILS 3
Sunday, November 6, 11
![Page 164: railties @ ruby mastersconf - 2011.02.26](https://reader038.vdocuments.net/reader038/viewer/2022110115/54b54bb24a7959cd6c8b464f/html5/thumbnails/164.jpg)
@cantoniodasilva
blog.plataformatec.com.br
Obrigado!
?!
Sunday, November 6, 11