Class: Cryptomarket::HttpManager
- Inherits:
-
Object
- Object
- Cryptomarket::HttpManager
- Defined in:
- lib/cryptomarket/http_manager.rb
Overview
Manager of http requests to the cryptomarket server
Constant Summary collapse
- @@API_URL =
rubocop:disable Naming/VariableName,Style/ClassVars
'https://api.exchange.cryptomkt.com'
- @@API_VERSION =
rubocop:disable Naming/VariableName,Style/ClassVars
'/api/3/'
Instance Method Summary collapse
- #build_headers(method, endpoint, params, public) ⇒ Object
- #build_payload(params) ⇒ Object
- #build_post_headers(endpoint, params) ⇒ Object
- #change_credentials(api_key:, api_secret:) ⇒ Object
- #change_window(window:) ⇒ Object
- #do_request(method, uri, payload, headers) ⇒ Object
- #handle_response(response) ⇒ Object
-
#initialize(api_key:, api_secret:, window: nil) ⇒ HttpManager
constructor
A new instance of HttpManager.
- #make_post_request(method:, endpoint:, params: nil) ⇒ Object
- #make_request(method:, endpoint:, params: nil, public: false) ⇒ Object
Constructor Details
#initialize(api_key:, api_secret:, window: nil) ⇒ HttpManager
Returns a new instance of HttpManager.
34 35 36 37 38 |
# File 'lib/cryptomarket/http_manager.rb', line 34 def initialize(api_key:, api_secret:, window: nil) @credential_factory = Cryptomarket::CredentialsFactory.new( api_version: @@API_VERSION, api_key: api_key, api_secret: api_secret, window: window ) end |
Instance Method Details
#build_headers(method, endpoint, params, public) ⇒ Object
65 66 67 68 69 |
# File 'lib/cryptomarket/http_manager.rb', line 65 def build_headers(method, endpoint, params, public) return {} if public { 'Authorization' => @credential_factory.get_credential(method.upcase, endpoint, params) } end |
#build_payload(params) ⇒ Object
71 72 73 74 75 76 77 |
# File 'lib/cryptomarket/http_manager.rb', line 71 def build_payload(params) return nil if params.nil? payload = params.compact payload = Hash[payload.sort_by { |key, _val| key.to_s }] if payload.is_a?(Hash) payload end |
#build_post_headers(endpoint, params) ⇒ Object
90 91 92 93 |
# File 'lib/cryptomarket/http_manager.rb', line 90 def build_post_headers(endpoint, params) { 'Content-Type' => 'application/json', 'Authorization' => @credential_factory.get_credential('POST'.upcase, endpoint, params.to_json) } end |
#change_credentials(api_key:, api_secret:) ⇒ Object
40 41 42 |
# File 'lib/cryptomarket/http_manager.rb', line 40 def change_credentials(api_key:, api_secret:) @credential_factory.change_credentials(api_key: api_key, api_secret: api_secret) end |
#change_window(window:) ⇒ Object
44 45 46 |
# File 'lib/cryptomarket/http_manager.rb', line 44 def change_window(window:) @credential_factory.change_window(window: window) end |
#do_request(method, uri, payload, headers) ⇒ Object
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/cryptomarket/http_manager.rb', line 79 def do_request(method, uri, payload, headers) args = { method: method.downcase.to_sym, url: uri.to_s, headers: headers } if post?(method) || patch?(method) args[:payload] = post?(method) ? payload.to_json : payload end response = RestClient::Request.execute(**args) handle_response(response) rescue RestClient::ExceptionWithResponse => e handle_response(e.response) end |
#handle_response(response) ⇒ Object
95 96 97 98 99 100 101 102 103 104 |
# File 'lib/cryptomarket/http_manager.rb', line 95 def handle_response(response) result = response.body parsed_result = JSON.parse result if (response.code != 200) && !parsed_result['error'].nil? error = parsed_result['error'] exception = Cryptomarket::APIException.new error raise exception end parsed_result end |
#make_post_request(method:, endpoint:, params: nil) ⇒ Object
59 60 61 62 63 |
# File 'lib/cryptomarket/http_manager.rb', line 59 def make_post_request(method:, endpoint:, params: nil) uri = URI(@@API_URL + @@API_VERSION + endpoint) payload = build_payload(params) do_request(method, uri, payload, build_post_headers(endpoint, payload)) end |
#make_request(method:, endpoint:, params: nil, public: false) ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/cryptomarket/http_manager.rb', line 48 def make_request(method:, endpoint:, params: nil, public: false) uri = URI(@@API_URL + @@API_VERSION + endpoint) payload = build_payload(params) headers = build_headers(method, endpoint, payload, public) if ((method.upcase == 'GET') || (method.upcase == 'PUT')) && !payload.nil? uri.query = URI.encode_www_form payload payload = nil end do_request(method, uri, payload, headers) end |