Onde mora a
  produtividade
do Ruby on Rails?

          Fabio Kung
  fabio.kung@caelum.com.br
     fabiokung @ twitter
Scaffold
Ruby
Dinamismo
“Skilled programmers can write
better programmers than they can
              hire”
                      -- Giles Bowkett
Expressividade
Domain Specific Languages
10.days.ago
rufus-scheduler
rufus-scheduler

scheduler.in '20m' do
  puts "go home"
end

scheduler.every '5m' do
  puts "check blood pressure"
end
<div class="listitemchk">
  <h3 class="smller">
    <a href="URL_DO_PERFIL">QUEM_POSTOU</a>:
  </h3>
  <div class="para ">
    TEXTO DO RECADO
    <div class="selr">
       ...
    </div>
  </div>
</div>
<div class="listitemchk">
      <h3 class="smller">
        <a href="URL_DO_PERFIL">QUEM_POSTOU</a>:
      </h3>
      <div class="para ">
        TEXTO DO RECADO
        <div class="selr">
           ...
        </div>
      </div>
    </div>




doc = Hpricot(texto)
doc / "div.listitemchk" / "h3.smller" / "a"
doc / "div.listitemchk" / "div.para"
User.select { |m| m.name == 'jon' && m.age == 21 }

"SELECT * FROM users WHERE users.name = 'jon' AND users.age = 21"
User.select { |m| m.name == 'jon' && m.age == 21 }

"SELECT * FROM users WHERE users.name = 'jon' AND users.age = 21"




User.select { |u| [1, 2, 3, 4].include? u.id }
# SELECT * FROM users WHERE users.id IN (1,2,3,4)



User.select { |u| u.friends.name =~ /bi/ }
# SELECT * FROM users LEFT OUTER JOIN ... WHERE friends.name ~ 'bi'
class Company < ActiveRecord::Base

  has_many :jobs

  validates_presence_of :name
  validates_presence_of :contact_name
  validates_presence_of :ddd, :phone

  validates_uniqueness_of :cnpj
  validates_uniqueness_of :razao_social

  validates_numericality_of :ddd, :phone

  validates_unchangeable :email
  validates_unchangeable :cnpj

  acts_as_authentic

end
Novos paradigmas
Erlang, Scala, ...
YAWS
MapReduce
Enumerable
Ecossistema
TATFT
(Test All The Fucking Time)
TDD

class PostTest < ActiveSupport::TestCase

  def test_title
    post = Post.new :title => "Post 1"
    assert_equal "Post 1!", post.title
  end

end
BDD

class PostTest < ActiveSupport::TestCase

  def test_title_is_required
    post = Post.new
    assert ! post.valid?
  end

end
Dúvidas?




                       Obrigado!
fabio.kung@caelum.com.br
    http://fabiokung.com
     twitter: fabiokung

Onde mora a produtividade do Ruby on Rails?

  • 1.
    Onde mora a produtividade do Ruby on Rails? Fabio Kung fabio.kung@caelum.com.br fabiokung @ twitter
  • 2.
  • 3.
  • 4.
  • 5.
    “Skilled programmers canwrite better programmers than they can hire” -- Giles Bowkett
  • 6.
  • 7.
  • 9.
  • 10.
  • 11.
    rufus-scheduler scheduler.in '20m' do puts "go home" end scheduler.every '5m' do puts "check blood pressure" end
  • 12.
    <div class="listitemchk"> <h3 class="smller"> <a href="URL_DO_PERFIL">QUEM_POSTOU</a>: </h3> <div class="para "> TEXTO DO RECADO <div class="selr"> ... </div> </div> </div>
  • 13.
    <div class="listitemchk"> <h3 class="smller"> <a href="URL_DO_PERFIL">QUEM_POSTOU</a>: </h3> <div class="para "> TEXTO DO RECADO <div class="selr"> ... </div> </div> </div> doc = Hpricot(texto) doc / "div.listitemchk" / "h3.smller" / "a" doc / "div.listitemchk" / "div.para"
  • 14.
    User.select { |m|m.name == 'jon' && m.age == 21 } "SELECT * FROM users WHERE users.name = 'jon' AND users.age = 21"
  • 15.
    User.select { |m|m.name == 'jon' && m.age == 21 } "SELECT * FROM users WHERE users.name = 'jon' AND users.age = 21" User.select { |u| [1, 2, 3, 4].include? u.id } # SELECT * FROM users WHERE users.id IN (1,2,3,4) User.select { |u| u.friends.name =~ /bi/ } # SELECT * FROM users LEFT OUTER JOIN ... WHERE friends.name ~ 'bi'
  • 16.
    class Company <ActiveRecord::Base has_many :jobs validates_presence_of :name validates_presence_of :contact_name validates_presence_of :ddd, :phone validates_uniqueness_of :cnpj validates_uniqueness_of :razao_social validates_numericality_of :ddd, :phone validates_unchangeable :email validates_unchangeable :cnpj acts_as_authentic end
  • 17.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
    TATFT (Test All TheFucking Time)
  • 25.
    TDD class PostTest <ActiveSupport::TestCase def test_title post = Post.new :title => "Post 1" assert_equal "Post 1!", post.title end end
  • 26.
    BDD class PostTest <ActiveSupport::TestCase def test_title_is_required post = Post.new assert ! post.valid? end end
  • 28.
    Dúvidas? Obrigado! fabio.kung@caelum.com.br http://fabiokung.com twitter: fabiokung