kittyverse 0.4.5 → 0.5.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/CHANGELOG.md +3 -3
- data/Manifest.txt +3 -2
- data/README.md +428 -240
- data/Rakefile +30 -30
- data/lib/kittyverse.rb +47 -47
- data/lib/kittyverse/api/client.rb +147 -147
- data/lib/kittyverse/api/versions.rb +91 -91
- data/lib/kittyverse/cattributes.rb +131 -131
- data/lib/kittyverse/config/colors.rb +146 -146
- data/lib/kittyverse/config/fancies.rb +84 -6
- data/lib/kittyverse/config/purrstiges.rb +225 -215
- data/lib/kittyverse/config/traits_timeline.rb +288 -288
- data/lib/kittyverse/fancies.rb +205 -205
- data/lib/kittyverse/gene.rb +55 -55
- data/lib/kittyverse/genome.rb +236 -236
- data/lib/kittyverse/mewtations.rb +120 -120
- data/lib/kittyverse/version.rb +23 -23
- data/test/helper.rb +10 -10
- data/test/test_fancies.rb +16 -0
- data/test/test_genome.rb +62 -0
- data/test/test_traits.rb +174 -174
- metadata +13 -6
data/Rakefile
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
require 'hoe'
|
2
|
-
require './lib/kittyverse/version.rb'
|
3
|
-
|
4
|
-
Hoe.spec 'kittyverse' do
|
5
|
-
|
6
|
-
self.version = Kittyverse::VERSION
|
7
|
-
|
8
|
-
self.summary = "kittyverse - helper classes for cattributes, trait types, traits, genes, genomes and more for cryptokitties and copycats"
|
9
|
-
self.description = summary
|
10
|
-
|
11
|
-
self.urls = ['https://github.com/cryptocopycats/kittyverse']
|
12
|
-
|
13
|
-
self.author = 'Gerald Bauer'
|
14
|
-
self.email = 'wwwmake@googlegroups.com'
|
15
|
-
|
16
|
-
# switch extension to .markdown for gihub formatting
|
17
|
-
self.readme_file = 'README.md'
|
18
|
-
self.history_file = 'CHANGELOG.md'
|
19
|
-
|
20
|
-
self.extra_deps = [
|
21
|
-
['base32-alphabets', '>= 1.0.0']
|
22
|
-
]
|
23
|
-
|
24
|
-
self.licenses = ['Public Domain']
|
25
|
-
|
26
|
-
self.spec_extras = {
|
27
|
-
required_ruby_version: '>= 2.2.2'
|
28
|
-
}
|
29
|
-
|
30
|
-
end
|
1
|
+
require 'hoe'
|
2
|
+
require './lib/kittyverse/version.rb'
|
3
|
+
|
4
|
+
Hoe.spec 'kittyverse' do
|
5
|
+
|
6
|
+
self.version = Kittyverse::VERSION
|
7
|
+
|
8
|
+
self.summary = "kittyverse - helper classes for cattributes, trait types, traits, genes, genomes and more for cryptokitties and copycats"
|
9
|
+
self.description = summary
|
10
|
+
|
11
|
+
self.urls = ['https://github.com/cryptocopycats/kittyverse']
|
12
|
+
|
13
|
+
self.author = 'Gerald Bauer'
|
14
|
+
self.email = 'wwwmake@googlegroups.com'
|
15
|
+
|
16
|
+
# switch extension to .markdown for gihub formatting
|
17
|
+
self.readme_file = 'README.md'
|
18
|
+
self.history_file = 'CHANGELOG.md'
|
19
|
+
|
20
|
+
self.extra_deps = [
|
21
|
+
['base32-alphabets', '>= 1.0.0']
|
22
|
+
]
|
23
|
+
|
24
|
+
self.licenses = ['Public Domain']
|
25
|
+
|
26
|
+
self.spec_extras = {
|
27
|
+
required_ruby_version: '>= 2.2.2'
|
28
|
+
}
|
29
|
+
|
30
|
+
end
|
data/lib/kittyverse.rb
CHANGED
@@ -1,47 +1,47 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
## std libs
|
4
|
-
require 'date'
|
5
|
-
require 'json'
|
6
|
-
require 'pp'
|
7
|
-
require 'uri'
|
8
|
-
require 'net/http'
|
9
|
-
require 'net/https'
|
10
|
-
require 'fileutils'
|
11
|
-
|
12
|
-
|
13
|
-
## 3rd party libs
|
14
|
-
require 'base32-alphabets'
|
15
|
-
|
16
|
-
|
17
|
-
## our own code
|
18
|
-
require 'kittyverse/version' # note: let version always go first
|
19
|
-
|
20
|
-
require 'kittyverse/config/traits'
|
21
|
-
require 'kittyverse/config/traits_timeline'
|
22
|
-
require 'kittyverse/config/fancies'
|
23
|
-
require 'kittyverse/config/purrstiges'
|
24
|
-
require 'kittyverse/config/colors'
|
25
|
-
|
26
|
-
|
27
|
-
require 'kittyverse/mewtations'
|
28
|
-
require 'kittyverse/links'
|
29
|
-
|
30
|
-
require 'kittyverse/pages/genes'
|
31
|
-
|
32
|
-
require 'kittyverse/recipes'
|
33
|
-
require 'kittyverse/traits'
|
34
|
-
require 'kittyverse/cattributes'
|
35
|
-
require 'kittyverse/fancies'
|
36
|
-
|
37
|
-
## api support
|
38
|
-
require 'kittyverse/api/client'
|
39
|
-
require 'kittyverse/api/versions'
|
40
|
-
|
41
|
-
## genes / genome
|
42
|
-
require 'kittyverse/gene'
|
43
|
-
require 'kittyverse/genome'
|
44
|
-
|
45
|
-
|
46
|
-
# say hello
|
47
|
-
puts Kittyverse.banner if defined?($RUBYCOCO_DEBUG) && $RUBYCOCO_DEBUG
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
## std libs
|
4
|
+
require 'date'
|
5
|
+
require 'json'
|
6
|
+
require 'pp'
|
7
|
+
require 'uri'
|
8
|
+
require 'net/http'
|
9
|
+
require 'net/https'
|
10
|
+
require 'fileutils'
|
11
|
+
|
12
|
+
|
13
|
+
## 3rd party libs
|
14
|
+
require 'base32-alphabets'
|
15
|
+
|
16
|
+
|
17
|
+
## our own code
|
18
|
+
require 'kittyverse/version' # note: let version always go first
|
19
|
+
|
20
|
+
require 'kittyverse/config/traits'
|
21
|
+
require 'kittyverse/config/traits_timeline'
|
22
|
+
require 'kittyverse/config/fancies'
|
23
|
+
require 'kittyverse/config/purrstiges'
|
24
|
+
require 'kittyverse/config/colors'
|
25
|
+
|
26
|
+
|
27
|
+
require 'kittyverse/mewtations'
|
28
|
+
require 'kittyverse/links'
|
29
|
+
|
30
|
+
require 'kittyverse/pages/genes'
|
31
|
+
|
32
|
+
require 'kittyverse/recipes'
|
33
|
+
require 'kittyverse/traits'
|
34
|
+
require 'kittyverse/cattributes'
|
35
|
+
require 'kittyverse/fancies'
|
36
|
+
|
37
|
+
## api support
|
38
|
+
require 'kittyverse/api/client'
|
39
|
+
require 'kittyverse/api/versions'
|
40
|
+
|
41
|
+
## genes / genome
|
42
|
+
require 'kittyverse/gene'
|
43
|
+
require 'kittyverse/genome'
|
44
|
+
|
45
|
+
|
46
|
+
# say hello
|
47
|
+
puts Kittyverse.banner if defined?($RUBYCOCO_DEBUG) && $RUBYCOCO_DEBUG
|
@@ -1,147 +1,147 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Kitties
|
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
|
-
|
64
|
-
|
65
|
-
class Client
|
66
|
-
|
67
|
-
##
|
68
|
-
## todo: add (optional) close with @http.close - why? why not?
|
69
|
-
|
70
|
-
def initialize( base_uri:, token: nil )
|
71
|
-
uri = URI.parse( base_uri )
|
72
|
-
@http = Net::HTTP.new( uri.host, uri.port )
|
73
|
-
if uri.instance_of? URI::HTTPS
|
74
|
-
@http.use_ssl = true
|
75
|
-
@http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
76
|
-
end
|
77
|
-
|
78
|
-
@base_request_uri = uri.request_uri ## e.g. save /v1 etc.
|
79
|
-
## puts "base_request_uri: >#{@base_request_uri}<"
|
80
|
-
|
81
|
-
@request_headers = if token
|
82
|
-
{ "x-api-token" => token }
|
83
|
-
else
|
84
|
-
{}
|
85
|
-
end
|
86
|
-
end # method initialize
|
87
|
-
|
88
|
-
def get( service, **params )
|
89
|
-
|
90
|
-
## add url-encoded query string from params hash e.g. ?limit=100&type=sale
|
91
|
-
unless params.empty?
|
92
|
-
query = URI.encode_www_form( params )
|
93
|
-
service += "?#{query}"
|
94
|
-
end
|
95
|
-
|
96
|
-
puts "GET #{service}"
|
97
|
-
|
98
|
-
request_uri = if @base_request_uri == "/"
|
99
|
-
service
|
100
|
-
else
|
101
|
-
"#{@base_request_uri}#{service}" ## e.g. add /v1 etc.
|
102
|
-
end
|
103
|
-
|
104
|
-
pp @request_headers
|
105
|
-
|
106
|
-
req = Net::HTTP::Get.new( request_uri, @request_headers )
|
107
|
-
|
108
|
-
res = @http.request(req)
|
109
|
-
|
110
|
-
headers = res.to_hash ## get all response headers
|
111
|
-
|
112
|
-
if Kitties.debug?
|
113
|
-
# Iterate all response headers.
|
114
|
-
# res.each_header do |key, value|
|
115
|
-
# p "#{key} => #{value}"
|
116
|
-
# end
|
117
|
-
pp headers
|
118
|
-
# => "content-type => application/json; charset=utf-8"
|
119
|
-
# => "x-ratelimit-limit => 20"
|
120
|
-
# => "x-ratelimit-remaining => 19"
|
121
|
-
# => "x-ratelimit-reset => 1558079593"
|
122
|
-
# ...
|
123
|
-
end
|
124
|
-
|
125
|
-
body = res.read_body
|
126
|
-
## pp body
|
127
|
-
|
128
|
-
## track last response
|
129
|
-
Kitties.last_response = Response.new( res.code,
|
130
|
-
res.message,
|
131
|
-
headers,
|
132
|
-
body )
|
133
|
-
|
134
|
-
if res.code != '200'
|
135
|
-
raise HttpError.new( res.code, res.message )
|
136
|
-
end
|
137
|
-
|
138
|
-
|
139
|
-
json = JSON.parse( body ) ## use just body (any difference?) - why? why not?
|
140
|
-
## pp json
|
141
|
-
json
|
142
|
-
end # method get
|
143
|
-
|
144
|
-
end ## class Client
|
145
|
-
|
146
|
-
|
147
|
-
end # module Kitties
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Kitties
|
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
|
+
|
64
|
+
|
65
|
+
class Client
|
66
|
+
|
67
|
+
##
|
68
|
+
## todo: add (optional) close with @http.close - why? why not?
|
69
|
+
|
70
|
+
def initialize( base_uri:, token: nil )
|
71
|
+
uri = URI.parse( base_uri )
|
72
|
+
@http = Net::HTTP.new( uri.host, uri.port )
|
73
|
+
if uri.instance_of? URI::HTTPS
|
74
|
+
@http.use_ssl = true
|
75
|
+
@http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
76
|
+
end
|
77
|
+
|
78
|
+
@base_request_uri = uri.request_uri ## e.g. save /v1 etc.
|
79
|
+
## puts "base_request_uri: >#{@base_request_uri}<"
|
80
|
+
|
81
|
+
@request_headers = if token
|
82
|
+
{ "x-api-token" => token }
|
83
|
+
else
|
84
|
+
{}
|
85
|
+
end
|
86
|
+
end # method initialize
|
87
|
+
|
88
|
+
def get( service, **params )
|
89
|
+
|
90
|
+
## add url-encoded query string from params hash e.g. ?limit=100&type=sale
|
91
|
+
unless params.empty?
|
92
|
+
query = URI.encode_www_form( params )
|
93
|
+
service += "?#{query}"
|
94
|
+
end
|
95
|
+
|
96
|
+
puts "GET #{service}"
|
97
|
+
|
98
|
+
request_uri = if @base_request_uri == "/"
|
99
|
+
service
|
100
|
+
else
|
101
|
+
"#{@base_request_uri}#{service}" ## e.g. add /v1 etc.
|
102
|
+
end
|
103
|
+
|
104
|
+
pp @request_headers
|
105
|
+
|
106
|
+
req = Net::HTTP::Get.new( request_uri, @request_headers )
|
107
|
+
|
108
|
+
res = @http.request(req)
|
109
|
+
|
110
|
+
headers = res.to_hash ## get all response headers
|
111
|
+
|
112
|
+
if Kitties.debug?
|
113
|
+
# Iterate all response headers.
|
114
|
+
# res.each_header do |key, value|
|
115
|
+
# p "#{key} => #{value}"
|
116
|
+
# end
|
117
|
+
pp headers
|
118
|
+
# => "content-type => application/json; charset=utf-8"
|
119
|
+
# => "x-ratelimit-limit => 20"
|
120
|
+
# => "x-ratelimit-remaining => 19"
|
121
|
+
# => "x-ratelimit-reset => 1558079593"
|
122
|
+
# ...
|
123
|
+
end
|
124
|
+
|
125
|
+
body = res.read_body
|
126
|
+
## pp body
|
127
|
+
|
128
|
+
## track last response
|
129
|
+
Kitties.last_response = Response.new( res.code,
|
130
|
+
res.message,
|
131
|
+
headers,
|
132
|
+
body )
|
133
|
+
|
134
|
+
if res.code != '200'
|
135
|
+
raise HttpError.new( res.code, res.message )
|
136
|
+
end
|
137
|
+
|
138
|
+
|
139
|
+
json = JSON.parse( body ) ## use just body (any difference?) - why? why not?
|
140
|
+
## pp json
|
141
|
+
json
|
142
|
+
end # method get
|
143
|
+
|
144
|
+
end ## class Client
|
145
|
+
|
146
|
+
|
147
|
+
end # module Kitties
|
@@ -1,91 +1,91 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Kitties
|
4
|
-
|
5
|
-
class Configuration
|
6
|
-
attr_accessor :token
|
7
|
-
attr_accessor :debug
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
# try default setup via ENV variables
|
11
|
-
@token = ENV[ 'KITTIES_TOKEN' ]
|
12
|
-
@debug = false
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
## lets you use
|
17
|
-
## Kitties.configure do |config|
|
18
|
-
## config.token = 'secret'
|
19
|
-
## end
|
20
|
-
def self.configuration
|
21
|
-
@configuration ||= Configuration.new
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.configure
|
25
|
-
yield( configuration )
|
26
|
-
end
|
27
|
-
|
28
|
-
### debug convenience helpers
|
29
|
-
def self.debug?() configuration.debug; end
|
30
|
-
def self.debug=(value) configuration.debug = value; end
|
31
|
-
|
32
|
-
|
33
|
-
## track last response
|
34
|
-
def self.last_response() @last_response; end
|
35
|
-
def self.last_response=(value) @last_response = value; end
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
module V0
|
40
|
-
class Client < ::Kitties::Client
|
41
|
-
def initialize
|
42
|
-
super( base_uri: "https://api.cryptokitties.co" )
|
43
|
-
end
|
44
|
-
|
45
|
-
def get_cattributes() get('/cattributes'); end
|
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
|
-
|
55
|
-
end # class Client
|
56
|
-
end # module V0
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
module V1
|
62
|
-
###
|
63
|
-
## see https://docs.api.cryptokitties.co
|
64
|
-
|
65
|
-
class Client < ::Kitties::Client
|
66
|
-
def initialize
|
67
|
-
super( base_uri: "https://public.api.cryptokitties.co/v1",
|
68
|
-
token: Kitties.configuration.token )
|
69
|
-
end
|
70
|
-
|
71
|
-
def get_cattributes() get('/cattributes'); end
|
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
|
-
|
75
|
-
def get_colors_body() get('/colors/body'); end
|
76
|
-
def get_colors_eyes() get('/colors/eyes'); end
|
77
|
-
def get_colors_secondary() get('/colors/secondary'); end
|
78
|
-
def get_colors_tertiary() get('/colors/tertiary'); end
|
79
|
-
|
80
|
-
end # class Client
|
81
|
-
end # module V1
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
## CLIENT_V0 = V0::Client.new
|
86
|
-
## CLIENT_V1 = V1::Client.new
|
87
|
-
##
|
88
|
-
## def self.v0() CLIENT_V0; end
|
89
|
-
## def self.v1() CLIENT_V1; end
|
90
|
-
|
91
|
-
end # module Kitties
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Kitties
|
4
|
+
|
5
|
+
class Configuration
|
6
|
+
attr_accessor :token
|
7
|
+
attr_accessor :debug
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
# try default setup via ENV variables
|
11
|
+
@token = ENV[ 'KITTIES_TOKEN' ]
|
12
|
+
@debug = false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
## lets you use
|
17
|
+
## Kitties.configure do |config|
|
18
|
+
## config.token = 'secret'
|
19
|
+
## end
|
20
|
+
def self.configuration
|
21
|
+
@configuration ||= Configuration.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.configure
|
25
|
+
yield( configuration )
|
26
|
+
end
|
27
|
+
|
28
|
+
### debug convenience helpers
|
29
|
+
def self.debug?() configuration.debug; end
|
30
|
+
def self.debug=(value) configuration.debug = value; end
|
31
|
+
|
32
|
+
|
33
|
+
## track last response
|
34
|
+
def self.last_response() @last_response; end
|
35
|
+
def self.last_response=(value) @last_response = value; end
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
module V0
|
40
|
+
class Client < ::Kitties::Client
|
41
|
+
def initialize
|
42
|
+
super( base_uri: "https://api.cryptokitties.co" )
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_cattributes() get('/cattributes'); end
|
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
|
+
|
55
|
+
end # class Client
|
56
|
+
end # module V0
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
module V1
|
62
|
+
###
|
63
|
+
## see https://docs.api.cryptokitties.co
|
64
|
+
|
65
|
+
class Client < ::Kitties::Client
|
66
|
+
def initialize
|
67
|
+
super( base_uri: "https://public.api.cryptokitties.co/v1",
|
68
|
+
token: Kitties.configuration.token )
|
69
|
+
end
|
70
|
+
|
71
|
+
def get_cattributes() get('/cattributes'); end
|
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
|
+
|
75
|
+
def get_colors_body() get('/colors/body'); end
|
76
|
+
def get_colors_eyes() get('/colors/eyes'); end
|
77
|
+
def get_colors_secondary() get('/colors/secondary'); end
|
78
|
+
def get_colors_tertiary() get('/colors/tertiary'); end
|
79
|
+
|
80
|
+
end # class Client
|
81
|
+
end # module V1
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
## CLIENT_V0 = V0::Client.new
|
86
|
+
## CLIENT_V1 = V1::Client.new
|
87
|
+
##
|
88
|
+
## def self.v0() CLIENT_V0; end
|
89
|
+
## def self.v1() CLIENT_V1; end
|
90
|
+
|
91
|
+
end # module Kitties
|