hubba 0.1.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4a82adab1dd587bb3d9604b7ca60737747fe22f9
4
- data.tar.gz: 637d4e8a7714b3a6868e070cd064ed7a9f27d233
3
+ metadata.gz: 483d4813ac93c23eaf300404342fb8883712449a
4
+ data.tar.gz: 897633ce5908ead11844d5421dd495e087440747
5
5
  SHA512:
6
- metadata.gz: 2cef2397c74486671a6ac559e5ebe89dfe7d98efefe025c5f68694cbaa8809de279efe6bbc3aa7388426b01c198aea81214147a1f3d568ac8652d730a041e75f
7
- data.tar.gz: d5b460db26d282e941292bc7c1d030a7ee9b3d98502a39f12f659517a744f55913c85f7dc5b093d9494e7124ff7ba0ba17e9406805ccfab0a8ec82c55dc9be33
6
+ metadata.gz: e33ee3954c0a131e05cd3ca92c0359be2b27cafa59541ad2e76a6338ef64b35e618b74c5b335177f77ffddf85604f6be4fc72d314ab39293e66e901eedd8ab81
7
+ data.tar.gz: d4a32cd4fd90fb3d7da117f7a25b04cfb13dc5a0049134255edcbc53753604af4a5916ba7223ef86454c1b8331a03f7b2b4f753907ea3ea6ddcd41379c796d93
@@ -6,9 +6,11 @@ lib/hubba.rb
6
6
  lib/hubba/cache.rb
7
7
  lib/hubba/client.rb
8
8
  lib/hubba/github.rb
9
+ lib/hubba/stats.rb
9
10
  lib/hubba/version.rb
10
11
  test/cache/users~geraldb~orgs.json
11
12
  test/cache/users~geraldb~repos.json
12
13
  test/helper.rb
13
14
  test/test_cache.rb
14
15
  test/test_config.rb
16
+ test/test_stats.rb
@@ -7,6 +7,7 @@ require 'uri'
7
7
  require 'pp'
8
8
  require 'json'
9
9
  require 'yaml'
10
+ require 'time'
10
11
 
11
12
 
12
13
  # 3rd party gems/libs
@@ -17,6 +18,7 @@ require 'hubba/version' # note: let version always go first
17
18
  require 'hubba/cache'
18
19
  require 'hubba/client'
19
20
  require 'hubba/github'
21
+ require 'hubba/stats'
20
22
 
21
23
 
22
24
  # say hello
@@ -104,6 +104,16 @@ def org_repos( name )
104
104
  end
105
105
 
106
106
 
107
+
108
+ def repo( full_name ) ## full_name (handle) e.g. henrythemes/jekyll-starter-theme
109
+ Resource.new( get "/repos/#{full_name}" )
110
+ end
111
+
112
+ def repo_commits( full_name )
113
+ Resource.new( get "/repos/#{full_name}/commits" )
114
+ end
115
+
116
+
107
117
  private
108
118
  def get( request_uri )
109
119
  if offline?
@@ -0,0 +1,113 @@
1
+ # encoding: utf-8
2
+
3
+ module Hubba
4
+
5
+ ####
6
+ # keep track of repo stats over time (with history hash)
7
+
8
+ class Stats ## todo/check: rename to GithubRepoStats or RepoStats - why? why not?
9
+
10
+ attr_reader :data
11
+
12
+ def initialize( full_name )
13
+ @data = {}
14
+ @data['full_name'] = full_name # e.g. poole/hyde etc.
15
+ end
16
+
17
+ def full_name() @data['full_name']; end
18
+
19
+
20
+ def size
21
+ # size of repo in kb (as reported by github api)
22
+ @data['size'] || 0 ## return 0 if not found - why? why not? (return nil - why? why not??)
23
+ end
24
+
25
+ def stars
26
+ ## return last stargazers_count entry (as number; 0 if not found)
27
+ t1 = 0
28
+
29
+ history = @data['history']
30
+ if history
31
+ history_keys = @data['history'].keys.sort.reverse
32
+ ## todo/fix: for now assumes one entry per week
33
+ ## simple case [0] and [1] for a week later
34
+ ## check actual date - why? why not?
35
+ stats_t1 = history_keys[0] ? history[ history_keys[0] ] : nil
36
+ if stats_t1
37
+ t1 = stats_t1['stargazers_count'] || 0
38
+ end
39
+ end
40
+ t1
41
+ end # method stars
42
+
43
+
44
+
45
+ ###############################
46
+ ## fetch / read / write methods
47
+
48
+ def fetch( gh ) ## update stats / fetch data from github via api
49
+ puts "fetching #{full_name}..."
50
+ repo = gh.repo( full_name )
51
+
52
+ ## e.g. 2015-05-11T20:21:43Z
53
+ ## puts Time.iso8601( repo.data['created_at'] )
54
+ @data['created_at'] = repo.data['created_at']
55
+ @data['size'] = repo.data['size'] # size in kb (kilobyte)
56
+
57
+ rec = {}
58
+
59
+ puts "stargazers_count"
60
+ puts repo.data['stargazers_count']
61
+ rec['stargazers_count'] = repo.data['stargazers_count']
62
+
63
+ today = Date.today.strftime( '%Y-%m-%d' ) ## e.g. 2016-09-27
64
+ puts "add record #{today} to history..."
65
+ pp rec # check if stargazers_count is a number (NOT a string)
66
+
67
+ @data[ 'history' ] ||= {}
68
+ @data[ 'history' ][ today ] = rec
69
+
70
+ ##########################
71
+ ## also check / keep track of (latest) commit
72
+ commits = gh.repo_commits( full_name )
73
+ puts "last commit/update:"
74
+ ## pp commits
75
+ commit = {
76
+ 'committer' => {
77
+ 'date' => commits.data[0]['commit']['committer']['date'],
78
+ 'name' => commits.data[0]['commit']['committer']['name']
79
+ },
80
+ 'message' => commits.data[0]['commit']['message']
81
+ }
82
+
83
+ ## for now store only the latest commit (e.g. a single commit in an array)
84
+ @data[ 'commits'] = [commit]
85
+
86
+ pp @data
87
+ end
88
+
89
+ def write( data_dir: './data' )
90
+ basename = full_name.gsub( '/', '~' ) ## e.g. poole/hyde become poole~hyde
91
+ puts "writing (saving) to #{basename}..."
92
+ File.open( "#{data_dir}/#{basename}.json", 'w:utf-8' ) do |f|
93
+ f.write JSON.pretty_generate( data )
94
+ end
95
+ end
96
+
97
+ def read( data_dir: './data' ) ## note: use read instead of load (load is kind of keyword for loading code)
98
+ ## note: skip reading if file not present
99
+ basename = full_name.gsub( '/', '~' ) ## e.g. poole/hyde become poole~hyde
100
+ filename = "#{data_dir}/#{basename}.json"
101
+ if File.exist?( filename )
102
+ puts "reading (loading) from #{basename}..."
103
+ json = File.open( filename, 'r:utf-8' ) { |file| file.read } ## todo/fix: use read_utf8
104
+ @data = JSON.parse( json )
105
+ else
106
+ puts "skipping reading (loading) from #{basename} -- file not found"
107
+ end
108
+ end
109
+
110
+ end # class Stats
111
+
112
+
113
+ end # module Hubba
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Hubba
4
4
  MAJOR = 0 ## todo: namespace inside version or something - why? why not??
5
- MINOR = 1
6
- PATCH = 2
5
+ MINOR = 2
6
+ PATCH = 0
7
7
  VERSION = [MAJOR,MINOR,PATCH].join('.')
8
8
 
9
9
  def self.version
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_stats.rb
6
+
7
+
8
+ require 'helper'
9
+
10
+
11
+ class TestStats < MiniTest::Test
12
+
13
+ def setup
14
+ @gh = Hubba::Github.new( cache_dir: "#{Hubba.root}/test/cache" )
15
+ end
16
+
17
+ def test_stats
18
+ repos = [
19
+ 'henrythemes/jekyll-starter-theme',
20
+ 'poole/hyde',
21
+ 'jekyll/minima'
22
+ ]
23
+
24
+ repos.each do |repo|
25
+ stats = Hubba::Stats.new( repo )
26
+ stats.read( data_dir: './tmp' )
27
+
28
+ puts "stars before fetch: #{stats.stars}"
29
+ puts "size before fetch: #{stats.size} kb"
30
+ stats.fetch( @gh )
31
+ puts "stars after fetch: #{stats.stars}"
32
+ puts "size after fetch: #{stats.size} kb"
33
+
34
+ stats.write( data_dir: './tmp' )
35
+ end
36
+
37
+ assert true # for now everything ok if we get here
38
+ end
39
+
40
+ end # class TestStats
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.1.2
4
+ version: 0.2.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: 2016-08-17 00:00:00.000000000 Z
11
+ date: 2017-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logutils
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.14'
47
+ version: '3.15'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.14'
54
+ version: '3.15'
55
55
  description: hubba - (yet) another (lite) GitHub HTTP API client / library
56
56
  email: ruby-talk@ruby-lang.org
57
57
  executables: []
@@ -69,12 +69,14 @@ files:
69
69
  - lib/hubba/cache.rb
70
70
  - lib/hubba/client.rb
71
71
  - lib/hubba/github.rb
72
+ - lib/hubba/stats.rb
72
73
  - lib/hubba/version.rb
73
74
  - test/cache/users~geraldb~orgs.json
74
75
  - test/cache/users~geraldb~repos.json
75
76
  - test/helper.rb
76
77
  - test/test_cache.rb
77
78
  - test/test_config.rb
79
+ - test/test_stats.rb
78
80
  homepage: https://github.com/rubylibs/hubba
79
81
  licenses:
80
82
  - Public Domain
@@ -97,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
99
  version: '0'
98
100
  requirements: []
99
101
  rubyforge_project:
100
- rubygems_version: 2.2.3
102
+ rubygems_version: 2.6.7
101
103
  signing_key:
102
104
  specification_version: 4
103
105
  summary: hubba - (yet) another (lite) GitHub HTTP API client / library