Class: Hegel::Generators::OneOfGenerator

Inherits:
Hegel::Generator show all
Defined in:
lib/hegel/generators.rb,
sig/hegel.rbs

Overview

Hegel::Syntax::Methods#one_of. Draws from one of generators, picked by drawing an index in [0, generators.size - 1].

Instance Method Summary collapse

Methods inherited from Hegel::Generator

#filter, #map

Constructor Details

#initialize(generators) ⇒ OneOfGenerator

Returns a new instance of OneOfGenerator.

Parameters:



229
230
231
232
# File 'lib/hegel/generators.rb', line 229

def initialize(generators)
  super()
  @generators = generators
end

Instance Method Details

#do_draw(tc) ⇒ Object

Parameters:

  • tc (Object)

Returns:

  • (Object)

Raises:



234
235
236
237
238
239
240
241
242
243
244
# File 'lib/hegel/generators.rb', line 234

def do_draw(tc)
  raise Hegel::Error, "one_of: at least one generator is required" if @generators.empty?

  tc.start_span(LibHegel::HEGEL_LABEL_ONE_OF)
  begin
    index = tc.generate_integer(0, @generators.size - 1)
    @generators[index].do_draw(tc)
  ensure
    tc.stop_span(discard: false)
  end
end