rspotify 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b8f239c93e7f8445a6ab7963b82551dae8d2fa5
4
- data.tar.gz: 0201d9d38995ffcd8b7d218402e5ef047898b890
3
+ metadata.gz: 099ef6df09a9e5e69ec2765409c9d4262f4e5e30
4
+ data.tar.gz: 9f00aa8931f67d946b158391c7afa99e05fad61b
5
5
  SHA512:
6
- metadata.gz: 318e529c2896ad7563d85c64b74833df356d2987a78fabb1f207f9ba7eb8ecd8f2a94d78797f1eb316c46964a48c110d7a35723c4db8a633e90c0fd29133f3b7
7
- data.tar.gz: 0433cdf3d380e6d945ba3b3ee7357111a127b2d2d1f2d043f9f498e9ca14646f065116994e6823491b1c5cdcd7e3738418615c8668f240714155af45c165ed8c
6
+ metadata.gz: 451f177d91bcf3cb1025cac3d448b0a69a0216faf51c0f6285a0499ce36435fc6aa04b5d1de6890617339f3f50164e0c71ffaa9697430eb2429e0f8e05d98e9e
7
+ data.tar.gz: 759310516f92db6b07e71e8afd8ca4b4da649376fff85580d19ea394d0f0d6b34245e68dd1e5bafb27abd55950eee5c3ee32f3e3258802af5f8a025bef91ea1c
data/README.md CHANGED
@@ -137,22 +137,24 @@ get '/auth/spotify/callback', to: 'users#spotify'
137
137
 
138
138
  Remember you need to tell Spotify this address is white-listed. You can do this by adding it to the Redirect URIs list in your [application page](https://developer.spotify.com/my-applications). An example of Redirect URI would be http://localhost:3000/auth/spotify/callback.
139
139
 
140
- Finally, create a new RSpotify User with the token received:
140
+ Finally, create a new RSpotify User with the response received:
141
141
 
142
142
  ```ruby
143
143
  class UsersController < ApplicationController
144
144
  def spotify
145
145
  spotify_user = RSpotify::User.new(request.env['omniauth.auth'])
146
- # Now you can create playlists for the user and much more!
146
+ # Now you can access user's private data, create playlists and much more
147
147
 
148
+ # Access private data (Check doc for all attributes)
149
+ spotify_user.country #=> "US"
150
+ spotify_user.email #=> "example@email.com"
151
+
152
+ # Create playlist in user's Spotify account
148
153
  playlist = spotify_user.create_playlist!('my-awesome-playlist')
149
- # Directly creates playlist in user's Spotify account and returns it
150
154
 
155
+ # Add tracks to a playlist in user's Spotify account
151
156
  tracks = RSpotify::Track.search('Know')
152
-
153
157
  playlist.add_tracks!(tracks)
154
- # user's Spotify account now has a playlist with songs containing "Know" in the name
155
-
156
158
  playlist.tracks.first.name #=> "Somebody That I Used To Know"
157
159
  end
158
160
  end
@@ -2,13 +2,13 @@ module RSpotify
2
2
 
3
3
  # @attr [String] album_type The type of the album (album, single, compilation)
4
4
  # @attr [Array<Artist>] artists The artists of the album
5
- # @attr [Array<String>] available_markets The markets in which the album is available: {http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 ISO 3166-1 alpha-2 country codes}
5
+ # @attr [Array<String>] available_markets The markets in which the album is available. See {http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 ISO 3166-1 alpha-2 country codes}
6
6
  # @attr [Hash] external_ids Known external IDs for the album
7
- # @attr [Array<String>] genres A list of the genres used to classify the album (If not yet classified, the array is empty)
7
+ # @attr [Array<String>] genres A list of the genres used to classify the album. If not yet classified, the array is empty
8
8
  # @attr [Array<Hash>] images The cover art for the album in various sizes, widest first
9
9
  # @attr [String] name The name of the album
10
- # @attr [Integer] popularity The popularity of the album - The value will be between 0 and 100, with 100 being the most popular
11
- # @attr [String] release_date The date the album was first released, for example "1981-12-15" - Depending on the precision, it might be shown as "1981" or "1981-12"
10
+ # @attr [Integer] popularity The popularity of the album. The value will be between 0 and 100, with 100 being the most popular
11
+ # @attr [String] release_date The date the album was first released, for example "1981-12-15". Depending on the precision, it might be shown as "1981" or "1981-12"
12
12
  # @attr [String] release_date_precision The precision with which release_date value is known: "year", "month", or "day"
13
13
  # @attr [Array<Track>] tracks The tracks of the album.
14
14
  class Album < Base
@@ -33,7 +33,7 @@ module RSpotify
33
33
 
34
34
  # Returns array of Album objects matching the query, ordered by popularity
35
35
  #
36
- # @param query [String] The search query's keywords.
36
+ # @param query [String] The search query's keywords. See the q description in {https://developer.spotify.com/web-api/search-item here} for details.
37
37
  # @param limit [Integer] Maximum number of albums to return. Minimum: 1. Maximum: 50.
38
38
  # @param offset [Integer] The index of the first album to return. Use with limit to get the next set of albums.
39
39
  # @return [Array<Album>]
@@ -1,9 +1,9 @@
1
1
  module RSpotify
2
2
 
3
- # @attr [Array<String>] genres A list of the genres used to classify the album (If not yet classified, the array is empty)
3
+ # @attr [Array<String>] genres A list of the genres used to classify the album. If not yet classified, the array is empty.
4
4
  # @attr [Array<Hash>] images The cover art for the album in various sizes, widest first
5
5
  # @attr [String] name The name of the album
6
- # @attr [Integer] popularity The popularity of the album - The value will be between 0 and 100, with 100 being the most popular
6
+ # @attr [Integer] popularity The popularity of the album. The value will be between 0 and 100, with 100 being the most popular
7
7
  class Artist < Base
8
8
 
9
9
  # Returns Artist object(s) with id(s) provided
@@ -26,7 +26,7 @@ module RSpotify
26
26
 
27
27
  # Returns array of Artist objects matching the query, ordered by popularity
28
28
  #
29
- # @param query [String] The search query's keywords.
29
+ # @param query [String] The search query's keywords. See the q description in {https://developer.spotify.com/web-api/search-item here} for details.
30
30
  # @param limit [Integer] Maximum number of artists to return. Minimum: 1. Maximum: 50.
31
31
  # @param offset [Integer] The index of the first artist to return. Use with limit to get the next set of artists.
32
32
  # @return [Array<Artist>]
data/lib/rspotify/base.rb CHANGED
@@ -42,20 +42,18 @@ module RSpotify
42
42
  end
43
43
 
44
44
  def self.find_many(ids, type)
45
- pluralized_type = "#{type}s"
46
45
  type_class = RSpotify.const_get(type.capitalize)
47
46
 
48
- path = "#{pluralized_type}?ids=#{ids.join ','}"
47
+ path = "#{type}s?ids=#{ids.join ','}"
49
48
  json = RSpotify.get path
50
- json[pluralized_type].map { |t| type_class.new t }
49
+ json["#{type}s"].map { |t| type_class.new t }
51
50
  end
52
51
  private_class_method :find_many
53
52
 
54
53
  def self.find_one(id, type)
55
- pluralized_type = "#{type}s"
56
54
  type_class = RSpotify.const_get(type.capitalize)
57
55
 
58
- path = "#{pluralized_type}/#{id}"
56
+ path = "#{type}s/#{id}"
59
57
  json = RSpotify.get path
60
58
  type_class.new json
61
59
  end
@@ -63,11 +61,11 @@ module RSpotify
63
61
 
64
62
  # Returns array of RSpotify objects matching the query, ordered by popularity
65
63
  #
66
- # @param query [String] The search query's keywords.
67
- # @param type [String] Valid types are: album, artist and track
64
+ # @param query [String] The search query's keywords. See the q description in {https://developer.spotify.com/web-api/search-item here} for details.
65
+ # @param type [String] Valid types are: album, artist and track. Separate multiple types with commas.
68
66
  # @param limit [Integer] Maximum number of objects to return. Minimum: 1. Maximum: 50.
69
67
  # @param offset [Integer] The index of the first object to return. Use with limit to get the next set of objects.
70
- # @return [Array<Album>, Array<Artist>, Array<Track>]
68
+ # @return [Array<Base>]
71
69
  #
72
70
  # @example
73
71
  # artists = RSpotify::Base.search('Arctic', 'artist')
@@ -77,25 +75,26 @@ module RSpotify
77
75
  #
78
76
  # albums = RSpotify::Base.search('AM', 'album', 10)
79
77
  # albums.size #=> 10
80
- def self.search(query, type, limit = 20, offset = 0)
78
+ def self.search(query, types, limit = 20, offset = 0)
81
79
  if limit < 1 || limit > 50
82
80
  warn 'Limit must be between 1 and 50'
83
81
  return false
84
82
  end
85
83
 
86
- pluralized_type = "#{type}s"
87
- type_class = RSpotify.const_get(type.capitalize)
84
+ types.gsub!(/\s+/, '')
88
85
 
89
86
  json = RSpotify.get 'search',
90
87
  params: {
91
88
  q: query,
92
- type: type,
89
+ type: types,
93
90
  limit: limit,
94
91
  offset: offset
95
92
  }
96
93
 
97
- items = json[pluralized_type]['items']
98
- items.map { |item| type_class.new item }
94
+ types.split(',').flat_map do |type|
95
+ type_class = RSpotify.const_get(type.capitalize)
96
+ json["#{type}s"]['items'].map { |item| type_class.new item }
97
+ end
99
98
  end
100
99
 
101
100
  def initialize(options = {})
@@ -117,8 +116,7 @@ module RSpotify
117
116
  # track.complete!
118
117
  # track.instance_variable_get("@popularity") #=> 62
119
118
  def complete!
120
- pluralized_type = "#{@type}s"
121
- initialize RSpotify.get("#{pluralized_type}/#{@id}")
119
+ initialize RSpotify.get("#{type}s/#{@id}")
122
120
  end
123
121
 
124
122
  # Used internally to retrieve an object's instance variable. If instance
@@ -50,7 +50,23 @@ module RSpotify
50
50
  super(options)
51
51
  end
52
52
 
53
- #TODO doc
53
+ # Adds one or more tracks to a playlist in user's Spotify account. This method is only available when
54
+ # the current user has granted access to the *playlist-modify* and *playlist-modify-private* scopes.
55
+ #
56
+ # @param tracks [Array<Track>] Tracks to be added. Maximum: 100 per request
57
+ # @param position [Integer, NilClass] The position to insert the tracks, a zero-based index. Default: tracks are appended to the playlist
58
+ # @return [NilClass]
59
+ #
60
+ # @example
61
+ # tracks = RSpotify::Track.search('Know', 30)
62
+ # playlist = user.create_playlist!('my-awesome-playlist')
63
+ #
64
+ # playlist.add_tracks!(tracks)
65
+ # playlist.tracks.size #=> 30
66
+ # playlist.tracks.first.name #=> "Somebody That I Used To Know"
67
+ #
68
+ # playlist.add_tracks!(tracks, position: 20)
69
+ # playlist.tracks[20].name #=> "Somebody That I Used To Know"
54
70
  def add_tracks!(tracks, position: nil)
55
71
  if tracks.size > 100
56
72
  warn 'Too many tracks requested. Maximum: 100'
@@ -2,15 +2,15 @@ module RSpotify
2
2
 
3
3
  # @attr [Album] album The album on which the track appears
4
4
  # @attr [Array<Artist>] artists The artists who performed the track
5
- # @attr [Array<String>] available_markets The markets in which the track can be played: {http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 ISO 3166-1 alpha-2 country codes}
6
- # @attr [Integer] disc_number The disc number (usually 1 unless the album consists of more than one disc)
5
+ # @attr [Array<String>] available_markets The markets in which the track can be played. See {http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 ISO 3166-1 alpha-2 country codes}
6
+ # @attr [Integer] disc_number The disc number. Usually 1 unless the album consists of more than one disc
7
7
  # @attr [Integer] duration_ms The track length in milliseconds
8
- # @attr [Boolean] explicit Whether or not the track has explicit lyrics (true = yes it does; false = no it does not OR unknown)
8
+ # @attr [Boolean] explicit Whether or not the track has explicit lyrics. true = yes it does; false = no it does not OR unknown
9
9
  # @attr [Hash] external_ids Known external IDs for the track
10
10
  # @attr [String] name The name of the track
11
- # @attr [Integer] popularity The popularity of the track - The value will be between 0 and 100, with 100 being the most popular
11
+ # @attr [Integer] popularity The popularity of the track. The value will be between 0 and 100, with 100 being the most popular
12
12
  # @attr [String] preview_url A link to a 30 second preview (MP3 format) of the track
13
- # @attr [Integer] track_number The number of the track - If an album has several discs, the track number is the number on the specified disc
13
+ # @attr [Integer] track_number The number of the track. If an album has several discs, the track number is the number on the specified disc
14
14
  class Track < Base
15
15
 
16
16
  # Returns Track object(s) with id(s) provided
@@ -33,7 +33,7 @@ module RSpotify
33
33
 
34
34
  # Returns array of Track objects matching the query, ordered by popularity
35
35
  #
36
- # @param query [String] The search query's keywords.
36
+ # @param query [String] The search query's keywords. See the q description in {https://developer.spotify.com/web-api/search-item here} for details.
37
37
  # @param limit [Integer] Maximum number of tracks to return. Minimum: 1. Maximum: 50.
38
38
  # @param offset [Integer] The index of the first track to return. Use with limit to get the next set of tracks.
39
39
  # @return [Array<Track>]
data/lib/rspotify/user.rb CHANGED
@@ -1,5 +1,10 @@
1
1
  module RSpotify
2
2
 
3
+ # @attr [String] country The country of the user, as set in the user's account profile. An {http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 ISO 3166-1 alpha-2 country code}. This field is only available when the current user has granted access to the *user-read-private* scope.
4
+ # @attr [String] display_name The name displayed on the user's profile. This field is only available when the current user has granted access to the *user-read-private* scope.
5
+ # @attr [String] email The user's email address. This field is only available when the current user has granted access to the *user-read-email* scope.
6
+ # @attr [Array] images The user's profile image. This field is only available when the current user has granted access to the *user-read-private* scope.
7
+ # @attr [String] product The user's Spotify subscription level: "premium", "free", etc. This field is only available when the current user has granted access to the *user-read-private* scope.
3
8
  class User < Base
4
9
 
5
10
  # Returns User object with id provided
@@ -47,7 +52,21 @@ module RSpotify
47
52
  end
48
53
  end
49
54
 
50
- #TODO doc
55
+ # Creates a playlist in user's Spotify account. This method is only available when the current user
56
+ # has granted access to the *playlist-modify* and *playlist-modify-private* scopes.
57
+ #
58
+ # @param name [String] The name for the new playlist
59
+ # @param public [Boolean] Whether the playlist is public or private. Default: true
60
+ # @return [Playlist]
61
+ #
62
+ # @example
63
+ # user.create_playlist!('my-first-playlist')
64
+ # user.playlists.last.name #=> "my-first-playlist"
65
+ # user.playlists.last.public #=> true
66
+ #
67
+ # playlist = user.create_playlist!('my-second-playlist', public: false)
68
+ # playlist.name #=> "my-second-playlist"
69
+ # playlist.public #=> false
51
70
  def create_playlist!(name, public: true)
52
71
  url = "users/#{@id}/playlists"
53
72
  request_data = %Q({"name":"#{name}", "public":#{public}})
@@ -1,3 +1,3 @@
1
1
  module RSpotify
2
- VERSION = '0.9.0'
2
+ VERSION = '0.10.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspotify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilherme Sad
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-07 00:00:00.000000000 Z
11
+ date: 2014-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: omniauth-oauth2