API Reference

Programmatic API for FakeDataDSL.

Registry

The Registry class manages schema definitions.

Loading Schemas

registry = FakeDataDSL::Registry.new

# Load from file
registry.load_file('schemas/user.dsl')

# Load from string
registry.load_string(<<~DSL)
  User:
    id: uuid
    name: name
DSL

# Load from directory
registry.load_dir('schemas/')

Accessing Schemas

# Get a schema
schema = registry.schema('User')

# Check if schema exists
if registry.schema?('User')
  # ...
end

# List all schema names
names = registry.names
# => ["User", "Order", "Product"]

Schema

The Schema class represents a data schema.

Generating Data

schema = registry.schema('User')

# Generate single record
record = schema.generate
# => { "id" => "...", "name" => "..." }

# Generate multiple records
records = schema.generate_many(10)
# => Array of 10 records

# Stream records (lazy)
schema.generate_many_stream(1000).each do |record|
  # Process each record
end

Configuration

# Set default mode
schema.default_mode = :edge

# Generate with specific mode
record = schema.generate(mode: :invalid)

# Generate with overrides
record = schema.generate(overrides: { "name" => "Custom Name" })

Configuration

Global configuration:

FakeDataDSL.configure do |config|
  # Seed for deterministic generation
  config.seed = 12345

  # Resource limits
  config.max_recursion = 10
  config.max_array_size = 1000
  config.max_text_length = 10000
  config.max_latency = 5000

  # Observability
  config.logger = Logger.new(STDOUT)
  config.metrics_collector = MyMetricsCollector.new
  config.on_field_generated = proc do |schema, field, value|
    # Custom callback
  end
end

Custom Types

Register custom types:

FakeDataDSL.register_type(:my_type) do |rng, context, args|
  # Generate value
  "custom_value_#{rng.int(1, 100)}"
end

# Use in schema
MySchema:
  value: my_type

Custom Functions

Register custom functions:

FakeDataDSL.register_function(:slugify) do |context|
  name = context["name"] || "default"
  name.downcase.gsub(/\s+/, '-')
end

# Use in schema
User:
  name: name
  slug: custom(:slugify)

Custom Behaviors

Register custom behaviors:

FakeDataDSL.register_behavior(:my_behavior) do |field, args|
  # Custom behavior logic
end

# Use in schema
User:
  name: name @my_behavior(arg1, arg2)

See Also