SlideShare une entreprise Scribd logo
1  sur  40
Yet Another Ruby Framework
Como o Rails funciona por dentro
                             por Carlos Brando
http://www.nomedojogo.com/
http://www.rubyinside.com.br/
Yet Another Ruby Framework
Como o Rails funciona por dentro
                             por Carlos Brando
Ruby on Rails não é uma
linguagem de programação
Paradigma MVC
Framework Web
   Basecamp
Ruby on Rails é um
   framework
Rails não serve para tudo!
XML + JS
Sociably
Arquitetura
Push-based
MVC
Pull-based
require "rack"

options = {
  :Port          =>   3000,
  :Host          =>   "0.0.0.0",
  :environment   =>   (ENV['SOCIABLY_ENV'] || "development").dup,
  :config        =>   SOCIABLY_ROOT + "/config.ru",
  :detach        =>   false,
  :debugger      =>   false,
  :path          =>   nil
}

# ...

begin
  server = Rack::Handler::Mongrel
rescue LoadError => e
  server = Rack::Handler::WEBrick
end

# ..

server.run(ApplicationController, options.merge(:AccessLog => []))




ruby script/server
Banco de Dados
ORM
Mapeamento objeto-relacional
config.database_library = :datamapper




  init.rb ou environment.rb
def initialize_database
  case Sociably.configuration.database_library
  when :datamapper
    require 'datamapper'
    DataMapper.setup(:default, database_options[SOCIABLY_ENV])
  when :activerecord
    # ...
  end
end




             initializer.rb
Geradores de código
Templates
ERB vs. Haml
Haml
          #profile
            .left.column
              #date= print_date
              #address= current_user.address
            .right.column
              #email= current_user.email
              #bio= current_user.bio




                    ERB
<div id="profile">
  <div class="left column">
    <div id="date"><%= print_date %></div>
    <div id="address"><%= current_user.address %></div>
  </div>
  <div class="right column">
    <div id="email"><%= current_user.email %></div>
    <div id="bio"><%= current_user.bio %></div>
  </div>
</div>
<p>
                Olá, <%= evento %>!
              </p>

require "erb"
erb = <<END                 _erbout = ''
  <p>
    Olá, <%= evento %>!     _erbout.concat "   <p>n"
  </p>                      _erbout.concat "     Ol303241, "
END
                            _erbout.concat(( evento ).to_s)
def evento
  "Rails Summit"            _erbout.concat "!n"
end                         _erbout.concat " </p>n"

instance = ::ERB.new(erb)   _erbout
puts instance.src
require "erb"
erb = <<END                 _erbout = ''
  <p>
    Olá, <%= evento %>!     _erbout.concat "   <p>n"
  </p>                      _erbout.concat "     Ol303241, "
END
                            _erbout.concat(( evento ).to_s)
def evento
  "Rails Summit"            _erbout.concat "!n"
end                         _erbout.concat " </p>n"

instance = ::ERB.new(erb)   _erbout
puts instance.src




eval(instance.src, binding)
<p>
       Olá, Rails Summit!
     </p>




eval(instance.src, binding)
Demo
@carlosbrando

www.nomedojogo.com

Contenu connexe

Tendances

Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Webgoal
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineOtávio Calaça Xavier
 
JS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na PráticaJS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na PráticaiMasters
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
Atualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xAtualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xRodrigo Urubatan
 
Ruby para programadores java
Ruby para programadores javaRuby para programadores java
Ruby para programadores javaRodrigo Urubatan
 
Zabbix monitorando o zimbra collaboration 8.8 (1)
Zabbix   monitorando o zimbra collaboration 8.8 (1)Zabbix   monitorando o zimbra collaboration 8.8 (1)
Zabbix monitorando o zimbra collaboration 8.8 (1)PAULO R. DEOLINDO JUNIOR
 
Docker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHONDocker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHONIago Machado
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 

Tendances (20)

Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho
 
Plack
PlackPlack
Plack
 
Php
PhpPhp
Php
 
Api usando Silex
Api usando SilexApi usando Silex
Api usando Silex
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
PHP 7
PHP 7PHP 7
PHP 7
 
Redis na Prática
Redis na PráticaRedis na Prática
Redis na Prática
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
JS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na PráticaJS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na Prática
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Atualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.xAtualizando rails do 2.x para 3.x
Atualizando rails do 2.x para 3.x
 
Ruby para programadores java
Ruby para programadores javaRuby para programadores java
Ruby para programadores java
 
Zabbix monitorando o zimbra collaboration 8.8 (1)
Zabbix   monitorando o zimbra collaboration 8.8 (1)Zabbix   monitorando o zimbra collaboration 8.8 (1)
Zabbix monitorando o zimbra collaboration 8.8 (1)
 
Docker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHONDocker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHON
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Silex 101
Silex 101Silex 101
Silex 101
 
Apresentacao TCC - Rafael Felix
Apresentacao TCC - Rafael FelixApresentacao TCC - Rafael Felix
Apresentacao TCC - Rafael Felix
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
 

En vedette (6)

An Entire Statewide University System Goes Virtual
An Entire Statewide University System Goes VirtualAn Entire Statewide University System Goes Virtual
An Entire Statewide University System Goes Virtual
 
The Sony Reader: eInk Has Arrived
The Sony Reader: eInk Has ArrivedThe Sony Reader: eInk Has Arrived
The Sony Reader: eInk Has Arrived
 
Teaching Methods
Teaching MethodsTeaching Methods
Teaching Methods
 
Let It Snow! Let It Snow! Let It Snow!.
Let It Snow! Let It Snow! Let It Snow!.Let It Snow! Let It Snow! Let It Snow!.
Let It Snow! Let It Snow! Let It Snow!.
 
2015 National Horizon 2020 SC5 Information Day Programme
2015 National Horizon 2020 SC5 Information Day Programme2015 National Horizon 2020 SC5 Information Day Programme
2015 National Horizon 2020 SC5 Information Day Programme
 
Modelling the costs and benefits of clean air policy scenarios for residentia...
Modelling the costs and benefits of clean air policy scenarios for residentia...Modelling the costs and benefits of clean air policy scenarios for residentia...
Modelling the costs and benefits of clean air policy scenarios for residentia...
 

Similaire à Yet Another Ruby Framework - Como o Rails funciona por dentro

Desenvolvimento Mobile com Ruby
Desenvolvimento Mobile com RubyDesenvolvimento Mobile com Ruby
Desenvolvimento Mobile com RubyRodrigo Martins
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.jsGiovanni Bassi
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
Workshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + MongooseWorkshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + MongooseLuiz Duarte
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoIvan Rosolen
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojscodebits
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on RailsWhitesmith
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009Caue Guerra
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheirasLambda 3
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.Rogério Napoleão Jr.
 

Similaire à Yet Another Ruby Framework - Como o Rails funciona por dentro (20)

Desenvolvimento Mobile com Ruby
Desenvolvimento Mobile com RubyDesenvolvimento Mobile com Ruby
Desenvolvimento Mobile com Ruby
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
Workshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + MongooseWorkshop Node.js + MongoDB + Mongoose
Workshop Node.js + MongoDB + Mongoose
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direito
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojs
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on Rails
 
Python cherrypy
Python cherrypyPython cherrypy
Python cherrypy
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
jsp-intro
jsp-introjsp-intro
jsp-intro
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheiras
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 

Plus de Carlos Brando

Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3Carlos Brando
 
Criando uma carreira notável em desenvolvimento de software
Criando uma carreira notável em desenvolvimento de softwareCriando uma carreira notável em desenvolvimento de software
Criando uma carreira notável em desenvolvimento de softwareCarlos Brando
 
A ciência por trás do Ruby
A ciência por trás do RubyA ciência por trás do Ruby
A ciência por trás do RubyCarlos Brando
 
Como Ruby on Rails pode o tornar um programador pior
Como Ruby on Rails pode o tornar um programador piorComo Ruby on Rails pode o tornar um programador pior
Como Ruby on Rails pode o tornar um programador piorCarlos Brando
 
Só Os Imaturos NãO Testam
Só Os Imaturos NãO TestamSó Os Imaturos NãO Testam
Só Os Imaturos NãO TestamCarlos Brando
 

Plus de Carlos Brando (6)

Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3
 
Criando uma carreira notável em desenvolvimento de software
Criando uma carreira notável em desenvolvimento de softwareCriando uma carreira notável em desenvolvimento de software
Criando uma carreira notável em desenvolvimento de software
 
A ciência por trás do Ruby
A ciência por trás do RubyA ciência por trás do Ruby
A ciência por trás do Ruby
 
Eu odeio OpenSocial
Eu odeio OpenSocialEu odeio OpenSocial
Eu odeio OpenSocial
 
Como Ruby on Rails pode o tornar um programador pior
Como Ruby on Rails pode o tornar um programador piorComo Ruby on Rails pode o tornar um programador pior
Como Ruby on Rails pode o tornar um programador pior
 
Só Os Imaturos NãO Testam
Só Os Imaturos NãO TestamSó Os Imaturos NãO Testam
Só Os Imaturos NãO Testam
 

Yet Another Ruby Framework - Como o Rails funciona por dentro

  • 1. Yet Another Ruby Framework Como o Rails funciona por dentro por Carlos Brando
  • 4. Yet Another Ruby Framework Como o Rails funciona por dentro por Carlos Brando
  • 5. Ruby on Rails não é uma linguagem de programação
  • 7. Ruby on Rails é um framework
  • 8.
  • 9.
  • 10. Rails não serve para tudo!
  • 11.
  • 12.
  • 13.
  • 15.
  • 16.
  • 18.
  • 21. MVC
  • 23.
  • 24.
  • 25. require "rack" options = { :Port => 3000, :Host => "0.0.0.0", :environment => (ENV['SOCIABLY_ENV'] || "development").dup, :config => SOCIABLY_ROOT + "/config.ru", :detach => false, :debugger => false, :path => nil } # ... begin server = Rack::Handler::Mongrel rescue LoadError => e server = Rack::Handler::WEBrick end # .. server.run(ApplicationController, options.merge(:AccessLog => [])) ruby script/server
  • 28. config.database_library = :datamapper init.rb ou environment.rb def initialize_database case Sociably.configuration.database_library when :datamapper require 'datamapper' DataMapper.setup(:default, database_options[SOCIABLY_ENV]) when :activerecord # ... end end initializer.rb
  • 30.
  • 31.
  • 34. Haml #profile .left.column #date= print_date #address= current_user.address .right.column #email= current_user.email #bio= current_user.bio ERB <div id="profile"> <div class="left column"> <div id="date"><%= print_date %></div> <div id="address"><%= current_user.address %></div> </div> <div class="right column"> <div id="email"><%= current_user.email %></div> <div id="bio"><%= current_user.bio %></div> </div> </div>
  • 35. <p> Olá, <%= evento %>! </p> require "erb" erb = <<END _erbout = '' <p> Olá, <%= evento %>! _erbout.concat " <p>n" </p> _erbout.concat " Ol303241, " END _erbout.concat(( evento ).to_s) def evento "Rails Summit" _erbout.concat "!n" end _erbout.concat " </p>n" instance = ::ERB.new(erb) _erbout puts instance.src
  • 36. require "erb" erb = <<END _erbout = '' <p> Olá, <%= evento %>! _erbout.concat " <p>n" </p> _erbout.concat " Ol303241, " END _erbout.concat(( evento ).to_s) def evento "Rails Summit" _erbout.concat "!n" end _erbout.concat " </p>n" instance = ::ERB.new(erb) _erbout puts instance.src eval(instance.src, binding)
  • 37. <p> Olá, Rails Summit! </p> eval(instance.src, binding)
  • 38. Demo
  • 39.