rspotify 2.9.0 → 2.10.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bd4464a0bd9145130472ed8f8abe11c595e3e5065a44e083d7a41ef26a315dad
4
- data.tar.gz: a81d26ab41cfb8ff340eb30a39f6d878503481378757ca4cc480db89c147bd07
3
+ metadata.gz: 112fc6b3765cf70d8156059ff328e0a4b9dd69a68f05e0aa6be910f020c5595a
4
+ data.tar.gz: c74a3c8a682fab80232e07db41afa74cca542ee1ffef217ccb49ebd4ab9617f0
5
5
  SHA512:
6
- metadata.gz: 23d30c3094d7c243733190ca8e02231159968027a3d3b30eb72c0d8fb0694ecde85bb0b7c3327b86021a624bfa96890f33315d8acb134f67396124068c4bcee2
7
- data.tar.gz: ec899b94e25402f6a22ba6e9ecca3be4ced60f763ed4108d3f206d6f054449ce3f6d3b3b1eab4b4cc47053532c3320756d382d5a11bc2c41b966c51fbaf6be3c
6
+ metadata.gz: 76095f5f8eef1e3cd6563adf8225d4736fe6503af82d230d2aa5b49a21b9ab98f4d3d314d92317322231ef695c9ff3a7c3dacf54c19bd0fded7e2372e22f4028
7
+ data.tar.gz: 1237be2afd7720291bc0a2752a2d5ea49fb17896405d2f3498e76093f8fa91de0340426214f10a1b17e1aa193e3e4d91a76e972cc62de001ee14fedf0679ad54
@@ -0,0 +1 @@
1
+ custom: https://www.buymeacoffee.com/guilhermesad
data/README.md CHANGED
@@ -217,7 +217,40 @@ class UsersController < ApplicationController
217
217
  end
218
218
  ```
219
219
 
220
- The user's access token is automatically refreshed by RSpotify when needed. This is specially useful if you persist the user data on a database: this way he only needs to log in to Spotify once in his entire use of your application.
220
+ ## Refreshing the access token
221
+
222
+ The user's access token is automatically refreshed by RSpotify when needed. This is especially useful if you persist
223
+ the user data on a database. This way, the user only need log in to Spotify once during the use of the application.
224
+
225
+ Additionally, you can store a proc that is invoked when a new access token is generated. This give you the
226
+ opportunity to persist the new access token for future use. The proc will be invoked with two arguments: the
227
+ new access token and the lifetime of the token in seconds. For example, if lifetime value returned from
228
+ Spotify is 3600, you know that the token will be good for one hour.
229
+
230
+ In the sample code below, the credentials have been retrieved from some persistent store such as
231
+ AWS SecretsManager.
232
+
233
+ ```ruby
234
+
235
+ callback_proc = Proc.new { |new_access_token, token_lifetime |
236
+ now = Time.now.utc.to_i # seconds since 1/1/1970, midnight UTC
237
+ deadline = now+token_lifetime
238
+ #puts("new access token will expire at #{Time.at(deadline).utc.to_s}")
239
+ self.save_new_access_token(new_access_token)
240
+ }
241
+
242
+ spotify_user = RSpotify::User.new(
243
+ {
244
+ 'credentials' => {
245
+ "token" => self.credentials["access_token"],
246
+ "refresh_token" => self.credentials["refresh_token"],
247
+ "access_refresh_callback" => callback_proc
248
+ } ,
249
+ 'id' => self.credentials["user_id"]
250
+ })
251
+
252
+
253
+ ```
221
254
 
222
255
  RSpotify provides a way to facilitate persistence:
223
256
 
@@ -232,6 +265,7 @@ spotify_user = RSpotify::User.new(hash)
232
265
  spotify_user.create_playlist!('my_awesome_playlist') # automatically refreshes token
233
266
  ```
234
267
 
268
+
235
269
  ## Getting raw response
236
270
 
237
271
  To get the raw response from Spotify API requests, just toggle the `raw_response` variable:
@@ -67,7 +67,7 @@ module RSpotify
67
67
  rescue RestClient::Unauthorized => e
68
68
  raise e if request_was_user_authenticated?(*params)
69
69
 
70
- raise MissingAuthentication unless @client_token
70
+ raise MissingAuthentication unless @client_id && @client_secret
71
71
 
72
72
  authenticate(@client_id, @client_secret)
73
73
 
@@ -18,6 +18,11 @@ module OmniAuth
18
18
  def raw_info
19
19
  @raw_info ||= access_token.get('me').parsed
20
20
  end
21
+
22
+ # Fix for: https://github.com/guilhermesad/rspotify/issues/189
23
+ def callback_url
24
+ full_host + script_name + callback_path
25
+ end
21
26
  end
22
27
  end
23
28
  end
@@ -9,6 +9,8 @@ module RSpotify
9
9
  @progress = options['progress_ms']
10
10
  @is_playing = options['is_playing']
11
11
  @currently_playing_type = options['currently_playing_type']
12
+ @context_type = options.dig('context', 'type')
13
+ @context_uri = options.dig('context', 'uri')
12
14
 
13
15
  @track = if options['track']
14
16
  Track.new options['track']
@@ -71,6 +73,21 @@ module RSpotify
71
73
  User.oauth_put(@user.id, url, params.to_json)
72
74
  end
73
75
 
76
+ # Add an item to the end of the user’s current playback queue
77
+ # If `device_id` is not passed, the currently active spotify app will be triggered
78
+ #
79
+ # @param [String] device_id the ID of the device to set the repeat state on.
80
+ # @param [String] uri the spotify uri of the track to be queued
81
+ #
82
+ # @example
83
+ # player = user.player
84
+ # player.queue("spotify:track:4iV5W9uYEdYUVa79Axb7Rh")
85
+ def queue(device_id = nil, uri)
86
+ url = "me/player/queue?uri=#{uri}"
87
+ url = device_id.nil? ? url : "#{url}&device_id=#{device_id}"
88
+ User.oauth_post(@user.id, url, {})
89
+ end
90
+
74
91
  # Toggle the current user's player repeat status.
75
92
  # If `device_id` is not passed, the currently active spotify app will be triggered.
76
93
  # If `state` is not passed, the currently active context will be set to repeat.
@@ -390,7 +390,7 @@ module RSpotify
390
390
  def replace_tracks!(tracks)
391
391
  track_uris = tracks.map(&:uri).join(',')
392
392
  url = "#{@path}/tracks?uris=#{track_uris}"
393
- User.oauth_put(@owner.id, url, {})
393
+ User.oauth_put(@owner.id, url, {}.to_json)
394
394
 
395
395
  @total = tracks.size
396
396
  @tracks_cache = nil
data/lib/rspotify/user.rb CHANGED
@@ -38,6 +38,16 @@ module RSpotify
38
38
  response = RestClient.post(TOKEN_URI, request_body, RSpotify.send(:auth_header))
39
39
  response = JSON.parse(response)
40
40
  @@users_credentials[user_id]['token'] = response['access_token']
41
+ access_refresh_proc = @@users_credentials[user_id]['access_refresh_callback']
42
+ # If the access token expires and a new one is granted via the refresh
43
+ # token, then this proc will be called with two parameters:
44
+ # new_access_token and token_lifetime (in seconds)
45
+ # The purpose is to allow the calling environment to invoke some action,
46
+ # such as persisting the new access token somewhere, when the new token
47
+ # is generated.
48
+ if (access_refresh_proc.respond_to? :call)
49
+ access_refresh_proc.call(response['access_token'], response['expires_in'])
50
+ end
41
51
  rescue RestClient::BadRequest => e
42
52
  raise e if e.response !~ /Refresh token revoked/
43
53
  end
@@ -139,7 +149,7 @@ module RSpotify
139
149
  url = "me/player"
140
150
  response = User.oauth_get(@id, url)
141
151
  return response if RSpotify.raw_response
142
- response.present? ? Player.new(self, response) : nil
152
+ response ? Player.new(self, response) : Player.new(self)
143
153
  end
144
154
 
145
155
  # Get the current user’s recently played tracks. Requires the *user-read-recently-played* scope.
@@ -1,3 +1,3 @@
1
1
  module RSpotify
2
- VERSION = '2.9.0'.freeze
2
+ VERSION = '2.10.2'.freeze
3
3
  end
data/rspotify.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(/^spec\//)
17
17
  spec.require_paths = ['lib']
18
18
 
19
- spec.add_dependency 'omniauth-oauth2', '~> 1.5.0'
19
+ spec.add_dependency 'omniauth-oauth2', '>= 1.6'
20
20
  spec.add_dependency 'rest-client', '~> 2.0.2'
21
21
  spec.add_dependency 'addressable', '~> 2.5.2'
22
22
 
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspotify
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.0
4
+ version: 2.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilherme Sad
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-07 00:00:00.000000000 Z
11
+ date: 2021-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: omniauth-oauth2
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.5.0
19
+ version: '1.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.5.0
26
+ version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rest-client
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -144,6 +144,7 @@ extensions: []
144
144
  extra_rdoc_files: []
145
145
  files:
146
146
  - ".editorconfig"
147
+ - ".github/FUNDING.yml"
147
148
  - ".gitignore"
148
149
  - ".rspec"
149
150
  - ".travis.yml"