Module: PredictabilityEngine::RawDataExporter

Defined in:
lib/predictability_engine/raw_data_exporter.rb

Constant Summary collapse

DONE_THRESHOLDS =
[1, 7, 14, 21, 28].freeze
DONE_THRESHOLD_LABELS =
(DONE_THRESHOLDS.map { |d| d == 1 ? '≤ 1 day' : "#{d} days" } +
["> #{DONE_THRESHOLDS.last} days"]).freeze
HEADERS =
[
  'ID', 'Title', 'Type', 'Priority',
  'Start Date', 'End Date', 'Status',
  'YYYY-Week', 'YYYY-MM', 'YYYY',
  'Cycle Time (days)', 'Current Age (days)', 'URL',
  'Done ≤ 1 day', 'Done ≤ 7 days', 'Done ≤ 14 days',
  'Done ≤ 21 days', 'Done ≤ 28 days'
].freeze

Class Method Summary collapse

Class Method Details

.generate_csv(items) ⇒ Object



39
40
41
42
43
44
# File 'lib/predictability_engine/raw_data_exporter.rb', line 39

def self.generate_csv(items)
  CSV.generate do |csv|
    csv << HEADERS
    items.each { |item| csv << item_row(item) }
  end
end

.item_row(item) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/predictability_engine/raw_data_exporter.rb', line 20

def self.item_row(item)
  today = PredictabilityEngine.today
  ct    = item.cycle_time
  age   = item.completed? ? nil : item.age(today)
  flags = DONE_THRESHOLDS.map { |d| ct ? ct <= d : nil }
  date  = item.end_date
  [item.id, item.title, item.type, item.priority,
   item.start_date, item.end_date,
   (item.completed? ? 'Done' : 'In Progress'),
   PredictabilityEngine.format_year_week(date),
   PredictabilityEngine.format_year_month(date),
   date&.to_date&.year,
   ct, age, item.url.to_s, *flags]
end

.threshold_index(cycle_time) ⇒ Object



35
36
37
# File 'lib/predictability_engine/raw_data_exporter.rb', line 35

def self.threshold_index(cycle_time)
  DONE_THRESHOLDS.index { |d| cycle_time <= d } || DONE_THRESHOLDS.size
end