Sha256: c99028dec7466609f8841057e46cbd1231492a41fb406eef6c80b4d6260dfe56

Contents?: true

Size: 1.44 KB

Versions: 4

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

require 'ehbrs_ruby_utils/core_ext'
require 'ehbrs_ruby_utils/music/lyrics_book/resource'

module EhbrsRubyUtils
  module Music
    class LyricsBook
      class Song < ::EhbrsRubyUtils::Music::LyricsBook::Resource
        enable_simple_cache
        delegate :book, to: :album
        delegate :provider, to: :book
        delegate :tag, :to_s, to: :container

        def album
          parent
        end

        def lyrics
          fetch_lyrics unless lyrics_cached?
          cached_lyrics
        end

        def valid?
          tag.present?
        end

        def lyrics_cached?
          lyrics_cache.stored?
        end

        def cached_lyrics
          ::YAML.load_file(lyrics_cache.content_path)
        end

        def header_title
          "#{number} - #{title}"
        end

        delegate :title, to: :tag

        private

        def container_uncached
          ::EhbrsRubyUtils::Videos::Container.new(path)
        end

        def fetch_lyrics
          lyrics = fetched_lyrics
          lyrics_cache.write(lyrics.to_yaml)
        end

        def fetched_lyrics
          container.lyrics_by_provider(provider)
        end

        def lyrics_cache
          (%w[artist album title].map { |k| tag.send(k) } + [provider.identifier])
            .inject(fs_cache) { |a, e| a.child(e) }
        end

        def number_uncached
          previous.if_present(0, &:number) + 1
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ehbrs_ruby_utils-0.17.2 lib/ehbrs_ruby_utils/music/lyrics_book/song.rb
ehbrs_ruby_utils-0.17.1 lib/ehbrs_ruby_utils/music/lyrics_book/song.rb
ehbrs_ruby_utils-0.17.0 lib/ehbrs_ruby_utils/music/lyrics_book/song.rb
ehbrs_ruby_utils-0.16.1 lib/ehbrs_ruby_utils/music/lyrics_book/song.rb