Class: TechRadar::Radar

Inherits:
Object
  • Object
show all
Defined in:
app/models/tech_radar/radar.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRadar

Returns a new instance of Radar.



4
5
6
# File 'app/models/tech_radar/radar.rb', line 4

def initialize
  @data = YAML.load_file(Rails.root + "config" + "tech-radar.yml")
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



3
4
5
# File 'app/models/tech_radar/radar.rb', line 3

def data
  @data
end

Instance Method Details

#quadrant(quadrant_name) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/models/tech_radar/radar.rb', line 14

def quadrant(quadrant_name)
  quadrant = @data.fetch(quadrant_name)
  by_ring = {}
  quadrant.each do |(ring,technologies)|
    by_ring[ring] ||= []
    (technologies || {}).each do |(name,data)|
      by_ring[ring] << Technology.new(name: name,
                                      ring: ring,
                                      quadrant: quadrant_name,
                                      purpose: data["purpose"],
                                      more_details_url: data["more_details_url"],
                                      more_details_summary: data["more_details_summary"],
                                      why_url: data["why_url"],
                                      why_summary: data["why_summary"])
    end
  end
  TechRadar::Quadrant.new(
    name: quadrant_name, 
    rings: by_ring.map { |ring_name,technologies| 
      TechRadar::Ring.new(name: ring_name, technologies: technologies.sort_by { |tech| tech.name.downcase }) 
    }
  )
end

#quadrantsObject



8
9
10
11
12
# File 'app/models/tech_radar/radar.rb', line 8

def quadrants
  @data.keys.map { |quadrant_name|
    quadrant(quadrant_name)
  }
end

#ring(ring_name) ⇒ Object



44
45
46
# File 'app/models/tech_radar/radar.rb', line 44

def ring(ring_name)
  rings.detect { |ring| ring.name == ring_name }
end

#ringsObject



38
39
40
41
42
# File 'app/models/tech_radar/radar.rb', line 38

def rings
  quadrants.map(&:rings).flatten.group_by(&:name).map { |(ring_name,rings)|
    TechRadar::Ring.new(name: ring_name,technologies: rings.map(&:technologies).flatten.sort_by { |tech| tech.name.downcase })
  }
end

#technologiesObject



48
49
50
# File 'app/models/tech_radar/radar.rb', line 48

def technologies
  quadrants.map(&:rings).flatten.map(&:technologies).flatten.sort_by { |technology| technology.name.downcase }
end

#technology(name) ⇒ Object



52
53
54
# File 'app/models/tech_radar/radar.rb', line 52

def technology(name)
  technologies.detect { |technology| technology.name == name }
end