class Songbook::Song

Attributes

chords[R]
details[R]
lyrics[R]
title[R]

Public Class Methods

new(title:, details:, chords:, lyrics:) click to toggle source
# File lib/songbook/song.rb, line 9
def initialize(title:, details:, chords:, lyrics:)
  @title = title
  @details = details
  @chords = chords
  @lyrics = lyrics
end

Public Instance Methods

verses() click to toggle source
# File lib/songbook/song.rb, line 16
def verses
  lyrics.map do |lyrics_verse|
    verse_title = find_verse_title(lyrics_verse)
    verse_lyrics = find_verse_lyrics(lyrics_verse)

    Verse.new(
      title: verse_title,
      lyrics: verse_lyrics,
      chords: chords[verse_title]
    )
  end
end

Private Instance Methods

find_matching_lyrics_verse(verse_title) click to toggle source
# File lib/songbook/song.rb, line 51
def find_matching_lyrics_verse(verse_title)
  lyrics
    .select { |lyrics_verse_i| lyrics_verse_i.is_a?(Hash) }
    .find do |lyrics_verse_i|
      lyrics_verse_i.keys.first == verse_title
    end
end
find_verse_lyrics(lyrics_verse) click to toggle source
# File lib/songbook/song.rb, line 41
def find_verse_lyrics(lyrics_verse)
  if lyrics_verse.is_a?(String)
    find_matching_lyrics_verse(lyrics_verse).values.first
  elsif lyrics_verse.is_a?(Hash)
    lyrics_verse.values.first
  else
    raise "Unknown lyrics_verse type: #{lyrics_verse.class}"
  end
end
find_verse_title(lyrics_verse) click to toggle source
# File lib/songbook/song.rb, line 31
def find_verse_title(lyrics_verse)
  if lyrics_verse.is_a?(String)
    lyrics_verse
  elsif lyrics_verse.is_a?(Hash)
    lyrics_verse.keys.first
  else
    raise "Unknown lyrics_verse type: #{lyrics_verse.class}"
  end
end