class StockMarkets::FileDataProcessor

Constants

ACTIVE_MARKET_STATUS_NAME
LAST_UPDATE_MARKET_MINIMAL_YEARS_COUNT
MARKET_NAME_CSV_COLUMN

Attributes

data[RW]
parsed_csv[RW]

Public Class Methods

new() click to toggle source
# File lib/stock_markets/file_data_processor.rb, line 12
def initialize
  @data = []
  load_from_disk!
end

Public Instance Methods

load_data_for_mics!() click to toggle source
# File lib/stock_markets/file_data_processor.rb, line 32
def load_data_for_mics!
  transform_to_hash.data
end
load_data_for_names!() click to toggle source
# File lib/stock_markets/file_data_processor.rb, line 36
def load_data_for_names!
  transform_to_hash(key_name: MARKET_NAME_CSV_COLUMN).data
end
load_from_disk!() click to toggle source
# File lib/stock_markets/file_data_processor.rb, line 17
def load_from_disk!
  self.parsed_csv = CSV.table(StockMarkets.configuration.data_file_path)
end
transform_to_hash(key_name: :mic) click to toggle source
# File lib/stock_markets/file_data_processor.rb, line 21
def transform_to_hash(key_name: :mic)
  raise TypeError, 'Invalid object of CSV provided!' unless parsed_csv.instance_of?(CSV::Table)

  self.data = parsed_csv.each_with_object({}) do |data_row, result_hash|
    if market_recently_updated_proc.call(data_row, key_name)
      result_hash[data_row[key_name.to_sym]] =  data_row.to_h
    end
  end
  self
end

Private Instance Methods

last_update_market_minimal_date() click to toggle source
# File lib/stock_markets/file_data_processor.rb, line 44
def last_update_market_minimal_date
  return @_last_update_market_minimal_date if @_last_update_market_minimal_date

  current_month_date = Date.today - Date.today.mday + 1

  @_last_update_market_minimal_date = Date.new(current_month_date.year - LAST_UPDATE_MARKET_MINIMAL_YEARS_COUNT, 1, 1)
end
market_recently_updated_proc() click to toggle source
# File lib/stock_markets/file_data_processor.rb, line 52
def market_recently_updated_proc
  @_market_recently_updated_proc ||= proc do |data_row, key_name|
    (Date.parse(data_row[:status_date]) >= last_update_market_minimal_date) && 
    data_row[:status] == ACTIVE_MARKET_STATUS_NAME &&
    !data_row[key_name].nil?
  end
end