Module: DinoManagement

Defined in:
lib/dino_management.rb,
lib/dino_management/version.rb

Overview

Dino Management

Defined Under Namespace

Classes: Error

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.calculate_age_metrics(dino) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/dino_management.rb', line 38

def self.calculate_age_metrics(dino)
  dino['age'] = dino['age'].to_i if dino['age'].is_a?(String)

  return (dino['age'] / 2).to_i if dino['comment'] == 'Alive' && dino['age'] > 1

  0
end

.calculate_health(dino) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/dino_management.rb', line 26

def self.calculate_health(dino)
  return 0 unless dino['age'].nil? || dino['age'].positive?

  return (100 - dino['age']) / 2 if dino['category'] == 'herbivore'

  (100 - dino['age']) if dino['category'] == 'carnivore'
end

.category_summary(dinos) ⇒ Object



46
47
48
49
50
# File 'lib/dino_management.rb', line 46

def self.category_summary(dinos)
  dinos.group_by { |dino| dino['category'] }.map do |category, dino_list|
    { category: category, count: dino_list.count }
  end
end

.determine_status(health) ⇒ Object



34
35
36
# File 'lib/dino_management.rb', line 34

def self.determine_status(health)
  health.positive? ? 'Alive' : 'Dead'
end

.format_summary(categories) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/dino_management.rb', line 52

def self.format_summary(categories)
  summary = {}
  categories.each do |category_metrics|
    summary[category_metrics[:category]] = category_metrics[:count]
  end
  summary
end

.run(dinos) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/dino_management.rb', line 9

def self.run(dinos)
  return { 'dinos' => [], 'summary' => {} } if dinos.empty? || dinos.nil?

  dinos.each do |dino|
    dino['health'] = calculate_health(dino)
    dino['comment'] = determine_status(dino['health'])
    dino['age_metrics'] = calculate_age_metrics(dino)
  end

  categories = category_summary(dinos) if dinos&.length&.positive?

  {
    'dinos' => dinos,
    'summary' => format_summary(categories)
  }
end