Module: Unique

Defined in:
lib/unique.rb,
lib/unique/version.rb

Constant Summary collapse

DEFAULT_MAX_TRIES =
4096
NoUniqueObjects =
Class.new(StandardError)
NoArgumentsAllowed =
Class.new(StandardError)
VERSION =
'0.1.0'
@@instances =
Array.new

Class Method Summary collapse

Class Method Details

.max_triesObject



10
11
12
# File 'lib/unique.rb', line 10

def self.max_tries
  @max_tries
end

.max_tries=(num) ⇒ Object



9
10
11
12
13
14
# File 'lib/unique.rb', line 9

def max_tries= num
  def self.max_tries
    @max_tries
  end
  @max_tries= [num, 1].max.to_i
end

.next!(*args, &block) ⇒ Object

Raises:



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/unique.rb', line 17

def self.next! *args, &block
  raise NoArgumentsAllowed, 'Only a block is accepted.' unless args.empty? && block.kind_of?(Proc)
  tries= 0
  loop {
    tries+= 1
    raise NoUniqueObjects, "An unused, unique object could not be found in #{max_tries} tries (#{block.source_location.inspect})" if tries> max_tries
    unless @@instances.include?(instance= yield)
      @@instances.unshift instance
      break instance
    end
  }
end

.reset!Object



30
31
32
# File 'lib/unique.rb', line 30

def self.reset!
  @@instances = Array.new
end