echonest-ruby-api 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,34 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require_relative 'base'
4
+
5
+ module Echonest
6
+ class Genre < Echonest::Base
7
+ attr_accessor :name
8
+
9
+ def initialize(api_key, name = nil)
10
+ @api_key = api_key
11
+ @name = name
12
+ end
13
+
14
+ def artists(options = {})
15
+ get_response(options.merge(name: @name))
16
+ end
17
+
18
+ def profile(options = {})
19
+ get_response(options.merge(name: @name))
20
+ end
21
+
22
+ def similar(options = {})
23
+ get_response(options.merge(name: @name))
24
+ end
25
+
26
+ def self.list(api_key, options = {})
27
+ Base.get_api_endpoint(api_key, 'genre/list', options)
28
+ end
29
+
30
+ def self.search(api_key, options = {})
31
+ Base.get_api_endpoint(api_key, 'genre/search', options)
32
+ end
33
+ end
34
+ end
@@ -1,3 +1,3 @@
1
1
  module Echonest
2
- VERSION = "0.7.0"
2
+ VERSION = "0.8.0"
3
3
  end
@@ -85,7 +85,7 @@ describe Echonest::Artist do
85
85
  end
86
86
 
87
87
  end
88
-
88
+
89
89
  describe '#videos' do
90
90
 
91
91
  it 'should download a specified number of video streams' do
@@ -103,18 +103,18 @@ describe Echonest::Artist do
103
103
  end
104
104
 
105
105
  end
106
-
106
+
107
107
  describe '#urls' do
108
-
108
+
109
109
  it 'should return a hash of urls' do
110
110
  VCR.use_cassette('urls') do
111
111
  create_valid_artist
112
112
  @a.urls.should be_a Hash
113
113
  end
114
114
  end
115
-
115
+
116
116
  end
117
-
117
+
118
118
  describe '#familiarity' do
119
119
 
120
120
  it 'should allow us to find out how familiar an artist is' do
@@ -138,6 +138,18 @@ describe Echonest::Artist do
138
138
  end
139
139
  end
140
140
 
141
+ describe '#genres' do
142
+ it 'should allow us to find what genre an artist is in' do
143
+ VCR.use_cassette('genres', record: :new_episodes) do
144
+ create_valid_artist
145
+ @a.genres.should be_an Array
146
+ @a.genres.size.should > 0
147
+ @a.genres.should include('rock')
148
+ @a.genres.should include('alternative rock')
149
+ end
150
+ end
151
+ end
152
+
141
153
  describe '#hotttnesss' do
142
154
  it 'should allow us to find out how hotttt an artist is' do
143
155
  VCR.use_cassette('hotttnesss') do
@@ -228,6 +240,60 @@ describe Echonest::Artist do
228
240
  end
229
241
  end # /search
230
242
 
243
+ describe '#similar', vcr: {cassette_name: 'similar_artists'} do
244
+ it 'should return similar artists' do
245
+ create_valid_artist
246
+ @a.similar(results: 10).count.should be > 0
247
+ end
248
+
249
+ it 'expect to return an array of artists' do
250
+ create_valid_artist
251
+ results = @a.similar(results: 10)
252
+ results.should be_a Array
253
+ end
254
+
255
+ it 'expect to return name for each artist' do
256
+ create_valid_artist
257
+ names = []
258
+ results = @a.similar(results: 10)
259
+ results.each do |a|
260
+ a[:name].empty?.should eq false
261
+ a[:name].length.should be > 0
262
+ end
263
+ end
264
+
265
+ it 'expect an id for each similar artist' do
266
+ create_valid_artist
267
+ ids = []
268
+ results = @a.similar(results: 10)
269
+ results.each do |a|
270
+ a[:id].empty?.should eq false
271
+ end
272
+ end
273
+
274
+ end # /similar
275
+
276
+ describe '#suggest', vcr: {cassette_name: 'suggest'} do
277
+ it 'should return an Array of artists' do
278
+ create_valid_artist
279
+ @a.suggest.should be_a Array
280
+ end
281
+
282
+ it 'should return an Artist object for each result' do
283
+ create_valid_artist
284
+ @a.suggest.each do |k|
285
+ k.class.should be Echonest::Artist
286
+ end
287
+ end
288
+
289
+ it 'should fill in id of each returned artist' do
290
+ create_valid_artist
291
+ @a.suggest.each do |k|
292
+ k.id.should_not be_nil
293
+ end
294
+ end
295
+ end # /suggest
296
+
231
297
  describe '#top_hottt', vcr: {cassette_name: 'top_hottt'} do
232
298
  it 'should return an Array of artists' do
233
299
  create_valid_artist
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ describe Echonest::Genre do
4
+ it 'should accept name for creation' do
5
+ g = Echonest::Genre.new('BNOAEBT3IZYZI6WXI', 'folk rock')
6
+
7
+ expect(g.name).to eq 'folk rock'
8
+ end
9
+
10
+ describe 'instance methods' do
11
+ context 'with valid api key and name' do
12
+ before :all do
13
+ @genre = Echonest::Genre.new('BNOAEBT3IZYZI6WXI', 'folk rock')
14
+ end
15
+
16
+ describe '#artists' do
17
+ it 'returns a list of associated artists' do
18
+ VCR.use_cassette('genre_artists') do
19
+ artists = @genre.artists
20
+
21
+ expect(artists[:status][:message]).to eq 'Success'
22
+ expect(artists[:artists]).to include(id: 'ARVHQNN1187B9B9FA3',
23
+ name: 'Cat Stevens')
24
+ end
25
+ end
26
+ end
27
+
28
+ describe '#profile' do
29
+ it 'returns a profile response given' do
30
+ VCR.use_cassette('genre_profile') do
31
+ profile = @genre.profile
32
+
33
+ expect(profile[:status][:message]).to eq 'Success'
34
+ expect(profile[:genres][0][:name]).to eq 'folk rock'
35
+ end
36
+ end
37
+ end
38
+
39
+ describe '#similar' do
40
+ it 'returns a list of similar genres' do
41
+ VCR.use_cassette('genre_similar') do
42
+ genres = @genre.similar
43
+
44
+ expect(genres[:status][:message]).to eq 'Success'
45
+ expect(genres[:genres]).to include name: 'singer-songwriter', similarity: 0.708333
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ describe 'class methods' do
53
+ describe '#list' do
54
+ it 'returns a list of genres given valid api key' do
55
+ VCR.use_cassette('genre_list') do
56
+ genres = Echonest::Genre.list 'BNOAEBT3IZYZI6WXI'
57
+
58
+ expect(genres[:status][:message]).to eq 'Success'
59
+ expect(genres[:genres]).to include name: 'folk rock'
60
+ end
61
+ end
62
+ end
63
+
64
+ describe '#search' do
65
+ it 'returns a list of genres related to search term given valid api key' do
66
+ VCR.use_cassette('genre_search') do
67
+ results = Echonest::Genre.search 'BNOAEBT3IZYZI6WXI',
68
+ name: 'folk rock'
69
+
70
+ expect(results[:status][:message]).to eq 'Success'
71
+ expect(results[:genres]).to include name: 'folk rock'
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: echonest-ruby-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Woolf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-08 00:00:00.000000000 Z
11
+ date: 2015-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -141,6 +141,11 @@ files:
141
141
  - fixtures/vcr_cassettes/biographies.yml
142
142
  - fixtures/vcr_cassettes/blogs.yml
143
143
  - fixtures/vcr_cassettes/familiarity.yml
144
+ - fixtures/vcr_cassettes/genre_artists.yml
145
+ - fixtures/vcr_cassettes/genre_list.yml
146
+ - fixtures/vcr_cassettes/genre_profile.yml
147
+ - fixtures/vcr_cassettes/genre_search.yml
148
+ - fixtures/vcr_cassettes/genre_similar.yml
144
149
  - fixtures/vcr_cassettes/genres.yml
145
150
  - fixtures/vcr_cassettes/hotttnesss.yml
146
151
  - fixtures/vcr_cassettes/images.yml
@@ -155,6 +160,7 @@ files:
155
160
  - fixtures/vcr_cassettes/profile.yml
156
161
  - fixtures/vcr_cassettes/search.yml
157
162
  - fixtures/vcr_cassettes/search_2.yml
163
+ - fixtures/vcr_cassettes/similar_artists.yml
158
164
  - fixtures/vcr_cassettes/single_biography.yml
159
165
  - fixtures/vcr_cassettes/song_identify.yml
160
166
  - fixtures/vcr_cassettes/song_profile.yml
@@ -162,6 +168,7 @@ files:
162
168
  - fixtures/vcr_cassettes/song_search_slow.yml
163
169
  - fixtures/vcr_cassettes/songs.yml
164
170
  - fixtures/vcr_cassettes/songs_more.yml
171
+ - fixtures/vcr_cassettes/suggest.yml
165
172
  - fixtures/vcr_cassettes/ten_blogs.yml
166
173
  - fixtures/vcr_cassettes/ten_news_articles.yml
167
174
  - fixtures/vcr_cassettes/ten_videos.yml
@@ -176,6 +183,7 @@ files:
176
183
  - lib/echonest-ruby-api/blog.rb
177
184
  - lib/echonest-ruby-api/error.rb
178
185
  - lib/echonest-ruby-api/foreign_id.rb
186
+ - lib/echonest-ruby-api/genre.rb
179
187
  - lib/echonest-ruby-api/playlist.rb
180
188
  - lib/echonest-ruby-api/song.rb
181
189
  - lib/echonest-ruby-api/version.rb
@@ -184,6 +192,7 @@ files:
184
192
  - spec/base_spec.rb
185
193
  - spec/error_spec.rb
186
194
  - spec/foreign_id_spec.rb
195
+ - spec/genre_spec.rb
187
196
  - spec/playlist_spec.rb
188
197
  - spec/song_spec.rb
189
198
  - spec/spec_helper.rb
@@ -207,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
207
216
  version: '0'
208
217
  requirements: []
209
218
  rubyforge_project:
210
- rubygems_version: 2.0.6
219
+ rubygems_version: 2.2.2
211
220
  signing_key:
212
221
  specification_version: 4
213
222
  summary: A gem to get hold of some echonest stuff!
@@ -216,6 +225,7 @@ test_files:
216
225
  - spec/base_spec.rb
217
226
  - spec/error_spec.rb
218
227
  - spec/foreign_id_spec.rb
228
+ - spec/genre_spec.rb
219
229
  - spec/playlist_spec.rb
220
230
  - spec/song_spec.rb
221
231
  - spec/spec_helper.rb