hubba 0.5.2 → 0.6.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/Manifest.txt +1 -4
- data/lib/hubba.rb +8 -1
- data/lib/hubba/config.rb +46 -0
- data/lib/hubba/github.rb +21 -58
- data/lib/hubba/stats.rb +67 -48
- data/lib/hubba/version.rb +2 -2
- data/test/test_config.rb +10 -0
- data/test/test_stats.rb +7 -4
- data/test/test_stats_tmp.rb +8 -5
- metadata +3 -6
- data/lib/hubba/cache.rb +0 -61
- data/test/cache/users~geraldb~orgs.json +0 -46
- data/test/cache/users~geraldb~repos.json +0 -263
- data/test/test_cache.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63505774303ed6881c5650478eb76a1df7a3d412
|
4
|
+
data.tar.gz: 517173da9e008bd5d9ea74d2e9d8d1622edf7fdf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a806d4ee314cc13c1605781cbc6af7192600d2c34ec9ebccc949541a800a41d93d43def28600aa0d27e7526a47afa1e319bc2184ec4cee1c917196cc080ca91
|
7
|
+
data.tar.gz: bcc42747f508c0acab55a8f652be1103afef20d9409172081bba34a530a9bbc441a2d5ec109bcd4b43e3049a3b3f74fc1c478d17e9c84a7e7ce41e7dabd11014
|
data/Manifest.txt
CHANGED
@@ -3,19 +3,16 @@ Manifest.txt
|
|
3
3
|
README.md
|
4
4
|
Rakefile
|
5
5
|
lib/hubba.rb
|
6
|
-
lib/hubba/cache.rb
|
7
6
|
lib/hubba/client.rb
|
7
|
+
lib/hubba/config.rb
|
8
8
|
lib/hubba/github.rb
|
9
9
|
lib/hubba/stats.rb
|
10
10
|
lib/hubba/version.rb
|
11
|
-
test/cache/users~geraldb~orgs.json
|
12
|
-
test/cache/users~geraldb~repos.json
|
13
11
|
test/helper.rb
|
14
12
|
test/stats/jekyll~minima.json
|
15
13
|
test/stats/openblockchains~awesome-blockchains.json
|
16
14
|
test/stats/opendatajson~factbook.json.json
|
17
15
|
test/stats/poole~hyde.json
|
18
|
-
test/test_cache.rb
|
19
16
|
test/test_config.rb
|
20
17
|
test/test_stats.rb
|
21
18
|
test/test_stats_tmp.rb
|
data/lib/hubba.rb
CHANGED
@@ -3,11 +3,18 @@ require 'webclient'
|
|
3
3
|
|
4
4
|
# our own code
|
5
5
|
require 'hubba/version' # note: let version always go first
|
6
|
-
require 'hubba/
|
6
|
+
require 'hubba/config'
|
7
7
|
require 'hubba/client'
|
8
8
|
require 'hubba/github'
|
9
9
|
require 'hubba/stats'
|
10
10
|
|
11
11
|
|
12
|
+
############
|
13
|
+
# add convenience alias for alternate spelling - why? why not?
|
14
|
+
module Hubba
|
15
|
+
GitHub = Github
|
16
|
+
end
|
17
|
+
|
18
|
+
|
12
19
|
# say hello
|
13
20
|
puts Hubba.banner if defined?($RUBYCOCO_DEBUG)
|
data/lib/hubba/config.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
module Hubba
|
2
|
+
|
3
|
+
class Configuration
|
4
|
+
def data_dir() @data_dir || './data'; end
|
5
|
+
def data_dir=( value ) @data_dir = value; end
|
6
|
+
|
7
|
+
# try default setup via ENV variables
|
8
|
+
def token() @token || ENV[ 'HUBBA_TOKEN' ]; end
|
9
|
+
def token=( value ) @token = value; end
|
10
|
+
|
11
|
+
# todo/check: use HUBBA_LOGIN - why? why not?
|
12
|
+
def user() @user || ENV[ 'HUBBA_USER' ]; end
|
13
|
+
def password() @password || ENV[ 'HUBBA_PASSWORD' ]; end
|
14
|
+
def user=( value ) @user = value; end
|
15
|
+
def password=( value ) @password = value; end
|
16
|
+
|
17
|
+
end # class Configuration
|
18
|
+
|
19
|
+
|
20
|
+
## lets you use
|
21
|
+
## Hubba.configure do |config|
|
22
|
+
## config.token = 'secret'
|
23
|
+
## -or-
|
24
|
+
## config.user = 'testdada'
|
25
|
+
## config.password = 'secret'
|
26
|
+
## end
|
27
|
+
##
|
28
|
+
## move configure block to GitHub class - why? why not?
|
29
|
+
## e.g. GitHub.configure do |config|
|
30
|
+
## ...
|
31
|
+
## end
|
32
|
+
|
33
|
+
|
34
|
+
def self.configuration
|
35
|
+
@configuration ||= Configuration.new
|
36
|
+
end
|
37
|
+
class << self
|
38
|
+
alias_method :config, :configuration
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def self.configure
|
43
|
+
yield( configuration )
|
44
|
+
end
|
45
|
+
|
46
|
+
end # module Hubba
|
data/lib/hubba/github.rb
CHANGED
@@ -1,42 +1,5 @@
|
|
1
1
|
module Hubba
|
2
2
|
|
3
|
-
class Configuration
|
4
|
-
attr_accessor :token
|
5
|
-
|
6
|
-
attr_accessor :user
|
7
|
-
attr_accessor :password
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
# try default setup via ENV variables
|
11
|
-
@token = ENV[ 'HUBBA_TOKEN' ]
|
12
|
-
|
13
|
-
@user = ENV[ 'HUBBA_USER' ] ## use HUBBA_LOGIN - why? why not?
|
14
|
-
@password = ENV[ 'HUBBA_PASSWORD' ]
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
## lets you use
|
19
|
-
## Hubba.configure do |config|
|
20
|
-
## config.token = 'secret'
|
21
|
-
## #-or-
|
22
|
-
## config.user = 'testdada'
|
23
|
-
## config.password = 'secret'
|
24
|
-
## end
|
25
|
-
##
|
26
|
-
## move configure block to GitHub class - why? why not?
|
27
|
-
## e.g. GitHub.configure do |config|
|
28
|
-
## ...
|
29
|
-
## end
|
30
|
-
|
31
|
-
|
32
|
-
def self.configuration
|
33
|
-
@configuration ||= Configuration.new
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.configure
|
37
|
-
yield( configuration )
|
38
|
-
end
|
39
|
-
|
40
3
|
|
41
4
|
class Resource
|
42
5
|
attr_reader :data
|
@@ -64,9 +27,7 @@ end
|
|
64
27
|
|
65
28
|
class Github
|
66
29
|
|
67
|
-
def initialize
|
68
|
-
@cache = Cache.new( cache_dir )
|
69
|
-
|
30
|
+
def initialize
|
70
31
|
@client = if Hubba.configuration.token
|
71
32
|
Client.new( token: Hubba.configuration.token )
|
72
33
|
elsif Hubba.configuration.user &&
|
@@ -76,15 +37,8 @@ def initialize( cache_dir: './cache' )
|
|
76
37
|
else
|
77
38
|
Client.new
|
78
39
|
end
|
79
|
-
|
80
|
-
@offline = false
|
81
40
|
end
|
82
41
|
|
83
|
-
def offline!() @offline = true; end ## switch to offline - todo: find a "better" way - why? why not?
|
84
|
-
def online!() @offline = false; end
|
85
|
-
def offline?() @offline == true; end
|
86
|
-
def online?() @offline == false; end
|
87
|
-
|
88
42
|
|
89
43
|
def user( name )
|
90
44
|
Resource.new( get "/users/#{name}" )
|
@@ -108,6 +62,7 @@ def user_orgs( name )
|
|
108
62
|
end
|
109
63
|
|
110
64
|
|
65
|
+
|
111
66
|
def org( name )
|
112
67
|
Resource.new( get "/orgs/#{name}" )
|
113
68
|
end
|
@@ -127,20 +82,28 @@ def repo_commits( full_name )
|
|
127
82
|
end
|
128
83
|
|
129
84
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
85
|
+
|
86
|
+
####
|
87
|
+
# more
|
88
|
+
def update( obj )
|
89
|
+
if obj.is_a?( Stats )
|
90
|
+
full_name = obj.full_name
|
91
|
+
puts "[update 1/2] fetching repo >#{full_name}<..."
|
92
|
+
repo = repo( full_name )
|
93
|
+
puts "[update 2/2] fetching repo >#{full_name}< commits ..."
|
94
|
+
commits = repo_commits( full_name )
|
95
|
+
|
96
|
+
obj.update( repo, commits )
|
134
97
|
else
|
135
|
-
|
98
|
+
raise ArgumentError, "unknown source object passed in - expected Hubba::Stats; got #{obj.class.name}"
|
136
99
|
end
|
137
100
|
end
|
138
101
|
|
139
|
-
end # class Github
|
140
|
-
|
141
|
-
############
|
142
|
-
# add convenience alias for alternate spelling - why? why not?
|
143
|
-
GitHub = Github
|
144
102
|
|
103
|
+
private
|
104
|
+
def get( request_uri )
|
105
|
+
@client.get( request_uri )
|
106
|
+
end
|
145
107
|
|
146
|
-
end
|
108
|
+
end # class Github
|
109
|
+
end # module Hubba
|
data/lib/hubba/stats.rb
CHANGED
@@ -10,56 +10,73 @@ module Hubba
|
|
10
10
|
def initialize( full_name )
|
11
11
|
@data = {}
|
12
12
|
@data['full_name'] = full_name # e.g. poole/hyde etc.
|
13
|
+
|
14
|
+
@cache = {}
|
13
15
|
end
|
14
16
|
|
15
17
|
|
16
|
-
def full_name() @
|
18
|
+
def full_name() @data['full_name']; end
|
19
|
+
|
17
20
|
|
18
21
|
## note: return datetime objects (NOT strings); if not present/available return nil/null
|
19
|
-
def created_at() @
|
20
|
-
def updated_at() @
|
21
|
-
def pushed_at() @
|
22
|
+
def created_at() @cache['created_at'] ||= parse_datetime( @data['created_at'] ); end
|
23
|
+
def updated_at() @cache['updated_at'] ||= parse_datetime( @data['updated_at'] ); end
|
24
|
+
def pushed_at() @cache['pushed_at'] ||= parse_datetime( @data['pushed_at'] ); end
|
22
25
|
|
23
26
|
## date (only) versions
|
24
|
-
def created() @
|
25
|
-
def updated() @
|
26
|
-
def pushed() @
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
def history() @history ||= @data['history'] ? build_history( @data['history'] ) : nil; end
|
27
|
+
def created() @cache['created'] ||= parse_date( @data['created_at'] ); end
|
28
|
+
def updated() @cache['updated'] ||= parse_date( @data['updated_at'] ); end
|
29
|
+
def pushed() @cache['pushed'] ||= parse_date( @data['pushed_at'] ); end
|
31
30
|
|
32
31
|
def size
|
33
32
|
# size of repo in kb (as reported by github api)
|
34
|
-
@
|
33
|
+
@data['size'] || 0 ## return 0 if not found - why? why not? (return nil - why? why not??)
|
35
34
|
end
|
36
35
|
|
36
|
+
|
37
|
+
def history
|
38
|
+
@cache['history'] ||= begin
|
39
|
+
if @data['history']
|
40
|
+
build_history( @data['history'] )
|
41
|
+
else
|
42
|
+
nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
37
48
|
def stars
|
38
49
|
## return last stargazers_count entry (as number; 0 if not found)
|
39
|
-
@stars ||= history ? history[0].stars : 0
|
50
|
+
@cache['stars'] ||= history ? history[0].stars : 0
|
40
51
|
end
|
41
52
|
|
42
53
|
|
43
54
|
def commits() @data['commits']; end
|
44
55
|
|
45
|
-
def last_commit
|
56
|
+
def last_commit ## convenience shortcut; get first/last commit (use [0]) or nil
|
46
57
|
if @data['commits'] && @data['commits'][0]
|
47
58
|
@data['commits'][0]
|
48
59
|
else
|
49
|
-
|
60
|
+
nil
|
50
61
|
end
|
51
62
|
end
|
52
63
|
|
53
|
-
|
54
|
-
|
64
|
+
|
65
|
+
def committed ## last commit date (from author NOT committer)
|
66
|
+
@cache['committed'] ||= parse_date( last_commit_author_date )
|
55
67
|
end
|
56
68
|
|
57
69
|
def committed_at() ## last commit date (from author NOT committer)
|
58
|
-
@committed_at ||=
|
70
|
+
@cache['committed_at'] ||= parse_datetime( last_commit_author_date )
|
71
|
+
end
|
72
|
+
|
73
|
+
def last_commit_author_date
|
74
|
+
h = last_commit
|
75
|
+
h ? h['author']['date'] : nil
|
59
76
|
end
|
60
77
|
|
61
78
|
|
62
|
-
def last_commit_message
|
79
|
+
def last_commit_message ## convenience shortcut; last commit message
|
63
80
|
h = last_commit
|
64
81
|
|
65
82
|
committer_name = h['committer']['name']
|
@@ -77,20 +94,10 @@ module Hubba
|
|
77
94
|
|
78
95
|
|
79
96
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
@created_at = @updated_at = @pushed_at = nil
|
85
|
-
@created = @updated = @pused = nil
|
86
|
-
@history = nil
|
87
|
-
@size = nil
|
88
|
-
@stars = nil
|
89
|
-
|
90
|
-
@committed_at = nil
|
91
|
-
@committed = nil
|
92
|
-
end
|
93
|
-
|
97
|
+
###
|
98
|
+
# helpers
|
99
|
+
def parse_datetime( str ) str ? DateTime.strptime( str, '%Y-%m-%dT%H:%M:%S') : nil; end
|
100
|
+
def parse_date( str ) str ? Date.strptime( str, '%Y-%m-%d') : nil; end
|
94
101
|
|
95
102
|
########
|
96
103
|
## build history items (structs)
|
@@ -187,7 +194,8 @@ module Hubba
|
|
187
194
|
end
|
188
195
|
end
|
189
196
|
|
190
|
-
|
197
|
+
|
198
|
+
def history_str ## todo/check: rename/change to format_history or fmt_history - why? why not?
|
191
199
|
## returns "pretty printed" history as string buffer
|
192
200
|
buf = ''
|
193
201
|
buf << "[#{history.size}]: "
|
@@ -214,12 +222,13 @@ module Hubba
|
|
214
222
|
end # method history_str
|
215
223
|
|
216
224
|
|
225
|
+
|
217
226
|
###############################
|
218
227
|
## fetch / read / write methods
|
219
228
|
|
220
|
-
def
|
221
|
-
|
222
|
-
|
229
|
+
def update( repo, commits ) ## update stats / fetch data from github via api
|
230
|
+
raise ArgumentError, "Hubba::Resource expected; got #{repo.class.name}" unless repo.is_a?( Resource )
|
231
|
+
raise ArgumentError, "Hubba::Resource expected; got #{commits.class.name}" unless commits.is_a?( Resource )
|
223
232
|
|
224
233
|
## e.g. 2015-05-11T20:21:43Z
|
225
234
|
## puts Time.iso8601( repo.data['created_at'] )
|
@@ -244,7 +253,6 @@ module Hubba
|
|
244
253
|
|
245
254
|
##########################
|
246
255
|
## also check / keep track of (latest) commit
|
247
|
-
commits = gh.repo_commits( full_name )
|
248
256
|
puts "last commit/update:"
|
249
257
|
## pp commits
|
250
258
|
commit = {
|
@@ -264,15 +272,21 @@ module Hubba
|
|
264
272
|
|
265
273
|
pp @data
|
266
274
|
|
267
|
-
|
275
|
+
## reset (invalidate) cached values from data hash
|
276
|
+
## use after reading or fetching
|
277
|
+
@cache = {}
|
278
|
+
|
268
279
|
self ## return self for (easy chaining)
|
269
280
|
end
|
270
281
|
|
271
282
|
|
272
283
|
|
273
|
-
def write
|
284
|
+
def write
|
274
285
|
basename = full_name.gsub( '/', '~' ) ## e.g. poole/hyde become poole~hyde
|
275
|
-
|
286
|
+
data_dir = Hubba.config.data_dir
|
287
|
+
puts "writing stats to #{basename} (#{data_dir})..."
|
288
|
+
|
289
|
+
## todo/fix: add FileUtils.makepath_r or such!!!
|
276
290
|
File.open( "#{data_dir}/#{basename}.json", 'w:utf-8' ) do |f|
|
277
291
|
f.write JSON.pretty_generate( data )
|
278
292
|
end
|
@@ -280,17 +294,22 @@ module Hubba
|
|
280
294
|
end
|
281
295
|
|
282
296
|
|
283
|
-
def read
|
297
|
+
def read
|
284
298
|
## note: skip reading if file not present
|
285
299
|
basename = full_name.gsub( '/', '~' ) ## e.g. poole/hyde become poole~hyde
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
300
|
+
data_dir = Hubba.config.data_dir
|
301
|
+
path = "#{data_dir}/#{basename}.json"
|
302
|
+
|
303
|
+
if File.exist?( path )
|
304
|
+
puts "reading stats from #{basename} (#{data_dir})..."
|
305
|
+
json = File.open( path, 'r:utf-8' ) { |f| f.read }
|
290
306
|
@data = JSON.parse( json )
|
291
|
-
|
307
|
+
|
308
|
+
## reset (invalidate) cached values from data hash
|
309
|
+
## use after reading or fetching
|
310
|
+
@cache = {}
|
292
311
|
else
|
293
|
-
puts "skipping reading stats from #{basename} -- file not found"
|
312
|
+
puts "!! WARN: - skipping reading stats from #{basename} -- file not found"
|
294
313
|
end
|
295
314
|
self ## return self for (easy chaining)
|
296
315
|
end
|
data/lib/hubba/version.rb
CHANGED
data/test/test_config.rb
CHANGED
@@ -12,10 +12,20 @@ class TestConfig < MiniTest::Test
|
|
12
12
|
Hubba.configure do |config|
|
13
13
|
config.user = 'user1'
|
14
14
|
config.password = 'password1'
|
15
|
+
# -or-
|
16
|
+
config.token = 'token1'
|
15
17
|
end
|
16
18
|
|
17
19
|
assert_equal 'user1', Hubba.configuration.user
|
18
20
|
assert_equal 'password1', Hubba.configuration.password
|
21
|
+
assert_equal 'token1', Hubba.configuration.token
|
22
|
+
|
23
|
+
assert_equal 'user1', Hubba.config.user
|
24
|
+
assert_equal 'password1', Hubba.config.password
|
25
|
+
assert_equal 'token1', Hubba.config.token
|
26
|
+
|
27
|
+
assert_equal './data', Hubba.configuration.data_dir
|
28
|
+
assert_equal './data', Hubba.config.data_dir
|
19
29
|
end
|
20
30
|
|
21
31
|
end # class TestConfig
|
data/test/test_stats.rb
CHANGED
@@ -17,7 +17,8 @@ class TestStats < MiniTest::Test
|
|
17
17
|
assert_equal 0, stats.stars
|
18
18
|
assert_nil stats.history
|
19
19
|
|
20
|
-
|
20
|
+
Hubba.config.data_dir = "#{Hubba.root}/test/stats"
|
21
|
+
stats.read
|
21
22
|
|
22
23
|
assert_equal 321, stats.size
|
23
24
|
assert_equal 717, stats.stars
|
@@ -54,7 +55,8 @@ class TestStats < MiniTest::Test
|
|
54
55
|
assert_equal 0, stats.stars
|
55
56
|
assert_nil stats.history
|
56
57
|
|
57
|
-
|
58
|
+
Hubba.config.data_dir = "#{Hubba.root}/test/stats"
|
59
|
+
stats.read
|
58
60
|
|
59
61
|
assert_equal 1620, stats.size
|
60
62
|
assert_equal 1526, stats.stars
|
@@ -91,7 +93,8 @@ class TestStats < MiniTest::Test
|
|
91
93
|
assert_equal 0, stats.stars
|
92
94
|
assert_nil stats.history
|
93
95
|
|
94
|
-
|
96
|
+
Hubba.config.data_dir = "#{Hubba.root}/test/stats"
|
97
|
+
stats.read
|
95
98
|
|
96
99
|
assert_equal 7355, stats.size
|
97
100
|
assert_equal 539, stats.stars
|
@@ -99,7 +102,7 @@ class TestStats < MiniTest::Test
|
|
99
102
|
assert_equal 536, stats.history[1].stars
|
100
103
|
assert_equal 533, stats.history[2].stars
|
101
104
|
assert_equal 457, stats.history[-1].stars
|
102
|
-
assert_equal 7,
|
105
|
+
assert_equal 7, stats.history.size
|
103
106
|
|
104
107
|
assert_equal Date.new(2018, 2, 8 ), stats.history[0].date
|
105
108
|
assert_equal Date.new(2018, 1, 28 ), stats.history[1].date
|
data/test/test_stats_tmp.rb
CHANGED
@@ -9,7 +9,7 @@ require 'helper'
|
|
9
9
|
class TestStatsTmp < MiniTest::Test
|
10
10
|
|
11
11
|
def setup
|
12
|
-
@gh = Hubba::Github.new
|
12
|
+
@gh = Hubba::Github.new
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_stats
|
@@ -18,21 +18,24 @@ class TestStatsTmp < MiniTest::Test
|
|
18
18
|
'jekyll/minima'
|
19
19
|
]
|
20
20
|
|
21
|
+
|
21
22
|
repos.each do |repo|
|
22
23
|
stats = Hubba::Stats.new( repo )
|
23
|
-
|
24
|
-
|
24
|
+
|
25
|
+
Hubba.config.data_dir = "#{Hubba.root}/test/stats"
|
26
|
+
stats.read()
|
25
27
|
|
26
28
|
puts "stars before fetch: #{stats.stars}"
|
27
29
|
puts "size before fetch: #{stats.size} kb"
|
28
30
|
|
29
31
|
## note/todo: enable for "live" online testing
|
30
|
-
##
|
32
|
+
## @gh.update( stats )
|
31
33
|
|
32
34
|
puts "stars after fetch: #{stats.stars}"
|
33
35
|
puts "size after fetch: #{stats.size} kb"
|
34
36
|
|
35
|
-
|
37
|
+
Hubba.config.data_dir = './tmp'
|
38
|
+
stats.write()
|
36
39
|
end
|
37
40
|
|
38
41
|
assert true # for now everything ok if we get here
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hubba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: webclient
|
@@ -72,19 +72,16 @@ files:
|
|
72
72
|
- README.md
|
73
73
|
- Rakefile
|
74
74
|
- lib/hubba.rb
|
75
|
-
- lib/hubba/cache.rb
|
76
75
|
- lib/hubba/client.rb
|
76
|
+
- lib/hubba/config.rb
|
77
77
|
- lib/hubba/github.rb
|
78
78
|
- lib/hubba/stats.rb
|
79
79
|
- lib/hubba/version.rb
|
80
|
-
- test/cache/users~geraldb~orgs.json
|
81
|
-
- test/cache/users~geraldb~repos.json
|
82
80
|
- test/helper.rb
|
83
81
|
- test/stats/jekyll~minima.json
|
84
82
|
- test/stats/openblockchains~awesome-blockchains.json
|
85
83
|
- test/stats/opendatajson~factbook.json.json
|
86
84
|
- test/stats/poole~hyde.json
|
87
|
-
- test/test_cache.rb
|
88
85
|
- test/test_config.rb
|
89
86
|
- test/test_stats.rb
|
90
87
|
- test/test_stats_tmp.rb
|
data/lib/hubba/cache.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
module Hubba
|
2
|
-
|
3
|
-
class Cache ## lets you work with GitHub api "offline" using just a local cache of stored json
|
4
|
-
|
5
|
-
def initialize( dir )
|
6
|
-
@dir = dir
|
7
|
-
end
|
8
|
-
|
9
|
-
## fix/todo: cut of query string e.g. ?per_page=100 why? why not?
|
10
|
-
def get( request_uri )
|
11
|
-
## check if request_uri exists in local cache
|
12
|
-
basename = request_uri_to_basename( request_uri )
|
13
|
-
path = "#{@dir}/#{basename}.json"
|
14
|
-
if File.exist?( path )
|
15
|
-
text = File.open( path, 'r:utf-8') { |f| f.read }
|
16
|
-
json = JSON.parse( text )
|
17
|
-
json
|
18
|
-
else
|
19
|
-
nil ## todo/fix: raise exception - why? why not??
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def put( request_uri, obj )
|
24
|
-
basename = request_uri_to_basename( request_uri )
|
25
|
-
path = "#{@dir}/#{basename}.json"
|
26
|
-
|
27
|
-
if obj.is_a?( Resource ) ## note: for convenience support Resource obj too
|
28
|
-
data = obj.data
|
29
|
-
else
|
30
|
-
data = obj # assume Hash or Array -- todo: add support for String - why? why not??
|
31
|
-
end
|
32
|
-
|
33
|
-
File.open( path, 'w:utf-8' ) do |f|
|
34
|
-
f.write( JSON.pretty_generate( data ))
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
|
39
|
-
def request_uri_to_basename( request_uri )
|
40
|
-
## 1) cut off leading /
|
41
|
-
## 2) convert / to ~
|
42
|
-
## 3) remove (optional) query string (for now) - why? why not?
|
43
|
-
## e.g. /users/#{name}/orgs?per_page=100 or such
|
44
|
-
##
|
45
|
-
## e.g.
|
46
|
-
## '/users/geraldb' => 'users~geraldb',
|
47
|
-
## '/users/geraldb/repos' => 'users~geraldb~repos',
|
48
|
-
## '/users/geraldb/orgs' => 'users~geraldb~orgs',
|
49
|
-
## '/orgs/wikiscript/repos' => 'orgs~wikiscript~repos',
|
50
|
-
## '/orgs/planetjekyll/repos' => 'orgs~planetjekyll~repos',
|
51
|
-
## '/orgs/vienna-rb/repos' => 'orgs~vienna~rb.repos',
|
52
|
-
|
53
|
-
basename = request_uri[1..-1]
|
54
|
-
basename = basename.gsub( '/', '~')
|
55
|
-
basename = basename.sub( /\?.*\z/, '' ) ## note: must escape ? (use \z for $)
|
56
|
-
basename
|
57
|
-
end
|
58
|
-
|
59
|
-
end ## class Cache
|
60
|
-
|
61
|
-
end ## module Hubba
|
@@ -1,46 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"login": "vienna-rb",
|
4
|
-
"id": 3541331,
|
5
|
-
"url": "https://api.github.com/orgs/vienna-rb",
|
6
|
-
"repos_url": "https://api.github.com/orgs/vienna-rb/repos",
|
7
|
-
"events_url": "https://api.github.com/orgs/vienna-rb/events",
|
8
|
-
"members_url": "https://api.github.com/orgs/vienna-rb/members{/member}",
|
9
|
-
"public_members_url": "https://api.github.com/orgs/vienna-rb/public_members{/member}",
|
10
|
-
"avatar_url": "https://avatars.githubusercontent.com/u/3541331?v=3",
|
11
|
-
"description": null
|
12
|
-
},
|
13
|
-
{
|
14
|
-
"login": "openbeer",
|
15
|
-
"id": 4464191,
|
16
|
-
"url": "https://api.github.com/orgs/openbeer",
|
17
|
-
"repos_url": "https://api.github.com/orgs/openbeer/repos",
|
18
|
-
"events_url": "https://api.github.com/orgs/openbeer/events",
|
19
|
-
"members_url": "https://api.github.com/orgs/openbeer/members{/member}",
|
20
|
-
"public_members_url": "https://api.github.com/orgs/openbeer/public_members{/member}",
|
21
|
-
"avatar_url": "https://avatars.githubusercontent.com/u/4464191?v=3",
|
22
|
-
"description": "Open Public Domain Beer, Brewery n Brewpub Data - Incl. The Free World Beer Book"
|
23
|
-
},
|
24
|
-
{
|
25
|
-
"login": "slideshow-s9",
|
26
|
-
"id": 4464373,
|
27
|
-
"url": "https://api.github.com/orgs/slideshow-s9",
|
28
|
-
"repos_url": "https://api.github.com/orgs/slideshow-s9/repos",
|
29
|
-
"events_url": "https://api.github.com/orgs/slideshow-s9/events",
|
30
|
-
"members_url": "https://api.github.com/orgs/slideshow-s9/members{/member}",
|
31
|
-
"public_members_url": "https://api.github.com/orgs/slideshow-s9/public_members{/member}",
|
32
|
-
"avatar_url": "https://avatars.githubusercontent.com/u/4464373?v=3",
|
33
|
-
"description": "Free Web Alternative to PowerPoint and Keynote Using Easy-to-Write and Easy-to-Read Plain Text Wiki-Style Markup"
|
34
|
-
},
|
35
|
-
{
|
36
|
-
"login": "openfootball",
|
37
|
-
"id": 4477026,
|
38
|
-
"url": "https://api.github.com/orgs/openfootball",
|
39
|
-
"repos_url": "https://api.github.com/orgs/openfootball/repos",
|
40
|
-
"events_url": "https://api.github.com/orgs/openfootball/events",
|
41
|
-
"members_url": "https://api.github.com/orgs/openfootball/members{/member}",
|
42
|
-
"public_members_url": "https://api.github.com/orgs/openfootball/public_members{/member}",
|
43
|
-
"avatar_url": "https://avatars.githubusercontent.com/u/4477026?v=3",
|
44
|
-
"description": "Open Public Domain Football Data - Incl. The Free World Football Almanac"
|
45
|
-
}
|
46
|
-
]
|
@@ -1,263 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"id": 33192631,
|
4
|
-
"name": "austria",
|
5
|
-
"full_name": "geraldb/austria",
|
6
|
-
"owner": {
|
7
|
-
"login": "geraldb",
|
8
|
-
"id": 53281,
|
9
|
-
"avatar_url": "https://avatars.githubusercontent.com/u/53281?v=3",
|
10
|
-
"gravatar_id": "",
|
11
|
-
"url": "https://api.github.com/users/geraldb",
|
12
|
-
"html_url": "https://github.com/geraldb",
|
13
|
-
"followers_url": "https://api.github.com/users/geraldb/followers",
|
14
|
-
"following_url": "https://api.github.com/users/geraldb/following{/other_user}",
|
15
|
-
"gists_url": "https://api.github.com/users/geraldb/gists{/gist_id}",
|
16
|
-
"starred_url": "https://api.github.com/users/geraldb/starred{/owner}{/repo}",
|
17
|
-
"subscriptions_url": "https://api.github.com/users/geraldb/subscriptions",
|
18
|
-
"organizations_url": "https://api.github.com/users/geraldb/orgs",
|
19
|
-
"repos_url": "https://api.github.com/users/geraldb/repos",
|
20
|
-
"events_url": "https://api.github.com/users/geraldb/events{/privacy}",
|
21
|
-
"received_events_url": "https://api.github.com/users/geraldb/received_events",
|
22
|
-
"type": "User",
|
23
|
-
"site_admin": false
|
24
|
-
},
|
25
|
-
"private": false,
|
26
|
-
"html_url": "https://github.com/geraldb/austria",
|
27
|
-
"description": "open data and scripts for austria (österreich)",
|
28
|
-
"fork": false,
|
29
|
-
"url": "https://api.github.com/repos/geraldb/austria",
|
30
|
-
"forks_url": "https://api.github.com/repos/geraldb/austria/forks",
|
31
|
-
"keys_url": "https://api.github.com/repos/geraldb/austria/keys{/key_id}",
|
32
|
-
"collaborators_url": "https://api.github.com/repos/geraldb/austria/collaborators{/collaborator}",
|
33
|
-
"teams_url": "https://api.github.com/repos/geraldb/austria/teams",
|
34
|
-
"hooks_url": "https://api.github.com/repos/geraldb/austria/hooks",
|
35
|
-
"issue_events_url": "https://api.github.com/repos/geraldb/austria/issues/events{/number}",
|
36
|
-
"events_url": "https://api.github.com/repos/geraldb/austria/events",
|
37
|
-
"assignees_url": "https://api.github.com/repos/geraldb/austria/assignees{/user}",
|
38
|
-
"branches_url": "https://api.github.com/repos/geraldb/austria/branches{/branch}",
|
39
|
-
"tags_url": "https://api.github.com/repos/geraldb/austria/tags",
|
40
|
-
"blobs_url": "https://api.github.com/repos/geraldb/austria/git/blobs{/sha}",
|
41
|
-
"git_tags_url": "https://api.github.com/repos/geraldb/austria/git/tags{/sha}",
|
42
|
-
"git_refs_url": "https://api.github.com/repos/geraldb/austria/git/refs{/sha}",
|
43
|
-
"trees_url": "https://api.github.com/repos/geraldb/austria/git/trees{/sha}",
|
44
|
-
"statuses_url": "https://api.github.com/repos/geraldb/austria/statuses/{sha}",
|
45
|
-
"languages_url": "https://api.github.com/repos/geraldb/austria/languages",
|
46
|
-
"stargazers_url": "https://api.github.com/repos/geraldb/austria/stargazers",
|
47
|
-
"contributors_url": "https://api.github.com/repos/geraldb/austria/contributors",
|
48
|
-
"subscribers_url": "https://api.github.com/repos/geraldb/austria/subscribers",
|
49
|
-
"subscription_url": "https://api.github.com/repos/geraldb/austria/subscription",
|
50
|
-
"commits_url": "https://api.github.com/repos/geraldb/austria/commits{/sha}",
|
51
|
-
"git_commits_url": "https://api.github.com/repos/geraldb/austria/git/commits{/sha}",
|
52
|
-
"comments_url": "https://api.github.com/repos/geraldb/austria/comments{/number}",
|
53
|
-
"issue_comment_url": "https://api.github.com/repos/geraldb/austria/issues/comments{/number}",
|
54
|
-
"contents_url": "https://api.github.com/repos/geraldb/austria/contents/{+path}",
|
55
|
-
"compare_url": "https://api.github.com/repos/geraldb/austria/compare/{base}...{head}",
|
56
|
-
"merges_url": "https://api.github.com/repos/geraldb/austria/merges",
|
57
|
-
"archive_url": "https://api.github.com/repos/geraldb/austria/{archive_format}{/ref}",
|
58
|
-
"downloads_url": "https://api.github.com/repos/geraldb/austria/downloads",
|
59
|
-
"issues_url": "https://api.github.com/repos/geraldb/austria/issues{/number}",
|
60
|
-
"pulls_url": "https://api.github.com/repos/geraldb/austria/pulls{/number}",
|
61
|
-
"milestones_url": "https://api.github.com/repos/geraldb/austria/milestones{/number}",
|
62
|
-
"notifications_url": "https://api.github.com/repos/geraldb/austria/notifications{?since,all,participating}",
|
63
|
-
"labels_url": "https://api.github.com/repos/geraldb/austria/labels{/name}",
|
64
|
-
"releases_url": "https://api.github.com/repos/geraldb/austria/releases{/id}",
|
65
|
-
"created_at": "2015-03-31T15:16:05Z",
|
66
|
-
"updated_at": "2015-03-31T21:03:02Z",
|
67
|
-
"pushed_at": "2015-03-31T21:03:02Z",
|
68
|
-
"git_url": "git://github.com/geraldb/austria.git",
|
69
|
-
"ssh_url": "git@github.com:geraldb/austria.git",
|
70
|
-
"clone_url": "https://github.com/geraldb/austria.git",
|
71
|
-
"svn_url": "https://github.com/geraldb/austria",
|
72
|
-
"homepage": null,
|
73
|
-
"size": 552,
|
74
|
-
"stargazers_count": 1,
|
75
|
-
"watchers_count": 1,
|
76
|
-
"language": "Ruby",
|
77
|
-
"has_issues": true,
|
78
|
-
"has_downloads": true,
|
79
|
-
"has_wiki": false,
|
80
|
-
"has_pages": false,
|
81
|
-
"forks_count": 0,
|
82
|
-
"mirror_url": null,
|
83
|
-
"open_issues_count": 0,
|
84
|
-
"forks": 0,
|
85
|
-
"open_issues": 0,
|
86
|
-
"watchers": 1,
|
87
|
-
"default_branch": "master"
|
88
|
-
},
|
89
|
-
{
|
90
|
-
"id": 31158327,
|
91
|
-
"name": "auto",
|
92
|
-
"full_name": "geraldb/auto",
|
93
|
-
"owner": {
|
94
|
-
"login": "geraldb",
|
95
|
-
"id": 53281,
|
96
|
-
"avatar_url": "https://avatars.githubusercontent.com/u/53281?v=3",
|
97
|
-
"gravatar_id": "",
|
98
|
-
"url": "https://api.github.com/users/geraldb",
|
99
|
-
"html_url": "https://github.com/geraldb",
|
100
|
-
"followers_url": "https://api.github.com/users/geraldb/followers",
|
101
|
-
"following_url": "https://api.github.com/users/geraldb/following{/other_user}",
|
102
|
-
"gists_url": "https://api.github.com/users/geraldb/gists{/gist_id}",
|
103
|
-
"starred_url": "https://api.github.com/users/geraldb/starred{/owner}{/repo}",
|
104
|
-
"subscriptions_url": "https://api.github.com/users/geraldb/subscriptions",
|
105
|
-
"organizations_url": "https://api.github.com/users/geraldb/orgs",
|
106
|
-
"repos_url": "https://api.github.com/users/geraldb/repos",
|
107
|
-
"events_url": "https://api.github.com/users/geraldb/events{/privacy}",
|
108
|
-
"received_events_url": "https://api.github.com/users/geraldb/received_events",
|
109
|
-
"type": "User",
|
110
|
-
"site_admin": false
|
111
|
-
},
|
112
|
-
"private": false,
|
113
|
-
"html_url": "https://github.com/geraldb/auto",
|
114
|
-
"description": "auto - scripts to automate building databases, books, etc.",
|
115
|
-
"fork": false,
|
116
|
-
"url": "https://api.github.com/repos/geraldb/auto",
|
117
|
-
"forks_url": "https://api.github.com/repos/geraldb/auto/forks",
|
118
|
-
"keys_url": "https://api.github.com/repos/geraldb/auto/keys{/key_id}",
|
119
|
-
"collaborators_url": "https://api.github.com/repos/geraldb/auto/collaborators{/collaborator}",
|
120
|
-
"teams_url": "https://api.github.com/repos/geraldb/auto/teams",
|
121
|
-
"hooks_url": "https://api.github.com/repos/geraldb/auto/hooks",
|
122
|
-
"issue_events_url": "https://api.github.com/repos/geraldb/auto/issues/events{/number}",
|
123
|
-
"events_url": "https://api.github.com/repos/geraldb/auto/events",
|
124
|
-
"assignees_url": "https://api.github.com/repos/geraldb/auto/assignees{/user}",
|
125
|
-
"branches_url": "https://api.github.com/repos/geraldb/auto/branches{/branch}",
|
126
|
-
"tags_url": "https://api.github.com/repos/geraldb/auto/tags",
|
127
|
-
"blobs_url": "https://api.github.com/repos/geraldb/auto/git/blobs{/sha}",
|
128
|
-
"git_tags_url": "https://api.github.com/repos/geraldb/auto/git/tags{/sha}",
|
129
|
-
"git_refs_url": "https://api.github.com/repos/geraldb/auto/git/refs{/sha}",
|
130
|
-
"trees_url": "https://api.github.com/repos/geraldb/auto/git/trees{/sha}",
|
131
|
-
"statuses_url": "https://api.github.com/repos/geraldb/auto/statuses/{sha}",
|
132
|
-
"languages_url": "https://api.github.com/repos/geraldb/auto/languages",
|
133
|
-
"stargazers_url": "https://api.github.com/repos/geraldb/auto/stargazers",
|
134
|
-
"contributors_url": "https://api.github.com/repos/geraldb/auto/contributors",
|
135
|
-
"subscribers_url": "https://api.github.com/repos/geraldb/auto/subscribers",
|
136
|
-
"subscription_url": "https://api.github.com/repos/geraldb/auto/subscription",
|
137
|
-
"commits_url": "https://api.github.com/repos/geraldb/auto/commits{/sha}",
|
138
|
-
"git_commits_url": "https://api.github.com/repos/geraldb/auto/git/commits{/sha}",
|
139
|
-
"comments_url": "https://api.github.com/repos/geraldb/auto/comments{/number}",
|
140
|
-
"issue_comment_url": "https://api.github.com/repos/geraldb/auto/issues/comments{/number}",
|
141
|
-
"contents_url": "https://api.github.com/repos/geraldb/auto/contents/{+path}",
|
142
|
-
"compare_url": "https://api.github.com/repos/geraldb/auto/compare/{base}...{head}",
|
143
|
-
"merges_url": "https://api.github.com/repos/geraldb/auto/merges",
|
144
|
-
"archive_url": "https://api.github.com/repos/geraldb/auto/{archive_format}{/ref}",
|
145
|
-
"downloads_url": "https://api.github.com/repos/geraldb/auto/downloads",
|
146
|
-
"issues_url": "https://api.github.com/repos/geraldb/auto/issues{/number}",
|
147
|
-
"pulls_url": "https://api.github.com/repos/geraldb/auto/pulls{/number}",
|
148
|
-
"milestones_url": "https://api.github.com/repos/geraldb/auto/milestones{/number}",
|
149
|
-
"notifications_url": "https://api.github.com/repos/geraldb/auto/notifications{?since,all,participating}",
|
150
|
-
"labels_url": "https://api.github.com/repos/geraldb/auto/labels{/name}",
|
151
|
-
"releases_url": "https://api.github.com/repos/geraldb/auto/releases{/id}",
|
152
|
-
"created_at": "2015-02-22T09:27:17Z",
|
153
|
-
"updated_at": "2015-04-06T14:16:32Z",
|
154
|
-
"pushed_at": "2015-04-06T14:16:32Z",
|
155
|
-
"git_url": "git://github.com/geraldb/auto.git",
|
156
|
-
"ssh_url": "git@github.com:geraldb/auto.git",
|
157
|
-
"clone_url": "https://github.com/geraldb/auto.git",
|
158
|
-
"svn_url": "https://github.com/geraldb/auto",
|
159
|
-
"homepage": null,
|
160
|
-
"size": 288,
|
161
|
-
"stargazers_count": 1,
|
162
|
-
"watchers_count": 1,
|
163
|
-
"language": "Ruby",
|
164
|
-
"has_issues": true,
|
165
|
-
"has_downloads": true,
|
166
|
-
"has_wiki": false,
|
167
|
-
"has_pages": false,
|
168
|
-
"forks_count": 0,
|
169
|
-
"mirror_url": null,
|
170
|
-
"open_issues_count": 0,
|
171
|
-
"forks": 0,
|
172
|
-
"open_issues": 0,
|
173
|
-
"watchers": 1,
|
174
|
-
"default_branch": "master"
|
175
|
-
},
|
176
|
-
{
|
177
|
-
"id": 33404369,
|
178
|
-
"name": "backup",
|
179
|
-
"full_name": "geraldb/backup",
|
180
|
-
"owner": {
|
181
|
-
"login": "geraldb",
|
182
|
-
"id": 53281,
|
183
|
-
"avatar_url": "https://avatars.githubusercontent.com/u/53281?v=3",
|
184
|
-
"gravatar_id": "",
|
185
|
-
"url": "https://api.github.com/users/geraldb",
|
186
|
-
"html_url": "https://github.com/geraldb",
|
187
|
-
"followers_url": "https://api.github.com/users/geraldb/followers",
|
188
|
-
"following_url": "https://api.github.com/users/geraldb/following{/other_user}",
|
189
|
-
"gists_url": "https://api.github.com/users/geraldb/gists{/gist_id}",
|
190
|
-
"starred_url": "https://api.github.com/users/geraldb/starred{/owner}{/repo}",
|
191
|
-
"subscriptions_url": "https://api.github.com/users/geraldb/subscriptions",
|
192
|
-
"organizations_url": "https://api.github.com/users/geraldb/orgs",
|
193
|
-
"repos_url": "https://api.github.com/users/geraldb/repos",
|
194
|
-
"events_url": "https://api.github.com/users/geraldb/events{/privacy}",
|
195
|
-
"received_events_url": "https://api.github.com/users/geraldb/received_events",
|
196
|
-
"type": "User",
|
197
|
-
"site_admin": false
|
198
|
-
},
|
199
|
-
"private": false,
|
200
|
-
"html_url": "https://github.com/geraldb/backup",
|
201
|
-
"description": "backup - scripts to backup repos, etc.",
|
202
|
-
"fork": false,
|
203
|
-
"url": "https://api.github.com/repos/geraldb/backup",
|
204
|
-
"forks_url": "https://api.github.com/repos/geraldb/backup/forks",
|
205
|
-
"keys_url": "https://api.github.com/repos/geraldb/backup/keys{/key_id}",
|
206
|
-
"collaborators_url": "https://api.github.com/repos/geraldb/backup/collaborators{/collaborator}",
|
207
|
-
"teams_url": "https://api.github.com/repos/geraldb/backup/teams",
|
208
|
-
"hooks_url": "https://api.github.com/repos/geraldb/backup/hooks",
|
209
|
-
"issue_events_url": "https://api.github.com/repos/geraldb/backup/issues/events{/number}",
|
210
|
-
"events_url": "https://api.github.com/repos/geraldb/backup/events",
|
211
|
-
"assignees_url": "https://api.github.com/repos/geraldb/backup/assignees{/user}",
|
212
|
-
"branches_url": "https://api.github.com/repos/geraldb/backup/branches{/branch}",
|
213
|
-
"tags_url": "https://api.github.com/repos/geraldb/backup/tags",
|
214
|
-
"blobs_url": "https://api.github.com/repos/geraldb/backup/git/blobs{/sha}",
|
215
|
-
"git_tags_url": "https://api.github.com/repos/geraldb/backup/git/tags{/sha}",
|
216
|
-
"git_refs_url": "https://api.github.com/repos/geraldb/backup/git/refs{/sha}",
|
217
|
-
"trees_url": "https://api.github.com/repos/geraldb/backup/git/trees{/sha}",
|
218
|
-
"statuses_url": "https://api.github.com/repos/geraldb/backup/statuses/{sha}",
|
219
|
-
"languages_url": "https://api.github.com/repos/geraldb/backup/languages",
|
220
|
-
"stargazers_url": "https://api.github.com/repos/geraldb/backup/stargazers",
|
221
|
-
"contributors_url": "https://api.github.com/repos/geraldb/backup/contributors",
|
222
|
-
"subscribers_url": "https://api.github.com/repos/geraldb/backup/subscribers",
|
223
|
-
"subscription_url": "https://api.github.com/repos/geraldb/backup/subscription",
|
224
|
-
"commits_url": "https://api.github.com/repos/geraldb/backup/commits{/sha}",
|
225
|
-
"git_commits_url": "https://api.github.com/repos/geraldb/backup/git/commits{/sha}",
|
226
|
-
"comments_url": "https://api.github.com/repos/geraldb/backup/comments{/number}",
|
227
|
-
"issue_comment_url": "https://api.github.com/repos/geraldb/backup/issues/comments{/number}",
|
228
|
-
"contents_url": "https://api.github.com/repos/geraldb/backup/contents/{+path}",
|
229
|
-
"compare_url": "https://api.github.com/repos/geraldb/backup/compare/{base}...{head}",
|
230
|
-
"merges_url": "https://api.github.com/repos/geraldb/backup/merges",
|
231
|
-
"archive_url": "https://api.github.com/repos/geraldb/backup/{archive_format}{/ref}",
|
232
|
-
"downloads_url": "https://api.github.com/repos/geraldb/backup/downloads",
|
233
|
-
"issues_url": "https://api.github.com/repos/geraldb/backup/issues{/number}",
|
234
|
-
"pulls_url": "https://api.github.com/repos/geraldb/backup/pulls{/number}",
|
235
|
-
"milestones_url": "https://api.github.com/repos/geraldb/backup/milestones{/number}",
|
236
|
-
"notifications_url": "https://api.github.com/repos/geraldb/backup/notifications{?since,all,participating}",
|
237
|
-
"labels_url": "https://api.github.com/repos/geraldb/backup/labels{/name}",
|
238
|
-
"releases_url": "https://api.github.com/repos/geraldb/backup/releases{/id}",
|
239
|
-
"created_at": "2015-04-04T12:14:24Z",
|
240
|
-
"updated_at": "2015-06-28T11:55:10Z",
|
241
|
-
"pushed_at": "2015-11-10T08:58:28Z",
|
242
|
-
"git_url": "git://github.com/geraldb/backup.git",
|
243
|
-
"ssh_url": "git@github.com:geraldb/backup.git",
|
244
|
-
"clone_url": "https://github.com/geraldb/backup.git",
|
245
|
-
"svn_url": "https://github.com/geraldb/backup",
|
246
|
-
"homepage": null,
|
247
|
-
"size": 184,
|
248
|
-
"stargazers_count": 1,
|
249
|
-
"watchers_count": 1,
|
250
|
-
"language": "Ruby",
|
251
|
-
"has_issues": true,
|
252
|
-
"has_downloads": true,
|
253
|
-
"has_wiki": true,
|
254
|
-
"has_pages": false,
|
255
|
-
"forks_count": 0,
|
256
|
-
"mirror_url": null,
|
257
|
-
"open_issues_count": 0,
|
258
|
-
"forks": 0,
|
259
|
-
"open_issues": 0,
|
260
|
-
"watchers": 1,
|
261
|
-
"default_branch": "master"
|
262
|
-
}
|
263
|
-
]
|
data/test/test_cache.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
###
|
2
|
-
# to run use
|
3
|
-
# ruby -I ./lib -I ./test test/test_cache.rb
|
4
|
-
|
5
|
-
|
6
|
-
require 'helper'
|
7
|
-
|
8
|
-
|
9
|
-
class TestCache < MiniTest::Test
|
10
|
-
|
11
|
-
def setup
|
12
|
-
@cache = Hubba::Cache.new( "#{Hubba.root}/test/cache" )
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_basename
|
16
|
-
mappings = [['/users/geraldb', 'users~geraldb'],
|
17
|
-
['/users/geraldb/repos', 'users~geraldb~repos'],
|
18
|
-
['/users/geraldb/repos?per_page=100', 'users~geraldb~repos'],
|
19
|
-
['/users/geraldb/orgs', 'users~geraldb~orgs'],
|
20
|
-
['/users/geraldb/orgs?per_page=100', 'users~geraldb~orgs'],
|
21
|
-
['/orgs/wikiscript/repos', 'orgs~wikiscript~repos'],
|
22
|
-
['/orgs/planetjekyll/repos', 'orgs~planetjekyll~repos'],
|
23
|
-
['/orgs/vienna-rb/repos', 'orgs~vienna-rb~repos']]
|
24
|
-
|
25
|
-
mappings.each do |mapping|
|
26
|
-
assert_equal mapping[1], @cache.request_uri_to_basename( mapping[0] )
|
27
|
-
end
|
28
|
-
end # method test_basename
|
29
|
-
|
30
|
-
def test_cache
|
31
|
-
orgs = @cache.get( '/users/geraldb/orgs' )
|
32
|
-
assert_equal 4, orgs.size
|
33
|
-
|
34
|
-
repos = @cache.get( '/users/geraldb/repos' )
|
35
|
-
assert_equal 3, repos.size
|
36
|
-
end # method test_cache
|
37
|
-
|
38
|
-
def test_cache_miss
|
39
|
-
assert_nil @cache.get( '/test/hello' )
|
40
|
-
assert_nil @cache.get( '/test/hola' )
|
41
|
-
end # method test_cache_miss
|
42
|
-
|
43
|
-
end # class TestCache
|