Class: Legion::Extensions::Agentic::Homeostasis::FossilFuel::Helpers::FuelEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Homeostasis::FossilFuel::Helpers::FuelEngine
- Defined in:
- lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb
Instance Method Summary collapse
- #all_combustions ⇒ Object
- #all_reserves ⇒ Object
- #combust(reserve_id:, amount: nil, grade: :crude) ⇒ Object
- #create_reserve(fuel_type:, domain:, content:, volume: nil, quality: nil) ⇒ Object
- #depleted_reserves ⇒ Object
- #extract(reserve_id:, rate: Constants::EXTRACTION_RATE) ⇒ Object
- #fuel_report ⇒ Object
-
#initialize ⇒ FuelEngine
constructor
A new instance of FuelEngine.
- #reserves_by_type ⇒ Object
- #richest(limit: 5) ⇒ Object
- #scarce_reserves ⇒ Object
- #total_energy_released ⇒ Object
Constructor Details
#initialize ⇒ FuelEngine
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_combustions ⇒ Object
84 85 86 |
# File 'lib/legion/extensions/agentic/homeostasis/fossil_fuel/helpers/fuel_engine.rb', line 84 def all_combustions @combustions.values end |
#all_reserves ⇒ Object
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
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
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_reserves ⇒ Object
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_report ⇒ Object
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_type ⇒ Object
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_reserves ⇒ Object
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_released ⇒ Object
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 |