Class: Julewire::Core::Destinations::ChaosOutput

Inherits:
Object
  • Object
show all
Defined in:
lib/julewire/core/destinations/chaos_output.rb

Constant Summary collapse

MODES =
%i[mixed raise reject sleep].freeze
DEFAULT_RATE =
0.1
DEFAULT_SLEEP_MS =
10

Instance Method Summary collapse

Constructor Details

#initialize(output, rate: DEFAULT_RATE, mode: :mixed, sleep_ms: DEFAULT_SLEEP_MS, seed: nil) ⇒ ChaosOutput

Returns a new instance of ChaosOutput.



11
12
13
14
15
16
17
18
19
# File 'lib/julewire/core/destinations/chaos_output.rb', line 11

def initialize(output, rate: DEFAULT_RATE, mode: :mixed, sleep_ms: DEFAULT_SLEEP_MS, seed: nil)
  Sink.validate_writeable!(output)
  @output = output
  @rate = validate_rate(rate)
  @mode = validate_mode(mode)
  @sleep_seconds = validate_sleep_ms(sleep_ms) / 1000.0
  @seed = seed
  @random = random
end

Instance Method Details

#after_fork!Object



45
46
47
48
49
# File 'lib/julewire/core/destinations/chaos_output.rb', line 45

def after_fork!
  @random = random
  @output.after_fork! if @output.respond_to?(:after_fork!)
  self
end

#closeObject



37
38
39
# File 'lib/julewire/core/destinations/chaos_output.rb', line 37

def close
  @output.close if @output.respond_to?(:close)
end

#closed?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/julewire/core/destinations/chaos_output.rb', line 41

def closed?
  @output.closed? if @output.respond_to?(:closed?)
end

#flushObject



33
34
35
# File 'lib/julewire/core/destinations/chaos_output.rb', line 33

def flush
  @output.flush if @output.respond_to?(:flush)
end

#resource_identityObject



51
# File 'lib/julewire/core/destinations/chaos_output.rb', line 51

def resource_identity = @output

#write(value) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/julewire/core/destinations/chaos_output.rb', line 21

def write(value)
  return @output.write(value) unless trigger?

  case chaos_mode
  when :raise then raise "julewire punk chaos output failure"
  when :reject then false
  when :sleep
    sleep(@sleep_seconds)
    @output.write(value)
  end
end