Module: Synthra::FactoryBotBridge

Defined in:
lib/synthra/engine.rb

Overview

Factory Bot bridge for automatic integration

Defined Under Namespace

Classes: FakeDataStrategy

Class Method Summary collapse

Class Method Details

.define_factory_for(schema_name) ⇒ Object



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# File 'lib/synthra/engine.rb', line 175

def define_factory_for(schema_name)
  factory_name = schema_name.underscore.to_sym
  schema = Synthra.registry.schema(schema_name)

  FactoryBot.define do
    factory factory_name, class: OpenStruct do
      transient do
        fake_data_seed { nil }
        fake_data_mode { :random }
      end

      initialize_with do
        data = Synthra.registry.schema(schema_name.to_s).generate(
          seed: fake_data_seed,
          mode: fake_data_mode
        )
        OpenStruct.new(data)
      end
    end
  end
rescue FactoryBot::DuplicateDefinitionError
  # Factory already exists, skip
end

.integrate!Object



163
164
165
166
167
168
169
170
171
172
173
# File 'lib/synthra/engine.rb', line 163

def integrate!
  return unless defined?(FactoryBot)

  # Add Synthra strategy to Factory Bot
  FactoryBot.register_strategy(:fake_data, FakeDataStrategy)

  # Auto-define factories for all schemas
  Synthra.registry.names.each do |name|
    define_factory_for(name)
  end
end