coin_falcon 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c8e8327a393ac7ccbb94118375d6e8705901e42566c00b1c9bef4d27f7d98c5a
4
- data.tar.gz: 15c7875175f2655614002a8818d32a22a0fa75968c778b6ab1908c8d4081492d
3
+ metadata.gz: 3cf549899440b504ac92dd7c53b25356ccc07443e21e424e685a56e2bf31a791
4
+ data.tar.gz: b1506d575d9dfce685b9dbf0fa7ec1841962e04a908abb6c3263875cd33c8b7e
5
5
  SHA512:
6
- metadata.gz: 981d0ab1d37b4fef79a1021def4d1954a35688b6f16301f1dfda9acfe3d7a7c763a6e632b686b886479c31c073c2cd8fc52d06bc72c11ea83ddff62779beb80f
7
- data.tar.gz: a1cfb3d7483ccefe0547fbef2e3dafa6d15ebe5d820a66b68b287bd9f162011c51a0bbf1a8b318f2cd8b5ed934afa657087672d28473d821f81df70b5ff5f73f
6
+ metadata.gz: 7d3222b7e5561a48a760d08ea22a1b8f7cb285b769abb2d5c5cdfe4a698e89b173957fcd9b762f44ed6e02036479cce263018443cc1855e04aa0b25c51d4318a
7
+ data.tar.gz: 51ecc3d86a2bcb7ebd613331a6fddcc6352d541c599ce3488b9a962e8bad2a75a6d8c96cc4b952a09058866acb10887d34f6c51d4366fcf5e26afd8805cef042
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- coin_falcon (0.0.1)
4
+ coin_falcon (0.0.2)
5
+ faye-websocket
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
@@ -9,6 +10,10 @@ GEM
9
10
  byebug (10.0.0)
10
11
  coderay (1.1.2)
11
12
  diff-lcs (1.3)
13
+ eventmachine (1.2.5)
14
+ faye-websocket (0.10.7)
15
+ eventmachine (>= 0.12.0)
16
+ websocket-driver (>= 0.5.1)
12
17
  method_source (0.9.0)
13
18
  pry (0.11.3)
14
19
  coderay (~> 1.1.0)
@@ -30,6 +35,9 @@ GEM
30
35
  diff-lcs (>= 1.2.0, < 2.0)
31
36
  rspec-support (~> 3.7.0)
32
37
  rspec-support (3.7.1)
38
+ websocket-driver (0.7.0)
39
+ websocket-extensions (>= 0.1.0)
40
+ websocket-extensions (0.1.3)
33
41
 
34
42
  PLATFORMS
35
43
  ruby
data/README.md CHANGED
@@ -20,7 +20,9 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- The library needs to be configured with your account's `key` and `secret` which is available in your CoinFalcon Dashboard:
23
+ The client needs to be configured with your account's `key` and `secret` which is available in your CoinFalcon Dashboard:
24
+
25
+ ## API Client
24
26
 
25
27
  ```ruby
26
28
  require 'coin_falcon'
@@ -31,15 +33,13 @@ client = CoinFalcon::Client.new(key, secret)
31
33
  It is also possible to set up an API `endpoint` and `version`:
32
34
 
33
35
  ```ruby
34
- require 'coin_falcon'
35
-
36
36
  client = CoinFalcon::Client.new(key, secret, endpoint, version)
37
37
  ```
38
38
 
39
39
  Defaults:
40
40
 
41
41
  ```ruby
42
- ENDPOINT = 'https://staging.coinfalcon.com'
42
+ ENDPOINT = 'https://coinfalcon.com'
43
43
  VERSION = 1
44
44
  ```
45
45
 
@@ -72,7 +72,7 @@ client.my_orders
72
72
  ### List trades
73
73
 
74
74
  ```ruby
75
- client.my_trades
75
+ client.my_trades(market: 'ETH-BTC')
76
76
  ```
77
77
 
78
78
  ### Deposit address
@@ -130,6 +130,44 @@ client.orderbook('ETH-BTC')
130
130
  client.orderbook('ETH-BTC', level: 3)
131
131
  ```
132
132
 
133
+ ## Websocket Client
134
+
135
+ ```ruby
136
+ require 'coin_falcon'
137
+
138
+ websocket_client = CoinFalcon::WebsocketClient.new(key, secret)
139
+ ```
140
+
141
+ It is also possible to set up an `endpoint`:
142
+
143
+ ```ruby
144
+ websocket_client = CoinFalcon::WebsocketClient.new(key, secret, endpoint)
145
+ ```
146
+
147
+ Defaults:
148
+
149
+ ```ruby
150
+ ENDPOINT = 'wss://ws.coinfalcon.com'
151
+ ```
152
+
153
+ ### Set up channels
154
+
155
+ ```ruby
156
+ websocket_client.channels << { channel: 'TickerChannel' } << { channel: 'OrderbookChannel', market: 'ETH-BTC' }
157
+ ```
158
+
159
+ ### Run feed
160
+
161
+ ```ruby
162
+ websocket_client.feed
163
+ ```
164
+
165
+ It is also possible to send a block
166
+
167
+ ```ruby
168
+ websocket_client.feed { |msg| puts msg }
169
+ ```
170
+
133
171
  ## Contributing
134
172
 
135
173
  Bug reports and pull requests are welcome on GitHub at https://github.com/thetonyrom/coin_falcon
data/coin_falcon.gemspec CHANGED
@@ -20,6 +20,8 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
+ spec.add_dependency 'faye-websocket'
24
+
23
25
  spec.add_development_dependency "bundler", "~> 1.16"
24
26
  spec.add_development_dependency "rake", "~> 10.0"
25
27
  spec.add_development_dependency "rspec", "~> 3.0"
@@ -2,7 +2,7 @@ module CoinFalcon
2
2
  # Client executes requests against the CoinFalcon API.
3
3
  #
4
4
  class Client
5
- ENDPOINT = 'https://staging.coinfalcon.com'.freeze
5
+ ENDPOINT = 'https://coinfalcon.com'.freeze
6
6
  VERSION = 1
7
7
 
8
8
  def initialize(key, secret, endpoint = ENDPOINT, version = VERSION)
@@ -1,3 +1,3 @@
1
1
  module CoinFalcon
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.0.2'.freeze
3
3
  end
@@ -0,0 +1,62 @@
1
+ module CoinFalcon
2
+ class WebsocketClient
3
+ ENDPOINT = 'wss://ws.coinfalcon.com'.freeze
4
+ AUTH_PATH = '/auth/feed'.freeze
5
+
6
+ attr_accessor :channels
7
+
8
+ def initialize(key = nil, secret = nil, endpoint = ENDPOINT)
9
+ @endpoint = endpoint
10
+ @channels = []
11
+ @cipher = Cipher.new(key, secret)
12
+ end
13
+
14
+ def feed
15
+ EM.run do
16
+ @ws = Faye::WebSocket::Client.new(@endpoint, nil, { headers: headers })
17
+
18
+ @ws.on :open do |event|
19
+ channels.each { |channel| subscribe(channel) }
20
+ end
21
+
22
+ @ws.on :message do |event|
23
+ data = JSON.parse(event.data)
24
+
25
+ if block_given?
26
+ yield data
27
+ else
28
+ p [:message, data]
29
+ end
30
+ end
31
+
32
+ @ws.on :close do |event|
33
+ p [:close, event.code, event.reason]
34
+ @ws = nil
35
+ EM.stop
36
+ end
37
+ end
38
+ end
39
+
40
+ def subscribe(identifier)
41
+ request = { command: :subscribe, identifier: identifier.to_json }.to_json
42
+
43
+ @ws.send(request)
44
+ end
45
+
46
+ private
47
+
48
+ def request
49
+ @request ||= Request.new(:get, AUTH_PATH, nil)
50
+ end
51
+
52
+ def headers
53
+ @cipher.sign!(request)
54
+
55
+ {
56
+ 'CF-API-KEY' => request['CF-API-KEY'],
57
+ 'CF-API-TIMESTAMP' => request['CF-API-TIMESTAMP'],
58
+ 'CF-API-SIGNATURE' => request['CF-API-SIGNATURE']
59
+ }
60
+ end
61
+ end
62
+ end
data/lib/coin_falcon.rb CHANGED
@@ -2,12 +2,17 @@ require 'net/http'
2
2
  require 'openssl'
3
3
  require 'json'
4
4
 
5
+ require 'faye/websocket'
6
+ require 'eventmachine'
7
+
5
8
  require 'coin_falcon/cipher'
6
9
  require 'coin_falcon/client'
7
10
  require 'coin_falcon/connection'
8
11
  require 'coin_falcon/request'
9
12
  require 'coin_falcon/response'
10
13
 
14
+ require 'coin_falcon/websocket_client'
15
+
11
16
  require 'coin_falcon/version'
12
17
 
13
18
  module CoinFalcon
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coin_falcon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Rom
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-12 00:00:00.000000000 Z
11
+ date: 2018-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faye-websocket
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +105,7 @@ files:
91
105
  - lib/coin_falcon/request.rb
92
106
  - lib/coin_falcon/response.rb
93
107
  - lib/coin_falcon/version.rb
108
+ - lib/coin_falcon/websocket_client.rb
94
109
  homepage: https://github.com/thetonyrom/coin_falcon
95
110
  licenses:
96
111
  - MIT