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

Yet Another Ruby Framework - Como o Rails funciona por dentro

  • 1.
    Yet Another RubyFramework Como o Rails funciona por dentro por Carlos Brando
  • 2.
  • 3.
  • 4.
    Yet Another RubyFramework Como o Rails funciona por dentro por Carlos Brando
  • 5.
    Ruby on Railsnão é uma linguagem de programação
  • 6.
  • 7.
    Ruby on Railsé um framework
  • 10.
    Rails não servepara tudo!
  • 14.
  • 17.
  • 19.
  • 20.
  • 21.
  • 22.
  • 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
  • 26.
  • 27.
  • 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
  • 29.
  • 32.
  • 33.
  • 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.
  • 40.