Skip to content

Instantly share code, notes, and snippets.

@envp
Last active February 18, 2016 09:19
Show Gist options
  • Select an option

  • Save envp/12e08aeb038ebd9e2ee2 to your computer and use it in GitHub Desktop.

Select an option

Save envp/12e08aeb038ebd9e2ee2 to your computer and use it in GitHub Desktop.
# require all the rngs defined in lib/statistical/rng
require 'statistical/rng/uniform'
module Statistical
module Rng
# :nodoc:
# Dynamically add constant RNG_TYPES when called
def self.const_missing(cname)
if cname == 'RNG_TYPES'.to_sym
self.const_set(cname, make_classmap)
end
end
def self.create(type = :uniform, *args)
RNG_TYPES[type].new(*args)
end
private
def self.make_classmap
rng_klasses = self.constants.select{ |k| self.const_get(k).is_a?(Class) }
keylist = rng_klasses.map { |k| k.to_s.downcase.to_sym }
klasses = rng_klasses.map { |k| self.const_get(k) }
return Hash[keylist.zip(klasses)].freeze
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment