Sha256: 01888a7d559f44749aeba10bb4882638183f7b3ae894817ebcef5c8d4be7728c

Contents?: true

Size: 1.23 KB

Versions: 2

Compression:

Stored size: 1.23 KB

Contents

require 'addressable/uri'

module ItunesApi
  module Music
    # Retrieve apple ids and albums of artists.
    class Artist
      include Request

      def initialize(artist_name, apple_id = nil)
        @artist_name = artist_name
        @apple_id = apple_id
      end

      def albums(limit = 3)
        @albums ||= filtered_results
                    .sort_by { |result| result['releaseDate'] }
                    .reverse
                    .first(limit)
                    .map { |result| album(result) }
      end

      def apple_ids
        @apple_ids ||= filtered_results.collect do |album|
          album['artistId']
        end.compact.uniq.sort
      end

      private

      def filtered_results
        results.find_all do |result|
          result['collectionType'] == 'Album' &&
            (!@apple_id || result['artistId'] == @apple_id)
        end
      end

      def album(result)
        Album.new(
          result['collectionName'],
          {
            artist_id: @apple_id,
            album_id: result['collectionId']
          }
        )
      end

      def query_values
        {
          attribute: 'artistTerm',
          entity: 'album',
          term: @artist_name
        }.merge(super)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
itunes_api-0.1.0 lib/itunes_api/music/artist.rb
itunes_api-0.0.4 lib/itunes_api/music/artist.rb