Skip to content
This repository
Norman Clarke September 03, 2011
file 64 lines (50 sloc) 1.446 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
require File.expand_path("../test/helper", __FILE__)
require "ffaker"

N = 1000

def transaction
  ActiveRecord::Base.transaction { yield ; raise ActiveRecord::Rollback }
end

class Array
  def rand
    self[Kernel.rand(length)]
  end
end

Book = Class.new ActiveRecord::Base

class Journalist < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name, :use => :slugged
end

class Manual < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name, :use => :history
end

BOOKS = []
JOURNALISTS = []
MANUALS = []

100.times do
  name = Faker::Name.name
  BOOKS << (Book.create! :name => name).id
  JOURNALISTS << (Journalist.create! :name => name).friendly_id
  MANUALS << (Manual.create! :name => name).friendly_id
end

ActiveRecord::Base.connection.execute "UPDATE manuals SET slug = NULL"

Benchmark.bmbm do |x|
  x.report 'find (without FriendlyId)' do
    N.times {Book.find BOOKS.rand}
  end
  x.report 'find (in-table slug)' do
    N.times {Journalist.find JOURNALISTS.rand}
  end
  x.report 'find (external slug)' do
    N.times {Manual.find MANUALS.rand}
  end

  x.report 'insert (without FriendlyId)' do
    N.times {transaction {Book.create :name => Faker::Name.name}}
  end

  x.report 'insert (in-table-slug)' do
    N.times {transaction {Journalist.create :name => Faker::Name.name}}
  end

  x.report 'insert (external slug)' do
    N.times {transaction {Manual.create :name => Faker::Name.name}}
  end
end
Something went wrong with that request. Please try again.