Sha256: 85214d0c8d0018fb8773bee53da21a9c3da7fc982b547667a2ed44a8e845dce0

Contents?: true

Size: 1.2 KB

Versions: 6

Compression:

Stored size: 1.2 KB

Contents

# frozen_string_literal: true

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
    factory[:user]
  end

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

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

  x.compare!
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rom-factory-0.10.2 benchmarks/basic.rb
rom-factory-0.10.1 benchmarks/basic.rb
rom-factory-0.10.0 benchmarks/basic.rb
rom-factory-0.9.1 benchmarks/basic.rb
rom-factory-0.9.0 benchmarks/basic.rb
rom-factory-0.8.0 benchmarks/basic.rb