Class: RSpotify::Base
- Inherits:
-
Object
- Object
- RSpotify::Base
- Defined in:
- lib/rspotify/base.rb
Direct Known Subclasses
Album, Artist, AudioFeatures, Category, Device, Player, Playlist, RecommendationSeed, Recommendations, Track, User
Instance Attribute Summary collapse
-
#external_urls ⇒ Hash
Known external URLs for object.
-
#href ⇒ String
A link to the Web API endpoint.
-
#id ⇒ String
The Spotify ID for the object.
-
#type ⇒ String
The object type (artist, album, etc.).
-
#uri ⇒ String
The Spotify URI for the object.
Class Method Summary collapse
-
.find(ids, type, market: nil) ⇒ Album, ...
Returns RSpotify object(s) with id(s) and type provided.
-
.search(query, types, limit: 20, offset: 0, market: nil) ⇒ Array<Album>, ...
Returns array of RSpotify objects matching the query, ordered by popularity.
Instance Method Summary collapse
-
#complete! ⇒ Object
When an object is obtained undirectly, Spotify usually returns a simplified version of it.
-
#embed(options = {}) ⇒ Object
Generate an embed code for an album, artist or track.
-
#initialize(options = {}) ⇒ Base
constructor
A new instance of Base.
-
#method_missing(method_name, *args) ⇒ Object
Used internally to retrieve an object’s instance variable.
-
#respond_to?(method_name, include_private_methods = false) ⇒ Boolean
Overrides Object#respond_to? to also consider methods dynamically generated by #method_missing.
Constructor Details
#initialize(options = {}) ⇒ Base
Returns a new instance of Base.
119 120 121 122 123 124 125 |
# File 'lib/rspotify/base.rb', line 119 def initialize( = {}) @external_urls = ['external_urls'] @href = ['href'] @id = ['id'] @type = ['type'] @uri = ['uri'] end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args) ⇒ Object
Used internally to retrieve an object’s instance variable. If instance variable equals nil, calls #complete! on object and retrieve it again.
191 192 193 194 195 196 197 198 199 200 |
# File 'lib/rspotify/base.rb', line 191 def method_missing(method_name, *args) attr = "@#{method_name}" return super if method_name.match(/[\?!]$/) || !instance_variable_defined?(attr) attr_value = instance_variable_get attr return attr_value if !attr_value.nil? || @id.nil? complete! instance_variable_get attr end |
Instance Attribute Details
#external_urls ⇒ Hash
Known external URLs for object
8 9 10 |
# File 'lib/rspotify/base.rb', line 8 def external_urls @external_urls end |
#href ⇒ String
A link to the Web API endpoint
8 9 10 |
# File 'lib/rspotify/base.rb', line 8 def href @href end |
#id ⇒ String
The Spotify ID for the object
8 9 10 |
# File 'lib/rspotify/base.rb', line 8 def id @id end |
#type ⇒ String
The object type (artist, album, etc.)
8 9 10 |
# File 'lib/rspotify/base.rb', line 8 def type @type end |
#uri ⇒ String
The Spotify URI for the object
8 9 10 |
# File 'lib/rspotify/base.rb', line 8 def uri @uri end |
Class Method Details
.find(ids, type, market: nil) ⇒ Album, ...
Returns RSpotify object(s) with id(s) and type provided
26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/rspotify/base.rb', line 26 def self.find(ids, type, market: nil) case ids when Array if type == 'user' warn 'Spotify API does not support finding several users simultaneously' return false end limit = (type == 'album' ? 20 : 50) find_many(ids, type, market: market) when String id = ids find_one(id, type, market: market) end end |
.search(query, types, limit: 20, offset: 0, market: nil) ⇒ Array<Album>, ...
Returns array of RSpotify objects matching the query, ordered by popularity. It’s also possible to find the total number of search results for the query
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/rspotify/base.rb', line 92 def self.search(query, types, limit: 20, offset: 0, market: nil) query = CGI.escape query types.gsub!(/\s+/, '') url = "search?q=#{query}&type=#{types}"\ "&limit=#{limit}&offset=#{offset}" response = if market.is_a? Hash url << '&market=from_token' User.oauth_get(market[:from].id, url) else url << "&market=#{market}" if market RSpotify.get(url) end return response if RSpotify.raw_response types = types.split(',') result = types.flat_map do |type| type_class = RSpotify.const_get(type.capitalize) response["#{type}s"]['items'].map { |i| type_class.new i } end insert_total(result, types, response) result end |
Instance Method Details
#complete! ⇒ Object
It is seldom necessary to use this method explicitly, since RSpotify takes care of it automatically when needed (see #method_missing)
When an object is obtained undirectly, Spotify usually returns a simplified version of it. This method updates it into a full object, with all attributes filled.
177 178 179 |
# File 'lib/rspotify/base.rb', line 177 def complete! initialize RSpotify.get("#{@type}s/#{@id}") end |
#embed(options = {}) ⇒ Object
Generate an embed code for an album, artist or track. For full documentation on widgets/embeds, check out the official documentation:
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/rspotify/base.rb', line 139 def ( = {}) = { width: 300, height: 380, frameborder: 0, allowtransparency: true, view: nil, theme: nil, } = .merge() src = "https://embed.spotify.com/?uri=#{@uri}" src << "&view=#{[:view]}" unless [:view].nil? src << "&theme=#{[:theme]}" unless [:theme].nil? template = <<-HTML <iframe src="#{src}" width="#{[:width]}" height="#{[:height]}" frameborder="#{[:frameborder]}" allowtransparency="#{[:allowtransparency]}"> </iframe> HTML template.gsub(/\s+/, " ").strip end |
#respond_to?(method_name, include_private_methods = false) ⇒ Boolean
Overrides Object#respond_to? to also consider methods dynamically generated by #method_missing
203 204 205 206 207 |
# File 'lib/rspotify/base.rb', line 203 def respond_to?(method_name, include_private_methods = false) attr = "@#{method_name}" return super if method_name.match(/[\?!]$/) || !instance_variable_defined?(attr) true end |