spotify-ruby-kev 0.2.5

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.
@@ -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: []