hitbtc 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 288b1ba6e06ecc47a81cdf1f0914447c092063db
4
+ data.tar.gz: 40fc742b57d7501897a123a2a2f5c6e08fb511a4
5
+ SHA512:
6
+ metadata.gz: 749a1ef4ad43b2d88ec7a006c5b4bf40f972ff7d6de4da8b1b0adc51d8d9abfff927f1e00b78f048fc600dfacfdf6d6f3af84bc1ad46ddac7da618d9f870f314
7
+ data.tar.gz: 8cbdeef9e634273e7a2a7b0a20eb4f81c44b5e2bd10c457b2a35a2976dde01fbda37dedb4ce53b80429b1af41de03f205d40541684f01037e043e2c87b76b60c
@@ -0,0 +1,3 @@
1
+ .idea
2
+ *.gem
3
+ key.yml
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hitbtc.gemspec
4
+ gemspec
5
+ gem 'httparty'
6
+ gem 'hashie'
@@ -0,0 +1,249 @@
1
+ ## Summary
2
+
3
+ This document provides the complete reference for [hitbtc](https://hitbtc.com) API in the wrapper.
4
+
5
+
6
+ The following symbols are traded on hitbtc exchange.
7
+
8
+ | Symbol | Lot size | Price step
9
+ | --- | --- | --- |
10
+ | BTCUSD | 0.01 BTC | 0.01 |
11
+ | BTCEUR | 0.01 BTC | 0.01 |
12
+ | LTCBTC | 0.1 LTC | 0.00001 |
13
+ | LTCUSD | 0.1 LTC | 0.001 |
14
+ | LTCEUR | 0.1 LTC | 0.001 |
15
+ | EURUSD | 1 EUR | 0.0001 |
16
+
17
+ Size representation:
18
+ * Size values in streaming messages are represented in lots.
19
+ * Size values in RESTful market data are represented in money (e.g. in coins or in USD).
20
+ * Size values in RESTful trade are represented in lots (e.g. 1 means 0.01 BTC for BTCUSD)
21
+
22
+ ### Pending Future Updates
23
+
24
+ - Solid trade execution functionality
25
+ - payment api
26
+
27
+ ## Installation
28
+
29
+ Add this line to your application's Gemfile:
30
+
31
+ gem 'hitbtc'
32
+
33
+ And then execute:
34
+
35
+ $ bundle
36
+
37
+ Or install it yourself as:
38
+
39
+ $ gem install hitbtc
40
+
41
+ ## Usage
42
+
43
+ Create a Kraken client:
44
+
45
+ ```ruby
46
+ API_KEY = '3bH+M/nLp......'
47
+ API_SECRET = 'wQG+7Lr9b.....'
48
+
49
+ hitbtc = Hitbtc::Client.new(API_KEY, API_SECRET)
50
+
51
+ time = hitbtc.server_time
52
+ time #=> 1393056191
53
+ ```
54
+ ### Public Data Methods
55
+
56
+ #### Server Time
57
+ ```ruby
58
+ time = hitbtc.server_time
59
+
60
+ ```
61
+ #### Symbol info
62
+
63
+ ```ruby
64
+ symbol = hitbtc.symbols("BTCEUR")
65
+ symbols = hitbtc.symbols(["BTCEUR", "BTCUSD"])
66
+ all_symbols = hitbtc.symbols
67
+ ```
68
+
69
+ #### Ticker
70
+
71
+ ```ruby
72
+ ticker_data = hitbtc.ticker('BTCEUR')
73
+ ```
74
+
75
+ * 24h means last 24h + last incomplete minute
76
+ * high - highest trade price / 24 h
77
+ * low - lowest trade price / 24 h
78
+ * volume - volume / 24h
79
+
80
+ #### Order Book
81
+
82
+ ```ruby
83
+ order_book = hitbtc.order_book('BTCEUR')
84
+ order_book = hitbtc.order_book('BTCEUR', {format_amount_unit: "lot"})
85
+ ```
86
+
87
+ | Parameter | Type | Description |
88
+ | --- | --- | --- |
89
+ | format_price | optional, "string" (default) or "number" | |
90
+ | format_amount | optional, "string" (default) or "number" | |
91
+ | format_amount_unit | optional, "currency" (default) or "lot" | |
92
+
93
+
94
+ #### Trades
95
+
96
+ ```ruby
97
+ trades = hitbtc.trades "BTCEUR" (default from 1 day ago, by timestamp, index 0, max_result 1000)
98
+ trades = hitbtc.trades 'BTCEUR', (Time.now - 1.day).to_i, "ts", 0, 1000)
99
+ trades = hitbtc.trades 'BTCEUR', (Time.now - 1.day).to_i, "ts", 0, 1000, {format_amount_unit: "lot"})
100
+ ```
101
+
102
+ Parameters:
103
+
104
+ | Parameter | Type | Description |
105
+ | --- | --- | --- |
106
+ | from | required, int, trade_id or timestamp | returns trades with trade_id > specified trade_id <br> returns trades with timestamp >= specified timestamp |
107
+ | till | optional, int, trade_id or timestamp | returns trades with trade_id < specified trade_id <br> returns trades with timestamp < specified timestamp |
108
+ | by | required, filter and sort by `trade_id` or `ts` (timestamp) | |
109
+ | sort | optional, `asc` (default) or `desc` | |
110
+ | start_index | required, int | zero-based |
111
+ | max_results | required, int, max value = 1000 | |
112
+ | format_item | optional, "array" (default) or "object" | |
113
+ | format_price | optional, "string" (default) or "number" | |
114
+ | format_amount | optional, "string" (default) or "number" | |
115
+ | format_amount_unit | optional, "currency" (default) or "lot" | |
116
+ | format_tid | optional, "string" or "number" (default) | |
117
+ | format_timestamp | optional, "millisecond" (default) or "second" | |
118
+ | format_wrap | optional, "true" (default) or "false" | |
119
+
120
+
121
+ ### Private Data Methods
122
+
123
+ #### Error codes
124
+
125
+ RESTful Trading API can return the following errors:
126
+
127
+ | HTTP code | Text | Description |
128
+ | --- | --- | --- |
129
+ | 403 | Invalid apikey | API key doesn't exist or API key is currently used on another endpoint (max last 15 min) |
130
+ | 403 | Nonce has been used | nonce is not monotonous |
131
+ | 403 | Nonce is not valid | too big number or not a number |
132
+ | 403 | Wrong signature | |
133
+
134
+ #### Execution reports
135
+
136
+ The API uses `ExecutionReport` as an object that represents change of order status.
137
+
138
+ The following fields are used in this object:
139
+
140
+ | Field | Description | Type / Enum | Required |
141
+ | --- | --- | --- | --- |
142
+ | orderId | Order ID on the Exchange | string | required |
143
+ | clientOrderId | clientOrderId sent in NewOrder message | string | required |
144
+ | execReportType | execution report type | `new` <br> `canceled` <br> `rejected` <br> `expired` <br> `trade` <br> `status` | required |
145
+ | orderStatus | order status | `new` <br> `partiallyFilled` <br> `filled` <br> `canceled` <br> `rejected` <br> `expired` | required |
146
+ | orderRejectReason | Relevant only for the orders in rejected state | `unknownSymbol` <br> `exchangeClosed` <br>`orderExceedsLimit` <br> `unknownOrder` <br> `duplicateOrder` <br> `unsupportedOrder` <br> `unknownAccount` <br> `other`| for rejects |
147
+ | symbol | | string, e.g. `BTCUSD` | required |
148
+ | side | | `buy` or `sell` | required |
149
+ | timestamp | UTC timestamp in milliseconds | | |
150
+ | price | | decimal | |
151
+ | quantity | | integer | required |
152
+ | type | | only `limit` orders are currently supported | required |
153
+ | timeInForce | time in force | `GTC` - Good-Til-Canceled <br>`IOK` - Immediate-Or-Cancel<br>`FOK` - Fill-Or-Kill<br>`DAY` - day orders< | required |
154
+ | tradeId | Trade ID on the exchange | | for trades |
155
+ | lastQuantity | | integer | for trades |
156
+ | lastPrice | | decimal | for trades |
157
+ | leavesQuantity | | integer | |
158
+ | cumQuantity | | integer | |
159
+ | averagePrice | | decimal, will be 0 if 'cumQuantity'=0 | |
160
+
161
+
162
+ #### Balance
163
+
164
+ ```ruby
165
+ all_balance = hitbtc.balance
166
+ one_balance = hitbtc.balance("BTC")
167
+ many_balances = hitbtc.balance(["BTC", "EUR"])
168
+ ```
169
+
170
+ #### List of active orders
171
+
172
+ ```ruby
173
+ all_active_orders = hitbtc.active_orders
174
+ symbol_specific_orders = hitbtc.active_orders({symbols: "BTCEUR"})
175
+ symbols_specific_orders = hitbtc.active_orders({symbols: "BTCEUR,BTCUSD"})
176
+ ```
177
+
178
+ Parameters:
179
+
180
+ | Parameter | Type | Description |
181
+ | --- | --- | --- |
182
+ | symbols | string, comma-delimeted list of symbols, optional, default - all symbols | |
183
+
184
+
185
+ #### Create Order
186
+
187
+ price should be specified even for market execution (haven't tested on a real order yet)
188
+
189
+ ```ruby
190
+ hitbtc.create_order({symbol: "BTCEUR", side: "buy", quantity: 1, type: "market", timeInForce: "GTC", price: 320.000})
191
+ ```
192
+
193
+ Parameters:
194
+
195
+ | Parameter | Type | Description |
196
+ | --- | --- | --- |
197
+ | symbol | string, required | e.g. `BTCUSD` |
198
+ | side | `buy` or `sell`, required | |
199
+ | price | decimal, required | order price, required for limit orders |
200
+ | quantity | int | order quantity in lots |
201
+ | type | `limit` or `market` | order type |
202
+ | timeInForce | `GTC` - Good-Til-Canceled <br>`IOK` - Immediate-Or-Cancel<br>`FOK` - Fill-Or-Kill<br>`DAY` - day | use `GTC` by default |
203
+
204
+
205
+
206
+ #### Cancel Order
207
+
208
+ You only need your order id (haven't been tested on real order yet)
209
+
210
+ ```ruby
211
+ hitbtc.cancel_order("1398804347")
212
+ ```
213
+
214
+ #### Trades History
215
+
216
+ ```ruby
217
+ default = hitbtc.trade_history
218
+ custom = hitbtc.trade_history({by: "ts", start_index: 0, max_results: 10, symbols: "BTCEUR,BTCUSD"})
219
+ ```
220
+
221
+ Parameters:
222
+
223
+ | Parameter | Type | Description |
224
+ | --- | --- | --- |
225
+ | `by` | `trade_id` or `ts` (timestamp) | |
226
+ | `start_index` | int, optional, default(0) | zero-based index |
227
+ | `max_results` | int, required, <=1000 | |
228
+ | `symbols` | string, comma-delimited | |
229
+ | `sort` | `asc` (default) or `desc` | |
230
+ | `from` | optional | start `trade_id` or `ts`, see `by` |
231
+ | `till` | optional | end `trade_id` or `ts`, see `by` |
232
+
233
+
234
+ #### Recent Orders
235
+
236
+ ```ruby
237
+ default = hitbtc.recent_orders
238
+ custom = hitbtc.trade_history({start_index: 0, max_results: 10, symbols: "BTCEUR,BTCUSD", statuses: "new,filled"})
239
+ ```
240
+
241
+ Parameters:
242
+
243
+ | Parameter | Type | Description |
244
+ | --- | --- | --- |
245
+ | `start_index` | int, optional, default(0) | zero-based index |
246
+ | `max_results` | int, required, <=1000 | |
247
+ | `symbols` | string, comma-delimited | |
248
+ | `statuses` | string, comma-delimited, `new`, `partiallyFilled`, `filled`, `canceled`, `expired`, `rejected` | |
249
+
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'hitbtc/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "hitbtc"
8
+ spec.version = HitbtcRuby::VERSION
9
+ spec.authors = ["Julien Hobeika"]
10
+ spec.email = ["julien.hobeika@gmail.com"]
11
+ spec.description = %q{"Wrapper for hitbtc Exchange API"}
12
+ spec.summary = %q{"Wrapper for hitbtc Exchange API"}
13
+ spec.homepage = "https://github.com/jhk753/hitbtc_ruby"
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "rake"
22
+ spec.add_development_dependency "rspec"
23
+
24
+ spec.add_dependency "httparty"
25
+ spec.add_dependency "hashie"
26
+ spec.add_dependency "addressable"
27
+ end
@@ -0,0 +1,2 @@
1
+ key: apikey
2
+ secret: apisecret
@@ -0,0 +1,2 @@
1
+ require "hitbtc/version"
2
+ require "hitbtc/client"
@@ -0,0 +1,240 @@
1
+ require 'httparty'
2
+ require 'hashie'
3
+ require 'Base64'
4
+ require 'addressable/uri'
5
+
6
+
7
+ module Hitbtc
8
+ class Client
9
+ include HTTParty
10
+
11
+ def initialize(api_key=nil, api_secret=nil, options={})
12
+ @api_key = api_key || YAML.load_file("key.yml")["key"]
13
+ @api_secret = api_secret || YAML.load_file("key.yml")["secret"]
14
+ @api_version = options[:version] ||= '1'
15
+ @base_uri = options[:base_uri] ||= 'api.hitbtc.com'
16
+ end
17
+
18
+ ###########################
19
+ ###### Public Data ########
20
+ ###########################
21
+
22
+ def server_time
23
+ mash = get_public 'time'
24
+ mash.try(:timestamp)
25
+ end
26
+
27
+ def symbols(opts={}) #can specify array of string symbols
28
+ mash = get_public 'symbols'
29
+ m = mash.try(:symbols)
30
+ if (opts.length == 1 || opts.class == String) && m != mash
31
+ m.select{|h| opts.include?(h.symbol)}.first
32
+ elsif !opts.empty? && m != mash
33
+ m.select{|h| opts.include?(h.symbol)}
34
+ else
35
+ m
36
+ end
37
+ end
38
+
39
+ def ticker symbol
40
+ checked_symbol = check_symbol(symbol)
41
+ get_public(checked_symbol+"/ticker")
42
+ end
43
+
44
+ def order_book symbol, opts={}
45
+ checked_symbol = check_symbol(symbol)
46
+ #opts optional
47
+ #format_price: "string" (default) or "number"
48
+ #format_amount: "string" (default) or "number"
49
+ #format_amount_unit: "currency" (default) or "lot"
50
+ get_public(checked_symbol+"/orderbook", opts)
51
+ end
52
+
53
+ def trades symbol, from = (Time.now - 1.day).to_i, by = "ts", start_index = 0, max_results = 1000, opts={}
54
+ checked_symbol = check_symbol(symbol)
55
+ #Parameter Type Description
56
+ #from required int = trade_id or timestamp returns trades with trade_id > specified trade_id or returns trades with timestamp >= specified timestamp
57
+ #till optional int = trade_id or timestamp returns trades with trade_id < specified trade_id or returns trades with timestamp < specified timestamp
58
+ #by required filter and sort by trade_id or ts (timestamp)
59
+ #sort optional asc (default) or desc
60
+ #start_index required int zero-based
61
+ #max_results required int, max value = 1000
62
+ #format_item optional "array" (default) or "object"
63
+ #format_price optional "string" (default) or "number"
64
+ #format_amount optional "string" (default) or "number"
65
+ #format_amount_unit optional "currency" (default) or "lot"
66
+ #format_tid optional "string" or "number" (default)
67
+ #format_timestamp optional "millisecond" (default) or "second"
68
+ #format_wrap optional "true" (default) or "false"
69
+ if by != "trade_id" && by != "ts"
70
+ raise "3rd parameter by, should be 'trade_id' or 'ts'"
71
+ end
72
+ opts[:from] = from
73
+ opts[:start_index] = start_index
74
+ opts[:max_results] = max_results
75
+ opts[:by] = by
76
+ mash= get_public(checked_symbol+'/trades', opts)
77
+ mash.try(:trades)
78
+ end
79
+
80
+ def get_public(method, opts={})
81
+ url = 'http://'+ @base_uri + '/api/' + @api_version + '/public/' + method
82
+ r = self.class.get(url, query: opts)
83
+ Hashie::Mash.new(JSON.parse(r.body))
84
+ end
85
+
86
+ ######################
87
+ ##### Private Data ###
88
+ ######################
89
+
90
+ def balance opts={} #array of string currency
91
+ mash = get_private 'balance'
92
+ m = mash.try(:balance)
93
+ if opts.class == String
94
+ o = []
95
+ o << opts
96
+ opts = o
97
+ end
98
+ if m != mash && opts.length > 0
99
+ r= m.select{|c| opts.include?(c.currency_code)}
100
+ (r.length==1 ? r.first : r)
101
+ else
102
+ m
103
+ end
104
+ end
105
+
106
+ def active_orders opts={} #symbols: string comma-delimeted list of symbols, optional, default - all symbols
107
+ #example {:symbols=> "BTCEUR,BTCUSD"}
108
+ mash = get_private 'orders/active', opts
109
+ mash.try(:orders)
110
+ end
111
+
112
+ def cancel_order client_order_id
113
+ orders = active_orders
114
+ order = orders.select{|o| o.orderId == client_order_id}.try(:first)
115
+ if order.nil?
116
+ "We didn't find the order for the specified ID"
117
+ else
118
+ opts = {}
119
+ opts[:clientOrderId] = order.orderId
120
+ opts[:cancelRequestClientOrderId] = Time.now.to_i.to_s
121
+ opts[:symbol] = order.symbol
122
+ opts[:side] = order.side
123
+ opts[:price] = order.orderPrice
124
+ opts[:quantity] = order.orderQuantity
125
+ opts[:type] = order.limit
126
+ opts[:timeInForce] = order.timeInForce
127
+
128
+ get_private 'cancel_order', opts
129
+ end
130
+ end
131
+
132
+ def trade_history opts={by:"ts", start_index: 0, max_results: 10}
133
+ mash= get_private 'trades', opts
134
+ mash.try(:trades)
135
+ end
136
+
137
+ def recent_orders opts={max_results: 10, start_index: 0, statuses: "new,partiallyFilled,filled,canceled,expired,rejected"}
138
+ mash = get_private 'orders/recent', opts
139
+ mash.try(:orders)
140
+ end
141
+
142
+ #### Private User Trading (Still experimental!) ####
143
+ def create_order opts={}
144
+ opts[:clientOrderId] = Time.now.to_i.to_s
145
+ post_private 'new_order', opts
146
+ end
147
+ ######################
148
+ ##### Payment Data ###
149
+ ######################
150
+
151
+ # to be written
152
+
153
+ #######################
154
+ #### Generate Signed ##
155
+ ##### Post Request ####
156
+ #######################
157
+
158
+ private
159
+
160
+ def post_private(method, opts={})
161
+ post_data = encode_options(opts)
162
+ uri = "/api/"+ @api_version + "/trading/" + method +"?" + "apikey=" + @api_key + "&nonce=" + nonce
163
+ url = "https://" + @base_uri + uri
164
+ signature = generate_signature(uri, post_data)
165
+ headers = {'X-Signature' => signature}
166
+ r = self.class.post(url, {headers: headers, body: post_data}).parsed_response
167
+ Hashie::Mash.new(r)
168
+ end
169
+
170
+ def get_private(method, opts={})
171
+ opts = complete_opts(opts)
172
+ uri = "/api/"+ @api_version + "/trading/" + method +"?" + encode_options(opts)
173
+ url = "https://" + @base_uri + uri
174
+ signature = generate_signature(uri, "")
175
+ headers = {'X-Signature' => signature}
176
+
177
+
178
+
179
+ r = self.class.get(url, {headers: headers})
180
+ mash = Hashie::Mash.new(JSON.parse(r.body))
181
+ end
182
+
183
+ def complete_opts opts
184
+ opts[:apikey] = @api_key
185
+ opts[:nonce] = nonce
186
+ opts
187
+ end
188
+
189
+ def nonce
190
+ Time.now.to_i.to_s
191
+ end
192
+
193
+ def encode_options(opts)
194
+ uri = Addressable::URI.new
195
+ uri.query_values = opts
196
+ uri.query
197
+ end
198
+
199
+ def generate_signature(uri, post_data)
200
+ message = generate_message(uri, post_data)
201
+ generate_hmac(@api_secret, message)
202
+ end
203
+
204
+ def generate_message(uri, data)
205
+ uri + data
206
+ end
207
+
208
+ def generate_hmac(key, message)
209
+ OpenSSL::HMAC.hexdigest('SHA512', key, message).downcase
210
+ end
211
+
212
+ def check_symbol symbol
213
+ if symbol.length != 6 || symbol.class != String
214
+ raise "You didn't enter a correct symbol, check symbols method to see list and enter symbol as a string"
215
+ end
216
+ symbol.upcase
217
+ end
218
+
219
+ def random_string
220
+
221
+ end
222
+
223
+ ##################################
224
+ ##### Realtime with web socket ###
225
+ ##################################
226
+
227
+ # to be written
228
+
229
+ end
230
+ end
231
+
232
+ class Hashie::Mash
233
+ def try key
234
+ if self.key?(key.to_s)
235
+ self[key]
236
+ else
237
+ self
238
+ end
239
+ end
240
+ end
@@ -0,0 +1,3 @@
1
+ module HitbtcRuby
2
+ VERSION = "0.1.1"
3
+ end
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hitbtc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Julien Hobeika
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: httparty
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: hashie
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: addressable
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: '"Wrapper for hitbtc Exchange API"'
98
+ email:
99
+ - julien.hobeika@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - .gitignore
105
+ - Gemfile
106
+ - README.md
107
+ - hitbtc.gemspec
108
+ - key.yml.example
109
+ - lib/hitbtc.rb
110
+ - lib/hitbtc/client.rb
111
+ - lib/hitbtc/version.rb
112
+ homepage: https://github.com/jhk753/hitbtc_ruby
113
+ licenses: []
114
+ metadata: {}
115
+ post_install_message:
116
+ rdoc_options: []
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ requirements: []
130
+ rubyforge_project:
131
+ rubygems_version: 2.2.2
132
+ signing_key:
133
+ specification_version: 4
134
+ summary: '"Wrapper for hitbtc Exchange API"'
135
+ test_files: []