Sha256: 606c5fa6a5782dd708c4f6c5d48d4cc92268d54b7327b176fd858e07b04568ad

Contents?: true

Size: 1.22 KB

Versions: 2

Compression:

Stored size: 1.22 KB

Contents

require 'rom-factory'
require 'rom-core'
require 'active_record'
require 'factory_bot'
require 'fabrication'
require 'benchmark/ips'

DATABASE_URL = 'postgres://localhost/rom_factory_bench'.freeze

rom = ROM.container(:sql, DATABASE_URL) do |conf|
  conf.default.connection.create_table?(:users) do
    primary_key :id
    column :last_name, String, null: false
    column :first_name, String, null: false
    column :admin, TrueClass
  end

  conf.relation(:users) do
    schema(infer: true)
  end
end

factory = ROM::Factory.configure { |c| c.rom = rom }

factory.define(:user) do |f|
  f.first_name "John"
  f.last_name "Doe"
  f.admin false
end

class User < ActiveRecord::Base
end

ActiveRecord::Base.establish_connection(DATABASE_URL)

FactoryBot.define do
  factory(:user) do
    first_name "John"
    last_name  "Doe"
    admin false
  end
end

Fabricator(:user) do
  first_name "John"
  last_name  "Doe"
  admin false
end

Benchmark.ips do |x|
  x.report('rom-factory persisted struct') do
    1000.times do
      factory[:user]
    end
  end

  x.report('factory_bot') do
    1000.times do
      FactoryBot.create(:user)
    end
  end

  x.report('fabrication') do
    1000.times do
      Fabricate(:user)
    end
  end

  x.compare!
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rom-factory-0.7.0 benchmarks/basic.rb
rom-factory-0.6.0 benchmarks/basic.rb