Class: FactorySeeder::SeedManager

Inherits:
Object
  • Object
show all
Defined in:
lib/factory_seeder/seed_manager.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSeedManager

Returns a new instance of SeedManager.



7
8
9
# File 'lib/factory_seeder/seed_manager.rb', line 7

def initialize
  @seeds = {}
end

Instance Attribute Details

#seedsObject (readonly)

Returns the value of attribute seeds.



5
6
7
# File 'lib/factory_seeder/seed_manager.rb', line 5

def seeds
  @seeds
end

Instance Method Details

#clearObject



116
117
118
# File 'lib/factory_seeder/seed_manager.rb', line 116

def clear
  @seeds.clear
end

#countObject



120
121
122
# File 'lib/factory_seeder/seed_manager.rb', line 120

def count
  @seeds.count
end

#define(name, builder_block = nil, &execution_block) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/factory_seeder/seed_manager.rb', line 17

def define(name, builder_block = nil, &execution_block)
  builder = SeedBuilder.new(name)
  builder_block&.call(builder)
  seed = builder.build(&execution_block)
  register(seed)
  seed
end

#empty?Boolean

Returns:

  • (Boolean)


124
125
126
# File 'lib/factory_seeder/seed_manager.rb', line 124

def empty?
  @seeds.empty?
end

#exists?(name) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/factory_seeder/seed_manager.rb', line 29

def exists?(name)
  @seeds.key?(name.to_sym)
end

#find(name) ⇒ Object



25
26
27
# File 'lib/factory_seeder/seed_manager.rb', line 25

def find(name)
  @seeds[name.to_sym]
end

#get_seed_info(name) ⇒ Object



100
101
102
103
104
105
# File 'lib/factory_seeder/seed_manager.rb', line 100

def get_seed_info(name)
  seed = find(name)
  return nil unless seed

  seed.to_h
end

#listObject



33
34
35
# File 'lib/factory_seeder/seed_manager.rb', line 33

def list
  @seeds.values
end

#list_namesObject



37
38
39
# File 'lib/factory_seeder/seed_manager.rb', line 37

def list_names
  @seeds.keys
end

#register(seed) ⇒ Object

Raises:

  • (ArgumentError)


11
12
13
14
15
# File 'lib/factory_seeder/seed_manager.rb', line 11

def register(seed)
  raise ArgumentError, 'Seed must be a FactorySeeder::Seed instance' unless seed.is_a?(Seed)

  @seeds[seed.name] = seed
end

#run(name, **kwargs) ⇒ Object

Raises:

  • (ArgumentError)


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/factory_seeder/seed_manager.rb', line 41

def run(name, **kwargs)
  seed = find(name)
  raise ArgumentError, "Seed '#{name}' not found" unless seed

  FactorySeeder.clear_execution_logs!
  FactorySeeder.log_info("Running custom seed '#{name}'", kwargs: kwargs)

  begin
    result = seed.call(**kwargs)
    FactorySeeder.log_success("Seed '#{name}' completed", result: result)
    logs = FactorySeeder.normalized_logs(FactorySeeder.execution_logs)
    FactorySeeder.clear_execution_logs!
    {
      success: true,
      seed_name: name,
      result: result,
      message: "Seed '#{name}' executed successfully",
      logs: logs
    }
  rescue StandardError => e
    FactorySeeder.log("Seed '#{name}' failed: #{e.message}", level: :error)
    logs = FactorySeeder.normalized_logs(FactorySeeder.execution_logs)
    FactorySeeder.clear_execution_logs!
    {
      success: false,
      seed_name: name,
      error: e.message,
      message: "Seed '#{name}' failed: #{e.message}",
      logs: logs
    }
  end
end

#run_all(**global_kwargs) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/factory_seeder/seed_manager.rb', line 74

def run_all(**global_kwargs)
  results = []

  @seeds.each_key do |name|
    result = run(name, **global_kwargs)
    results << result
  end

  {
    total_seeds: @seeds.count,
    successful: results.count { |r| r[:success] },
    failed: results.count { |r| !r[:success] },
    results: results
  }
end

#search(query) ⇒ Object



107
108
109
110
111
112
113
114
# File 'lib/factory_seeder/seed_manager.rb', line 107

def search(query)
  query = query.to_s.downcase
  @seeds.values.select do |seed|
    seed.name.to_s.downcase.include?(query) ||
      seed.description.downcase.include?(query) ||
      seed.parameter_names.any? { |param| param.to_s.downcase.include?(query) }
  end
end

#validate_seed(name, **kwargs) ⇒ Object



90
91
92
93
94
95
96
97
98
# File 'lib/factory_seeder/seed_manager.rb', line 90

def validate_seed(name, **kwargs)
  seed = find(name)
  raise ArgumentError, "Seed '#{name}' not found" unless seed

  seed.validate_parameters!(kwargs)
  true
rescue StandardError
  false
end