spotify-ruby-kev 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spotify
4
+ class SDK
5
+ class Me
6
+ class Info < Model
7
+ ##
8
+ # Is the user currently on Spotify Free?
9
+ #
10
+ # @example
11
+ # @sdk.me.info.free?
12
+ #
13
+ # @return [TrueClass,FalseClass] is_free Return true if user is on Spotify Free.
14
+ #
15
+ def free?
16
+ product == "free"
17
+ end
18
+
19
+ ##
20
+ # Is the user currently on Spotify Premium?
21
+ #
22
+ # @example
23
+ # @sdk.me.info.premium?
24
+ #
25
+ # @return [TrueClass,FalseClass] is_premium Return true if user is on Spotify Premium.
26
+ #
27
+ def premium?
28
+ product == "premium"
29
+ end
30
+
31
+ ##
32
+ # Get the user's birthdate.
33
+ # Requires the `user-read-birthdate` scope, otherwise it will return nil.
34
+ #
35
+ # @example
36
+ # @sdk.me.info.birthdate # => Wed, 10 May 1985
37
+ #
38
+ # @return [Date,NilClass] birthdate Return the user's birthdate, otherwise return nil.
39
+ #
40
+ def birthdate
41
+ Date.parse(super) if super
42
+ end
43
+
44
+ ##
45
+ # Does the user have a valid display_name?
46
+ #
47
+ # @example
48
+ # @sdk.me.info.display_name? # => false
49
+ #
50
+ # @return [TrueClass,FalseClass] has_display_name Return true if the user has a non-empty display name.
51
+ #
52
+ def display_name?
53
+ !display_name.to_s.empty?
54
+ end
55
+
56
+ ##
57
+ # Get the images for the user.
58
+ #
59
+ # @example
60
+ # @sdk.me.info.images[0].spotify_uri # => "spotify:image:..."
61
+ # @sdk.me.info.images[0].spotify_url # => "https://profile-images.scdn.co/..."
62
+ #
63
+ # @return [Array] images A list of all user photos wrapped in Spotify::SDK::Image
64
+ #
65
+ def images
66
+ super.map do |image|
67
+ Spotify::SDK::Image.new(image, parent)
68
+ end
69
+ end
70
+
71
+ ##
72
+ # Return the followers on Spotify for this user.
73
+ #
74
+ # @example
75
+ # me = @sdk.me.info
76
+ # me.followers # => 13913
77
+ #
78
+ # @return [Integer] followers The number of users following this user.
79
+ #
80
+ def followers
81
+ super[:total]
82
+ end
83
+
84
+ ##
85
+ # Get the Spotify URI for this user.
86
+ # Alias to self.uri
87
+ #
88
+ # @example
89
+ # @sdk.me.info.spotify_uri # => "spotify:user:..."
90
+ #
91
+ # @return [String] spotify_uri The direct URI to this Spotify resource.
92
+ #
93
+ alias_attribute :spotify_uri, :uri
94
+
95
+ ##
96
+ # Get the Spotify HTTP URL for this user.
97
+ # Alias to self.external_urls[:spotify]
98
+ #
99
+ # @example
100
+ # @sdk.me.info.spotify_url # => "https://open.spotify.com/..."
101
+ #
102
+ # @return [String] spotify_url The direct HTTP URL to this Spotify resource.
103
+ #
104
+ alias_attribute :spotify_url, "external_urls.spotify"
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spotify
4
+ class SDK
5
+ ##
6
+ # For each SDK response object (i.e. Device), we have a Model class. We're using OpenStruct.
7
+ #
8
+ class Model < OpenStruct
9
+ ##
10
+ # Initialize a new Model instance.
11
+ #
12
+ # @example
13
+ # module Spotify
14
+ # class SDK
15
+ # class User < Model
16
+ # end
17
+ # end
18
+ # end
19
+ #
20
+ # @base = Spotify::SDK::Base.new(@sdk)
21
+ # @user = Spotify::SDK::User.new({ username: "hi" }, @base)
22
+ # @user.username # => "hi"
23
+ #
24
+ # @param [Hash] payload The response payload.
25
+ # @param [Spotify::SDK] parent The SDK object for context.
26
+ #
27
+ def initialize(payload, parent)
28
+ @payload = payload
29
+ raise "Expected payload to be of Hash type" unless @payload.instance_of?(Hash)
30
+
31
+ @parent = parent
32
+ raise "Expected parent to be of Spotify::SDK::Base type" unless @parent.is_a?(Spotify::SDK::Base)
33
+
34
+ super(payload)
35
+ end
36
+
37
+ def to_h # :nodoc:
38
+ super.to_h.except(:parent)
39
+ end
40
+
41
+ def to_json(*_args) # :nodoc:
42
+ to_h.to_json
43
+ end
44
+
45
+ ##
46
+ # A reference to Spotify::SDK::Connect.
47
+ #
48
+ attr_reader :parent
49
+
50
+ class << self
51
+ def alias_attribute(new_method, attribute) # :nodoc:
52
+ if attribute.is_a?(Symbol)
53
+ define_method(new_method) { send(attribute) }
54
+ else
55
+ define_method(new_method) do
56
+ self.class.hash_selector(to_h, attribute)
57
+ end
58
+ end
59
+ end
60
+
61
+ def hash_selector(hash, selector)
62
+ hash.deep_symbolize_keys!
63
+ segments = selector.split(".")
64
+ hash = hash[segments.shift.try(:to_sym)] while segments.any?
65
+ hash
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spotify
4
+ ##
5
+ # The definitive version of spotify-ruby.
6
+ #
7
+ # We follow the Semantic Versioning convention.
8
+ # See https://semver.org/ for more information
9
+ #
10
+ # Summary:
11
+ # MAJOR version when you make incompatible API changes,
12
+ # MINOR version when you add functionality in a backwards-compatible manner, and
13
+ # PATCH version when you make backwards-compatible bug fixes.
14
+ #
15
+ VERSION = "0.2.5"
16
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require "spotify/version"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "spotify-ruby-kev"
9
+ spec.version = Spotify::VERSION
10
+ spec.authors = ["Kevin Heffernan"]
11
+ spec.email = ["kevin.heffernan97@gmail.com"]
12
+
13
+ spec.summary = "The developer-friendly, opinionated Ruby SDK for Spotify."
14
+ spec.description = [
15
+ "Build integrations with the different Spotify APIs",
16
+ "inside of your application.",
17
+ "For more information, visit https://developer.spotify.com"
18
+ ].join(" ")
19
+ spec.homepage = "https://github.com/kev737/spotify-ruby"
20
+ spec.license = "MIT"
21
+
22
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
23
+ f.match(%r{^(assets|bin|coverage|doc|docs|html|examples|test|spec|features)/})
24
+ end
25
+
26
+ spec.metadata["yard.run"] = "yri"
27
+
28
+ # We don't support executables just yet. Comment this out if you're building one.
29
+ # spec.bindir = "exe"
30
+ # spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
31
+ # spec.require_paths = ["lib"]
32
+
33
+ # Tooling
34
+ spec.add_development_dependency "bundler", "~> 2.1.4", ">= 2.1.4"
35
+ spec.add_development_dependency "rake", "~> 12.1"
36
+
37
+ # Testing
38
+ spec.add_development_dependency "climate_control", "~> 0.2"
39
+ spec.add_development_dependency "factory_bot", "~> 5.0.0"
40
+ spec.add_development_dependency "rspec", "~> 3.8"
41
+ spec.add_development_dependency "rspec-collection_matchers", "~> 1.1", ">= 1.1.2"
42
+ spec.add_development_dependency "rubocop", "~> 0.71.0"
43
+ spec.add_development_dependency "simplecov"
44
+ spec.add_development_dependency "webmock", "~> 3.6"
45
+
46
+ # Developer Productivity
47
+ spec.add_development_dependency "pry", "~> 0.12"
48
+
49
+ # Documentation
50
+ spec.add_development_dependency "yard"
51
+ spec.add_development_dependency "yard-api"
52
+
53
+ # Runtime Dependencies
54
+ spec.add_runtime_dependency "activesupport", "~> 6.0"
55
+ spec.add_runtime_dependency "httparty", ">= 0.15.6", "< 0.18"
56
+ end
metadata ADDED
@@ -0,0 +1,291 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spotify-ruby-kev
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.5
5
+ platform: ruby
6
+ authors:
7
+ - Kevin Heffernan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-05-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.1.4
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: 2.1.4
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 2.1.4
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 2.1.4
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '12.1'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '12.1'
47
+ - !ruby/object:Gem::Dependency
48
+ name: climate_control
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.2'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.2'
61
+ - !ruby/object:Gem::Dependency
62
+ name: factory_bot
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 5.0.0
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 5.0.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.8'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.8'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rspec-collection_matchers
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.1'
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: 1.1.2
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: '1.1'
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: 1.1.2
109
+ - !ruby/object:Gem::Dependency
110
+ name: rubocop
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: 0.71.0
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: 0.71.0
123
+ - !ruby/object:Gem::Dependency
124
+ name: simplecov
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: webmock
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '3.6'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '3.6'
151
+ - !ruby/object:Gem::Dependency
152
+ name: pry
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '0.12'
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: '0.12'
165
+ - !ruby/object:Gem::Dependency
166
+ name: yard
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ - !ruby/object:Gem::Dependency
180
+ name: yard-api
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ type: :development
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ - !ruby/object:Gem::Dependency
194
+ name: activesupport
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: '6.0'
200
+ type: :runtime
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - "~>"
205
+ - !ruby/object:Gem::Version
206
+ version: '6.0'
207
+ - !ruby/object:Gem::Dependency
208
+ name: httparty
209
+ requirement: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ">="
212
+ - !ruby/object:Gem::Version
213
+ version: 0.15.6
214
+ - - "<"
215
+ - !ruby/object:Gem::Version
216
+ version: '0.18'
217
+ type: :runtime
218
+ prerelease: false
219
+ version_requirements: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - ">="
222
+ - !ruby/object:Gem::Version
223
+ version: 0.15.6
224
+ - - "<"
225
+ - !ruby/object:Gem::Version
226
+ version: '0.18'
227
+ description: Build integrations with the different Spotify APIs inside of your application.
228
+ For more information, visit https://developer.spotify.com
229
+ email:
230
+ - kevin.heffernan97@gmail.com
231
+ executables: []
232
+ extensions: []
233
+ extra_rdoc_files: []
234
+ files:
235
+ - ".github/CONTRIBUTING.md"
236
+ - ".github/ISSUE_TEMPLATE.md"
237
+ - ".gitignore"
238
+ - ".rspec"
239
+ - ".rubocop.yml"
240
+ - ".ruby-version"
241
+ - ".rvm-version"
242
+ - ".travis.yml"
243
+ - CODE_OF_CONDUCT.md
244
+ - COVERAGE.md
245
+ - Gemfile
246
+ - LICENSE
247
+ - README.md
248
+ - Rakefile
249
+ - lib/spotify.rb
250
+ - lib/spotify/accounts.rb
251
+ - lib/spotify/accounts/session.rb
252
+ - lib/spotify/sdk.rb
253
+ - lib/spotify/sdk/.keep
254
+ - lib/spotify/sdk/album.rb
255
+ - lib/spotify/sdk/artist.rb
256
+ - lib/spotify/sdk/base.rb
257
+ - lib/spotify/sdk/connect.rb
258
+ - lib/spotify/sdk/connect/device.rb
259
+ - lib/spotify/sdk/connect/playback_state.rb
260
+ - lib/spotify/sdk/image.rb
261
+ - lib/spotify/sdk/item.rb
262
+ - lib/spotify/sdk/me.rb
263
+ - lib/spotify/sdk/me/info.rb
264
+ - lib/spotify/sdk/model.rb
265
+ - lib/spotify/version.rb
266
+ - spotify-ruby-kev.gemspec
267
+ homepage: https://github.com/kev737/spotify-ruby
268
+ licenses:
269
+ - MIT
270
+ metadata:
271
+ yard.run: yri
272
+ post_install_message:
273
+ rdoc_options: []
274
+ require_paths:
275
+ - lib
276
+ required_ruby_version: !ruby/object:Gem::Requirement
277
+ requirements:
278
+ - - ">="
279
+ - !ruby/object:Gem::Version
280
+ version: '0'
281
+ required_rubygems_version: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ requirements: []
287
+ rubygems_version: 3.0.3
288
+ signing_key:
289
+ specification_version: 4
290
+ summary: The developer-friendly, opinionated Ruby SDK for Spotify.
291
+ test_files: []