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.
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
@@ -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