# frozen_string_literal: true

# This code fixes failed to get urandom for running Ruby on Docker for Synology.
class Random
  class << self
    private

    # :stopdoc:

    # Implementation using OpenSSL
    def gen_random_openssl(n)
      OpenSSL::Random.random_bytes(n)
    end

    begin
      # Check if Random.urandom is available
      Random.urandom(1)
    rescue RuntimeError
      begin
        require 'openssl'
      rescue NoMethodError
        raise NotImplementedError, 'No random device'
      else
        alias urandom gen_random_openssl
      end
    end

    public :urandom
  end
end
