From 1aeba649c120b9a186df4d83e0ef737359be1392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89lisson=20Michael?= Date: Mon, 2 Apr 2018 21:31:50 -0300 Subject: [PATCH] =?UTF-8?q?Adiciona=20Resolu=C3=A7=C3=A3o=20'Ruim'=20para?= =?UTF-8?q?=20#27=20Realizada=20em=20Sala=20de=20Aula?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- album_de_musicas/2018-1/elisson.rb | 95 ++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 album_de_musicas/2018-1/elisson.rb diff --git a/album_de_musicas/2018-1/elisson.rb b/album_de_musicas/2018-1/elisson.rb new file mode 100644 index 0000000..69fe95b --- /dev/null +++ b/album_de_musicas/2018-1/elisson.rb @@ -0,0 +1,95 @@ +class Album + attr_reader :titulo, :ano + attr_accessor :albuns_musicas + def initialize(titulo, ano) + @titulo = titulo + @ano = ano + @albuns_musicas = [] + end + + def incluir(musica) + AlbumMusica.new(self, musica).incluir + end + + def musicas + @albuns_musicas.map(&:musica) + end + + def artistas + musicas.map(&:artistas).flatten.uniq + end +end + +class AlbumMusica + attr_reader :album, :musica + def initialize(album, musica) + @album = album + @musica = musica + end + + def incluir + album.albuns_musicas << self + musica.albuns_musicas << self + end +end + +class Musica + attr_reader :nome, :segundos + attr_accessor :albuns_musicas, :artistas_musicas + def initialize(nome, segundos) + @nome = nome + @segundos = segundos + @albuns_musicas = [] + @artistas_musicas = [] + end + + def duracao_em_minutos + "#{segundos / 60}:#{segundos % 60}" + end + + def incluir(album_ou_artista) + album_ou_artista.incluir(self) + end + + def albuns + @albuns_musicas.map(&:album) + end + + def artistas + @artistas_musicas.map(&:artista) + end +end + +class ArtistaMusica + attr_reader :artista, :musica + def initialize(artista, musica) + @artista = artista + @musica = musica + end + + def incluir + artista.artistas_musicas << self + musica.artistas_musicas << self + end +end + +class Artista + attr_reader :nome + attr_accessor :artistas_musicas + def initialize(nome) + @nome = nome + @artistas_musicas = [] + end + + def incluir(musica) + ArtistaMusica.new(self, musica).incluir + end + + def albuns + musicas.map(&:albuns).flatten.uniq + end + + def musicas + @artistas_musicas.map(&:musica) + end +end