rspotify 2.5.0 → 2.9.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
- SHA1:
3
- metadata.gz: e109369a08f44ff26605781f94c334eabf9adebb
4
- data.tar.gz: 052a974c33f640fd724830308517f55a87496f8b
2
+ SHA256:
3
+ metadata.gz: bd4464a0bd9145130472ed8f8abe11c595e3e5065a44e083d7a41ef26a315dad
4
+ data.tar.gz: a81d26ab41cfb8ff340eb30a39f6d878503481378757ca4cc480db89c147bd07
5
5
  SHA512:
6
- metadata.gz: 38acfebceb65b64f604ec374f25798d7c8a825e3ca8b4e04b76c0f51a3c8d60e1ba44d6263cad3422dacbd8b9b58b7fdf28a2d6ee58eae224fb5d4e07d254d22
7
- data.tar.gz: dcb54349b342b67acd931ca7ac57e7ef9d02b30d958f56b898db88388aa9407729b1cbead35307142a996346e61ae8f5a05e912f8629947c0cc71293ef3c213c
6
+ metadata.gz: 23d30c3094d7c243733190ca8e02231159968027a3d3b30eb72c0d8fb0694ecde85bb0b7c3327b86021a624bfa96890f33315d8acb134f67396124068c4bcee2
7
+ data.tar.gz: ec899b94e25402f6a22ba6e9ecca3be4ced60f763ed4108d3f206d6f054449ce3f6d3b3b1eab4b4cc47053532c3320756d382d5a11bc2c41b966c51fbaf6be3c
@@ -30,7 +30,6 @@ module RSpotify
30
30
  warn 'Spotify API does not support finding several users simultaneously'
31
31
  return false
32
32
  end
33
- limit = (type == 'album' ? 20 : 50)
34
33
  find_many(ids, type, market: market)
35
34
  when String
36
35
  id = ids
@@ -126,9 +125,9 @@ module RSpotify
126
125
 
127
126
  # Generate an embed code for an album, artist or track.
128
127
  # @param [Hash] options
129
- # @option options [Fixnum] :width the width of the frame
130
- # @option options [Fixnum] :height the height of the frame
131
- # @option options [Fixnum] :frameborder the frameborder of the frame
128
+ # @option options [Integer] :width the width of the frame
129
+ # @option options [Integer] :height the height of the frame
130
+ # @option options [Integer] :frameborder the frameborder of the frame
132
131
  # @option options [Boolean] :allowtransparency toggle frame transparency
133
132
  # @option options [nil|String|Symbol] :view specific view option for iframe
134
133
  # @option options [nil|String|Symbol] :theme specific theme option for iframe
@@ -143,7 +142,7 @@ module RSpotify
143
142
  frameborder: 0,
144
143
  allowtransparency: true,
145
144
  view: nil,
146
- theme: nil,
145
+ theme: nil
147
146
  }
148
147
  options = default_options.merge(options)
149
148
 
@@ -9,7 +9,7 @@ module RSpotify
9
9
  API_URI = 'https://api.spotify.com/v1/'.freeze
10
10
  AUTHORIZE_URI = 'https://accounts.spotify.com/authorize'.freeze
11
11
  TOKEN_URI = 'https://accounts.spotify.com/api/token'.freeze
12
- VERBS = %w(get post put delete)
12
+ VERBS = %w[get post put delete].freeze
13
13
 
14
14
  class << self
15
15
  attr_accessor :raw_response
@@ -4,18 +4,19 @@ module RSpotify
4
4
  def initialize(user, options = {})
5
5
  @user = user
6
6
 
7
- @repeat_state = options['repeat_state']
8
- @shuffle_state = options['shuffle_state']
9
- @progress = options['progress_ms']
10
- @is_playing = options['is_playing']
7
+ @repeat_state = options['repeat_state']
8
+ @shuffle_state = options['shuffle_state']
9
+ @progress = options['progress_ms']
10
+ @is_playing = options['is_playing']
11
+ @currently_playing_type = options['currently_playing_type']
11
12
 
12
13
  @track = if options['track']
13
- Track.new options['track']
14
- end
14
+ Track.new options['track']
15
+ end
15
16
 
16
17
  @device = if options['device']
17
- Device.new options['device']
18
- end
18
+ Device.new options['device']
19
+ end
19
20
  end
20
21
 
21
22
  def playing?
@@ -28,7 +29,7 @@ module RSpotify
28
29
  # @example
29
30
  # player = user.player
30
31
  # player.play_context(nil,"spotify:album:1Je1IMUlBXcx1Fz0WE7oPT")
31
- def play_context(device_id=nil, uri)
32
+ def play_context(device_id = nil, uri)
32
33
  params = {"context_uri": uri}
33
34
  play(device_id, params)
34
35
  end
@@ -40,7 +41,7 @@ module RSpotify
40
41
  # player = user.player
41
42
  # tracks_uris = ["spotify:track:4iV5W9uYEdYUVa79Axb7Rh", "spotify:track:1301WleyT98MSxVHPZCA6M"]
42
43
  # player.play_tracks(nil, tracks_uris)
43
- def play_tracks(device_id=nil, uris)
44
+ def play_tracks(device_id = nil, uris)
44
45
  params = {"uris": uris}
45
46
  play(device_id, params)
46
47
  end
@@ -52,7 +53,7 @@ module RSpotify
52
53
  # player = user.player
53
54
  # player.play_track(nil, "spotify:track:4iV5W9uYEdYUVa79Axb7Rh")
54
55
  # # User must be a premium subscriber for this feature to work.
55
- def play_track(device_id=nil, uri)
56
+ def play_track(device_id = nil, uri)
56
57
  params = {"uris": [uri]}
57
58
  play(device_id, params)
58
59
  end
@@ -65,11 +66,31 @@ module RSpotify
65
66
  # player.play
66
67
  def play(device_id = nil, params = {})
67
68
  url = "me/player/play"
68
- url = device_id.nil? ? url : url+"?device_id=#{device_id}"
69
+ url = device_id.nil? ? url : "#{url}?device_id=#{device_id}"
69
70
 
70
71
  User.oauth_put(@user.id, url, params.to_json)
71
72
  end
72
73
 
74
+ # Toggle the current user's player repeat status.
75
+ # If `device_id` is not passed, the currently active spotify app will be triggered.
76
+ # If `state` is not passed, the currently active context will be set to repeat.
77
+ #
78
+ # @see https://developer.spotify.com/documentation/web-api/reference/player/set-repeat-mode-on-users-playback/
79
+ #
80
+ # @param [String] device_id the ID of the device to set the repeat state on.
81
+ # @param [String] state the repeat state. Defaults to the current play context.
82
+ #
83
+ # @example
84
+ # player = user.player
85
+ # player.repeat(state: 'track')
86
+ def repeat(device_id: nil, state: "context")
87
+ url = "me/player/repeat"
88
+ url += "?state=#{state}"
89
+ url += "&device_id=#{device_id}" if device_id
90
+
91
+ User.oauth_put(@user.id, url, {})
92
+ end
93
+
73
94
  # Pause the user's currently active player
74
95
  #
75
96
  # @example
@@ -80,6 +101,26 @@ module RSpotify
80
101
  User.oauth_put(@user.id, url, {})
81
102
  end
82
103
 
104
+ # Toggle the current user's shuffle status.
105
+ # If `device_id` is not passed, the currently active spotify app will be triggered.
106
+ # If `state` is not passed, shuffle mode will be turned on.
107
+ #
108
+ # @see https://developer.spotify.com/documentation/web-api/reference/player/toggle-shuffle-for-users-playback/
109
+ #
110
+ # @param [String] device_id the ID of the device to set the shuffle state on.
111
+ # @param [String] state the shuffle state. Defaults to turning the shuffle behavior on.
112
+ #
113
+ # @example
114
+ # player = user.player
115
+ # player.shuffle(state: false)
116
+ def shuffle(device_id: nil, state: true)
117
+ url = "me/player/shuffle"
118
+ url += "?state=#{state}"
119
+ url += "&device_id=#{device_id}" if device_id
120
+
121
+ User.oauth_put(@user.id, url, {})
122
+ end
123
+
83
124
  # Skip User’s Playback To Next Track
84
125
  #
85
126
  # @example
@@ -303,7 +303,7 @@ module RSpotify
303
303
  # positions = [0,3,8]
304
304
  # playlist.remove_tracks!(positions, snapshot_id: '0ZvtH...')
305
305
  def remove_tracks!(tracks, snapshot_id: nil)
306
- positions = tracks if tracks.first.is_a? Fixnum
306
+ positions = tracks if tracks.first.is_a? Integer
307
307
 
308
308
  tracks = tracks.map do |track|
309
309
  next { uri: track.uri } if track.is_a? Track
@@ -104,6 +104,8 @@ module RSpotify
104
104
  # Creates a playlist in user's Spotify account. This method is only available when the current
105
105
  # user has granted access to the *playlist-modify-public* and *playlist-modify-private* scopes.
106
106
  #
107
+ # @note To create a collaborative playlist the public option must be set to false.
108
+ #
107
109
  # @param name [String] The name for the new playlist
108
110
  # @param public [Boolean] Whether the playlist is public or private. Default: true
109
111
  # @return [Playlist]
@@ -116,10 +118,14 @@ module RSpotify
116
118
  # playlist = user.create_playlist!('my-second-playlist', public: false)
117
119
  # playlist.name #=> "my-second-playlist"
118
120
  # playlist.public #=> false
119
- def create_playlist!(name, public: true)
121
+ def create_playlist!(name, description: nil, public: true, collaborative: false)
120
122
  url = "users/#{@id}/playlists"
121
- request_data = { name: name, public: public }.to_json
122
-
123
+ request_data = {
124
+ name: name,
125
+ public: public,
126
+ description: description,
127
+ collaborative: collaborative
128
+ }.to_json
123
129
  response = User.oauth_post(@id, url, request_data)
124
130
  return response if RSpotify.raw_response
125
131
  Playlist.new response
@@ -139,14 +145,21 @@ module RSpotify
139
145
  # Get the current user’s recently played tracks. Requires the *user-read-recently-played* scope.
140
146
  #
141
147
  # @param limit [Integer] Optional. The number of entities to return. Default: 20. Minimum: 1. Maximum: 50.
148
+ # @param after [String] Optional. A Unix timestamp in milliseconds. Returns all items after (but not including) this cursor position. If after is specified, before must not be specified.
149
+ # @param before [String] Optional. A Unix timestamp in milliseconds. Returns all items before (but not including) this cursor position. If before is specified, after must not be specified.
142
150
  # @return [Array<Track>]
143
151
  #
144
152
  # @example
145
153
  # recently_played = user.recently_played
146
154
  # recently_played.size #=> 20
147
155
  # recently_played.first.name #=> "Ice to Never"
148
- def recently_played(limit: 20)
156
+ # user.recently_played(limit: 50)
157
+ # user.recently_played(after: '1572561234', before: '1572562369')
158
+ def recently_played(limit: 20, after: nil, before: nil)
149
159
  url = "me/player/recently-played?limit=#{limit}"
160
+ url << "&after=#{after}" if after
161
+ url << "&before=#{before}" if before
162
+
150
163
  response = RSpotify.resolve_auth_request(@id, url)
151
164
  return response if RSpotify.raw_response
152
165
 
@@ -300,14 +313,16 @@ module RSpotify
300
313
  #
301
314
  # @param limit [Integer] Maximum number of tracks to return. Maximum: 50. Minimum: 1. Default: 20.
302
315
  # @param offset [Integer] The index of the first track to return. Use with limit to get the next set of tracks. Default: 0.
316
+ # @param market [String] Optional. An {http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 ISO 3166-1 alpha-2 country code}.
303
317
  # @return [Array<Track>]
304
318
  #
305
319
  # @example
306
320
  # tracks = user.saved_tracks
307
321
  # tracks.size #=> 20
308
322
  # tracks.first.name #=> "Do I Wanna Know?"
309
- def saved_tracks(limit: 20, offset: 0)
323
+ def saved_tracks(limit: 20, offset: 0, market: nil)
310
324
  url = "me/tracks?limit=#{limit}&offset=#{offset}"
325
+ url << "&market=#{market}" if market
311
326
  response = User.oauth_get(@id, url)
312
327
  json = RSpotify.raw_response ? JSON.parse(response) : response
313
328
 
@@ -375,14 +390,16 @@ module RSpotify
375
390
  #
376
391
  # @param limit [Integer] Maximum number of albums to return. Maximum: 50. Minimum: 1. Default: 20.
377
392
  # @param offset [Integer] The index of the first album to return. Use with limit to get the next set of albums. Default: 0.
393
+ # @param market [String] Optional. An {http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 ISO 3166-1 alpha-2 country code}.
378
394
  # @return [Array<Album>]
379
395
  #
380
396
  # @example
381
397
  # albums = user.saved_albums
382
398
  # albums.size #=> 20
383
399
  # albums.first.name #=> "Launeddas"
384
- def saved_albums(limit: 20, offset: 0)
400
+ def saved_albums(limit: 20, offset: 0, market: nil)
385
401
  url = "me/albums?limit=#{limit}&offset=#{offset}"
402
+ url << "&market=#{market}" if market
386
403
  response = User.oauth_get(@id, url)
387
404
  json = RSpotify.raw_response ? JSON.parse(response) : response
388
405
 
@@ -1,3 +1,3 @@
1
1
  module RSpotify
2
- VERSION = '2.5.0'
2
+ VERSION = '2.9.0'.freeze
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: 2.5.0
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilherme Sad
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-28 00:00:00.000000000 Z
11
+ date: 2020-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: omniauth-oauth2
@@ -136,7 +136,7 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '3.0'
139
- description:
139
+ description:
140
140
  email:
141
141
  - gorgulhoguilherme@gmail.com
142
142
  executables: []
@@ -260,7 +260,7 @@ homepage: http://rubygems.org/gems/rspotify
260
260
  licenses:
261
261
  - MIT
262
262
  metadata: {}
263
- post_install_message:
263
+ post_install_message:
264
264
  rdoc_options: []
265
265
  require_paths:
266
266
  - lib
@@ -275,9 +275,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
275
275
  - !ruby/object:Gem::Version
276
276
  version: '0'
277
277
  requirements: []
278
- rubyforge_project:
279
- rubygems_version: 2.6.8
280
- signing_key:
278
+ rubygems_version: 3.0.6
279
+ signing_key:
281
280
  specification_version: 4
282
281
  summary: A ruby wrapper for the Spotify Web API
283
282
  test_files:
@@ -368,4 +367,3 @@ test_files:
368
367
  - spec/vcr_cassettes/user_find_spotify.yml
369
368
  - spec/vcr_cassettes/user_find_wizzler.yml
370
369
  - spec/vcr_cassettes/user_wizzler_playlists_limit_20_offset_0.yml
371
- has_rdoc: