Sha256: 3d9d07ce843bcb438e1cd92929cfaeb88598959ec6221d160e28d0b23dfb7153

Contents?: true

Size: 1.86 KB

Versions: 13

Compression:

Stored size: 1.86 KB

Contents

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

class Restaurant < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name, :use => :finders
end


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

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
  RESTAURANTS << (Restaurant.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.friendly.find JOURNALISTS.rand}
  end

  x.report 'find (in-table slug; using finders module)' do
    N.times {Restaurant.find RESTAURANTS.rand}
  end

  x.report 'find (external slug)' do
    N.times {Manual.friendly.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 (in-table-slug; using finders module)' do
    N.times {transaction {Restaurant.create :name => Faker::Name.name}}
  end

  x.report 'insert (external slug)' do
    N.times {transaction {Manual.create :name => Faker::Name.name}}
  end
end

Version data entries

13 entries across 13 versions & 2 rubygems

Version Path
solidus_backend-1.0.0.pre3 vendor/bundle/gems/friendly_id-5.0.5/bench.rb
solidus_backend-1.0.0.pre2 vendor/bundle/gems/friendly_id-5.0.5/bench.rb
solidus_backend-1.0.0.pre vendor/bundle/gems/friendly_id-5.0.5/bench.rb
friendly_id-5.2.0.beta.1 bench.rb
friendly_id-5.0.5 bench.rb
friendly_id-5.1.0 bench.rb
friendly_id-5.1.0.beta.1 bench.rb
friendly_id-5.0.4 bench.rb
friendly_id-5.0.3 bench.rb
friendly_id-5.0.2 bench.rb
friendly_id-5.0.1 bench.rb
friendly_id-5.0.0 bench.rb
friendly_id-5.0.0.rc3 bench.rb