FILOSOFIA RUBY E RAILS
@danielvlopes
areacriacoes.com.br
software + design




           areacriacoes.com.br
cifrascash.com
egenial.com.br/cursos
egenial.com.br/cursos
egenial.com.br/cursos
ENG. DE SOFTWARE
CENTRADA EM MÉTODOS ÁGEIS
      http://bit.ly/unapos
SLIDESHARE.NET/DANIELVLOPES
FILOSOFIA RUBY E RAILS
•   Código

•   Cultura

•   Criatividade
POR QUE ME INTERESSA?
... um aclamado instrutor aplicando um curso descobriu
     que um de seus pupilos era um venture capitalist.
Quando questionado sobre o motivo de estar em uma
turma de “Ruby on Rails” ... , ele respondeu simplesmente:
todas as start-ups que me procuram estão usando,
     eu quero descobrir qual é o “grande lance”.




                           Mark Gardner http://bit.ly/railsecosystem
Investidores estão pressionando startups para usarem Ruby.
"É mais rápido, então se você pode encurtar a entrega em um
                mês, porque não usar Ruby?"




                            Matz Ruby World Keynote http://bit.ly/bH4hA2
Investidores estão pressionando startups para usarem Ruby.
"É mais rápido, então se você pode encurtar a entrega em um
                mês, porque não usar Ruby?"



             Mais de 60% dos VCs usam Ruby
                 para criar seus sistemas




                            Matz Ruby World Keynote http://bit.ly/bH4hA2
POR QUE STARTUPS?
VOCÊ DEVE SE
COMPORTAR COMO
  UMA STARTUP
Yukihiro Matsumoto
 (criador do Ruby)
“Se você terminar seu trabalho
rápido e de forma divertida, isso
          não é bom?”



                 Matz http://www.artima.com/intv/ruby3.html
“Tornar as coisas simples fáceis e as
   coisas complexas possíveis”
•   100% orientada a objetos

•   Linguagem dinâmica

•   Esperados 4 milhões até 2013

•   FREE e Open Source

•   As vezes chamada de “scripting” language
Eu inventei o termo
“Orientação a
Objetos” e posso
dizer que não era C++
que eu tinha em
mente.
Dave Thomas
Dave Thomas   2001
2004
“Eu sempre soube que Smalltalk substituiria
Java. Só não sabia que isso se chamaria Ruby.”




                   Kent Beck, Criador do "Extreme Programming" e "TDD"
FICAMOS EMPOLGADOS !!!
Vídeo Java VS Rails
JRuby
Charles Nutter
JRuby
         Charles Nutter




MacRuby
L. Sansonetti
JQuery/Rails             JRuby
 Yehuda Katz            Charles Nutter




               MacRuby
               L. Sansonetti
Ruby   1.8.7
Ruby   1.8.7
Ruby   1.9.2
JRuby   1.5.X
JRuby     1.5.X
Rubinius    1.1
JRuby     1.5.X
Rubinius    1.1
Mac Ruby    0.6
JRuby      1.5.X
Rubinius     1.1
Mac Ruby     0.6
Iron Ruby    1.0
RUBY NA WEB
RUBY ON RAILS
JASON FRIED
DAVID
HANSSON
DHH
DHH




      2004
Vídeo 37Signals
código gerando código
código gerando código

convention over configuration
código gerando código

convention over configuration

    don’t repeat your self
código gerando código

convention over configuration

    don’t repeat your self

    desenvolvimento ágil
EXTREME PROGRAMMING
recursos restful
recursos restful


Unicode, TimeZone, i18n
recursos restful


Unicode, TimeZone, i18n


      Segurança
 (XSS, XSRF, Injection)
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
class Post < ActiveRecord::Base
  # ASSOCIATIONS
                                                                           model
  has_and_belongs_to_many :categories
  belongs_to :author
  has_many :comments, :dependent => :destroy

  # VALIDATIONS
  validates_presence_of     :title, :body, :author, :slug, :published_at
  validates_uniqueness_of   :slug
  validates_inclusion_of    :draft, :in => [true, false]
  validates_associated      :author

  # SCOPES (custom queries)
  default_scope :order => 'published_at DESC'
  scope :published, lambda { where(:draft => false) }

  # CALLBACKS
  before_validation :generate_slug

protected
  def generate_slug
    self.slug = title unless slug.present?
    self.slug = slug.parameterize
  end
end
views
<%= form_for [ post, comment ], :remote => true do |f| %>
  <%= error_messages_for comment %>

  <div class="field">
    <%= f.label :author %><br />
    <%= f.text_field :author %>
  </div>

  <div class="field">
    <%= f.label :url %><br />
    <%= f.text_field :url %>
  </div>

  <div class="field">
    <%= f.label :body %><br />
    <%= f.text_area :body, :rows => 10, :cols => 90 %>
  </div>

  <%= render "submit_or_cancel" %>
<% end %>
class Admin::PostCategoriesController < ApplicationController
  def index
    @categories = PostCategory.all
                                                                              controller
    respond_with @categories
  end

  def show
    @category = PostCategory.find(params[:id])
    respond_with @category
  end

  def new
    @category = PostCategory.new
    respond_with @category
  end

  def edit
    @category = PostCategory.find(params[:id])
  end

  def create
    @category = PostCategory.new(params[:post_category])
    flash[:notice] = 'Category was successfully created.' if @category.save
    respond_with @category
  end

  def update
  end

  def destroy
  end
end
CLEAN CODE
190
VS

40
Eles servem mais de 23 milhões de visitantes/mês.
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
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
    mais importante, facilitou a dificuldade que
            tinham em manutenção.
A conversão resultou em 20 mil linhas de Ruby
      em vez de 125 mil linhas de Java
 mais importante, facilitou a dificuldade que
         tinham em manutenção.
  Eles finalizaram a reescrita do sistema em
  apenas 3 meses com 4 desenvolvedores.
mais importante, facilitou a dificuldade que
        tinham em manutenção.
 Eles 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
ECOSSISTEMA
Repositórios            Github e Codebase



Integração Contínua   Hudson, Cruise, CI Joe


                              Chef, Puppet,
Deploy
                                Capistrano

                           NewRelic, Scout,
Monitoramento
                            BackupMyApp
Repositórios            Github e Codebase



Integração Contínua   Hudson, Cruise, CI Joe


                              Chef, Puppet,
Deploy
                                Capistrano

                           NewRelic, Scout,
Monitoramento
                            BackupMyApp
Repositórios            Github e Codebase



Integração Contínua   Hudson, Cruise, CI Joe


                              Chef, Puppet,
Deploy
                                Capistrano

                           NewRelic, Scout,
Monitoramento
                            BackupMyApp
Repositórios            Github e Codebase



Integração Contínua   Hudson, Cruise, CI Joe


                              Chef, Puppet,
Deploy
                                Capistrano

                           NewRelic, Scout,
Monitoramento
                            BackupMyApp
source 'http://rubygems.org'                    Gemfile
gem   'rails', '3.0.0.rc'
gem   'devise', '1.1.1'
gem   'paperclip', '2.3.3'
gem   'menu_builder', '0.3.3'
gem   'RedCloth', '4.2.3'
gem   'will_paginate', '3.0.pre2'
gem   'reverse_captcha', '0.0.1'
gem   'capistrano', '2.5.19'
gem   'mysql', '2.8.1'

group   :development do
  gem   'sqlite3-ruby', :require => 'sqlite3'
  gem   "rspec", ">=2.0.0.beta.11"
  gem   "rspec-rails", ">=2.0.0.beta.11"
  gem   "ruby-debug"
end

group   :test do
  gem   'capybara'
  gem   'database_cleaner'
  gem   'steak', '>= 0.4.0.beta.1'
  gem   'factory_girl_rails'
end
COMO ACHAR ?
DEPLOY
set :application, "producer"
set :ip_address , "208.88.125.20"
                                                              deploy.rb
# GIT SETTINGS
set :scm, :git
set :repository, "git@github.com:danielvlopes/producer.git"
set :branch, "master"
set :deploy_via, :remote_cache

# SSH SETTINGS
set :user , "rails"
set :deploy_to, "/home/rails/#{application}"
set :shared_directory, "#{deploy_to}/shared"
set :use_sudo, false
set :group_writable, false
default_run_options[:pty] = true

# ROLES
role :app, ip_address
role :web, ip_address
role :db, ip_address, :primary => true

# HOOKS
after 'deploy:setup', 'db:setup'

after 'deploy:update_code' do
  db.symlink
  assets.symlink
end
TESTES
RSpec Steak
 Cucumber        Test::Unit
Minitest     Bacon   Should
 Factory Girl    Fabrication
 Machinist      Mocha    RR
Cucumber
Feature: Authenticate
  In order to see my previous links
  As a user
  I want to be able to create an account

  Scenario: Creating a new account
    Given I am not authenticated
    When I go to register
    And I fill in the following:
      | Email                 | testing@man.net |
      | Password              | 123456          |
      | Password confirmation | 123456          |
    And I press "Sign up"
    Then I should see "You have signed up successfully"




       http://github.com/danielvlopes/buggy/blob/master/features/authenticate.feature
feature "Catalog", %q{                                       Steak
  In order to display a catalog in devices
  As registered publisher
  I want to manage a catalog.
} do

  background do
    ensure_not_logged_in
    @owner = Factory :app, :name => "1Password"
  end

  scenario "Create catalog for 1Password", :js => true do
    visit new_catalog_page_for(@owner)

    select "shelf/metal", :from => "Theme"
    fill_in "Title",      :with => "Appextras"

    drag_to_catalog available_app
    click "Create Catalog"

    should_have_notice "Catalog was successfully created."
  end
describe Guest
  before do
                 do
                                                                       Minispec
    @room    =   Room.new("Room 35", Type::Master.new)
    @hosting =   Hosting.new(@room, 5)
    @guest   =   Guest.new("Daniel Lopes", @hosting)
  end

  it "should have a name" do
    assert_equal "Daniel Lopes", @guest.name
  end

  describe "when print the invoice" do
    it "should have the guest name" do
      assert_match /Daniel Lopes/, @guest.invoice
    end

    it "should have the room name" do
      assert_match /Room 35/, @guest.invoice
    end

    it "should have the total amount" do
      assert_match /Valor total: 1000/, @guest.invoice
    end

    it "should have the discount points earned with that hosting" do
      assert_match /Você ganhou 6 ponto(s)/, @guest.invoice
    end
  end
end
COMUNIDADE
guides.rubyonrails.org
peepcode.com
railscasts.com
akitaonrails.com
egenial.com.br/cursos
github.com
MITOS
Ruby é Lento
http://programmingzen.com/?s=benchmark
slideshare.net
Home 331 ms
   Total 5.45 ms
http://railsmg.org/meetings/1
Rails NÃO ESCALA
Friendster foi escrito em Java e
mudaram para PHP.

MySpace foi escrito em ColdFusion e
mudaram 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.


http://www.akitaonrails.com/2008/6/17/chatting-with-
blaine-cook-twitter
“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
RAILS é a SALVAÇÃO
VAMOS SER AGILE
http://www.vimeo.com/1752667
Recapitulando
entregue rápido
entregue rápido
entregue sempre
entregue rápido
entregue sempre
 com qualidade
SEJA SEMPRE
PROFISSIONAL
Vídeo Uncle Bob
Aprender Ruby e Rails
  vão te tornar um
 profissional melhor
CURSOS
	 egenial.com.br/cursorails
  egenial.com.br/imersaorubyonrails

CONTATOS
	 blog.areacriacoes.com.br
	 twitter @danielvlopes
  danielvlopes@areacriacoes.com.br

Filosofia Ruby e Rails (UFOP e Inforuso 2010)

  • 1.
  • 2.
  • 3.
  • 4.
    software + design areacriacoes.com.br
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
    ENG. DE SOFTWARE CENTRADAEM MÉTODOS ÁGEIS http://bit.ly/unapos
  • 10.
  • 11.
  • 12.
    Código • Cultura • Criatividade
  • 13.
    POR QUE MEINTERESSA?
  • 14.
    ... um aclamadoinstrutor aplicando um curso descobriu que um de seus pupilos era um venture capitalist.
  • 15.
    Quando questionado sobreo motivo de estar em uma turma de “Ruby on Rails” ... , ele respondeu simplesmente:
  • 16.
    todas as start-upsque me procuram estão usando, eu quero descobrir qual é o “grande lance”. Mark Gardner http://bit.ly/railsecosystem
  • 17.
    Investidores estão pressionandostartups para usarem Ruby. "É mais rápido, então se você pode encurtar a entrega em um mês, porque não usar Ruby?" Matz Ruby World Keynote http://bit.ly/bH4hA2
  • 18.
    Investidores estão pressionandostartups para usarem Ruby. "É mais rápido, então se você pode encurtar a entrega em um mês, porque não usar Ruby?" Mais de 60% dos VCs usam Ruby para criar seus sistemas Matz Ruby World Keynote http://bit.ly/bH4hA2
  • 19.
  • 22.
    VOCÊ DEVE SE COMPORTARCOMO UMA STARTUP
  • 26.
  • 27.
    “Se você terminarseu trabalho rápido e de forma divertida, isso não é bom?” Matz http://www.artima.com/intv/ruby3.html
  • 28.
    “Tornar as coisassimples fáceis e as coisas complexas possíveis”
  • 29.
    100% orientada a objetos • Linguagem dinâmica • Esperados 4 milhões até 2013 • FREE e Open Source • As vezes chamada de “scripting” language
  • 31.
    Eu inventei otermo “Orientação a Objetos” e posso dizer que não era C++ que eu tinha em mente.
  • 33.
  • 34.
  • 36.
  • 37.
    “Eu sempre soubeque Smalltalk substituiria Java. Só não sabia que isso se chamaria Ruby.” Kent Beck, Criador do "Extreme Programming" e "TDD"
  • 38.
  • 40.
  • 43.
  • 44.
    JRuby Charles Nutter MacRuby L. Sansonetti
  • 45.
    JQuery/Rails JRuby Yehuda Katz Charles Nutter MacRuby L. Sansonetti
  • 48.
    Ruby 1.8.7
  • 49.
    Ruby 1.8.7 Ruby 1.9.2
  • 51.
    JRuby 1.5.X
  • 52.
    JRuby 1.5.X Rubinius 1.1
  • 53.
    JRuby 1.5.X Rubinius 1.1 Mac Ruby 0.6
  • 54.
    JRuby 1.5.X Rubinius 1.1 Mac Ruby 0.6 Iron Ruby 1.0
  • 55.
  • 56.
  • 57.
  • 58.
  • 61.
  • 62.
    DHH 2004
  • 64.
  • 66.
  • 67.
  • 68.
    código gerando código conventionover configuration don’t repeat your self
  • 69.
    código gerando código conventionover configuration don’t repeat your self desenvolvimento ágil
  • 70.
  • 72.
  • 73.
  • 74.
    recursos restful Unicode, TimeZone,i18n Segurança (XSS, XSRF, Injection)
  • 76.
    Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 77.
    Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 78.
    Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 79.
    Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 80.
    Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 81.
    Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 94.
    class Post <ActiveRecord::Base # ASSOCIATIONS model has_and_belongs_to_many :categories belongs_to :author has_many :comments, :dependent => :destroy # VALIDATIONS validates_presence_of :title, :body, :author, :slug, :published_at validates_uniqueness_of :slug validates_inclusion_of :draft, :in => [true, false] validates_associated :author # SCOPES (custom queries) default_scope :order => 'published_at DESC' scope :published, lambda { where(:draft => false) } # CALLBACKS before_validation :generate_slug protected def generate_slug self.slug = title unless slug.present? self.slug = slug.parameterize end end
  • 95.
    views <%= form_for [post, comment ], :remote => true do |f| %> <%= error_messages_for comment %> <div class="field"> <%= f.label :author %><br /> <%= f.text_field :author %> </div> <div class="field"> <%= f.label :url %><br /> <%= f.text_field :url %> </div> <div class="field"> <%= f.label :body %><br /> <%= f.text_area :body, :rows => 10, :cols => 90 %> </div> <%= render "submit_or_cancel" %> <% end %>
  • 96.
    class Admin::PostCategoriesController <ApplicationController def index @categories = PostCategory.all controller respond_with @categories end def show @category = PostCategory.find(params[:id]) respond_with @category end def new @category = PostCategory.new respond_with @category end def edit @category = PostCategory.find(params[:id]) end def create @category = PostCategory.new(params[:post_category]) flash[:notice] = 'Category was successfully created.' if @category.save respond_with @category end def update end def destroy end end
  • 97.
  • 102.
  • 104.
    Eles servem maisde 23 milhões de visitantes/mês.
  • 105.
    Eles servem maisde 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
  • 106.
    Eles servem maisde 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 mais importante, facilitou a dificuldade que tinham em manutenção.
  • 107.
    A conversão resultouem 20 mil linhas de Ruby em vez de 125 mil linhas de Java mais importante, facilitou a dificuldade que tinham em manutenção. Eles finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores.
  • 108.
    mais importante, facilitoua dificuldade que tinham em manutenção. Eles 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
  • 109.
  • 111.
    Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 112.
    Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 113.
    Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 114.
    Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 117.
    source 'http://rubygems.org' Gemfile gem 'rails', '3.0.0.rc' gem 'devise', '1.1.1' gem 'paperclip', '2.3.3' gem 'menu_builder', '0.3.3' gem 'RedCloth', '4.2.3' gem 'will_paginate', '3.0.pre2' gem 'reverse_captcha', '0.0.1' gem 'capistrano', '2.5.19' gem 'mysql', '2.8.1' group :development do gem 'sqlite3-ruby', :require => 'sqlite3' gem "rspec", ">=2.0.0.beta.11" gem "rspec-rails", ">=2.0.0.beta.11" gem "ruby-debug" end group :test do gem 'capybara' gem 'database_cleaner' gem 'steak', '>= 0.4.0.beta.1' gem 'factory_girl_rails' end
  • 118.
  • 120.
  • 122.
    set :application, "producer" set:ip_address , "208.88.125.20" deploy.rb # GIT SETTINGS set :scm, :git set :repository, "git@github.com:danielvlopes/producer.git" set :branch, "master" set :deploy_via, :remote_cache # SSH SETTINGS set :user , "rails" set :deploy_to, "/home/rails/#{application}" set :shared_directory, "#{deploy_to}/shared" set :use_sudo, false set :group_writable, false default_run_options[:pty] = true # ROLES role :app, ip_address role :web, ip_address role :db, ip_address, :primary => true # HOOKS after 'deploy:setup', 'db:setup' after 'deploy:update_code' do db.symlink assets.symlink end
  • 123.
  • 125.
    RSpec Steak Cucumber Test::Unit Minitest Bacon Should Factory Girl Fabrication Machinist Mocha RR
  • 126.
    Cucumber Feature: Authenticate In order to see my previous links As a user I want to be able to create an account Scenario: Creating a new account Given I am not authenticated When I go to register And I fill in the following: | Email | testing@man.net | | Password | 123456 | | Password confirmation | 123456 | And I press "Sign up" Then I should see "You have signed up successfully" http://github.com/danielvlopes/buggy/blob/master/features/authenticate.feature
  • 127.
    feature "Catalog", %q{ Steak In order to display a catalog in devices As registered publisher I want to manage a catalog. } do background do ensure_not_logged_in @owner = Factory :app, :name => "1Password" end scenario "Create catalog for 1Password", :js => true do visit new_catalog_page_for(@owner) select "shelf/metal", :from => "Theme" fill_in "Title", :with => "Appextras" drag_to_catalog available_app click "Create Catalog" should_have_notice "Catalog was successfully created." end
  • 128.
    describe Guest before do do Minispec @room = Room.new("Room 35", Type::Master.new) @hosting = Hosting.new(@room, 5) @guest = Guest.new("Daniel Lopes", @hosting) end it "should have a name" do assert_equal "Daniel Lopes", @guest.name end describe "when print the invoice" do it "should have the guest name" do assert_match /Daniel Lopes/, @guest.invoice end it "should have the room name" do assert_match /Room 35/, @guest.invoice end it "should have the total amount" do assert_match /Valor total: 1000/, @guest.invoice end it "should have the discount points earned with that hosting" do assert_match /Você ganhou 6 ponto(s)/, @guest.invoice end end end
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 137.
  • 139.
  • 140.
  • 141.
  • 143.
    Home 331 ms Total 5.45 ms http://railsmg.org/meetings/1
  • 145.
  • 147.
    Friendster foi escritoem Java e mudaram para PHP. MySpace foi escrito em ColdFusion e mudaram 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. http://www.akitaonrails.com/2008/6/17/chatting-with- blaine-cook-twitter
  • 148.
    “O The NewYork 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
  • 149.
    RAILS é aSALVAÇÃO
  • 154.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
    Aprender Ruby eRails vão te tornar um profissional melhor
  • 170.
    CURSOS egenial.com.br/cursorails egenial.com.br/imersaorubyonrails CONTATOS blog.areacriacoes.com.br twitter @danielvlopes danielvlopes@areacriacoes.com.br