bitcoiner 0.1.4 → 0.2.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 +4 -4
- data/.travis.yml +2 -2
- data/CHANGELOG.md +9 -0
- data/README.md +11 -0
- data/bitcoiner.gemspec +1 -1
- data/lib/bitcoiner/client.rb +53 -32
- data/lib/bitcoiner/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4a84139151cf83af5599d9d7aad6cfbff0c40e2e183fcc5d39e00115093eb45
|
4
|
+
data.tar.gz: b54b667929c479018b2831f5b6be02316abbbbbe9fd75a1fad83c9b3a12891f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05545c028dfdcca567226137d98b3a99fbf090d356839b053d305ee0b9f73176cc10b432598a0c72cf16a0028592c7b60ae8feefd8d865ec616f547da0698645
|
7
|
+
data.tar.gz: 322bf855b007f5b7c4a94dc3e4b5f51d580a7a94463b06e799d0e8cb7e3d3da354a9b9ab0094b70df8d03d5d40eff194ca0f56c8e6b3b853fd20a8213a30420d
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
|
+
|
7
|
+
## [0.2.0]
|
8
|
+
### Added
|
9
|
+
- Log requests if logger is set
|
data/README.md
CHANGED
@@ -88,6 +88,17 @@ tiny_wings.address
|
|
88
88
|
# => "1KV5khnHbbHF2nNQkk7Pe5nPndEj43U27r"
|
89
89
|
```
|
90
90
|
|
91
|
+
### Logging
|
92
|
+
|
93
|
+
You may log requests (responses aren't logged) by setting a logger:
|
94
|
+
|
95
|
+
```
|
96
|
+
logger = Logger.new(STDOUT)
|
97
|
+
client = Bitcoiner::Client.new('username', 'password', 'http://a.c', {
|
98
|
+
logger: logger,
|
99
|
+
})
|
100
|
+
```
|
101
|
+
|
91
102
|
## License
|
92
103
|
|
93
104
|
Released under the MIT license. See LICENSE.txt for details.
|
data/bitcoiner.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency 'addressable'
|
23
23
|
spec.add_dependency 'typhoeus', '~> 1.3.0'
|
24
24
|
|
25
|
-
spec.add_development_dependency 'bundler', '~>
|
25
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
26
26
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
27
27
|
spec.add_development_dependency 'mocha', '~> 1.1.0'
|
28
28
|
spec.add_development_dependency 'rake', '~> 10.0'
|
data/lib/bitcoiner/client.rb
CHANGED
@@ -2,15 +2,21 @@
|
|
2
2
|
|
3
3
|
module Bitcoiner
|
4
4
|
class Client
|
5
|
-
attr_accessor :endpoint, :username, :password
|
6
5
|
|
7
|
-
|
6
|
+
DEFAULT_ID = 'jsonrpc'.freeze
|
7
|
+
LOG_PREFIX = "[bitcoiner]".freeze
|
8
|
+
|
9
|
+
attr_accessor :endpoint, :username, :password, :logger
|
10
|
+
|
11
|
+
def initialize(user, pass, host, logger: nil)
|
8
12
|
uri = Addressable::URI.heuristic_parse(host)
|
9
13
|
self.username = uri.user || user
|
10
14
|
self.password = uri.password || pass
|
11
15
|
uri.user = uri.password = nil
|
12
16
|
|
13
17
|
self.endpoint = uri.to_s
|
18
|
+
|
19
|
+
self.logger = logger
|
14
20
|
end
|
15
21
|
|
16
22
|
def balance
|
@@ -24,54 +30,69 @@ module Bitcoiner
|
|
24
30
|
|
25
31
|
def request(method_or_array_of_methods, *args)
|
26
32
|
if method_or_array_of_methods.is_a?(Array)
|
27
|
-
|
28
|
-
|
29
|
-
'method' => m[0],
|
30
|
-
'params' => m[1],
|
31
|
-
'id' => 'jsonrpc'
|
32
|
-
}
|
33
|
-
end
|
33
|
+
log("#{method_or_array_of_methods}")
|
34
|
+
batch_request(method_or_array_of_methods)
|
34
35
|
else
|
35
|
-
|
36
|
-
|
37
|
-
'params' => args,
|
38
|
-
'id' => 'jsonrpc'
|
39
|
-
}
|
36
|
+
log("#{method_or_array_of_methods}; args: #{args.inspect}")
|
37
|
+
single_request(method_or_array_of_methods, *args)
|
40
38
|
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def inspect
|
42
|
+
"#<Bitcoiner::Client #{endpoint.inspect} #{username}:#{password} >"
|
43
|
+
end
|
44
|
+
|
45
|
+
class JSONRPCError < RuntimeError; end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def post(body)
|
50
|
+
msg = {
|
51
|
+
endpoint: endpoint,
|
52
|
+
username: username,
|
53
|
+
body: body.to_json,
|
54
|
+
}.to_s
|
55
|
+
log(msg)
|
41
56
|
|
42
|
-
|
57
|
+
Typhoeus.post(
|
43
58
|
endpoint,
|
44
59
|
userpwd: [username, password].join(":"),
|
45
|
-
body:
|
60
|
+
body: body.to_json,
|
46
61
|
)
|
62
|
+
end
|
47
63
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
raise JSONRPCError, parsed_response['error'] if parsed_response['error']
|
52
|
-
return parsed_response['result']
|
64
|
+
def batch_request(methods_and_args)
|
65
|
+
post_body = methods_and_args.map do |method, args|
|
66
|
+
{ 'method' => method, 'params' => args, 'id' => DEFAULT_ID }
|
53
67
|
end
|
54
|
-
|
55
|
-
|
68
|
+
response = post(post_body)
|
69
|
+
parse_body(response)
|
56
70
|
end
|
57
71
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
72
|
+
def single_request(method, *args)
|
73
|
+
post_body = { 'method' => method, 'params' => args, 'id' => DEFAULT_ID }
|
74
|
+
response = post(post_body)
|
75
|
+
parsed_response = parse_body(response)
|
61
76
|
|
62
|
-
|
77
|
+
raise JSONRPCError, parsed_response['error'] if parsed_response['error']
|
63
78
|
|
64
|
-
|
79
|
+
parsed_response['result']
|
80
|
+
end
|
65
81
|
|
66
82
|
def parse_body(response)
|
67
83
|
if response.success?
|
68
84
|
JSON.parse(response.body)
|
69
85
|
else
|
70
|
-
|
71
|
-
|
72
|
-
end
|
73
|
-
|
86
|
+
error_messages = %i[code return_code].each_with_object({}) do |attr, hash|
|
87
|
+
hash[attr] = response.send(attr)
|
88
|
+
end
|
89
|
+
error_messages[:body] = response.body
|
90
|
+
raise JSONRPCError, error_messages.map {|k, v| "#{k}: `#{v}`"}.join("; ")
|
74
91
|
end
|
75
92
|
end
|
93
|
+
|
94
|
+
def log(msg)
|
95
|
+
self.logger.info("#{LOG_PREFIX} #{msg}") if self.logger
|
96
|
+
end
|
76
97
|
end
|
77
98
|
end
|
data/lib/bitcoiner/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bitcoiner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryce Kerley
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-07-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: addressable
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
48
|
+
version: '2.0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
55
|
+
version: '2.0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: minitest
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,6 +119,7 @@ extra_rdoc_files: []
|
|
119
119
|
files:
|
120
120
|
- ".gitignore"
|
121
121
|
- ".travis.yml"
|
122
|
+
- CHANGELOG.md
|
122
123
|
- Gemfile
|
123
124
|
- LICENSE.txt
|
124
125
|
- README.md
|
@@ -148,8 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
149
|
- !ruby/object:Gem::Version
|
149
150
|
version: '0'
|
150
151
|
requirements: []
|
151
|
-
|
152
|
-
rubygems_version: 2.7.8
|
152
|
+
rubygems_version: 3.0.4
|
153
153
|
signing_key:
|
154
154
|
specification_version: 4
|
155
155
|
summary: Control the bitcoin nework client over JSON-RPC.
|