]> git.r.bdr.sh - rbdr/lyricli.rb/blob - lib/lyricli/lyricli.rb
Add dangling files
[rbdr/lyricli.rb] / lib / lyricli / lyricli.rb
1 module Lyricli
2
3 # This class has the basic logic for extracting the lyrics and controlling the
4 # application
5 class Lyricli
6
7 # Constructor, initializes `@source_manager`
8 def initialize
9 @source_manager = SourceManager.new
10 end
11
12 # Raises an InvalidLyricsError which means we did not get any valid
13 # artist/song from any of the sources
14 #
15 # @raise [Lyricli::Exceptions::InvalidLyricsError] because we found nothing
16 def exit_with_error
17 raise Exceptions::InvalidLyricsError
18 end
19
20 # Extracts the current track, validates it and requests the lyrics from our
21 # LyricsEngine
22 #
23 # @return [String] the found lyrics, or a string indicating none were found
24 def get_lyrics(show_title=false)
25
26 begin
27 set_current_track
28 check_params
29 rescue Exceptions::InvalidLyricsError
30 return "No Artist/Song could be found :("
31 end
32
33 engine = LyricsEngine.new(@current_track[:artist], @current_track[:song])
34
35 begin
36 lyrics_output = engine.get_lyrics
37
38 if show_title
39 lyrics_title = "#{@current_track[:artist]} - #{@current_track[:song]}"
40 lyrics_output = "#{lyrics_title}\n\n#{lyrics_output}"
41 end
42
43 return lyrics_output
44 rescue Exceptions::LyricsNotFoundError
45 return "Lyrics not found :("
46 end
47 end
48
49 # Set the `@current_track` instance variable by asking the SourceManager for
50 # its current track
51 def set_current_track
52 @current_track = @source_manager.current_track
53 end
54
55 # Exits with error when there is an empty field from the current track.
56 def check_params
57 self.exit_with_error unless @current_track
58 self.exit_with_error if @current_track[:artist].nil? or @current_track[:artist].empty?
59 self.exit_with_error if @current_track[:song].nil? or @current_track[:song].empty?
60 end
61 end
62 end