Sha256: fb6dbf6503ac61ba7501c5f1bc6ff5292562ba0fe43525a7179d8793155aadb8

Contents?: true

Size: 1.25 KB

Versions: 3

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

module AppleMusic
  class SearchResponse < Response
    def initialize(props = {})
      @results = SearchResult.new(props['results'])
      super
    end
  end

  module Search
    class << self
      # e.g. AppleMusic::Search.search(term: 'aaamyyy')
      # https://developer.apple.com/documentation/applemusicapi/search_for_catalog_resources
      def search(**options)
        options[:term] = format_term(options[:term]) if options[:term]

        storefront = Storefront.lookup(options.delete(:storefront))
        response = AppleMusic.get("catalog/#{storefront}/search", options)
        SearchResult.new(response.body['results'] || {})
      end

      # e.g. AppleMusic::Search.search_hints(term: 'aaamyyy')
      # https://developer.apple.com/documentation/applemusicapi/get_catalog_search_hints
      def search_hints(**options)
        options[:term] = format_term(options[:term]) if options[:term]
        storefront = Storefront.lookup(options.delete(:storefront))
        response = AppleMusic.get("catalog/#{storefront}/search/hints", options)
        response.body.dig('results', 'terms') || []
      end

      private

      def format_term(term)
        term.is_a?(Array) ? term.join('+') : term
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
apple_music-0.3.1 lib/apple_music/search.rb
apple_music-0.3.0 lib/apple_music/search.rb
apple_music-0.2.0 lib/apple_music/search.rb