Sha256: 98b70effb0f34567278a3ff493c9e29edff906cde8b2c239ab3a25d92040698c

Contents?: true

Size: 877 Bytes

Versions: 13

Compression:

Stored size: 877 Bytes

Contents

# frozen_string_literal: true

require "n1_loader"

require_relative 'context/service'

# Class that wants to request 3rd party service without N+1
class User
  include N1Loader::Loadable

  def unoptimized_call
    Service.receive(self)[0]
  end

  n1_optimized :optimized_call do |users|
    data = Service.receive(users)

    users.each_with_index do |user, index|
      fulfill(user, data[index])
    end
  end
end

# works fine for single case
user = User.new
p "Works correctly: #{user.unoptimized_call == user.optimized_call}"

users = [User.new, User.new]

# Has N+1
count_before = Service.count
p users.map(&:unoptimized_call)
p "Has N+1 #{Service.count == count_before + users.count}"

# Has no N+1
count_before = Service.count
N1Loader::Preloader.new(users).preload(:optimized_call)
p users.map(&:optimized_call)
p "Has no N+1: #{Service.count == count_before + 1}"

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
n1_loader-1.7.2 examples/core.rb
n1_loader-1.7.1 examples/core.rb
n1_loader-1.7.0 examples/core.rb
n1_loader-1.6.6 examples/core.rb
n1_loader-1.6.5 examples/core.rb
n1_loader-1.6.4 examples/core.rb
n1_loader-1.6.3 examples/core.rb
n1_loader-1.6.2 examples/core.rb
n1_loader-1.6.1 examples/core.rb
n1_loader-1.6.0 examples/core.rb
n1_loader-1.5.1 examples/core.rb
n1_loader-1.5.0 examples/core.rb
n1_loader-1.4.4 examples/core.rb