kittyverse 0.4.2 → 0.4.3
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/lib/kittyverse/api/client.rb +88 -11
- data/lib/kittyverse/api/versions.rb +14 -0
- data/lib/kittyverse/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 625692bc57c7cf12b02b4a08f18029b2fdbf2df8
|
4
|
+
data.tar.gz: b7e4e3d49b1fa36c78d93bd535a34533d6caf0bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bc09276dc61fb29354e1af34ff88e6221b4c6a268d1e92fdaab8c35ce9c621e60afad1baaad5c52f8ce6683b8dbf6fd8a0b5fa6696b6f279639fd3090e78e85
|
7
|
+
data.tar.gz: 0ec559282248dcc5c17ff83d984d30e7ea306c393b74c6b3cea39e433be76c9a4c5fd7a4eb9c862e58cdb4206c369ed964dd0708e1b04f58731c296d179a3554
|
@@ -2,13 +2,71 @@
|
|
2
2
|
|
3
3
|
module Kitties
|
4
4
|
|
5
|
+
class Error < StandardError
|
6
|
+
end
|
7
|
+
|
8
|
+
####
|
9
|
+
# todo/check:
|
10
|
+
# rename to HttpRequestError or similar??
|
11
|
+
# use "common" error class - why? why not?
|
12
|
+
class HttpError < Error
|
13
|
+
attr_reader :code, :message
|
14
|
+
|
15
|
+
def initialize( code, message )
|
16
|
+
@code, @message = code, message
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_s
|
20
|
+
"HTTP request failed (NOK) => #{@code} #{@message}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
class Response ## track last response
|
26
|
+
attr_accessor :code, :message,
|
27
|
+
:headers, :body
|
28
|
+
|
29
|
+
def initialize( code, message, headers, body )
|
30
|
+
@code, @message, @headers, @body = code, message, headers, body
|
31
|
+
end
|
32
|
+
|
33
|
+
## ratelimit convenience helpers (for headers)
|
34
|
+
## note: all values of headers are arrays e.g.:
|
35
|
+
## {"x-ratelimit-limit"=>["20"],
|
36
|
+
## "x-ratelimit-remaining"=>["19"],
|
37
|
+
## "x-ratelimit-reset"=>["1558206970"],
|
38
|
+
## "content-length"=>["776"], ... }
|
39
|
+
|
40
|
+
def ratelimit_limit
|
41
|
+
limit = @headers['x-ratelimit-limit']
|
42
|
+
limit ? limit[0].to_i : nil
|
43
|
+
end
|
44
|
+
|
45
|
+
def ratelimit_remaining
|
46
|
+
remaining = @headers['x-ratelimit-remaining']
|
47
|
+
remaining ? remaining[0].to_i : nil
|
48
|
+
end
|
49
|
+
|
50
|
+
def ratelimit_reset?
|
51
|
+
## x-ratelimit-reset => 1558079593 ## - assume it's unix epoch time
|
52
|
+
reset = @headers['x-ratelimit-reset']
|
53
|
+
reset ? (reset[0].to_i < Time.now.to_i) : true ## always assume true (unlimited requests)
|
54
|
+
end
|
55
|
+
|
56
|
+
def ratelimit_reset
|
57
|
+
## x-ratelimit-reset => 1558079593 ## - assume it's unix epoch time
|
58
|
+
reset = @headers['x-ratelimit-reset']
|
59
|
+
reset ? Time.at(reset[0].to_i) : nil
|
60
|
+
end
|
61
|
+
end ## class Response (used for tracking last(_response))
|
62
|
+
|
63
|
+
|
5
64
|
|
6
65
|
class Client
|
7
66
|
|
8
67
|
##
|
9
68
|
## todo: add (optional) close with @http.close - why? why not?
|
10
69
|
|
11
|
-
|
12
70
|
def initialize( base_uri:, token: nil )
|
13
71
|
uri = URI.parse( base_uri )
|
14
72
|
@http = Net::HTTP.new( uri.host, uri.port )
|
@@ -23,7 +81,16 @@ def initialize( base_uri:, token: nil )
|
|
23
81
|
@token = token
|
24
82
|
end # method initialize
|
25
83
|
|
26
|
-
|
84
|
+
|
85
|
+
|
86
|
+
def get( service, **params )
|
87
|
+
|
88
|
+
## add url-encoded query string from params hash e.g. ?limit=100&type=sale
|
89
|
+
unless params.empty?
|
90
|
+
query = URI.encode_www_form( params )
|
91
|
+
service += "?#{query}"
|
92
|
+
end
|
93
|
+
|
27
94
|
puts "GET #{service}"
|
28
95
|
|
29
96
|
request_uri = if @base_request_uri == "/"
|
@@ -32,25 +99,24 @@ def get( service )
|
|
32
99
|
"#{@base_request_uri}#{service}" ## e.g. add /v1 etc.
|
33
100
|
end
|
34
101
|
|
35
|
-
|
102
|
+
request_headers = if @token
|
36
103
|
{ "x-api-token" => @token }
|
37
104
|
else
|
38
105
|
{}
|
39
106
|
end
|
40
107
|
|
41
|
-
req = Net::HTTP::Get.new( request_uri,
|
108
|
+
req = Net::HTTP::Get.new( request_uri, request_headers )
|
42
109
|
|
43
110
|
res = @http.request(req)
|
44
111
|
|
45
|
-
##
|
46
|
-
## throw exception of fail
|
47
|
-
|
112
|
+
headers = res.to_hash ## get all response headers
|
48
113
|
|
49
114
|
if Kitties.debug?
|
50
115
|
# Iterate all response headers.
|
51
|
-
res.each_header do |key, value|
|
52
|
-
|
53
|
-
end
|
116
|
+
# res.each_header do |key, value|
|
117
|
+
# p "#{key} => #{value}"
|
118
|
+
# end
|
119
|
+
pp headers
|
54
120
|
# => "content-type => application/json; charset=utf-8"
|
55
121
|
# => "x-ratelimit-limit => 20"
|
56
122
|
# => "x-ratelimit-remaining => 19"
|
@@ -61,10 +127,21 @@ def get( service )
|
|
61
127
|
body = res.read_body
|
62
128
|
## pp body
|
63
129
|
|
130
|
+
## track last response
|
131
|
+
Kitties.last_response = Response.new( res.code,
|
132
|
+
res.message,
|
133
|
+
headers,
|
134
|
+
body )
|
135
|
+
|
136
|
+
if res.code != '200'
|
137
|
+
raise HttpError.new( res.code, res.message )
|
138
|
+
end
|
139
|
+
|
140
|
+
|
64
141
|
json = JSON.parse( body ) ## use just body (any difference?) - why? why not?
|
65
142
|
## pp json
|
66
143
|
json
|
67
|
-
end #
|
144
|
+
end # method get
|
68
145
|
|
69
146
|
end ## class Client
|
70
147
|
|
@@ -30,6 +30,10 @@ def self.debug?() configuration.debug; end
|
|
30
30
|
def self.debug=(value) configuration.debug = value; end
|
31
31
|
|
32
32
|
|
33
|
+
## track last response
|
34
|
+
def self.last_response() @last_response; end
|
35
|
+
def self.last_response=(value) @last_response = value; end
|
36
|
+
|
33
37
|
|
34
38
|
|
35
39
|
module V0
|
@@ -40,6 +44,14 @@ class Client < ::Kitties::Client
|
|
40
44
|
|
41
45
|
def get_cattributes() get('/cattributes'); end
|
42
46
|
def get_kitty( id ) get("/kitties/#{id}"); end ## use get_kitty_by_id - why? why not?
|
47
|
+
alias_method :get_kitten, :get_kitty
|
48
|
+
|
49
|
+
def get_kitties( **params ) get( '/kitties', **params ); end
|
50
|
+
def get_auctions( **params ) get( '/auctions', **params ); end
|
51
|
+
def get_user( addr ) get( "/user/#{addr}" ); end
|
52
|
+
|
53
|
+
def get_network_status() get( '/network-status' ); end
|
54
|
+
|
43
55
|
end # class Client
|
44
56
|
end # module V0
|
45
57
|
|
@@ -58,6 +70,8 @@ class Client < ::Kitties::Client
|
|
58
70
|
|
59
71
|
def get_cattributes() get('/cattributes'); end
|
60
72
|
def get_kitty( id ) get("/kitties/#{id}"); end ## use get_kitty_by_id - why? why not?
|
73
|
+
alias_method :get_kitten, :get_kitty
|
74
|
+
|
61
75
|
def get_colors_body() get('/colors/body'); end
|
62
76
|
def get_colors_eyes() get('/colors/eyes'); end
|
63
77
|
def get_colors_secondary() get('/colors/secondary'); end
|
data/lib/kittyverse/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kittyverse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-05-
|
11
|
+
date: 2019-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: base32-alphabets
|