class Notu::RecentTracks

Attributes

user_api[R]

Public Class Methods

new(user_api) click to toggle source
# 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

Public Instance Methods

each() { |track(artist:, title:)| ... } click to toggle source
# 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