Class: Notu::RecentTracks

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/notu/recent_tracks.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user_api) ⇒ RecentTracks

Returns a new instance of RecentTracks.

Raises:

  • (ArgumentError)


9
10
11
12
# File 'lib/notu/recent_tracks.rb', line 9

def initialize(user_api)
  raise ArgumentError.new("#{self.class}#user_api must be specified") unless user_api
  @user_api = user_api
end

Instance Attribute Details

#user_apiObject (readonly)

Returns the value of attribute user_api.



7
8
9
# File 'lib/notu/recent_tracks.rb', line 7

def user_api
  @user_api
end

Instance Method Details

#eachObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/notu/recent_tracks.rb', line 14

def each
  return unless block_given?
  pages_count = nil
  page = 1
  loop do
    json = JsonDocument.get(user_api.url(limit: 50, method: 'user.getRecentTracks', page:))
    pages_count = json['recenttracks']['@attr']['totalPages'].to_i
    json['recenttracks']['track'].each do |track_json|
      artist = track_json['artist']['#text'] || next
      title = track_json['name'] || next
      yield(Track.new(artist:, title:))
    end
    page += 1
    break if page > pages_count
  end
  nil
end