spicy-proton icon indicating copy to clipboard operation
spicy-proton copied to clipboard

Ability to override rand more easily

Open rykov opened this issue 1 year ago • 0 comments

I'm trying to override rand in Spicy::Seek to allow for the flexibility of making the function deterministic based on an incoming seed. Before submitting a PR, I wanted to propose a couple of ways to implement this.

  1. The easiest is to allow the options hash to be forwarded to rand. Then I can extend the classes and override rand with my own custom implementation:

  def seek(opts = {}, &found)
  ...
-      index = rand(rand_min, rand_max)
+      index = rand(rand_min, rand_max, opts)
  ...
  end

- def rand(low, high)
+ def rand(low, high, opts = {})
    range = high - low + 1
    low + SecureRandom.random_number(range)
  end
  1. Allow passing a lambda as :rand option:
  def seek(opts = {}, &found)
  ...
-      index = rand(rand_min, rand_max)
+      index = opts[:rand] ? opts[:rand].call(rand_min, rand_max) : rand(rand_min, rand_max)
  1. Any suggestions how I can make this work without otherwise.

Let's discuss below, and I can submit a PR with the preferred implementation.

rykov avatar Mar 21 '23 07:03 rykov