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
65
66
67
68
69
# File 'lib/echonest-ruby-api/base.rb', line 53

def get(endpoint, options = {})
  options.merge!(api_key: @api_key,
                       format: "json")

  httparty_options = { query_string_normalizer: HTTParty::Request::NON_RAILS_QUERY_STRING_NORMALIZER,
                       query: options }

  response = HTTParty.get("#{ Base.base_uri }#{ endpoint }", httparty_options)
  json = MultiJson.load(response.body, symbolize_keys: true)
  response_code = json[:response][:status][:code]

  if response_code.eql?(0)
    json[:response]
  else
    raise Echonest::Error.new(response_code, response), "Error code #{ response_code }"
  end
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


74
75
76
77
78
79
80
81
82
83
# File 'lib/echonest-ruby-api/base.rb', line 74

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