another_echonest_ruby_api 0.0.1 → 0.0.2
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 +4 -4
- data/.travis.yml +3 -0
- data/Gemfile +13 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/another_echonest_ruby_api.gemspec +78 -0
- data/lib/another_echonest_ruby_api.rb +30 -0
- data/lib/another_echonest_ruby_api/config.rb +5 -0
- data/lib/another_echonest_ruby_api/query.rb +10 -0
- data/lib/another_echonest_ruby_api/request.rb +79 -0
- data/lib/another_echonest_ruby_api/response.rb +33 -0
- data/test/config_test.rb +11 -0
- data/test/helper.rb +43 -0
- data/test/request_test.rb +34 -0
- data/test/response_test.rb +15 -0
- data/test/webmock/bad_credentials.json +1 -0
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61d265155ada680cd72b62e0e90835dab4ddacdf
|
4
|
+
data.tar.gz: 34cbbbb1d058d59789df2262cddfc37e7071a70f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85e4a788d9e80033a28ed64c408cb98c0f850463c481e483d221f3a8d1d1ceefae6f9950467afe86d24923d136ce7f96e8b32f51129870640a3e1ef1b70bcb01
|
7
|
+
data.tar.gz: c28e09862fcff0f731c8519f9b8caef6c0ac120d445e1ea8ced3124a1627007ce163f6dc7b5fbd41f63338f51685b69370426f5d97fa64799d1b89d6507e2388
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = "another_echonest_ruby_api"
|
18
|
+
gem.homepage = "http://github.com/spilliton/another_echonest_ruby_api"
|
19
|
+
gem.license = "MIT"
|
20
|
+
gem.summary = %Q{Yet another ruby client for Echonest API}
|
21
|
+
gem.description = %Q{Yet another ruby client for Echonest API}
|
22
|
+
gem.email = "kloeppingzd@gmail.com"
|
23
|
+
gem.authors = ["Zachary Kloepping"]
|
24
|
+
# dependencies defined in Gemfile
|
25
|
+
end
|
26
|
+
Jeweler::RubygemsDotOrgTasks.new
|
27
|
+
|
28
|
+
require 'rake/testtask'
|
29
|
+
Rake::TestTask.new(:test) do |test|
|
30
|
+
test.libs << 'lib' << 'test'
|
31
|
+
test.pattern = 'test/**/*_test.rb'
|
32
|
+
test.verbose = true
|
33
|
+
end
|
34
|
+
|
35
|
+
task :default => :test
|
36
|
+
|
37
|
+
require 'rdoc/task'
|
38
|
+
Rake::RDocTask.new do |rdoc|
|
39
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
40
|
+
|
41
|
+
rdoc.rdoc_dir = 'rdoc'
|
42
|
+
rdoc.title = "another_echonest_ruby_api #{version}"
|
43
|
+
rdoc.rdoc_files.include('README*')
|
44
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
45
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.2
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: another_echonest_ruby_api 0.0.2 ruby lib
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "another_echonest_ruby_api"
|
9
|
+
s.version = "0.0.2"
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.authors = ["Zachary Kloepping"]
|
13
|
+
s.date = "2014-01-22"
|
14
|
+
s.description = "Yet another ruby client for Echonest API"
|
15
|
+
s.email = "kloeppingzd@gmail.com"
|
16
|
+
s.extra_rdoc_files = [
|
17
|
+
"LICENSE.txt",
|
18
|
+
"README.md"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
".travis.yml",
|
22
|
+
"Gemfile",
|
23
|
+
"LICENSE.txt",
|
24
|
+
"README.md",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"another_echonest_ruby_api.gemspec",
|
28
|
+
"lib/another_echonest_ruby_api.rb",
|
29
|
+
"lib/another_echonest_ruby_api/config.rb",
|
30
|
+
"lib/another_echonest_ruby_api/query.rb",
|
31
|
+
"lib/another_echonest_ruby_api/request.rb",
|
32
|
+
"lib/another_echonest_ruby_api/response.rb",
|
33
|
+
"test/config_test.rb",
|
34
|
+
"test/helper.rb",
|
35
|
+
"test/request_test.rb",
|
36
|
+
"test/response_test.rb",
|
37
|
+
"test/webmock/bad_credentials.json"
|
38
|
+
]
|
39
|
+
s.homepage = "http://github.com/spilliton/another_echonest_ruby_api"
|
40
|
+
s.licenses = ["MIT"]
|
41
|
+
s.require_paths = ["lib"]
|
42
|
+
s.rubygems_version = "2.1.10"
|
43
|
+
s.summary = "Yet another ruby client for Echonest API"
|
44
|
+
|
45
|
+
if s.respond_to? :specification_version then
|
46
|
+
s.specification_version = 4
|
47
|
+
|
48
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
49
|
+
s.add_runtime_dependency(%q<rest-client>, [">= 0"])
|
50
|
+
s.add_runtime_dependency(%q<json>, [">= 0"])
|
51
|
+
s.add_runtime_dependency(%q<hashie>, [">= 0"])
|
52
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
53
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
54
|
+
s.add_development_dependency(%q<bundler>, [">= 0"])
|
55
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
56
|
+
s.add_development_dependency(%q<webmock>, [">= 0"])
|
57
|
+
else
|
58
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
59
|
+
s.add_dependency(%q<json>, [">= 0"])
|
60
|
+
s.add_dependency(%q<hashie>, [">= 0"])
|
61
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
62
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
63
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
64
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
65
|
+
s.add_dependency(%q<webmock>, [">= 0"])
|
66
|
+
end
|
67
|
+
else
|
68
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
69
|
+
s.add_dependency(%q<json>, [">= 0"])
|
70
|
+
s.add_dependency(%q<hashie>, [">= 0"])
|
71
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
72
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
73
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
74
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
75
|
+
s.add_dependency(%q<webmock>, [">= 0"])
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module EchoNest
|
2
|
+
autoload :Config, 'another_echonest_ruby_api/config'
|
3
|
+
autoload :Request, 'another_echonest_ruby_api/request'
|
4
|
+
autoload :Query, 'another_echonest_ruby_api/query'
|
5
|
+
autoload :RequestException, 'another_echonest_ruby_api/request'
|
6
|
+
autoload :Response, 'another_echonest_ruby_api/response'
|
7
|
+
|
8
|
+
class ConfigException < Exception
|
9
|
+
EXCEPTION_TEXT = <<-eos
|
10
|
+
You must setup EchoNest before you can use! Ex:
|
11
|
+
|
12
|
+
EchoNest.setup do |config|
|
13
|
+
config.api_key = 'xxxxxxxx'
|
14
|
+
end
|
15
|
+
eos
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.config
|
19
|
+
if @config
|
20
|
+
@config
|
21
|
+
else
|
22
|
+
raise ConfigException, ConfigException::EXCEPTION_TEXT
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.setup(&block)
|
27
|
+
@config = Config.new
|
28
|
+
yield @config
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'rest_client'
|
2
|
+
|
3
|
+
module EchoNest
|
4
|
+
|
5
|
+
class RequestException < Exception; end
|
6
|
+
|
7
|
+
class Request
|
8
|
+
|
9
|
+
BASE_URL = "http://developer.echonest.com/api/v4/"
|
10
|
+
|
11
|
+
attr_reader :params, :path, :bucket_params
|
12
|
+
|
13
|
+
def initialize(path, opts={})
|
14
|
+
@path = path
|
15
|
+
@params = opts
|
16
|
+
@bucket_params = if bucket = opts.delete(:bucket)
|
17
|
+
bucket.is_a?(Array) ? bucket : [bucket]
|
18
|
+
else
|
19
|
+
[]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.get(path, opts={})
|
24
|
+
request = Request.new(path, opts)
|
25
|
+
request.get_response
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_response
|
29
|
+
response = RestClient.get(build_url) do |response, request, result, &block|
|
30
|
+
# puts "response.code: #{response.code.inspect}"
|
31
|
+
# puts "response.body: #{response.body.inspect}"
|
32
|
+
if [200, 400].include? response.code
|
33
|
+
build_response(response.body)
|
34
|
+
else
|
35
|
+
raise RequestException, "Unexpected response code: #{response.code}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
if response.error?
|
40
|
+
raise RequestException, "The following errors were returned: #{response.message.inspect}"
|
41
|
+
else
|
42
|
+
response
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def build_response(data)
|
47
|
+
Response.new(:raw_json => data.to_str, :request => self)
|
48
|
+
end
|
49
|
+
|
50
|
+
def build_params
|
51
|
+
{param_name => params}
|
52
|
+
end
|
53
|
+
|
54
|
+
def build_url
|
55
|
+
url = url_with_creds
|
56
|
+
if params.any?
|
57
|
+
parts = []
|
58
|
+
params.each_pair do |name, value|
|
59
|
+
parts << "#{URI.escape(name.to_s)}=#{URI.escape(value.to_s)}"
|
60
|
+
end
|
61
|
+
bucket_params.each do |value|
|
62
|
+
parts << "bucket=#{value}"
|
63
|
+
end
|
64
|
+
url = "#{url}&#{parts.join('&')}"
|
65
|
+
end
|
66
|
+
# puts "url: #{url.inspect}"
|
67
|
+
url
|
68
|
+
end
|
69
|
+
|
70
|
+
def api_key
|
71
|
+
EchoNest.config.api_key
|
72
|
+
end
|
73
|
+
|
74
|
+
def url_with_creds
|
75
|
+
"#{BASE_URL}#{path}?api_key=#{api_key}&format=json"
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'hashie'
|
3
|
+
|
4
|
+
module EchoNest
|
5
|
+
class Response
|
6
|
+
|
7
|
+
# data attr is a Hashie::Mash you can use to get at json attributes returned
|
8
|
+
# ex: response.data.artist.name, response.data.artist.name etc
|
9
|
+
attr_reader :request, :raw_json, :data, :status
|
10
|
+
|
11
|
+
def initialize(opts={})
|
12
|
+
@request = opts[:request]
|
13
|
+
@raw_json = opts[:raw_json]
|
14
|
+
h = JSON.parse(@raw_json)
|
15
|
+
@data = Hashie::Mash.new(h['response'])
|
16
|
+
@status = data.status
|
17
|
+
end
|
18
|
+
|
19
|
+
def error?
|
20
|
+
status.code != 0
|
21
|
+
end
|
22
|
+
|
23
|
+
def message
|
24
|
+
status.message
|
25
|
+
end
|
26
|
+
|
27
|
+
def version
|
28
|
+
status.version
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
data/test/config_test.rb
ADDED
data/test/helper.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'test/unit'
|
11
|
+
require 'shoulda'
|
12
|
+
|
13
|
+
|
14
|
+
unless ENV['NO_MOCKING']
|
15
|
+
require 'webmock/test_unit'
|
16
|
+
end
|
17
|
+
|
18
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
19
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
20
|
+
require 'another_echonest_ruby_api'
|
21
|
+
|
22
|
+
class Test::Unit::TestCase
|
23
|
+
|
24
|
+
def setup_test_credentials
|
25
|
+
EchoNest.setup do |config|
|
26
|
+
config.api_key = 'fart'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def mock(name, path_and_query, status=200)
|
31
|
+
dir = File.dirname(__FILE__) + "/webmock/#{name}.json"
|
32
|
+
file = File.open(dir)
|
33
|
+
body = file.read
|
34
|
+
url = "#{EchoNest::Request::BASE_URL}#{path_and_query}"
|
35
|
+
stub_request(:get, url).to_return(:status => status, :body => body)
|
36
|
+
end
|
37
|
+
|
38
|
+
def teardown
|
39
|
+
EchoNest.instance_variable_set(:@config, nil)
|
40
|
+
WebMock.reset!
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
$:.unshift '.';require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
module EchoNest
|
4
|
+
class RequestTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context 'with credentials' do
|
7
|
+
setup do
|
8
|
+
setup_test_credentials
|
9
|
+
end
|
10
|
+
|
11
|
+
should 'raise if errors in response' do
|
12
|
+
mock(:bad_credentials, "artist/profile?api_key=fart&format=json&id=ARZGTK71187B9AC7F5", 400)
|
13
|
+
ex = assert_raise(RequestException) do
|
14
|
+
Request.get("artist/profile", id: "ARZGTK71187B9AC7F5")
|
15
|
+
end
|
16
|
+
assert ex.message =~ /Invalid key: Unknown/i
|
17
|
+
end
|
18
|
+
|
19
|
+
should 'correctly build_url' do
|
20
|
+
request = Request.new("artist/profile", blah: 'huh', id: 'meh')
|
21
|
+
assert_equal 'http://developer.echonest.com/api/v4/artist/profile?api_key=fart&format=json&blah=huh&id=meh', request.build_url
|
22
|
+
end
|
23
|
+
|
24
|
+
should 'correctly build url with single bucket params' do
|
25
|
+
request = Request.new("artist/profile", id: 'meh', bucket: 'biographies')
|
26
|
+
assert_equal 'http://developer.echonest.com/api/v4/artist/profile?api_key=fart&format=json&id=meh&bucket=biographies', request.build_url
|
27
|
+
request = Request.new("artist/profile", id: 'meh', bucket: %w(biographies songs id:spotify-WW))
|
28
|
+
assert_equal 'http://developer.echonest.com/api/v4/artist/profile?api_key=fart&format=json&id=meh&bucket=biographies&bucket=songs&bucket=id:spotify-WW', request.build_url
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
$:.unshift '.';require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
module EchoNest
|
4
|
+
class ResponseTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
should "create a hashie mash of data" do
|
7
|
+
json = '{"response": {"status": {"version": "4.2", "code": 0, "message": "Success"}, "artist": {"id": "ARZGTK71187B9AC7F5", "name": "Eels"}}}'
|
8
|
+
response = Response.new(:raw_json => json)
|
9
|
+
artist = response.data.artist
|
10
|
+
assert_equal 'Eels', artist.name
|
11
|
+
assert_equal 'ARZGTK71187B9AC7F5', artist.id
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
{"response": {"status": {"version": "4.2", "code": 1, "message": "1|Invalid key: Unknown"}}}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: another_echonest_ruby_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zachary Kloepping
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -130,8 +130,23 @@ extra_rdoc_files:
|
|
130
130
|
- LICENSE.txt
|
131
131
|
- README.md
|
132
132
|
files:
|
133
|
-
-
|
133
|
+
- .travis.yml
|
134
|
+
- Gemfile
|
134
135
|
- LICENSE.txt
|
136
|
+
- README.md
|
137
|
+
- Rakefile
|
138
|
+
- VERSION
|
139
|
+
- another_echonest_ruby_api.gemspec
|
140
|
+
- lib/another_echonest_ruby_api.rb
|
141
|
+
- lib/another_echonest_ruby_api/config.rb
|
142
|
+
- lib/another_echonest_ruby_api/query.rb
|
143
|
+
- lib/another_echonest_ruby_api/request.rb
|
144
|
+
- lib/another_echonest_ruby_api/response.rb
|
145
|
+
- test/config_test.rb
|
146
|
+
- test/helper.rb
|
147
|
+
- test/request_test.rb
|
148
|
+
- test/response_test.rb
|
149
|
+
- test/webmock/bad_credentials.json
|
135
150
|
homepage: http://github.com/spilliton/another_echonest_ruby_api
|
136
151
|
licenses:
|
137
152
|
- MIT
|