gdax_client 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5c8dbb4dc974079d834762032b74fd1a866b506f
4
+ data.tar.gz: 7b0dece0f18174d58fb6040761d8601ca40da538
5
+ SHA512:
6
+ metadata.gz: '0859655e5d723db8c862dee08cc2aee23c49d4e3bb12b88f907b91c9ad513e068e2556f7f3c4e8f58028820037b5d95efad77d04df5a17ae0cd074636fe10a59'
7
+ data.tar.gz: cf507c5f4e7e4be4f9bd7b3637f70560c8d4da54a2bc36bd8e849bda5cbbc5d8b2b36608cf5aebc64e6c13da52871a4c2645bc2a08a77135fb45b8688716604f
@@ -0,0 +1,13 @@
1
+ require 'configure'; Configure.activate
2
+ require 'log'
3
+ require 'net/http'
4
+ require 'schema'
5
+ require 'settings'; Settings.activate
6
+ require 'telemetry'
7
+ require 'transform'
8
+
9
+ require 'gdax_client/settings'
10
+
11
+ require 'gdax_client/gdax_client'
12
+ require 'gdax_client/http/product_ticker/get'
13
+ require 'gdax_client/http/product_ticker/get/response'
@@ -0,0 +1,9 @@
1
+ require 'clock/controls'
2
+
3
+ require 'gdax_client/controls/endpoint'
4
+ require 'gdax_client/controls/http'
5
+ require 'gdax_client/controls/product'
6
+ require 'gdax_client/controls/ticker'
7
+ require 'gdax_client/controls/time'
8
+
9
+ require 'gdax_client/controls/http/product_ticker/get/response'
@@ -0,0 +1,9 @@
1
+ class GDAXClient
2
+ module Controls
3
+ module Endpoint
4
+ def self.example
5
+ "/some-endpoint"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,27 @@
1
+ class GDAXClient
2
+ module Controls
3
+ module HTTP
4
+ module Code
5
+ def self.example
6
+ 'some-code'
7
+ end
8
+ end
9
+
10
+ module Message
11
+ def self.example
12
+ 'Some Message'
13
+ end
14
+ end
15
+
16
+ module Body
17
+ def self.example
18
+ ::JSON.generate(data)
19
+ end
20
+
21
+ def self.data
22
+ { 'some_key' => 'some_value' }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,88 @@
1
+ class GDAXClient
2
+ module Controls
3
+ module HTTP
4
+ module ProductTicker
5
+ module Get
6
+ module Response
7
+ def self.example
8
+ Success.example
9
+ end
10
+
11
+ module Success
12
+ def self.example
13
+ response = GDAXClient::HTTP::ProductTicker::Get::Response.build
14
+ response.data = GDAXClient::HTTP::ProductTicker::Get::Response::Data.build
15
+
16
+ response.data.trade_id = Ticker::TradeID.example
17
+ response.data.price = Ticker::Price.example
18
+ response.data.size = Ticker::Size.example
19
+ response.data.bid = Ticker::Bid.example
20
+ response.data.ask = Ticker::Ask.example
21
+ response.data.volume = Ticker::Volume.example
22
+ response.data.time = Time.example
23
+
24
+ response.status_code = StatusCode.sample
25
+ response.message = Message.sample
26
+
27
+ response
28
+ end
29
+
30
+ module StatusCode
31
+ def self.sample
32
+ '200'
33
+ end
34
+ end
35
+
36
+ module Message
37
+ def self.sample
38
+ 'OK'
39
+ end
40
+ end
41
+ end
42
+
43
+ module Failure
44
+ def self.example
45
+ response = GDAXClient::HTTP::ProductTicker::Get::Response.build
46
+
47
+ response.status_code = StatusCode.sample
48
+ response.message = Message.sample
49
+
50
+ response
51
+ end
52
+
53
+ module StatusCode
54
+ def self.sample
55
+ '404'
56
+ end
57
+ end
58
+
59
+ module Message
60
+ def self.sample
61
+ 'Not Found'
62
+ end
63
+ end
64
+ end
65
+
66
+ module JSON
67
+ def self.text
68
+ ::JSON.generate(data)
69
+ end
70
+
71
+ def self.data
72
+ {
73
+ 'trade_id' => Ticker::TradeID.example,
74
+ 'price' => Ticker::Price.example,
75
+ 'size' => Ticker::Size.example,
76
+ 'bid' => Ticker::Bid.example,
77
+ 'ask' => Ticker::Ask.example,
78
+ 'volume' => Ticker::Volume.example,
79
+ 'time' => Time.example
80
+ }
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,15 @@
1
+ class GDAXClient
2
+ module Controls
3
+ module Product
4
+ module ID
5
+ def self.example
6
+ 'SOME-PRODUCT-ID'
7
+ end
8
+
9
+ def self.sample
10
+ 'BTC-USD'
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,41 @@
1
+ class GDAXClient
2
+ module Controls
3
+ module Ticker
4
+ module TradeID
5
+ def self.example
6
+ 11111111
7
+ end
8
+ end
9
+
10
+ module Price
11
+ def self.example
12
+ 1000.00000000
13
+ end
14
+ end
15
+
16
+ module Size
17
+ def self.example
18
+ 0.12345678
19
+ end
20
+ end
21
+
22
+ module Bid
23
+ def self.example
24
+ 999.99
25
+ end
26
+ end
27
+
28
+ module Ask
29
+ def self.example
30
+ 1000.00
31
+ end
32
+ end
33
+
34
+ module Volume
35
+ def self.example
36
+ 100.00000000
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,5 @@
1
+ class GDAXClient
2
+ module Controls
3
+ Time = Clock::Controls::Time
4
+ end
5
+ end
@@ -0,0 +1,45 @@
1
+ class GDAXClient
2
+ include Log::Dependency
3
+
4
+ setting :url
5
+
6
+ configure :client
7
+
8
+ def self.build
9
+ instance = new
10
+ Settings.set(instance)
11
+ instance
12
+ end
13
+
14
+ def get(endpoint)
15
+ uri = URI(url + endpoint)
16
+
17
+ logger.trace "Sending HTTP GET request (URI: #{uri})"
18
+
19
+ response = Net::HTTP.get_response(uri)
20
+
21
+ logger.debug "HTTP GET response received (URI: #{uri}, Code: #{response.code}, Message: #{response.message})"
22
+
23
+ response
24
+ end
25
+
26
+ class Substitute
27
+ attr_accessor :http_code
28
+ attr_accessor :http_message
29
+ attr_accessor :response_body
30
+
31
+ def self.build
32
+ new
33
+ end
34
+
35
+ def get(endpoint)
36
+ self.http_code ||= '200'
37
+ self.http_message ||= 'OK'
38
+ self.response_body ||= {}
39
+
40
+ Response.new(http_code, http_message, response_body)
41
+ end
42
+
43
+ Response = Struct.new :code, :message, :body
44
+ end
45
+ end
@@ -0,0 +1,61 @@
1
+ class GDAXClient
2
+ module HTTP
3
+ module ProductTicker
4
+ class Get
5
+ include Log::Dependency
6
+
7
+ dependency :client, GDAXClient
8
+
9
+ configure :get_ticker
10
+
11
+ def self.call(product_id)
12
+ instance = build
13
+ instance.(product_id)
14
+ end
15
+
16
+ def self.build
17
+ instance = new
18
+ GDAXClient.configure(instance)
19
+ instance
20
+ end
21
+
22
+ def call(product_id)
23
+ endpoint = "/products/#{product_id}/ticker"
24
+
25
+ logger.trace "Getting ticker (ProductID: #{product_id}, Endpoint: #{endpoint})"
26
+
27
+ raw_response = client.get(endpoint)
28
+
29
+ if raw_response.code == '200'
30
+ logger.debug "Retrieved ticker (ProductID: #{product_id}, Endpoint: #{endpoint}, Status: #{raw_response.code}, Message: #{raw_response.message})"
31
+ response = Transform::Read.(raw_response.body, Response, :json)
32
+ else
33
+ logger.debug "Failed to retrieve ticker (ProductID: #{product_id}, Endpoint: #{endpoint}, Status: #{raw_response.code}, Message: #{raw_response.message})"
34
+ response = Response.new
35
+ end
36
+
37
+ response.status_code = raw_response.code
38
+ response.message = raw_response.message
39
+
40
+ response
41
+ end
42
+
43
+ class Substitute
44
+ attr_writer :response
45
+
46
+ def self.build
47
+ new
48
+ end
49
+
50
+ def call(product_id)
51
+ response
52
+ end
53
+
54
+ def response
55
+ @response ||= Response.new
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,45 @@
1
+ class GDAXClient
2
+ module HTTP
3
+ module ProductTicker
4
+ class Get
5
+ class Response
6
+ include Schema::DataStructure
7
+
8
+ attribute :data
9
+ attribute :status_code
10
+ attribute :message
11
+
12
+ class Data
13
+ include Schema::DataStructure
14
+
15
+ attribute :trade_id
16
+ attribute :price
17
+ attribute :size
18
+ attribute :bid
19
+ attribute :ask
20
+ attribute :volume
21
+ attribute :time
22
+ end
23
+
24
+ module Transformer
25
+ def self.json
26
+ JSON
27
+ end
28
+
29
+ def self.instance(raw_data)
30
+ response = Response.build
31
+ response.data = Response::Data.build(raw_data)
32
+ response
33
+ end
34
+
35
+ module JSON
36
+ def self.read(text)
37
+ ::JSON.parse text, :symbolize_names => true
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,15 @@
1
+ class GDAXClient
2
+ class Settings < ::Settings
3
+ def self.instance
4
+ @instance ||= build
5
+ end
6
+
7
+ def self.data_source
8
+ 'settings/gdax_client.json'
9
+ end
10
+
11
+ def self.set(receiver)
12
+ instance.set(receiver)
13
+ end
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gdax_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - BTC-Labs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-09-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: evt-configure
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'
27
+ - !ruby/object:Gem::Dependency
28
+ name: evt-schema
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
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: evt-settings
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
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: evt-transform
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: test_bench
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Client library for GDAX (Global Digital Assest Exchange) REST API
84
+ email:
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - lib/gdax_client.rb
90
+ - lib/gdax_client/controls.rb
91
+ - lib/gdax_client/controls/endpoint.rb
92
+ - lib/gdax_client/controls/http.rb
93
+ - lib/gdax_client/controls/http/product_ticker/get/response.rb
94
+ - lib/gdax_client/controls/product.rb
95
+ - lib/gdax_client/controls/ticker.rb
96
+ - lib/gdax_client/controls/time.rb
97
+ - lib/gdax_client/gdax_client.rb
98
+ - lib/gdax_client/http/product_ticker/get.rb
99
+ - lib/gdax_client/http/product_ticker/get/response.rb
100
+ - lib/gdax_client/settings.rb
101
+ homepage: https://github.com/btc-labs/gdax-client
102
+ licenses:
103
+ - MIT
104
+ metadata: {}
105
+ post_install_message:
106
+ rdoc_options: []
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '2.4'
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ requirements: []
120
+ rubyforge_project:
121
+ rubygems_version: 2.6.11
122
+ signing_key:
123
+ specification_version: 4
124
+ summary: GDAX Client
125
+ test_files: []