Class: Legion::Extensions::Agentic::Homeostasis::FossilFuel::Helpers::FuelEngine

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb

Instance Method Summary collapse

Constructor Details

#initializeFuelEngine

Returns a new instance of FuelEngine.



10
11
12
13
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 10

def initialize
  @reserves    = {}
  @combustions = {}
end

Instance Method Details

#all_combustionsObject



84
85
86
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 84

def all_combustions
  @combustions.values
end

#all_reservesObject



80
81
82
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 80

def all_reserves
  @reserves.values
end

#combust(reserve_id:, amount: nil, grade: :crude) ⇒ Object

Raises:

  • (ArgumentError)


30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 30

def combust(reserve_id:, amount: nil, grade: :crude)
  reserve   = fetch_reserve(reserve_id)
  fuel_amt  = amount || Constants::EXTRACTION_RATE
  extracted = reserve.extract!(rate: fuel_amt)

  raise ArgumentError, 'reserve depleted' if extracted < 0.001

  combustion = Combustion.new(reserve_id:  reserve_id,
                              fuel_amount: extracted,
                              grade:       grade,
                              quality:     reserve.quality)
  @combustions[combustion.id] = combustion
  { combustion: combustion, reserve: reserve }
end

#create_reserve(fuel_type:, domain:, content:, volume: nil, quality: nil) ⇒ Object

Raises:

  • (ArgumentError)


15
16
17
18
19
20
21
22
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 15

def create_reserve(fuel_type:, domain:, content:, volume: nil, quality: nil)
  raise ArgumentError, 'reserve limit reached' if @reserves.size >= Constants::MAX_RESERVES

  r = Reserve.new(fuel_type: fuel_type, domain: domain, content: content,
                  volume: volume, quality: quality)
  @reserves[r.id] = r
  r
end

#depleted_reservesObject



59
60
61
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 59

def depleted_reserves
  @reserves.values.select(&:depleted?)
end

#extract(reserve_id:, rate: Constants::EXTRACTION_RATE) ⇒ Object



24
25
26
27
28
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 24

def extract(reserve_id:, rate: Constants::EXTRACTION_RATE)
  reserve = fetch_reserve(reserve_id)
  amount  = reserve.extract!(rate: rate)
  { reserve: reserve, extracted: amount }
end

#fuel_reportObject



67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 67

def fuel_report
  {
    total_reserves:    @reserves.size,
    total_combustions: @combustions.size,
    total_energy:      total_energy_released,
    by_type:           reserves_by_type,
    depleted_count:    depleted_reserves.size,
    scarce_count:      scarce_reserves.size,
    avg_volume:        avg_metric(:volume),
    avg_quality:       avg_metric(:quality)
  }
end

#reserves_by_typeObject



49
50
51
52
53
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 49

def reserves_by_type
  counts = Constants::FUEL_TYPES.to_h { |t| [t, 0] }
  @reserves.each_value { |r| counts[r.fuel_type] += 1 }
  counts
end

#richest(limit: 5) ⇒ Object



63
64
65
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 63

def richest(limit: 5)
  @reserves.values.sort_by { |r| -r.volume }.first(limit)
end

#scarce_reservesObject



55
56
57
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 55

def scarce_reserves
  @reserves.values.select(&:scarce?)
end

#total_energy_releasedObject



45
46
47
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 45

def total_energy_released
  @combustions.values.sum(&:energy_released).round(10)
end