Class: Echonest::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/echonest-ruby-api/base.rb

Direct Known Subclasses

Artist, Playlist, Song

Defined Under Namespace

Classes: EchonestConnectionError

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key) ⇒ Base

Returns a new instance of Base.



8
9
10
11
# File 'lib/echonest-ruby-api/base.rb', line 8

def initialize(api_key)
  @api_key = api_key
  @base_uri = "http://developer.echonest.com/api/v4/"
end

Class Method Details

.base_uriObject

Gets the base URI for all API calls

Returns a String



29
30
31
# File 'lib/echonest-ruby-api/base.rb', line 29

def self.base_uri
  "http://developer.echonest.com/api/v#{ Base.version }/"
end

.versionObject

The current version of the Echonest API to be supported.

Returns a Fixnum



36
37
38
# File 'lib/echonest-ruby-api/base.rb', line 36

def self.version
  4
end

Instance Method Details

#endpointObject



21
22
23
24
# File 'lib/echonest-ruby-api/base.rb', line 21

def endpoint
  calling_method = caller[1].split('`').last[0..-2]
  "#{ entity_name }/#{ calling_method }"
end

#entity_nameObject



17
18
19
# File 'lib/echonest-ruby-api/base.rb', line 17

def entity_name
  self.class.to_s.split('::').last.downcase
end

#get(endpoint, options = {}) ⇒ Object

Performs a simple HTTP get on an API endpoint.

Examples:

get('artist/biographies', results: 10)
#=> Array of Biography objects.

Raises an ArgumentError if the Echonest API responds with an error.

  • endpoint - The name of an API endpoint as a String

  • options - A Hash of options to pass to the end point.

Returns a response as a Hash



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/echonest-ruby-api/base.rb', line 53

def get(endpoint, options = {})
  query_string = ""
  options.each do |key, value|
    query_string << "#{ key }=#{ value }&"
  end
  #puts "#{ Base.base_uri }#{ endpoint }?api_key=#{ @api_key }&format=json&#{ query_string }"
  response = HTTParty.get(URI.escape("#{ Base.base_uri }#{ endpoint }?api_key=#{ @api_key }&format=json&#{ query_string }"))
  json = MultiJson.load(response.body, symbolize_keys: true)
  response_code = json[:response][:status][:code]

  response_code.eql?(0) ? json[:response] : raise(Echonest::Error.new(response_code), "Error code #{ response_code }")
end

#get_response(options = {}) ⇒ Object



13
14
15
# File 'lib/echonest-ruby-api/base.rb', line 13

def get_response(options = {})
  get(endpoint, options)
end

#which(cmd) ⇒ Object

Cross-platform way of finding an executable in the $PATH.

which('ruby') #=> /usr/bin/ruby


69
70
71
72
73
74
75
76
77
78
# File 'lib/echonest-ruby-api/base.rb', line 69

def which(cmd)
  exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
  ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
    exts.each { |ext|
      exe = File.join(path, "#{ cmd }#{ ext }")
      return exe if File.executable? exe
    }
  end
  return nil
end