Class: Hubba::Stats
- Inherits:
-
Object
- Object
- Hubba::Stats
- Defined in:
- lib/hubba/reports/stats.rb
Overview
keep track of repo stats over time (with history hash)
Defined Under Namespace
Classes: HistoryItem
Instance Method Summary collapse
- #build_history(timeseries) ⇒ Object
- #calc_diff_stars(samples: 3, days: 30) ⇒ Object
-
#commits ⇒ Object
commits.
-
#committed ⇒ Object
last commit date (from author NOT committer).
-
#committed_at ⇒ Object
last commit date (from author NOT committer).
-
#created ⇒ Object
date (only) versions.
-
#created_at ⇒ Object
note: return datetime objects (NOT strings); if not present/available return nil/null.
-
#description ⇒ Object
(also: #descr, #desc)
todo/check: return nil if not found - why? why not?.
-
#full_name ⇒ Object
attr_reader :data - needed - why? why not?.
- #history ⇒ Object
-
#history_str ⇒ Object
todo/check: rename/change to format_history or fmt_history - why? why not?.
-
#languages ⇒ Object
todo/check: return nil if not found - why? why not?.
-
#last_commit ⇒ Object
convenience shortcut; get first/last commit (use [0]) or nil.
- #last_commit_author_date ⇒ Object
-
#last_commit_message ⇒ Object
convenience shortcut; last commit message.
- #parse_date(str) ⇒ Object
-
#parse_datetime(str) ⇒ Object
helpers.
- #pushed ⇒ Object
- #pushed_at ⇒ Object
- #size ⇒ Object
- #stars ⇒ Object
-
#topics ⇒ Object
todo/check: return nil if not found - why? why not?.
-
#traffic ⇒ Object
traffic.
- #updated ⇒ Object
- #updated_at ⇒ Object
Instance Method Details
#build_history(timeseries) ⇒ Object
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/hubba/reports/stats.rb', line 145 def build_history( timeseries ) items = [] keys = timeseries.keys.sort.reverse ## newest (latest) items first keys.each do |key| h = timeseries[ key ] item = HistoryItem.new( date: Date.strptime( key, '%Y-%m-%d' ), stars: h['stargazers_count'] || 0, forks: h['forks_count'] || 0 ) ## link items last_item = items[-1] last_item.append( item ) if last_item ## if not nil? append (note first item has no prev item) items << item end ## todo/check: return [] for empty items array (items.empty?) - why?? why not?? if items.empty? nil else items end end |
#calc_diff_stars(samples: 3, days: 30) ⇒ Object
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'lib/hubba/reports/stats.rb', line 174 def calc_diff_stars( samples: 3, days: 30 ) ## samples: use n history item samples e.g. 3 samples ## days e.g. 7 days (per week), 30 days (per month) if history.nil? nil ## todo/check: return 0.0 too - why? why not? elsif history.size == 1 ## just one item; CANNOT calc diff; return zero 0.0 else idx = [history.size, samples].min ## calc last index last = history[idx-1] first = history[0] diff_days = first.date.jd - last.date.jd diff_stars = first.stars - last.stars ## note: use factor 1000 for fixed integer division ## converts to float at the end ## todo: check for better way (convert to float upfront - why? why not?) diff = (diff_stars * days * 1000) / diff_days ## puts "diff=#{diff}:#{diff.class.name}" ## check if it's a float (diff.to_f/1000.0) end end |
#commits ⇒ Object
commits
57 |
# File 'lib/hubba/reports/stats.rb', line 57 def commits() @data['commits']; end |
#committed ⇒ Object
last commit date (from author NOT committer)
68 69 70 |
# File 'lib/hubba/reports/stats.rb', line 68 def committed ## last commit date (from author NOT committer) @cache['committed'] ||= parse_date( ) end |
#committed_at ⇒ Object
last commit date (from author NOT committer)
72 73 74 |
# File 'lib/hubba/reports/stats.rb', line 72 def committed_at() ## last commit date (from author NOT committer) @cache['committed_at'] ||= parse_datetime( ) end |
#created ⇒ Object
date (only) versions
24 |
# File 'lib/hubba/reports/stats.rb', line 24 def created() @cache['created'] ||= parse_date( @data['created_at'] ); end |
#created_at ⇒ Object
note: return datetime objects (NOT strings); if not present/available return nil/null
19 |
# File 'lib/hubba/reports/stats.rb', line 19 def created_at() @cache['created_at'] ||= parse_datetime( @data['created_at'] ); end |
#description ⇒ Object Also known as: descr, desc
todo/check: return nil if not found - why? why not?
11 |
# File 'lib/hubba/reports/stats.rb', line 11 def description() @data['description'] || ''; end |
#full_name ⇒ Object
attr_reader :data - needed - why? why not?
10 |
# File 'lib/hubba/reports/stats.rb', line 10 def full_name() @data['full_name']; end |
#history ⇒ Object
34 35 36 37 38 39 40 41 42 |
# File 'lib/hubba/reports/stats.rb', line 34 def history @cache['history'] ||= begin if @data['history'] build_history( @data['history'] ) else nil end end end |
#history_str ⇒ Object
todo/check: rename/change to format_history or fmt_history - why? why not?
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 |
# File 'lib/hubba/reports/stats.rb', line 203 def history_str ## todo/check: rename/change to format_history or fmt_history - why? why not? ## returns "pretty printed" history as string buffer buf = '' buf << "[#{history.size}]: " history.each do |item| buf << "#{item.stars}" diff_stars = item.diff_stars diff_days = item.diff_days if diff_stars && diff_days ## note: last item has no diffs if diff_stars > 0 || diff_stars < 0 if diff_stars > 0 buf << " (+#{diff_stars}" else buf << " (#{diff_stars}" end buf << " in #{diff_days}d) " else ## diff_stars == 0 buf << " (#{diff_days}d) " end end end buf end |
#languages ⇒ Object
todo/check: return nil if not found - why? why not?
16 |
# File 'lib/hubba/reports/stats.rb', line 16 def languages() @data['languages'] || {}; end |
#last_commit ⇒ Object
convenience shortcut; get first/last commit (use [0]) or nil
59 60 61 62 63 64 65 |
# File 'lib/hubba/reports/stats.rb', line 59 def last_commit ## convenience shortcut; get first/last commit (use [0]) or nil if @data['commits'] && @data['commits'][0] @data['commits'][0] else nil end end |
#last_commit_author_date ⇒ Object
76 77 78 79 |
# File 'lib/hubba/reports/stats.rb', line 76 def h = last_commit h ? h['author']['date'] : nil end |
#last_commit_message ⇒ Object
convenience shortcut; last commit message
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/hubba/reports/stats.rb', line 82 def ## convenience shortcut; last commit message h = last_commit committer_name = h['committer']['name'] = h['author']['name'] = h['message'] buf = "" buf << buf << " by #{}" if committer_name != buf << " w/ #{committer_name}" end end |
#parse_date(str) ⇒ Object
103 |
# File 'lib/hubba/reports/stats.rb', line 103 def parse_date( str ) str ? Date.strptime( str, '%Y-%m-%d') : nil; end |
#parse_datetime(str) ⇒ Object
helpers
102 |
# File 'lib/hubba/reports/stats.rb', line 102 def parse_datetime( str ) str ? DateTime.strptime( str, '%Y-%m-%dT%H:%M:%S') : nil; end |
#pushed ⇒ Object
26 |
# File 'lib/hubba/reports/stats.rb', line 26 def pushed() @cache['pushed'] ||= parse_date( @data['pushed_at'] ); end |
#pushed_at ⇒ Object
21 |
# File 'lib/hubba/reports/stats.rb', line 21 def pushed_at() @cache['pushed_at'] ||= parse_datetime( @data['pushed_at'] ); end |
#size ⇒ Object
28 29 30 31 |
# File 'lib/hubba/reports/stats.rb', line 28 def size # size of repo in kb (as reported by github api) @data['size'] || 0 ## return 0 if not found - why? why not? (return nil - why? why not??) end |
#stars ⇒ Object
45 46 47 48 |
# File 'lib/hubba/reports/stats.rb', line 45 def stars ## return last stargazers_count entry (as number; 0 if not found) @cache['stars'] ||= history ? history[0].stars : 0 end |
#topics ⇒ Object
todo/check: return nil if not found - why? why not?
15 |
# File 'lib/hubba/reports/stats.rb', line 15 def topics() @data['topics'] || []; end |
#traffic ⇒ Object
traffic
52 |
# File 'lib/hubba/reports/stats.rb', line 52 def traffic() @data['traffic']; end |
#updated ⇒ Object
25 |
# File 'lib/hubba/reports/stats.rb', line 25 def updated() @cache['updated'] ||= parse_date( @data['updated_at'] ); end |
#updated_at ⇒ Object
20 |
# File 'lib/hubba/reports/stats.rb', line 20 def updated_at() @cache['updated_at'] ||= parse_datetime( @data['updated_at'] ); end |