Skip to content

Ability to override rand more easily #26

@rykov

Description

@rykov

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions