File: builder.rb

package info (click to toggle)
ruby-dry-logic 1.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 728 kB
  • sloc: ruby: 4,929; makefile: 6
file content (32 lines) | stat: -rw-r--r-- 733 bytes parent folder | download
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
# frozen_string_literal: true

require "benchmark/ips"
require "dry/logic"
require "dry/logic/builder"

def regular
  user_present = Dry::Logic::Rule::Predicate.new(Dry::Logic::Predicates[:key?]).curry(:user)
  min_age = Dry::Logic::Rule::Predicate.new(Dry::Logic::Predicates[:gt?]).curry(18)
  has_min_age = Dry::Logic::Operations::Key.new(min_age, name: %i[user age])
  user_present & has_min_age
end

def builder
  Dry::Logic::Builder.call do
    key?(:user) & key(name: %i[user age]) { gt?(18) }
  end
end

Benchmark.ips do |x|
  x.report("builder") do
    builder.(user: {age: 19})
    builder.(user: {age: 18})
  end

  x.report("regular") do
    regular.(user: {age: 18})
    regular.(user: {age: 19})
  end

  x.compare!
end