Sha256: 2f6f72c02da2edecf1b2a042902d93bd43bee0e4fbbed33f57f723187b2fc084

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

module Beatport
  module Client
    def self.connection
      @connection ||= Faraday.new do |conn|
        conn.use Support::Middleware
        conn.adapter  Faraday.default_adapter  # make requests with Net::HTTP
      end      
    end
    
    def self.client
      @client ||= Signet::OAuth1::Client.new(
        :client_credential_key =>     Beatport.consumer_key,
        :client_credential_secret =>  Beatport.consumer_secret,
        :token_credential_key =>      Beatport.access_token_key,
        :token_credential_secret =>   Beatport.access_token_secret
      )
    end
    
    def self.builder
      @builder ||= Support::QueryBuilder.new
    end
    
    def self.uri(path, args)
      Addressable::URI.new(
        :scheme => 'https',
        :host => 'api.beatport.com',
        :path => "/catalog/3/#{path}",
        :query_values => builder.process(*args)
      )      
    end
    
    def self.retrieve(path, klass, *args)
      result = client.fetch_protected_resource(
        :connection => connection, 
        :uri => uri(path, args).to_s
      ).body

      if result['metadata']['error']
        raise Error.new("#{result['metadata']['error']}: #{result['metadata']['message']}")
      end

      case result['results']
      when Array
        if builder.single_result?
          klass.new(result['results'].first) if result['results'].any?
        else
          Collection.new(klass, result)
        end
      when Hash
        klass.new(result['results'])
      else
        raise Error.new("results is an unexpected class #{result['results'].class}")
      end
    end 
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
beatport-0.2.1 lib/beatport/client.rb