cf-trade-client 0.1.9 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e90e17269fa8e89671639959552dff79f388e655
4
+ data.tar.gz: 87f02f75a2485d8595e8fb6ab862c34179c34b46
5
+ SHA512:
6
+ metadata.gz: 2928593e151240c5d61b8b80769ba326de82cf826304006ddbcf2859fccb0f5e23b5f94d97665070cbad5cd852c6c8aac0b7ecb00dad5df4fb61e0cd84b4326a
7
+ data.tar.gz: b31e3bbaf441ac1b2fa2c523f4c31c33e4ea8ef261d898d1d3b985122ab23d01e3d44387d04005e22099d59eb1e4d92d7815459df115f560583721c9f6c9cf4c
data/lib/client/client.rb CHANGED
@@ -1,86 +1,71 @@
1
- =begin
2
- Copyright 2014 Coinfloor LTD.
1
+ require "faye/websocket"
3
2
 
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- =end
16
- require 'faye/websocket'
17
3
  module Coinfloor
18
4
  class CFClient
19
- def initialize(domain,uid,pass,api_key=nil,pkey=nil)
20
- if domain.include?("ws://")||domain.include?("wss://")
21
- @messages=[]
22
- if uid==0
23
- @con=CFAcon.new(uid,pass)
5
+ def initialize(domain, uid, pass, api_key = nil, pkey = nil)
6
+ if domain.include?("ws://") || domain.include?("wss://")
7
+ @messages = []
8
+ if uid == 0
9
+ @con = CFAcon.new(uid, pass)
24
10
  else
25
11
  if api_key.nil?
26
12
  abort("An API key is required")
27
13
  elsif pkey
28
- @con=CFcon.new(uid,pass,api_key,pkey)
14
+ @con = CFcon.new(uid, pass, api_key, pkey)
29
15
  else
30
- @con=CFcon.new(uid,pass,api_key)
16
+ @con = CFcon.new(uid, pass, api_key)
31
17
  end
32
18
  end
33
- @domain=domain
19
+ @domain = domain
34
20
  else
35
21
  puts "domain must be a ws:// or wss:// formatted string, if port is not 80 it must be specified"
36
22
  end
37
-
38
23
  end
39
- def auth(ws,msg)
24
+
25
+ def auth(ws, msg)
40
26
  @messages.push(:auth)
41
- nonce=msg["nonce"]
42
- result=@con.auth(nonce)
27
+ nonce = msg["nonce"]
28
+ result = @con.auth(nonce)
43
29
  ws.send(result)
44
30
  end
45
-
31
+
46
32
  def begin_connection(sendata)
47
33
  puts "begining connection"
48
- output=nil
34
+ output = nil
49
35
  EM.run {
50
36
  ws = Faye::WebSocket::Client.new(@domain)
51
37
  ws.on :open do |event|
52
38
  end
53
-
39
+
54
40
  ws.on :message do |event|
55
- puts "message from server"
56
- evtdata=event.data
57
- msg=JSON.parse(evtdata)
41
+ evtdata = event.data
42
+ msg = JSON.parse(evtdata)
58
43
  puts msg
59
- if msg["notice"]&&msg["notice"]=="Welcome"
60
- auth(ws,msg)
44
+ if msg["notice"] && msg["notice"] == "Welcome"
45
+ auth(ws, msg)
61
46
  elsif msg["notice"].nil?
62
- ret_msg=@messages.delete_at(0)
47
+ ret_msg = @messages.delete_at(0)
63
48
  case ret_msg
64
49
  when nil
65
50
  ws.close
66
- ws=nil
51
+ ws = nil
67
52
  EM.stop
68
53
  when :auth
69
- if msg["error_code"]==0
54
+ if msg["error_code"] == 0
70
55
  @messages.push(:reply)
71
56
  ws.send(sendata)
72
57
  else
73
58
  ws.close
74
- ws=nil
59
+ ws = nil
75
60
  EM.stop
76
61
  end
77
62
  when :reply
78
- if msg["error_code"]==0
79
- output=msg
63
+ if msg["error_code"] == 0
64
+ output = msg
80
65
  ws.close
81
66
  EM.stop
82
67
  else
83
- output=msg
68
+ output = msg
84
69
  ws.close
85
70
  EM.stop
86
71
  end
@@ -97,13 +82,13 @@ module Coinfloor
97
82
  else
98
83
  raise "Somethings gone wrong with the client"
99
84
  end
100
- end# end of on message event
101
-
85
+ end
86
+
102
87
  ws.on :error do |event|
103
88
  EM.stop
104
89
  ws = nil
105
90
  end
106
-
91
+
107
92
  ws.on :close do |event|
108
93
  EM.stop
109
94
  ws = nil
@@ -111,18 +96,16 @@ module Coinfloor
111
96
  }
112
97
  return output
113
98
  end
114
-
115
- def exec(cfcon_method,arguments)
116
-
117
- data=@con.send(cfcon_method.to_s,arguments)
118
-
99
+
100
+ def exec(cfcon_method, args)
101
+ data = @con.send(cfcon_method.to_s, args)
119
102
  begin_connection(data)
120
103
  end
121
-
104
+
122
105
  def get_balance
123
- self.exec(:getbalance,{})
106
+ self.exec(:getbalance, {})
124
107
  end
125
-
108
+
126
109
  def public_key
127
110
  @con.public_key
128
111
  end
@@ -1,106 +1,111 @@
1
- =begin
2
- Copyright 2014 Coinfloor LTD.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- =end
16
-
17
- require 'libecp'
18
- require 'json'
1
+ require "json"
2
+ require "libecp"
19
3
 
20
4
  module Coinfloor
21
- # The Coinfloor trade API
22
- # All method calls return json which is to be sent to the API.
23
5
  class CFcon
24
6
  # coinfloor user trade id, password
25
- def initialize(uid,password,api_key,pkey=nil)
26
- @uid=uid
27
- @uid_byte=LibEcp.gen_uid(uid)
7
+ def initialize(uid, password, api_key, pkey = nil)
8
+ @uid = uid
9
+ @uid_byte = LibEcp.gen_uid(uid)
10
+
28
11
  if pkey
29
- @private_key=pkey
12
+ @private_key = pkey
30
13
  else
31
- @password=password
32
- @private_key=LibEcp.private_key(@uid_byte,password)
33
-
14
+ @password = password
15
+ @private_key = LibEcp.private_key(@uid_byte, password)
34
16
  end
35
- @public_key=LibEcp.gen_pub(@private_key)
36
- @cookie=api_key
37
- @password=nil
17
+
18
+ @public_key = LibEcp.gen_pub(@private_key)
19
+ @cookie = api_key
20
+ @password = nil
38
21
  end
39
22
 
40
- attr_reader :public_key
23
+ attr_reader :public_key
41
24
 
42
- # Authenticate using your generated private key, pass in the nonce given by the server on initial authenticate open
25
+ # Authenticate using your generated private key, pass in the nonce given by
26
+ # the server on initial authenticate open.
43
27
  def auth(server_nonce)
44
- nonce=LibEcp.gen_nonce
45
- while nonce.bytes.count==15
46
- nonce=LibEcp.gen_nonce
28
+ nonce = LibEcp.gen_nonce
29
+ while nonce.bytes.count == 15
30
+ nonce = LibEcp.gen_nonce
47
31
  end
48
- sigs=LibEcp.sign(@uid_byte,Base64.decode64(server_nonce),nonce,@private_key)
32
+
33
+ sigs = LibEcp.sign(@uid_byte, Base64.decode64(server_nonce), nonce, @private_key)
49
34
  {
50
- "method"=>"Authenticate",
51
- "user_id"=>@uid,
52
- "cookie"=>@cookie,
53
- "nonce"=>Base64.encode64(nonce).rstrip,
54
- "signature"=>[Base64.encode64(sigs[0]).rstrip,Base64.encode64(sigs[1]).rstrip]
35
+ "method" => "Authenticate",
36
+ "user_id" => @uid,
37
+ "cookie" => @cookie,
38
+ "nonce" => Base64.encode64(nonce).rstrip,
39
+ "signature" => [Base64.encode64(sigs[0]).rstrip, Base64.encode64(sigs[1]).rstrip]
55
40
  }.to_json.gsub(/\s+/, "")
56
41
  end
57
42
 
58
- # Cancels users existing order, arguments: {:id=>order_id_integer}
43
+ # Cancels users existing order.
59
44
  def cancelorder(args)
60
45
  {
61
- :method=>"CancelOrder",
62
- :id=>args[:id]
46
+ :method => "CancelOrder",
47
+ :id => args[:id],
63
48
  }.to_json
64
49
  end
65
50
 
66
- # return any available balance, no arguments
67
- def getbalance(args={})
51
+ # Return any available balance.
52
+ def getbalance(args = {})
68
53
  {
69
- :method=> "GetBalances"
54
+ :method => "GetBalances",
70
55
  }.to_json
71
56
  end
72
57
 
73
- # return a list of open orders, no arguments
74
- def getorders(args={})
58
+ # Return a list of open orders.
59
+ def getorders(args = {})
75
60
  {
76
- :method=> "GetOrders"
61
+ :method => "GetOrders",
77
62
  }.to_json
78
63
  end
79
64
 
80
- # Place an order,arguments:
81
- # {:base_asset_id=>integer,:counter_asset_id=>integer,:quantity=>integer,:price=>integer}
82
- # quantity is positive for a buy, negative for a sell
83
- def placeorder(arguments)
65
+ # Place an order.
66
+ def placeorder(args)
67
+ {
68
+ :method => "PlaceOrder",
69
+ :base => args[:base_asset_id],
70
+ :counter => args[:counter_asset_id],
71
+ :quantity => args[:quantity],
72
+ :price => args[:price],
73
+ :total => args[:total],
74
+ }.delete_if { |k, v| v.nil? }.to_json
75
+ end
84
76
 
77
+ # Gets a copy of the orderbook, does not subscribe.
78
+ # The subscription connection is not working because we are not doing a
79
+ # continious conection.
80
+ def orderbook(args)
85
81
  {
86
- :method => "PlaceOrder",
87
- :base => arguments[:base_asset_id],
88
- :counter => arguments[:counter_asset_id],
89
- :quantity => arguments[:quantity],
90
- :price => arguments[:price]
91
- }.delete_if { |k, v| v.nil? }.to_json #removes empty values that might not be given as arguments
82
+ :method => "WatchOrders",
83
+ :base => args[:base_asset_id],
84
+ :counter => args[:counter_asset_id],
85
+ :watch => true,
86
+ }.to_json
92
87
  end
93
88
 
94
- # Gets a copy of the orderbook, does not subscribe
95
- def orderbook(arguments)
89
+ # Simulates the execution of a market order and returns the quantity and
90
+ # total that would have been traded. This estimation does not take into
91
+ # account trading fees.
92
+ def estimatemarketorder(args)
96
93
  {
97
- :method => "WatchOrders",
98
- :base => arguments[:base_asset_id],
99
- :counter => arguments[:counter_asset_id],
100
- :watch => true
94
+ :method => "EstimateMarketOrder",
95
+ :base => args[:base_asset_id],
96
+ :counter => args[:counter_asset_id],
97
+ :quantity => args[:quantity],
98
+ :total => args[:total],
101
99
  }.to_json
102
100
  end
103
- end
104
101
 
102
+ # Retrieves the 30-day trailing trade volume for the authenticated user.
103
+ def gettradevolume(args)
104
+ {
105
+ :method => "GetTradeVolume",
106
+ :asset => args[:asset_id],
107
+ }.to_json
108
+ end
109
+ end
105
110
  end
106
111
 
data/lib/trade_client.rb CHANGED
@@ -1,18 +1,2 @@
1
- =begin
2
- Copyright 2014 Coinfloor LTD.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- =end
16
-
17
1
  require 'trade_api/trade_api'
18
2
  require 'client/client'
metadata CHANGED
@@ -1,100 +1,106 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cf-trade-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
5
- prerelease:
4
+ version: 0.2.1
6
5
  platform: ruby
7
6
  authors:
8
- - Coinfloor
7
+ - Coinfloor LTD
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-02-03 00:00:00.000000000 Z
11
+ date: 2014-09-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: faye-websocket
14
+ name: cf-ruby-libecp
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: 0.7.2
19
+ version: '0.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.1.4
22
23
  type: :runtime
23
24
  prerelease: false
24
25
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: 0.7.2
29
+ version: '0.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.1.4
30
33
  - !ruby/object:Gem::Dependency
31
- name: cf-ruby-libecp
34
+ name: faye-websocket
32
35
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
36
  requirements:
35
- - - ~>
37
+ - - "~>"
36
38
  - !ruby/object:Gem::Version
37
- version: 0.1.2
39
+ version: '0.7'
40
+ - - '='
41
+ - !ruby/object:Gem::Version
42
+ version: 0.7.2
38
43
  type: :runtime
39
44
  prerelease: false
40
45
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
46
  requirements:
43
- - - ~>
47
+ - - "~>"
44
48
  - !ruby/object:Gem::Version
45
- version: 0.1.2
49
+ version: '0.7'
50
+ - - '='
51
+ - !ruby/object:Gem::Version
52
+ version: 0.7.2
46
53
  - !ruby/object:Gem::Dependency
47
54
  name: json
48
55
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
56
  requirements:
51
- - - ~>
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.8'
60
+ - - ">="
52
61
  - !ruby/object:Gem::Version
53
62
  version: 1.8.1
54
63
  type: :runtime
55
64
  prerelease: false
56
65
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
66
  requirements:
59
- - - ~>
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.8'
70
+ - - ">="
60
71
  - !ruby/object:Gem::Version
61
72
  version: 1.8.1
62
- description: This client allows a user to trade on the coinfloor plaform using their
63
- API, it uses EventMachine and Faye websockets library as well as depending on the
64
- coinfloor libecp gem
73
+ description: Client to trade on the Coinfloor platform using their API.
65
74
  email: development@coinfloor.co.uk
66
75
  executables: []
67
76
  extensions: []
68
77
  extra_rdoc_files: []
69
78
  files:
70
- - lib/trade_client.rb
71
79
  - lib/client/client.rb
72
80
  - lib/trade_api/trade_api.rb
73
- homepage: http://coinfloor.co.uk
81
+ - lib/trade_client.rb
82
+ homepage: https://github.com/coinfloor/ruby-client
74
83
  licenses:
75
- - APACHE 2.0
84
+ - Apache License Version 2.0
85
+ metadata: {}
76
86
  post_install_message:
77
87
  rdoc_options: []
78
88
  require_paths:
79
89
  - lib
80
90
  required_ruby_version: !ruby/object:Gem::Requirement
81
- none: false
82
91
  requirements:
83
- - - ! '>='
92
+ - - ">="
84
93
  - !ruby/object:Gem::Version
85
94
  version: 1.9.3
86
95
  required_rubygems_version: !ruby/object:Gem::Requirement
87
- none: false
88
96
  requirements:
89
- - - ! '>='
97
+ - - ">="
90
98
  - !ruby/object:Gem::Version
91
99
  version: '0'
92
100
  requirements: []
93
101
  rubyforge_project:
94
- rubygems_version: 1.8.25
102
+ rubygems_version: 2.4.1
95
103
  signing_key:
96
- specification_version: 3
97
- summary: An example ruby client library to trade on the Coinfloor platform using their
98
- API
104
+ specification_version: 4
105
+ summary: Ruby Coinfloor Client
99
106
  test_files: []
100
- has_rdoc: