Class: Synthra::Behaviors::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/synthra/behaviors/registry.rb

Overview

Registry for behavior classes

Thread-safe registry for storing and retrieving behavior implementations. Supports both class-based and block-based behavior registration.

Examples:

Look up a behavior

klass = Registry.lookup(:latency)
behavior = klass.new(100..500, rng)
behavior.apply(result)

Defined Under Namespace

Classes: BlockBehavior, BlockBehaviorInstance

Class Method Summary collapse

Class Method Details

.clearvoid

This method returns an undefined value.

Clear all registered behaviors

Primarily used for testing. After calling this, you'll need to call register_builtins! to restore built-in behaviors.



143
144
145
# File 'lib/synthra/behaviors/registry.rb', line 143

def clear
  @mutex.synchronize { @behaviors.clear }
end

.lookup(name) ⇒ Class

Look up a behavior by name

Examples:

klass = Registry.lookup(:latency)
behavior = klass.new(100..500, rng)

Parameters:

  • name (Symbol, String)

    behavior name to look up

Returns:

  • (Class)

    behavior class (can be instantiated with new(value, rng))

Raises:

  • (ArgumentError)

    if behavior is not registered



96
97
98
99
100
101
102
# File 'lib/synthra/behaviors/registry.rb', line 96

def lookup(name)
  @mutex.synchronize do
    @behaviors.fetch(name.to_sym) do
      raise ArgumentError, "Unknown behavior: #{name}"
    end
  end
end

.namesArray<Symbol>

List all registered behavior names

Examples:

Registry.names  # => [:latency, :failure, :partial_data, ...]

Returns:

  • (Array<Symbol>)

    list of behavior names



130
131
132
# File 'lib/synthra/behaviors/registry.rb', line 130

def names
  @mutex.synchronize { @behaviors.keys }
end

.register(name, klass = nil) {|context, result, value| ... } ⇒ void

This method returns an undefined value.

Register a behavior

Examples:

Register with class

Registry.register(:latency, Latency)

Register with block

Registry.register(:log) do |ctx, result, value|
  puts "Generated: #{result.inspect}"
  result
end

Parameters:

  • name (Symbol, String)

    behavior name (used with @ prefix in DSL)

  • klass (Class, nil) (defaults to: nil)

    behavior class (must inherit from Base)

Yields:

  • (context, result, value)

    block for applying behavior

Yield Parameters:

  • context (Generator::Context)

    generation context

  • result (Object)

    generated data

  • value (Object)

    behavior configuration value

Yield Returns:

  • (Object)

    modified result

Raises:

  • (ArgumentError)

    if neither class nor block provided



72
73
74
75
76
77
78
79
80
81
82
# File 'lib/synthra/behaviors/registry.rb', line 72

def register(name, klass = nil, &block)
  @mutex.synchronize do
    if block_given?
      @behaviors[name.to_sym] = BlockBehavior.new(&block)
    elsif klass
      @behaviors[name.to_sym] = klass
    else
      raise ArgumentError, "Must provide a class or block"
    end
  end
end

.register_builtins!void

This method returns an undefined value.

Register all built-in behaviors

Called automatically at gem initialization. Registers the standard behaviors like latency, failure, partial_data, etc.



156
157
158
159
160
161
162
163
164
# File 'lib/synthra/behaviors/registry.rb', line 156

def register_builtins!
  register(:latency, Latency)
  register(:failure, Failure)
  register(:partial_data, PartialData)
  register(:close_connection, CloseConnection)
  register(:simulate_error, SimulateError)
  register(:randomize_order, RandomizeOrder)
  register(:deprecated, Deprecated)
end

.registered?(name) ⇒ Boolean

Check if a behavior is registered

Examples:

Registry.registered?(:latency)  # => true
Registry.registered?(:unknown)  # => false

Parameters:

  • name (Symbol, String)

    behavior name to check

Returns:

  • (Boolean)

    true if registered



115
116
117
118
119
# File 'lib/synthra/behaviors/registry.rb', line 115

def registered?(name)
  @mutex.synchronize do
    @behaviors.key?(name.to_sym)
  end
end