2024-08-16 12:13:48 -04:00
|
|
|
class Issue::PricesMissing < Issue
|
|
|
|
store_accessor :data, :missing_prices
|
|
|
|
|
2024-08-16 16:08:27 -04:00
|
|
|
after_initialize :initialize_missing_prices
|
|
|
|
|
2024-10-04 14:19:45 -04:00
|
|
|
validates :missing_prices, presence: true, allow_blank: true
|
2024-08-16 12:13:48 -04:00
|
|
|
|
|
|
|
def append_missing_price(ticker, date)
|
|
|
|
missing_prices[ticker] ||= []
|
2024-10-04 14:19:45 -04:00
|
|
|
missing_prices[ticker] << date unless missing_prices[ticker].include?(date.to_s)
|
2024-08-16 12:13:48 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def stale?
|
|
|
|
stale = true
|
2024-08-16 16:08:27 -04:00
|
|
|
|
2024-08-16 12:13:48 -04:00
|
|
|
missing_prices.each do |ticker, dates|
|
2024-08-16 16:08:27 -04:00
|
|
|
next unless issuable.owns_ticker?(ticker)
|
|
|
|
|
2024-08-26 15:36:27 +02:00
|
|
|
oldest_date = dates.min.to_date
|
2024-08-16 12:13:48 -04:00
|
|
|
expected_price_count = (oldest_date..Date.current).count
|
|
|
|
prices = Security::Price.find_prices(ticker: ticker, start_date: oldest_date)
|
|
|
|
stale = false if prices.count < expected_price_count
|
|
|
|
end
|
|
|
|
|
|
|
|
stale
|
|
|
|
end
|
2024-08-16 16:08:27 -04:00
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def initialize_missing_prices
|
|
|
|
self.missing_prices ||= {}
|
|
|
|
end
|
2024-08-16 12:13:48 -04:00
|
|
|
end
|