githubstats 0.1.7 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +7 -3
- data/README.md +1 -1
- data/bin/githubstats +8 -10
- data/githubstats.gemspec +3 -2
- data/lib/githubstats.rb +48 -183
- data/lib/githubstats/data.rb +163 -0
- data/spec/examples/akerl.user +1 -0
- data/spec/examples/fly.user +1 -0
- data/spec/examples/leematos.user +1 -0
- data/spec/examples/mikegrb.user +1 -0
- data/spec/examples/results +90 -0
- data/spec/examples/torvalds.user +1 -0
- data/spec/githubstats/data_spec.rb +122 -0
- data/spec/githubstats_spec.rb +64 -0
- data/vendor/cache/basiccache-0.0.25.gem +0 -0
- data/vendor/cache/docile-1.1.1.gem +0 -0
- data/vendor/cache/parser-2.1.0.pre2.gem +0 -0
- data/vendor/cache/timecop-0.6.3.gem +0 -0
- metadata +52 -4
- data/vendor/cache/docile-1.1.0.gem +0 -0
- data/vendor/cache/parser-2.1.0.pre1.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a41f496b849808b8b3914d30dfdcc9573aa874d4
|
4
|
+
data.tar.gz: 494012cdbff7ae1ca2fd03f0e8b6e67b395f7dd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b96e26ed60dd2774323870b0027c59a3801402b21653939f8fdb1c73081d1290c3291897b5a1ca790b16369a710d0319609ba05ee0c78ef8dbfbcbab9ea1d8bf
|
7
|
+
data.tar.gz: e22c680b4814cf2f6acf8b506df5af9c5372adaa1840647a55e0dcca31e644a46ce15a7bf2588a4c51f04747c104b9bc7b43dabd72506e3b070e20489c26c2f5
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
githubstats (0.
|
4
|
+
githubstats (0.2.3)
|
5
|
+
basiccache (< 2)
|
5
6
|
curb
|
6
7
|
json
|
7
8
|
|
@@ -9,6 +10,7 @@ GEM
|
|
9
10
|
remote: https://rubygems.org/
|
10
11
|
specs:
|
11
12
|
ast (1.1.0)
|
13
|
+
basiccache (0.0.25)
|
12
14
|
coveralls (0.7.0)
|
13
15
|
multi_json (~> 1.3)
|
14
16
|
rest-client
|
@@ -17,7 +19,7 @@ GEM
|
|
17
19
|
thor
|
18
20
|
curb (0.8.5)
|
19
21
|
diff-lcs (1.2.5)
|
20
|
-
docile (1.1.
|
22
|
+
docile (1.1.1)
|
21
23
|
fuubar (1.2.1)
|
22
24
|
rspec (~> 2.0)
|
23
25
|
rspec-instafail (~> 0.2.0)
|
@@ -26,7 +28,7 @@ GEM
|
|
26
28
|
json (1.8.1)
|
27
29
|
mime-types (2.0)
|
28
30
|
multi_json (1.8.2)
|
29
|
-
parser (2.1.0.
|
31
|
+
parser (2.1.0.pre2)
|
30
32
|
ast (~> 1.1)
|
31
33
|
slop (~> 3.4, >= 3.4.5)
|
32
34
|
powerpack (0.0.9)
|
@@ -57,6 +59,7 @@ GEM
|
|
57
59
|
term-ansicolor (1.2.2)
|
58
60
|
tins (~> 0.8)
|
59
61
|
thor (0.18.1)
|
62
|
+
timecop (0.6.3)
|
60
63
|
tins (0.13.1)
|
61
64
|
travis-lint (1.7.0)
|
62
65
|
hashr (~> 0.0.22)
|
@@ -72,4 +75,5 @@ DEPENDENCIES
|
|
72
75
|
rake
|
73
76
|
rspec
|
74
77
|
rubocop
|
78
|
+
timecop
|
75
79
|
travis-lint
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@ GithubStats
|
|
3
3
|
|
4
4
|
[![Gem Version](https://badge.fury.io/rb/githubstats.png)](http://badge.fury.io/rb/githubstats)
|
5
5
|
[![Dependency Status](https://gemnasium.com/akerl/githubstats.png)](https://gemnasium.com/akerl/githubstats)
|
6
|
-
[![Code Climate](https://codeclimate.com/github/akerl/
|
6
|
+
[![Code Climate](https://codeclimate.com/github/akerl/githubstats.png)](https://codeclimate.com/github/akerl/githubstats)
|
7
7
|
[![Coverage Status](https://coveralls.io/repos/akerl/githubstats/badge.png?branch=master)](https://coveralls.io/r/akerl/githubstats?branch=master)
|
8
8
|
[![Build Status](https://travis-ci.org/akerl/githubstats.png?branch=master)](https://travis-ci.org/akerl/githubstats)
|
9
9
|
|
data/bin/githubstats
CHANGED
@@ -2,16 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'githubstats'
|
4
4
|
|
5
|
-
|
5
|
+
user = GithubStats.new ARGV.first
|
6
6
|
|
7
|
-
puts "Contribution data for #{
|
8
|
-
Today's score: #{
|
9
|
-
Current streak: #{
|
10
|
-
Longest streak: #{
|
11
|
-
High score: #{
|
12
|
-
Quartile boundaries: #{
|
13
|
-
Github-adjusted boundaries: #{contrib.quartile_boundaries(github = true).inspect}"
|
7
|
+
puts "Contribution data for #{user.name}:
|
8
|
+
Today's score: #{user.today}
|
9
|
+
Current streak: #{user.streak.length}
|
10
|
+
Longest streak: #{user.longest_streak.length}
|
11
|
+
High score: #{user.max.score} on #{user.max.date}
|
12
|
+
Quartile boundaries: #{user.quartile_boundaries.inspect}"
|
14
13
|
|
15
14
|
# Uses https://github.com/holman/spark
|
16
|
-
system('spark', *
|
17
|
-
|
15
|
+
system('spark', *user.raw.pop(60).map { |point| point.score.to_s })
|
data/githubstats.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'githubstats'
|
3
|
-
s.version = '0.
|
3
|
+
s.version = '0.2.3'
|
4
4
|
s.date = Time.now.strftime("%Y-%m-%d")
|
5
5
|
|
6
6
|
s.summary = 'Present Github contributions stats in a consumable format'
|
@@ -16,7 +16,9 @@ Gem::Specification.new do |s|
|
|
16
16
|
|
17
17
|
s.add_runtime_dependency 'curb'
|
18
18
|
s.add_runtime_dependency 'json'
|
19
|
+
s.add_runtime_dependency 'basiccache', '< 2'
|
19
20
|
|
21
|
+
s.add_development_dependency 'timecop'
|
20
22
|
s.add_development_dependency 'rubocop'
|
21
23
|
s.add_development_dependency 'travis-lint'
|
22
24
|
s.add_development_dependency 'rake'
|
@@ -25,4 +27,3 @@ Gem::Specification.new do |s|
|
|
25
27
|
s.add_development_dependency 'fuubar'
|
26
28
|
s.add_development_dependency 'parser', '~> 2.1.0.pre1'
|
27
29
|
end
|
28
|
-
|
data/lib/githubstats.rb
CHANGED
@@ -1,241 +1,106 @@
|
|
1
1
|
require 'curb'
|
2
2
|
require 'json'
|
3
|
-
|
4
|
-
require 'version'
|
5
|
-
|
3
|
+
autoload :Rugged, 'rugged'
|
6
4
|
##
|
7
|
-
# Rugged is used
|
5
|
+
# Rugged is used if available to look up the user's Github username
|
8
6
|
|
9
7
|
begin
|
10
|
-
|
11
|
-
USING_RUGGED = true
|
8
|
+
RUGGED_USER = Rugged::Config.global['github.user']
|
12
9
|
rescue LoadError
|
13
|
-
|
10
|
+
RUGGED_USER = nil
|
14
11
|
end
|
15
12
|
|
16
13
|
##
|
17
|
-
#
|
18
|
-
|
19
|
-
begin
|
20
|
-
require 'basic_cache'
|
21
|
-
USING_CACHE = true
|
22
|
-
rescue LoadError
|
23
|
-
USING_CACHE = false
|
24
|
-
end
|
25
|
-
|
26
|
-
##
|
27
|
-
# This module provides a consumable object based on Github's contribution stats
|
14
|
+
# Definitions of user objects for GithubStats
|
28
15
|
|
29
16
|
module GithubStats
|
30
|
-
|
31
|
-
|
32
|
-
# Add .new() helper for creating a new Contributions object
|
17
|
+
##
|
18
|
+
# Helper method for creating new user objects
|
33
19
|
|
34
|
-
|
35
|
-
|
36
|
-
end
|
20
|
+
def self.new(*args)
|
21
|
+
self::User.new(*args)
|
37
22
|
end
|
38
23
|
|
39
24
|
##
|
40
|
-
#
|
25
|
+
# Default URL for grabbing data
|
41
26
|
|
42
|
-
|
27
|
+
DEFAULT_URL = 'https://github.com/users/%s/contributions_calendar_data'
|
43
28
|
|
44
29
|
##
|
45
|
-
#
|
46
|
-
|
47
|
-
class Contributions
|
48
|
-
attr_reader :user, :data, :last_updated
|
49
|
-
attr_accessor :url
|
30
|
+
# User object
|
50
31
|
|
51
|
-
|
32
|
+
class User
|
33
|
+
attr_reader :name, :url, :data, :last_updated
|
52
34
|
|
53
35
|
##
|
54
|
-
#
|
55
|
-
# Guesses the user if one is not supplied
|
56
|
-
# Automatically updates if not disabled
|
57
|
-
# Creates a new cache object
|
36
|
+
# Creates a new user object
|
58
37
|
|
59
38
|
def initialize(params = {})
|
60
|
-
|
61
|
-
@
|
62
|
-
@
|
39
|
+
params = { name: params } unless params.is_a? Hash
|
40
|
+
@name = params[:name] || guess_user
|
41
|
+
@url = (params[:url] || DEFAULT_URL) % @name
|
63
42
|
@last_updated = nil
|
64
|
-
@cache = USING_CACHE ? BasicCache.new : GithubStats::NullCache.new
|
65
|
-
update unless params[:skip_load]
|
66
43
|
end
|
67
44
|
|
68
45
|
##
|
69
46
|
# Print human-readable string about object
|
70
47
|
|
71
48
|
def to_s
|
72
|
-
"Contributions from #{@
|
49
|
+
"Contributions from #{@name}"
|
73
50
|
end
|
74
|
-
alias_method :
|
51
|
+
alias_method :inspect, :to_s
|
75
52
|
|
76
53
|
##
|
77
|
-
#
|
54
|
+
# Lazy loader for data
|
78
55
|
|
79
|
-
def
|
56
|
+
def data(reload = false)
|
57
|
+
load_data if reload == true || @last_updated.nil?
|
80
58
|
@data
|
81
59
|
end
|
82
60
|
|
83
61
|
##
|
84
|
-
#
|
85
|
-
|
86
|
-
def to_h
|
87
|
-
@data.reduce(Hash.new(0)) { |a, e| a.merge('e.date' => e.score) }
|
88
|
-
end
|
89
|
-
|
90
|
-
##
|
91
|
-
# Try to guess username
|
92
|
-
# Checks Rugged if available, then ENV['USER']
|
62
|
+
# Adjust respond_to? to properly respond with patched method_missing
|
93
63
|
|
94
|
-
def
|
95
|
-
|
96
|
-
|
97
|
-
names << ENV['USER']
|
98
|
-
names.reject! { |name| name.nil? }
|
99
|
-
names.length ? names.first : (fail 'Failed to guess username')
|
64
|
+
def respond_to?(method, include_private = false)
|
65
|
+
load_data if @last_updated.nil?
|
66
|
+
super || @data.respond_to?(method, include_private)
|
100
67
|
end
|
101
68
|
|
102
|
-
|
103
|
-
# Download new data
|
104
|
-
|
105
|
-
def download
|
106
|
-
JSON.parse Curl::Easy.perform(@url).body_str
|
107
|
-
rescue
|
108
|
-
raise 'Unable to load data from Github'
|
109
|
-
end
|
69
|
+
private
|
110
70
|
|
111
71
|
##
|
112
|
-
#
|
72
|
+
# Guesses the user's name based on system environment
|
113
73
|
|
114
|
-
def
|
115
|
-
|
116
|
-
|
117
|
-
|
74
|
+
def guess_user(names = [])
|
75
|
+
names << RUGGED_USER
|
76
|
+
names << ENV['USER']
|
77
|
+
names.find { |name| !name.nil? } || (fail 'Failed to guess username')
|
118
78
|
end
|
119
79
|
|
120
80
|
##
|
121
|
-
#
|
81
|
+
# Creates a new Data object from downloaded data
|
122
82
|
|
123
|
-
def
|
124
|
-
@data =
|
83
|
+
def load_data
|
84
|
+
@data = GithubStats::Data.new download
|
125
85
|
@last_updated = DateTime.now
|
126
|
-
@cache.clear
|
127
86
|
end
|
128
87
|
|
129
88
|
##
|
130
|
-
#
|
89
|
+
# Downloads new data from Github
|
131
90
|
|
132
|
-
def
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
##
|
137
|
-
# Return the current streak
|
138
|
-
|
139
|
-
def streak
|
140
|
-
@cache.cache do
|
141
|
-
streak = @data.reverse.drop(1).take_while { |point| point.score > 0 }
|
142
|
-
streak.reverse!
|
143
|
-
streak << @data.last unless @data.last.score.zero?
|
144
|
-
streak
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
##
|
149
|
-
# Return the longest streak
|
150
|
-
|
151
|
-
def longest_streak
|
152
|
-
@cache.cache do
|
153
|
-
all_streaks = @data.reduce(Array.new(1, [])) do |streaks, point|
|
154
|
-
point.score == 0 ? streaks << [] : streaks.last << point
|
155
|
-
streaks
|
156
|
-
end
|
157
|
-
all_streaks.max { |a, b| a.length <=> b.length }
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
##
|
162
|
-
# Return the highest score in the dataset
|
163
|
-
|
164
|
-
def max
|
165
|
-
@cache.cache { @data.max { |a, b| a.score <=> b.score } }
|
166
|
-
end
|
167
|
-
|
168
|
-
##
|
169
|
-
# Return the mean score in the dataset
|
170
|
-
|
171
|
-
def mean
|
172
|
-
@cache.cache do
|
173
|
-
@data.reduce(0) { |a, e| e.score.to_f + a } / @data.size
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
##
|
178
|
-
# Return the break-points between the quartiles
|
179
|
-
|
180
|
-
def quartile_boundaries
|
181
|
-
@cache.cache do
|
182
|
-
variance = gh_quartile_magic
|
183
|
-
data = @data.select { |x| (mean - x.score).abs / variance <= GH_MAGIC }
|
184
|
-
range = data.map { |p| p.score }.uniq.sort.select { |s| !s.zero? }
|
185
|
-
bounds = (1..3).map { |q| range[(q * range.length / 4) - 2] }
|
186
|
-
bounds.unshift(0).push(max.score)
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
##
|
191
|
-
# Return the quartiles
|
192
|
-
|
193
|
-
def quartiles
|
194
|
-
@cache.cache do
|
195
|
-
bounds = quartile_boundaries
|
196
|
-
@data.reduce(Array.new(5) { Array.new }) do |acc, point|
|
197
|
-
acc[bounds.find_index { |i| point.score <= i }] << point
|
198
|
-
acc
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
##
|
204
|
-
# Return which quartile a score is in
|
205
|
-
|
206
|
-
def quartile
|
207
|
-
bounds = quartile_boundaries
|
208
|
-
return nil if score > bounds.last || score < 0
|
209
|
-
bounds.count { |bound| score > bound }
|
210
|
-
end
|
211
|
-
|
212
|
-
##
|
213
|
-
# Return Github's magic value (Used for calculating quartiles)
|
214
|
-
|
215
|
-
def gh_quartile_magic
|
216
|
-
@cache.cache do
|
217
|
-
magic = @data.reduce(0) { |a, e| (e.score.to_f - mean)**2 + a }
|
218
|
-
Math.sqrt(magic / (@data.size - 1))
|
219
|
-
end
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
##
|
224
|
-
# The Null_Cache is used if Basic_Cache is not available
|
225
|
-
# As per the name, it does not cache anything
|
226
|
-
|
227
|
-
class NullCache
|
228
|
-
##
|
229
|
-
# Clear is a no-op, since there is no cache
|
230
|
-
|
231
|
-
def clear
|
91
|
+
def download
|
92
|
+
JSON.parse Curl::Easy.perform(@url).body_str
|
93
|
+
rescue
|
94
|
+
raise 'Unable to load data from Github'
|
232
95
|
end
|
233
96
|
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
97
|
+
def method_missing(sym, *args, &block)
|
98
|
+
load_data if @last_updated.nil?
|
99
|
+
return unless @data.respond_to? sym
|
100
|
+
instance_eval "def #{sym}(*args, &block) @data.#{sym}(*args, &block) end"
|
101
|
+
send(sym, *args, &block)
|
239
102
|
end
|
240
103
|
end
|
241
104
|
end
|
105
|
+
|
106
|
+
require 'githubstats/data'
|
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'basiccache'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
##
|
5
|
+
# Definition of data objects for GithubStats
|
6
|
+
|
7
|
+
module GithubStats
|
8
|
+
##
|
9
|
+
# This is the magic constant used for determining outliers
|
10
|
+
|
11
|
+
GITHUB_MAGIC = 3.77972616981
|
12
|
+
|
13
|
+
##
|
14
|
+
# Helper struct for defining datapoints
|
15
|
+
|
16
|
+
Datapoint = Struct.new(:date, :score)
|
17
|
+
|
18
|
+
##
|
19
|
+
# Data class for calculations
|
20
|
+
|
21
|
+
class Data
|
22
|
+
##
|
23
|
+
# MethodCacher provides computation caching
|
24
|
+
|
25
|
+
include MethodCacher
|
26
|
+
|
27
|
+
attr_reader :raw
|
28
|
+
alias_method :to_a, :raw
|
29
|
+
|
30
|
+
##
|
31
|
+
# Create a data object and turn on caching
|
32
|
+
|
33
|
+
def initialize(data)
|
34
|
+
@raw = data.map { |d, s| Datapoint.new(Date.parse(d), s.to_i) }
|
35
|
+
enable_caching [:to_h, :today, :streaks, :longest_streak, :streak, :max,
|
36
|
+
:mean, :std_var, :quartile_boundaries, :quartiles]
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# The data as a hash where the keys are dates and values are scores
|
41
|
+
|
42
|
+
def to_h
|
43
|
+
@raw.reduce(Hash.new(0)) { |a, e| a.merge(e.date => e.score) }
|
44
|
+
end
|
45
|
+
|
46
|
+
##
|
47
|
+
# The score for today
|
48
|
+
|
49
|
+
def today
|
50
|
+
to_h[Date.today]
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# The score for a given day
|
55
|
+
|
56
|
+
def [](date)
|
57
|
+
to_h[Date.parse(date)]
|
58
|
+
end
|
59
|
+
|
60
|
+
##
|
61
|
+
# Scores in chronological order
|
62
|
+
|
63
|
+
def scores
|
64
|
+
@raw.map { |x| x.score }
|
65
|
+
end
|
66
|
+
|
67
|
+
##
|
68
|
+
# All streaks for a user
|
69
|
+
|
70
|
+
def streaks
|
71
|
+
streaks = @raw.reduce(Array.new(1, [])) do |acc, point|
|
72
|
+
point.score == 0 ? acc << [] : acc.last << point
|
73
|
+
acc
|
74
|
+
end
|
75
|
+
streaks.reject! { |s| s.empty? }
|
76
|
+
streaks.first.empty? ? streaks[1..-1] : streaks
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# The longest streak
|
81
|
+
|
82
|
+
def longest_streak
|
83
|
+
streaks.max { |a, b| a.length <=> b.length }
|
84
|
+
end
|
85
|
+
|
86
|
+
##
|
87
|
+
# The current streak, or nil
|
88
|
+
|
89
|
+
def streak
|
90
|
+
streaks.last.last.date >= Date.today - 1 ? streaks.last : []
|
91
|
+
end
|
92
|
+
|
93
|
+
##
|
94
|
+
# The highest scoring day
|
95
|
+
|
96
|
+
def max
|
97
|
+
@raw.max { |a, b| a.score <=> b.score }
|
98
|
+
end
|
99
|
+
|
100
|
+
##
|
101
|
+
# The mean score
|
102
|
+
|
103
|
+
def mean
|
104
|
+
scores.reduce(:+) / @raw.size.to_f
|
105
|
+
end
|
106
|
+
|
107
|
+
##
|
108
|
+
# The standard variance (two pass)
|
109
|
+
|
110
|
+
def std_var
|
111
|
+
first_pass = @raw.reduce(0) { |a, e| (e.score.to_f - mean)**2 + a }
|
112
|
+
Math.sqrt(first_pass / (@raw.size - 1))
|
113
|
+
end
|
114
|
+
|
115
|
+
##
|
116
|
+
# Outliers of the set
|
117
|
+
|
118
|
+
def outliers
|
119
|
+
return [] if scores.uniq.size < 5
|
120
|
+
scores.select { |x| ((mean - x) / std_var).abs > GITHUB_MAGIC }.uniq
|
121
|
+
end
|
122
|
+
|
123
|
+
##
|
124
|
+
# The boundaries of the quartiles
|
125
|
+
# The index represents the quartile number
|
126
|
+
# The value is the upper bound of the quartile (inclusive)
|
127
|
+
|
128
|
+
def quartile_boundaries
|
129
|
+
range = (0..scores.reject { |x| outliers.take(3).include? x }.max).to_a
|
130
|
+
[0, *(1..3).map { |q| range[(q * range.size / 4) - 1] }, max.score]
|
131
|
+
end
|
132
|
+
|
133
|
+
##
|
134
|
+
# Return the list split into quartiles
|
135
|
+
|
136
|
+
def quartiles
|
137
|
+
quartiles = Array.new(5) { [] }
|
138
|
+
@raw.reduce(quartiles) { |a, e| a[quartile(e.score)] << e && a }
|
139
|
+
end
|
140
|
+
|
141
|
+
##
|
142
|
+
# Return the quartile of a given score
|
143
|
+
|
144
|
+
def quartile(score)
|
145
|
+
return nil if score < 0 || score > max.score
|
146
|
+
quartile_boundaries.count { |bound| score > bound }
|
147
|
+
end
|
148
|
+
|
149
|
+
##
|
150
|
+
# Pad the dataset to full week increments
|
151
|
+
|
152
|
+
def pad(fill_value = -1, data = @raw.clone)
|
153
|
+
point = GithubStats::Datapoint
|
154
|
+
until data.first.date.wday == 0
|
155
|
+
data.unshift point.new(data.first.date - 1, fill_value)
|
156
|
+
end
|
157
|
+
until data.last.date.wday == 6
|
158
|
+
data << point.new(data.last.date + 1, fill_value)
|
159
|
+
end
|
160
|
+
data
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
[["2012/11/27", 0], ["2012/11/28", 0], ["2012/11/29", 0], ["2012/11/30", 0], ["2012/12/01", 0], ["2012/12/02", 0], ["2012/12/03", 0], ["2012/12/04", 2], ["2012/12/05", 5], ["2012/12/06", 0], ["2012/12/07", 0], ["2012/12/08", 0], ["2012/12/09", 1], ["2012/12/10", 0], ["2012/12/11", 0], ["2012/12/12", 0], ["2012/12/13", 0], ["2012/12/14", 0], ["2012/12/15", 0], ["2012/12/16", 0], ["2012/12/17", 1], ["2012/12/18", 0], ["2012/12/19", 1], ["2012/12/20", 4], ["2012/12/21", 1], ["2012/12/22", 0], ["2012/12/23", 0], ["2012/12/24", 0], ["2012/12/25", 0], ["2012/12/26", 0], ["2012/12/27", 0], ["2012/12/28", 2], ["2012/12/29", 0], ["2012/12/30", 3], ["2012/12/31", 0], ["2013/01/01", 5], ["2013/01/02", 2], ["2013/01/03", 0], ["2013/01/04", 1], ["2013/01/05", 0], ["2013/01/06", 0], ["2013/01/07", 2], ["2013/01/08", 0], ["2013/01/09", 5], ["2013/01/10", 1], ["2013/01/11", 1], ["2013/01/12", 0], ["2013/01/13", 0], ["2013/01/14", 0], ["2013/01/15", 0], ["2013/01/16", 0], ["2013/01/17", 0], ["2013/01/18", 0], ["2013/01/19", 1], ["2013/01/20", 0], ["2013/01/21", 0], ["2013/01/22", 2], ["2013/01/23", 0], ["2013/01/24", 2], ["2013/01/25", 12], ["2013/01/26", 2], ["2013/01/27", 15], ["2013/01/28", 4], ["2013/01/29", 4], ["2013/01/30", 7], ["2013/01/31", 11], ["2013/02/01", 12], ["2013/02/02", 0], ["2013/02/03", 0], ["2013/02/04", 0], ["2013/02/05", 0], ["2013/02/06", 0], ["2013/02/07", 0], ["2013/02/08", 2], ["2013/02/09", 0], ["2013/02/10", 0], ["2013/02/11", 1], ["2013/02/12", 0], ["2013/02/13", 0], ["2013/02/14", 0], ["2013/02/15", 0], ["2013/02/16", 0], ["2013/02/17", 0], ["2013/02/18", 1], ["2013/02/19", 0], ["2013/02/20", 0], ["2013/02/21", 1], ["2013/02/22", 4], ["2013/02/23", 3], ["2013/02/24", 9], ["2013/02/25", 0], ["2013/02/26", 0], ["2013/02/27", 0], ["2013/02/28", 0], ["2013/03/01", 7], ["2013/03/02", 4], ["2013/03/03", 0], ["2013/03/04", 0], ["2013/03/05", 2], ["2013/03/06", 0], ["2013/03/07", 0], ["2013/03/08", 0], ["2013/03/09", 1], ["2013/03/10", 0], ["2013/03/11", 0], ["2013/03/12", 3], ["2013/03/13", 0], ["2013/03/14", 0], ["2013/03/15", 0], ["2013/03/16", 0], ["2013/03/17", 3], ["2013/03/18", 0], ["2013/03/19", 0], ["2013/03/20", 0], ["2013/03/21", 4], ["2013/03/22", 0], ["2013/03/23", 0], ["2013/03/24", 0], ["2013/03/25", 0], ["2013/03/26", 0], ["2013/03/27", 0], ["2013/03/28", 0], ["2013/03/29", 0], ["2013/03/30", 0], ["2013/03/31", 0], ["2013/04/01", 0], ["2013/04/02", 0], ["2013/04/03", 0], ["2013/04/04", 0], ["2013/04/05", 1], ["2013/04/06", 0], ["2013/04/07", 0], ["2013/04/08", 0], ["2013/04/09", 0], ["2013/04/10", 0], ["2013/04/11", 0], ["2013/04/12", 0], ["2013/04/13", 2], ["2013/04/14", 0], ["2013/04/15", 0], ["2013/04/16", 0], ["2013/04/17", 0], ["2013/04/18", 0], ["2013/04/19", 0], ["2013/04/20", 0], ["2013/04/21", 0], ["2013/04/22", 0], ["2013/04/23", 0], ["2013/04/24", 0], ["2013/04/25", 2], ["2013/04/26", 1], ["2013/04/27", 0], ["2013/04/28", 1], ["2013/04/29", 0], ["2013/04/30", 0], ["2013/05/01", 0], ["2013/05/02", 0], ["2013/05/03", 7], ["2013/05/04", 0], ["2013/05/05", 0], ["2013/05/06", 0], ["2013/05/07", 0], ["2013/05/08", 0], ["2013/05/09", 0], ["2013/05/10", 0], ["2013/05/11", 0], ["2013/05/12", 0], ["2013/05/13", 0], ["2013/05/14", 1], ["2013/05/15", 0], ["2013/05/16", 0], ["2013/05/17", 0], ["2013/05/18", 0], ["2013/05/19", 3], ["2013/05/20", 0], ["2013/05/21", 0], ["2013/05/22", 0], ["2013/05/23", 0], ["2013/05/24", 0], ["2013/05/25", 0], ["2013/05/26", 0], ["2013/05/27", 0], ["2013/05/28", 2], ["2013/05/29", 0], ["2013/05/30", 0], ["2013/05/31", 1], ["2013/06/01", 0], ["2013/06/02", 7], ["2013/06/03", 1], ["2013/06/04", 0], ["2013/06/05", 0], ["2013/06/06", 2], ["2013/06/07", 3], ["2013/06/08", 0], ["2013/06/09", 13], ["2013/06/10", 0], ["2013/06/11", 0], ["2013/06/12", 1], ["2013/06/13", 0], ["2013/06/14", 5], ["2013/06/15", 8], ["2013/06/16", 19], ["2013/06/17", 8], ["2013/06/18", 0], ["2013/06/19", 0], ["2013/06/20", 1], ["2013/06/21", 2], ["2013/06/22", 1], ["2013/06/23", 0], ["2013/06/24", 1], ["2013/06/25", 8], ["2013/06/26", 0], ["2013/06/27", 0], ["2013/06/28", 0], ["2013/06/29", 0], ["2013/06/30", 0], ["2013/07/01", 1], ["2013/07/02", 3], ["2013/07/03", 0], ["2013/07/04", 1], ["2013/07/05", 0], ["2013/07/06", 14], ["2013/07/07", 0], ["2013/07/08", 4], ["2013/07/09", 16], ["2013/07/10", 6], ["2013/07/11", 0], ["2013/07/12", 0], ["2013/07/13", 5], ["2013/07/14", 50], ["2013/07/15", 14], ["2013/07/16", 1], ["2013/07/17", 0], ["2013/07/18", 1], ["2013/07/19", 1], ["2013/07/20", 0], ["2013/07/21", 16], ["2013/07/22", 0], ["2013/07/23", 1], ["2013/07/24", 0], ["2013/07/25", 0], ["2013/07/26", 0], ["2013/07/27", 0], ["2013/07/28", 0], ["2013/07/29", 0], ["2013/07/30", 2], ["2013/07/31", 0], ["2013/08/01", 0], ["2013/08/02", 0], ["2013/08/03", 0], ["2013/08/04", 11], ["2013/08/05", 1], ["2013/08/06", 3], ["2013/08/07", 2], ["2013/08/08", 2], ["2013/08/09", 10], ["2013/08/10", 7], ["2013/08/11", 1], ["2013/08/12", 5], ["2013/08/13", 4], ["2013/08/14", 1], ["2013/08/15", 2], ["2013/08/16", 5], ["2013/08/17", 0], ["2013/08/18", 0], ["2013/08/19", 0], ["2013/08/20", 0], ["2013/08/21", 8], ["2013/08/22", 0], ["2013/08/23", 3], ["2013/08/24", 6], ["2013/08/25", 15], ["2013/08/26", 14], ["2013/08/27", 5], ["2013/08/28", 0], ["2013/08/29", 6], ["2013/08/30", 6], ["2013/08/31", 4], ["2013/09/01", 2], ["2013/09/02", 6], ["2013/09/03", 4], ["2013/09/04", 1], ["2013/09/05", 1], ["2013/09/06", 2], ["2013/09/07", 2], ["2013/09/08", 2], ["2013/09/09", 1], ["2013/09/10", 4], ["2013/09/11", 1], ["2013/09/12", 1], ["2013/09/13", 1], ["2013/09/14", 2], ["2013/09/15", 4], ["2013/09/16", 6], ["2013/09/17", 1], ["2013/09/18", 5], ["2013/09/19", 3], ["2013/09/20", 3], ["2013/09/21", 1], ["2013/09/22", 11], ["2013/09/23", 6], ["2013/09/24", 5], ["2013/09/25", 4], ["2013/09/26", 1], ["2013/09/27", 2], ["2013/09/28", 2], ["2013/09/29", 29], ["2013/09/30", 13], ["2013/10/01", 2], ["2013/10/02", 1], ["2013/10/03", 3], ["2013/10/04", 7], ["2013/10/05", 1], ["2013/10/06", 13], ["2013/10/07", 3], ["2013/10/08", 1], ["2013/10/09", 6], ["2013/10/10", 4], ["2013/10/11", 5], ["2013/10/12", 2], ["2013/10/13", 2], ["2013/10/14", 8], ["2013/10/15", 3], ["2013/10/16", 3], ["2013/10/17", 1], ["2013/10/18", 2], ["2013/10/19", 5], ["2013/10/20", 14], ["2013/10/21", 3], ["2013/10/22", 4], ["2013/10/23", 2], ["2013/10/24", 2], ["2013/10/25", 1], ["2013/10/26", 2], ["2013/10/27", 7], ["2013/10/28", 2], ["2013/10/29", 3], ["2013/10/30", 4], ["2013/10/31", 3], ["2013/11/01", 4], ["2013/11/02", 11], ["2013/11/03", 7], ["2013/11/04", 3], ["2013/11/05", 1], ["2013/11/06", 11], ["2013/11/07", 1], ["2013/11/08", 1], ["2013/11/09", 1], ["2013/11/10", 2], ["2013/11/11", 5], ["2013/11/12", 1], ["2013/11/13", 1], ["2013/11/14", 8], ["2013/11/15", 1], ["2013/11/16", 3], ["2013/11/17", 11], ["2013/11/18", 15], ["2013/11/19", 88], ["2013/11/20", 14], ["2013/11/21", 32], ["2013/11/22", 27], ["2013/11/23", 51], ["2013/11/24", 8], ["2013/11/25", 10], ["2013/11/26", 2], ["2013/11/27", 3]]
|
@@ -0,0 +1 @@
|
|
1
|
+
[["2012/11/27", 0], ["2012/11/28", 0], ["2012/11/29", 0], ["2012/11/30", 0], ["2012/12/01", 0], ["2012/12/02", 0], ["2012/12/03", 0], ["2012/12/04", 0], ["2012/12/05", 0], ["2012/12/06", 0], ["2012/12/07", 3], ["2012/12/08", 0], ["2012/12/09", 0], ["2012/12/10", 1], ["2012/12/11", 0], ["2012/12/12", 0], ["2012/12/13", 0], ["2012/12/14", 0], ["2012/12/15", 0], ["2012/12/16", 0], ["2012/12/17", 0], ["2012/12/18", 0], ["2012/12/19", 0], ["2012/12/20", 0], ["2012/12/21", 0], ["2012/12/22", 0], ["2012/12/23", 0], ["2012/12/24", 0], ["2012/12/25", 0], ["2012/12/26", 0], ["2012/12/27", 0], ["2012/12/28", 0], ["2012/12/29", 0], ["2012/12/30", 0], ["2012/12/31", 2], ["2013/01/01", 1], ["2013/01/02", 0], ["2013/01/03", 0], ["2013/01/04", 0], ["2013/01/05", 0], ["2013/01/06", 0], ["2013/01/07", 0], ["2013/01/08", 0], ["2013/01/09", 0], ["2013/01/10", 0], ["2013/01/11", 0], ["2013/01/12", 0], ["2013/01/13", 0], ["2013/01/14", 0], ["2013/01/15", 5], ["2013/01/16", 2], ["2013/01/17", 0], ["2013/01/18", 5], ["2013/01/19", 0], ["2013/01/20", 0], ["2013/01/21", 2], ["2013/01/22", 0], ["2013/01/23", 0], ["2013/01/24", 0], ["2013/01/25", 0], ["2013/01/26", 1], ["2013/01/27", 2], ["2013/01/28", 1], ["2013/01/29", 1], ["2013/01/30", 0], ["2013/01/31", 0], ["2013/02/01", 0], ["2013/02/02", 0], ["2013/02/03", 0], ["2013/02/04", 0], ["2013/02/05", 2], ["2013/02/06", 2], ["2013/02/07", 5], ["2013/02/08", 1], ["2013/02/09", 0], ["2013/02/10", 0], ["2013/02/11", 0], ["2013/02/12", 1], ["2013/02/13", 0], ["2013/02/14", 9], ["2013/02/15", 2], ["2013/02/16", 0], ["2013/02/17", 0], ["2013/02/18", 0], ["2013/02/19", 1], ["2013/02/20", 0], ["2013/02/21", 23], ["2013/02/22", 0], ["2013/02/23", 0], ["2013/02/24", 4], ["2013/02/25", 1], ["2013/02/26", 0], ["2013/02/27", 2], ["2013/02/28", 0], ["2013/03/01", 0], ["2013/03/02", 11], ["2013/03/03", 3], ["2013/03/04", 0], ["2013/03/05", 3], ["2013/03/06", 2], ["2013/03/07", 0], ["2013/03/08", 0], ["2013/03/09", 0], ["2013/03/10", 2], ["2013/03/11", 3], ["2013/03/12", 7], ["2013/03/13", 12], ["2013/03/14", 8], ["2013/03/15", 0], ["2013/03/16", 0], ["2013/03/17", 0], ["2013/03/18", 0], ["2013/03/19", 0], ["2013/03/20", 0], ["2013/03/21", 9], ["2013/03/22", 1], ["2013/03/23", 0], ["2013/03/24", 10], ["2013/03/25", 2], ["2013/03/26", 2], ["2013/03/27", 0], ["2013/03/28", 13], ["2013/03/29", 15], ["2013/03/30", 0], ["2013/03/31", 12], ["2013/04/01", 8], ["2013/04/02", 0], ["2013/04/03", 1], ["2013/04/04", 0], ["2013/04/05", 10], ["2013/04/06", 22], ["2013/04/07", 4], ["2013/04/08", 7], ["2013/04/09", 3], ["2013/04/10", 9], ["2013/04/11", 13], ["2013/04/12", 2], ["2013/04/13", 7], ["2013/04/14", 0], ["2013/04/15", 6], ["2013/04/16", 28], ["2013/04/17", 11], ["2013/04/18", 5], ["2013/04/19", 7], ["2013/04/20", 3], ["2013/04/21", 1], ["2013/04/22", 4], ["2013/04/23", 1], ["2013/04/24", 0], ["2013/04/25", 0], ["2013/04/26", 0], ["2013/04/27", 1], ["2013/04/28", 0], ["2013/04/29", 7], ["2013/04/30", 4], ["2013/05/01", 1], ["2013/05/02", 0], ["2013/05/03", 0], ["2013/05/04", 2], ["2013/05/05", 0], ["2013/05/06", 0], ["2013/05/07", 0], ["2013/05/08", 0], ["2013/05/09", 0], ["2013/05/10", 0], ["2013/05/11", 4], ["2013/05/12", 0], ["2013/05/13", 15], ["2013/05/14", 0], ["2013/05/15", 0], ["2013/05/16", 2], ["2013/05/17", 0], ["2013/05/18", 0], ["2013/05/19", 1], ["2013/05/20", 0], ["2013/05/21", 0], ["2013/05/22", 0], ["2013/05/23", 0], ["2013/05/24", 3], ["2013/05/25", 0], ["2013/05/26", 0], ["2013/05/27", 0], ["2013/05/28", 0], ["2013/05/29", 0], ["2013/05/30", 0], ["2013/05/31", 0], ["2013/06/01", 0], ["2013/06/02", 0], ["2013/06/03", 0], ["2013/06/04", 0], ["2013/06/05", 0], ["2013/06/06", 0], ["2013/06/07", 0], ["2013/06/08", 0], ["2013/06/09", 0], ["2013/06/10", 2], ["2013/06/11", 0], ["2013/06/12", 0], ["2013/06/13", 0], ["2013/06/14", 0], ["2013/06/15", 0], ["2013/06/16", 0], ["2013/06/17", 0], ["2013/06/18", 0], ["2013/06/19", 0], ["2013/06/20", 0], ["2013/06/21", 1], ["2013/06/22", 3], ["2013/06/23", 0], ["2013/06/24", 0], ["2013/06/25", 0], ["2013/06/26", 0], ["2013/06/27", 0], ["2013/06/28", 0], ["2013/06/29", 0], ["2013/06/30", 0], ["2013/07/01", 0], ["2013/07/02", 0], ["2013/07/03", 0], ["2013/07/04", 1], ["2013/07/05", 0], ["2013/07/06", 0], ["2013/07/07", 0], ["2013/07/08", 0], ["2013/07/09", 5], ["2013/07/10", 1], ["2013/07/11", 0], ["2013/07/12", 0], ["2013/07/13", 0], ["2013/07/14", 0], ["2013/07/15", 0], ["2013/07/16", 0], ["2013/07/17", 0], ["2013/07/18", 0], ["2013/07/19", 0], ["2013/07/20", 0], ["2013/07/21", 0], ["2013/07/22", 0], ["2013/07/23", 0], ["2013/07/24", 0], ["2013/07/25", 0], ["2013/07/26", 0], ["2013/07/27", 0], ["2013/07/28", 0], ["2013/07/29", 0], ["2013/07/30", 0], ["2013/07/31", 1], ["2013/08/01", 0], ["2013/08/02", 0], ["2013/08/03", 0], ["2013/08/04", 0], ["2013/08/05", 3], ["2013/08/06", 0], ["2013/08/07", 0], ["2013/08/08", 2], ["2013/08/09", 0], ["2013/08/10", 0], ["2013/08/11", 2], ["2013/08/12", 0], ["2013/08/13", 0], ["2013/08/14", 0], ["2013/08/15", 0], ["2013/08/16", 0], ["2013/08/17", 8], ["2013/08/18", 0], ["2013/08/19", 0], ["2013/08/20", 5], ["2013/08/21", 3], ["2013/08/22", 0], ["2013/08/23", 12], ["2013/08/24", 9], ["2013/08/25", 2], ["2013/08/26", 1], ["2013/08/27", 3], ["2013/08/28", 9], ["2013/08/29", 5], ["2013/08/30", 6], ["2013/08/31", 1], ["2013/09/01", 2], ["2013/09/02", 1], ["2013/09/03", 2], ["2013/09/04", 1], ["2013/09/05", 2], ["2013/09/06", 10], ["2013/09/07", 3], ["2013/09/08", 12], ["2013/09/09", 9], ["2013/09/10", 7], ["2013/09/11", 7], ["2013/09/12", 1], ["2013/09/13", 1], ["2013/09/14", 3], ["2013/09/15", 16], ["2013/09/16", 1], ["2013/09/17", 8], ["2013/09/18", 13], ["2013/09/19", 4], ["2013/09/20", 1], ["2013/09/21", 8], ["2013/09/22", 8], ["2013/09/23", 7], ["2013/09/24", 16], ["2013/09/25", 8], ["2013/09/26", 1], ["2013/09/27", 7], ["2013/09/28", 4], ["2013/09/29", 6], ["2013/09/30", 15], ["2013/10/01", 2], ["2013/10/02", 6], ["2013/10/03", 6], ["2013/10/04", 3], ["2013/10/05", 15], ["2013/10/06", 16], ["2013/10/07", 5], ["2013/10/08", 6], ["2013/10/09", 2], ["2013/10/10", 4], ["2013/10/11", 3], ["2013/10/12", 18], ["2013/10/13", 15], ["2013/10/14", 1], ["2013/10/15", 6], ["2013/10/16", 1], ["2013/10/17", 4], ["2013/10/18", 4], ["2013/10/19", 1], ["2013/10/20", 6], ["2013/10/21", 3], ["2013/10/22", 1], ["2013/10/23", 18], ["2013/10/24", 9], ["2013/10/25", 12], ["2013/10/26", 14], ["2013/10/27", 4], ["2013/10/28", 4], ["2013/10/29", 1], ["2013/10/30", 1], ["2013/10/31", 5], ["2013/11/01", 9], ["2013/11/02", 8], ["2013/11/03", 19], ["2013/11/04", 8], ["2013/11/05", 10], ["2013/11/06", 8], ["2013/11/07", 17], ["2013/11/08", 14], ["2013/11/09", 3], ["2013/11/10", 2], ["2013/11/11", 4], ["2013/11/12", 2], ["2013/11/13", 7], ["2013/11/14", 4], ["2013/11/15", 9], ["2013/11/16", 3], ["2013/11/17", 2], ["2013/11/18", 2], ["2013/11/19", 11], ["2013/11/20", 1], ["2013/11/21", 9], ["2013/11/22", 3], ["2013/11/23", 3], ["2013/11/24", 2], ["2013/11/25", 10], ["2013/11/26", 1], ["2013/11/27", 0]]
|
@@ -0,0 +1 @@
|
|
1
|
+
[["2012/11/27", 0], ["2012/11/28", 0], ["2012/11/29", 0], ["2012/11/30", 0], ["2012/12/01", 0], ["2012/12/02", 0], ["2012/12/03", 0], ["2012/12/04", 0], ["2012/12/05", 0], ["2012/12/06", 0], ["2012/12/07", 0], ["2012/12/08", 0], ["2012/12/09", 0], ["2012/12/10", 0], ["2012/12/11", 0], ["2012/12/12", 0], ["2012/12/13", 0], ["2012/12/14", 0], ["2012/12/15", 0], ["2012/12/16", 0], ["2012/12/17", 1], ["2012/12/18", 0], ["2012/12/19", 0], ["2012/12/20", 0], ["2012/12/21", 0], ["2012/12/22", 0], ["2012/12/23", 0], ["2012/12/24", 0], ["2012/12/25", 0], ["2012/12/26", 0], ["2012/12/27", 0], ["2012/12/28", 0], ["2012/12/29", 0], ["2012/12/30", 0], ["2012/12/31", 0], ["2013/01/01", 0], ["2013/01/02", 0], ["2013/01/03", 0], ["2013/01/04", 0], ["2013/01/05", 0], ["2013/01/06", 0], ["2013/01/07", 0], ["2013/01/08", 0], ["2013/01/09", 0], ["2013/01/10", 0], ["2013/01/11", 0], ["2013/01/12", 0], ["2013/01/13", 0], ["2013/01/14", 0], ["2013/01/15", 0], ["2013/01/16", 0], ["2013/01/17", 0], ["2013/01/18", 0], ["2013/01/19", 0], ["2013/01/20", 0], ["2013/01/21", 0], ["2013/01/22", 0], ["2013/01/23", 0], ["2013/01/24", 0], ["2013/01/25", 0], ["2013/01/26", 0], ["2013/01/27", 0], ["2013/01/28", 0], ["2013/01/29", 0], ["2013/01/30", 0], ["2013/01/31", 0], ["2013/02/01", 0], ["2013/02/02", 0], ["2013/02/03", 0], ["2013/02/04", 0], ["2013/02/05", 0], ["2013/02/06", 0], ["2013/02/07", 0], ["2013/02/08", 0], ["2013/02/09", 0], ["2013/02/10", 0], ["2013/02/11", 0], ["2013/02/12", 0], ["2013/02/13", 0], ["2013/02/14", 0], ["2013/02/15", 0], ["2013/02/16", 0], ["2013/02/17", 0], ["2013/02/18", 0], ["2013/02/19", 0], ["2013/02/20", 0], ["2013/02/21", 0], ["2013/02/22", 0], ["2013/02/23", 0], ["2013/02/24", 0], ["2013/02/25", 0], ["2013/02/26", 0], ["2013/02/27", 0], ["2013/02/28", 0], ["2013/03/01", 0], ["2013/03/02", 0], ["2013/03/03", 0], ["2013/03/04", 0], ["2013/03/05", 0], ["2013/03/06", 0], ["2013/03/07", 0], ["2013/03/08", 0], ["2013/03/09", 0], ["2013/03/10", 0], ["2013/03/11", 0], ["2013/03/12", 0], ["2013/03/13", 0], ["2013/03/14", 0], ["2013/03/15", 0], ["2013/03/16", 0], ["2013/03/17", 0], ["2013/03/18", 0], ["2013/03/19", 0], ["2013/03/20", 0], ["2013/03/21", 0], ["2013/03/22", 0], ["2013/03/23", 0], ["2013/03/24", 0], ["2013/03/25", 0], ["2013/03/26", 0], ["2013/03/27", 0], ["2013/03/28", 0], ["2013/03/29", 0], ["2013/03/30", 0], ["2013/03/31", 2], ["2013/04/01", 0], ["2013/04/02", 0], ["2013/04/03", 0], ["2013/04/04", 0], ["2013/04/05", 0], ["2013/04/06", 0], ["2013/04/07", 0], ["2013/04/08", 0], ["2013/04/09", 0], ["2013/04/10", 0], ["2013/04/11", 0], ["2013/04/12", 0], ["2013/04/13", 0], ["2013/04/14", 0], ["2013/04/15", 0], ["2013/04/16", 0], ["2013/04/17", 0], ["2013/04/18", 0], ["2013/04/19", 0], ["2013/04/20", 0], ["2013/04/21", 3], ["2013/04/22", 0], ["2013/04/23", 0], ["2013/04/24", 2], ["2013/04/25", 0], ["2013/04/26", 0], ["2013/04/27", 0], ["2013/04/28", 0], ["2013/04/29", 0], ["2013/04/30", 0], ["2013/05/01", 0], ["2013/05/02", 0], ["2013/05/03", 0], ["2013/05/04", 0], ["2013/05/05", 0], ["2013/05/06", 0], ["2013/05/07", 0], ["2013/05/08", 0], ["2013/05/09", 0], ["2013/05/10", 0], ["2013/05/11", 0], ["2013/05/12", 0], ["2013/05/13", 0], ["2013/05/14", 0], ["2013/05/15", 0], ["2013/05/16", 0], ["2013/05/17", 0], ["2013/05/18", 0], ["2013/05/19", 0], ["2013/05/20", 0], ["2013/05/21", 0], ["2013/05/22", 0], ["2013/05/23", 0], ["2013/05/24", 0], ["2013/05/25", 0], ["2013/05/26", 0], ["2013/05/27", 0], ["2013/05/28", 0], ["2013/05/29", 0], ["2013/05/30", 0], ["2013/05/31", 0], ["2013/06/01", 0], ["2013/06/02", 0], ["2013/06/03", 0], ["2013/06/04", 0], ["2013/06/05", 0], ["2013/06/06", 0], ["2013/06/07", 0], ["2013/06/08", 0], ["2013/06/09", 0], ["2013/06/10", 0], ["2013/06/11", 0], ["2013/06/12", 0], ["2013/06/13", 0], ["2013/06/14", 0], ["2013/06/15", 0], ["2013/06/16", 0], ["2013/06/17", 0], ["2013/06/18", 0], ["2013/06/19", 0], ["2013/06/20", 0], ["2013/06/21", 0], ["2013/06/22", 0], ["2013/06/23", 0], ["2013/06/24", 0], ["2013/06/25", 0], ["2013/06/26", 0], ["2013/06/27", 0], ["2013/06/28", 0], ["2013/06/29", 0], ["2013/06/30", 0], ["2013/07/01", 0], ["2013/07/02", 0], ["2013/07/03", 0], ["2013/07/04", 0], ["2013/07/05", 0], ["2013/07/06", 0], ["2013/07/07", 0], ["2013/07/08", 0], ["2013/07/09", 0], ["2013/07/10", 0], ["2013/07/11", 0], ["2013/07/12", 0], ["2013/07/13", 0], ["2013/07/14", 0], ["2013/07/15", 0], ["2013/07/16", 0], ["2013/07/17", 0], ["2013/07/18", 0], ["2013/07/19", 0], ["2013/07/20", 0], ["2013/07/21", 0], ["2013/07/22", 0], ["2013/07/23", 0], ["2013/07/24", 0], ["2013/07/25", 0], ["2013/07/26", 0], ["2013/07/27", 0], ["2013/07/28", 0], ["2013/07/29", 0], ["2013/07/30", 1], ["2013/07/31", 0], ["2013/08/01", 0], ["2013/08/02", 0], ["2013/08/03", 0], ["2013/08/04", 0], ["2013/08/05", 0], ["2013/08/06", 0], ["2013/08/07", 0], ["2013/08/08", 0], ["2013/08/09", 0], ["2013/08/10", 0], ["2013/08/11", 0], ["2013/08/12", 0], ["2013/08/13", 0], ["2013/08/14", 0], ["2013/08/15", 0], ["2013/08/16", 0], ["2013/08/17", 0], ["2013/08/18", 0], ["2013/08/19", 0], ["2013/08/20", 0], ["2013/08/21", 0], ["2013/08/22", 0], ["2013/08/23", 1], ["2013/08/24", 0], ["2013/08/25", 0], ["2013/08/26", 0], ["2013/08/27", 0], ["2013/08/28", 0], ["2013/08/29", 0], ["2013/08/30", 0], ["2013/08/31", 0], ["2013/09/01", 0], ["2013/09/02", 0], ["2013/09/03", 0], ["2013/09/04", 0], ["2013/09/05", 0], ["2013/09/06", 0], ["2013/09/07", 0], ["2013/09/08", 0], ["2013/09/09", 0], ["2013/09/10", 0], ["2013/09/11", 0], ["2013/09/12", 0], ["2013/09/13", 0], ["2013/09/14", 0], ["2013/09/15", 0], ["2013/09/16", 0], ["2013/09/17", 0], ["2013/09/18", 0], ["2013/09/19", 0], ["2013/09/20", 0], ["2013/09/21", 0], ["2013/09/22", 0], ["2013/09/23", 0], ["2013/09/24", 0], ["2013/09/25", 0], ["2013/09/26", 0], ["2013/09/27", 0], ["2013/09/28", 0], ["2013/09/29", 0], ["2013/09/30", 0], ["2013/10/01", 0], ["2013/10/02", 0], ["2013/10/03", 0], ["2013/10/04", 0], ["2013/10/05", 0], ["2013/10/06", 0], ["2013/10/07", 0], ["2013/10/08", 0], ["2013/10/09", 0], ["2013/10/10", 0], ["2013/10/11", 0], ["2013/10/12", 0], ["2013/10/13", 0], ["2013/10/14", 0], ["2013/10/15", 0], ["2013/10/16", 0], ["2013/10/17", 0], ["2013/10/18", 0], ["2013/10/19", 0], ["2013/10/20", 0], ["2013/10/21", 0], ["2013/10/22", 0], ["2013/10/23", 0], ["2013/10/24", 0], ["2013/10/25", 0], ["2013/10/26", 0], ["2013/10/27", 0], ["2013/10/28", 0], ["2013/10/29", 0], ["2013/10/30", 0], ["2013/10/31", 0], ["2013/11/01", 0], ["2013/11/02", 0], ["2013/11/03", 0], ["2013/11/04", 0], ["2013/11/05", 0], ["2013/11/06", 0], ["2013/11/07", 0], ["2013/11/08", 0], ["2013/11/09", 0], ["2013/11/10", 0], ["2013/11/11", 0], ["2013/11/12", 0], ["2013/11/13", 0], ["2013/11/14", 0], ["2013/11/15", 0], ["2013/11/16", 0], ["2013/11/17", 0], ["2013/11/18", 0], ["2013/11/19", 0], ["2013/11/20", 0], ["2013/11/21", 0], ["2013/11/22", 0], ["2013/11/23", 0], ["2013/11/24", 0], ["2013/11/25", 0], ["2013/11/26", 0], ["2013/11/27", 0]]
|
@@ -0,0 +1 @@
|
|
1
|
+
[["2012/11/27", 0], ["2012/11/28", 0], ["2012/11/29", 0], ["2012/11/30", 0], ["2012/12/01", 0], ["2012/12/02", 0], ["2012/12/03", 0], ["2012/12/04", 0], ["2012/12/05", 0], ["2012/12/06", 0], ["2012/12/07", 0], ["2012/12/08", 0], ["2012/12/09", 0], ["2012/12/10", 0], ["2012/12/11", 0], ["2012/12/12", 0], ["2012/12/13", 0], ["2012/12/14", 0], ["2012/12/15", 0], ["2012/12/16", 0], ["2012/12/17", 0], ["2012/12/18", 0], ["2012/12/19", 0], ["2012/12/20", 0], ["2012/12/21", 0], ["2012/12/22", 0], ["2012/12/23", 0], ["2012/12/24", 0], ["2012/12/25", 0], ["2012/12/26", 0], ["2012/12/27", 0], ["2012/12/28", 0], ["2012/12/29", 0], ["2012/12/30", 0], ["2012/12/31", 0], ["2013/01/01", 0], ["2013/01/02", 0], ["2013/01/03", 0], ["2013/01/04", 0], ["2013/01/05", 0], ["2013/01/06", 0], ["2013/01/07", 0], ["2013/01/08", 0], ["2013/01/09", 0], ["2013/01/10", 0], ["2013/01/11", 0], ["2013/01/12", 0], ["2013/01/13", 0], ["2013/01/14", 0], ["2013/01/15", 0], ["2013/01/16", 1], ["2013/01/17", 0], ["2013/01/18", 0], ["2013/01/19", 0], ["2013/01/20", 0], ["2013/01/21", 0], ["2013/01/22", 0], ["2013/01/23", 0], ["2013/01/24", 0], ["2013/01/25", 0], ["2013/01/26", 0], ["2013/01/27", 0], ["2013/01/28", 0], ["2013/01/29", 0], ["2013/01/30", 0], ["2013/01/31", 0], ["2013/02/01", 0], ["2013/02/02", 0], ["2013/02/03", 0], ["2013/02/04", 0], ["2013/02/05", 0], ["2013/02/06", 0], ["2013/02/07", 0], ["2013/02/08", 0], ["2013/02/09", 0], ["2013/02/10", 0], ["2013/02/11", 0], ["2013/02/12", 0], ["2013/02/13", 0], ["2013/02/14", 0], ["2013/02/15", 0], ["2013/02/16", 0], ["2013/02/17", 0], ["2013/02/18", 0], ["2013/02/19", 0], ["2013/02/20", 0], ["2013/02/21", 0], ["2013/02/22", 0], ["2013/02/23", 0], ["2013/02/24", 0], ["2013/02/25", 0], ["2013/02/26", 0], ["2013/02/27", 0], ["2013/02/28", 0], ["2013/03/01", 0], ["2013/03/02", 0], ["2013/03/03", 0], ["2013/03/04", 0], ["2013/03/05", 0], ["2013/03/06", 0], ["2013/03/07", 0], ["2013/03/08", 0], ["2013/03/09", 0], ["2013/03/10", 0], ["2013/03/11", 0], ["2013/03/12", 0], ["2013/03/13", 0], ["2013/03/14", 0], ["2013/03/15", 0], ["2013/03/16", 0], ["2013/03/17", 0], ["2013/03/18", 0], ["2013/03/19", 0], ["2013/03/20", 0], ["2013/03/21", 0], ["2013/03/22", 0], ["2013/03/23", 0], ["2013/03/24", 0], ["2013/03/25", 0], ["2013/03/26", 0], ["2013/03/27", 0], ["2013/03/28", 0], ["2013/03/29", 0], ["2013/03/30", 0], ["2013/03/31", 0], ["2013/04/01", 0], ["2013/04/02", 0], ["2013/04/03", 0], ["2013/04/04", 0], ["2013/04/05", 0], ["2013/04/06", 0], ["2013/04/07", 0], ["2013/04/08", 0], ["2013/04/09", 0], ["2013/04/10", 1], ["2013/04/11", 0], ["2013/04/12", 0], ["2013/04/13", 0], ["2013/04/14", 3], ["2013/04/15", 0], ["2013/04/16", 0], ["2013/04/17", 3], ["2013/04/18", 1], ["2013/04/19", 0], ["2013/04/20", 0], ["2013/04/21", 2], ["2013/04/22", 0], ["2013/04/23", 0], ["2013/04/24", 0], ["2013/04/25", 3], ["2013/04/26", 0], ["2013/04/27", 6], ["2013/04/28", 0], ["2013/04/29", 0], ["2013/04/30", 0], ["2013/05/01", 0], ["2013/05/02", 0], ["2013/05/03", 0], ["2013/05/04", 0], ["2013/05/05", 1], ["2013/05/06", 0], ["2013/05/07", 1], ["2013/05/08", 0], ["2013/05/09", 0], ["2013/05/10", 1], ["2013/05/11", 6], ["2013/05/12", 0], ["2013/05/13", 0], ["2013/05/14", 0], ["2013/05/15", 0], ["2013/05/16", 0], ["2013/05/17", 0], ["2013/05/18", 0], ["2013/05/19", 0], ["2013/05/20", 2], ["2013/05/21", 5], ["2013/05/22", 1], ["2013/05/23", 0], ["2013/05/24", 0], ["2013/05/25", 0], ["2013/05/26", 0], ["2013/05/27", 2], ["2013/05/28", 1], ["2013/05/29", 1], ["2013/05/30", 0], ["2013/05/31", 0], ["2013/06/01", 0], ["2013/06/02", 1], ["2013/06/03", 0], ["2013/06/04", 0], ["2013/06/05", 0], ["2013/06/06", 0], ["2013/06/07", 0], ["2013/06/08", 0], ["2013/06/09", 4], ["2013/06/10", 4], ["2013/06/11", 0], ["2013/06/12", 0], ["2013/06/13", 0], ["2013/06/14", 0], ["2013/06/15", 0], ["2013/06/16", 6], ["2013/06/17", 0], ["2013/06/18", 0], ["2013/06/19", 3], ["2013/06/20", 0], ["2013/06/21", 0], ["2013/06/22", 0], ["2013/06/23", 0], ["2013/06/24", 0], ["2013/06/25", 0], ["2013/06/26", 0], ["2013/06/27", 0], ["2013/06/28", 0], ["2013/06/29", 1], ["2013/06/30", 6], ["2013/07/01", 1], ["2013/07/02", 0], ["2013/07/03", 1], ["2013/07/04", 0], ["2013/07/05", 0], ["2013/07/06", 0], ["2013/07/07", 2], ["2013/07/08", 2], ["2013/07/09", 1], ["2013/07/10", 0], ["2013/07/11", 1], ["2013/07/12", 2], ["2013/07/13", 2], ["2013/07/14", 1], ["2013/07/15", 1], ["2013/07/16", 1], ["2013/07/17", 3], ["2013/07/18", 1], ["2013/07/19", 1], ["2013/07/20", 2], ["2013/07/21", 1], ["2013/07/22", 4], ["2013/07/23", 5], ["2013/07/24", 4], ["2013/07/25", 2], ["2013/07/26", 4], ["2013/07/27", 3], ["2013/07/28", 10], ["2013/07/29", 2], ["2013/07/30", 3], ["2013/07/31", 2], ["2013/08/01", 1], ["2013/08/02", 1], ["2013/08/03", 4], ["2013/08/04", 4], ["2013/08/05", 4], ["2013/08/06", 1], ["2013/08/07", 1], ["2013/08/08", 1], ["2013/08/09", 1], ["2013/08/10", 8], ["2013/08/11", 2], ["2013/08/12", 1], ["2013/08/13", 10], ["2013/08/14", 1], ["2013/08/15", 3], ["2013/08/16", 3], ["2013/08/17", 10], ["2013/08/18", 4], ["2013/08/19", 2], ["2013/08/20", 4], ["2013/08/21", 11], ["2013/08/22", 1], ["2013/08/23", 1], ["2013/08/24", 5], ["2013/08/25", 11], ["2013/08/26", 7], ["2013/08/27", 4], ["2013/08/28", 1], ["2013/08/29", 2], ["2013/08/30", 1], ["2013/08/31", 1], ["2013/09/01", 3], ["2013/09/02", 12], ["2013/09/03", 10], ["2013/09/04", 1], ["2013/09/05", 3], ["2013/09/06", 3], ["2013/09/07", 1], ["2013/09/08", 23], ["2013/09/09", 11], ["2013/09/10", 7], ["2013/09/11", 5], ["2013/09/12", 12], ["2013/09/13", 2], ["2013/09/14", 1], ["2013/09/15", 1], ["2013/09/16", 2], ["2013/09/17", 9], ["2013/09/18", 1], ["2013/09/19", 4], ["2013/09/20", 1], ["2013/09/21", 1], ["2013/09/22", 3], ["2013/09/23", 2], ["2013/09/24", 2], ["2013/09/25", 15], ["2013/09/26", 5], ["2013/09/27", 1], ["2013/09/28", 2], ["2013/09/29", 3], ["2013/09/30", 1], ["2013/10/01", 2], ["2013/10/02", 1], ["2013/10/03", 1], ["2013/10/04", 1], ["2013/10/05", 1], ["2013/10/06", 1], ["2013/10/07", 1], ["2013/10/08", 1], ["2013/10/09", 1], ["2013/10/10", 1], ["2013/10/11", 1], ["2013/10/12", 1], ["2013/10/13", 4], ["2013/10/14", 1], ["2013/10/15", 1], ["2013/10/16", 1], ["2013/10/17", 1], ["2013/10/18", 1], ["2013/10/19", 1], ["2013/10/20", 4], ["2013/10/21", 1], ["2013/10/22", 2], ["2013/10/23", 6], ["2013/10/24", 5], ["2013/10/25", 1], ["2013/10/26", 1], ["2013/10/27", 3], ["2013/10/28", 1], ["2013/10/29", 1], ["2013/10/30", 3], ["2013/10/31", 2], ["2013/11/01", 4], ["2013/11/02", 5], ["2013/11/03", 10], ["2013/11/04", 5], ["2013/11/05", 1], ["2013/11/06", 1], ["2013/11/07", 9], ["2013/11/08", 1], ["2013/11/09", 5], ["2013/11/10", 3], ["2013/11/11", 2], ["2013/11/12", 1], ["2013/11/13", 2], ["2013/11/14", 1], ["2013/11/15", 1], ["2013/11/16", 1], ["2013/11/17", 6], ["2013/11/18", 2], ["2013/11/19", 3], ["2013/11/20", 2], ["2013/11/21", 1], ["2013/11/22", 3], ["2013/11/23", 2], ["2013/11/24", 1], ["2013/11/25", 1], ["2013/11/26", 2], ["2013/11/27", 0]]
|
@@ -0,0 +1,90 @@
|
|
1
|
+
{
|
2
|
+
"akerl": {
|
3
|
+
"date": "2013/11/27",
|
4
|
+
"today": 3,
|
5
|
+
"streaks": 52,
|
6
|
+
"longest_streak": 91,
|
7
|
+
"streak": 91,
|
8
|
+
"max": 88,
|
9
|
+
"mean": 2.9481,
|
10
|
+
"std_var": 7.1566,
|
11
|
+
"outliers": [50, 88, 32, 51],
|
12
|
+
"bounds": [0, 12, 25, 38, 88],
|
13
|
+
"quartiles": 172,
|
14
|
+
"quartile": {
|
15
|
+
"12": 1,
|
16
|
+
"13": 2
|
17
|
+
}
|
18
|
+
},
|
19
|
+
"mikegrb": {
|
20
|
+
"date": "2013/11/27",
|
21
|
+
"today": 0,
|
22
|
+
"streaks": 20,
|
23
|
+
"longest_streak": 139,
|
24
|
+
"streak": 139,
|
25
|
+
"max": 23,
|
26
|
+
"mean": 1.4044,
|
27
|
+
"std_var": 2.6412,
|
28
|
+
"outliers": [12, 23, 15],
|
29
|
+
"bounds": [0, 2, 5, 8, 23],
|
30
|
+
"quartiles": 103,
|
31
|
+
"quartile": {
|
32
|
+
"12": 4,
|
33
|
+
"0": 0
|
34
|
+
}
|
35
|
+
},
|
36
|
+
"fly": {
|
37
|
+
"date": "2013/11/27",
|
38
|
+
"today": 0,
|
39
|
+
"streaks": 43,
|
40
|
+
"longest_streak": 96,
|
41
|
+
"streak": 96,
|
42
|
+
"max": 28,
|
43
|
+
"mean": 2.7923,
|
44
|
+
"std_var": 4.571,
|
45
|
+
"outliers": [23, 22, 28],
|
46
|
+
"bounds": [0, 4, 9, 14, 28],
|
47
|
+
"quartiles": 100,
|
48
|
+
"quartile": {
|
49
|
+
"8": 2,
|
50
|
+
"35": null,
|
51
|
+
"-1": null
|
52
|
+
}
|
53
|
+
},
|
54
|
+
"leematos": {
|
55
|
+
"date": "2013/11/27",
|
56
|
+
"today": 0,
|
57
|
+
"streaks": 6,
|
58
|
+
"longest_streak": 1,
|
59
|
+
"streak": 0,
|
60
|
+
"max": 3,
|
61
|
+
"mean": 0.0273,
|
62
|
+
"std_var": 0.2325,
|
63
|
+
"outliers": [],
|
64
|
+
"bounds": [0, 0, 1, 2, 3],
|
65
|
+
"quartiles": 0,
|
66
|
+
"quartile": {
|
67
|
+
"1": 2,
|
68
|
+
"2": 3,
|
69
|
+
"3": 4
|
70
|
+
}
|
71
|
+
},
|
72
|
+
"torvalds": {
|
73
|
+
"date": "2013/11/27",
|
74
|
+
"today": 0,
|
75
|
+
"streaks": 45,
|
76
|
+
"longest_streak": 19,
|
77
|
+
"streak": 9,
|
78
|
+
"max": 42,
|
79
|
+
"mean": 6.1885,
|
80
|
+
"std_var": 6.5939,
|
81
|
+
"outliers": [34, 42, 41],
|
82
|
+
"bounds": [0, 7, 15, 23, 42],
|
83
|
+
"quartiles": 210,
|
84
|
+
"quartile": {
|
85
|
+
"42": 4,
|
86
|
+
"18": 3
|
87
|
+
}
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
[["2012/11/27", 1], ["2012/11/28", 1], ["2012/11/29", 4], ["2012/11/30", 11], ["2012/12/01", 4], ["2012/12/02", 2], ["2012/12/03", 4], ["2012/12/04", 6], ["2012/12/05", 2], ["2012/12/06", 5], ["2012/12/07", 7], ["2012/12/08", 0], ["2012/12/09", 0], ["2012/12/10", 4], ["2012/12/11", 31], ["2012/12/12", 22], ["2012/12/13", 25], ["2012/12/14", 10], ["2012/12/15", 11], ["2012/12/16", 10], ["2012/12/17", 8], ["2012/12/18", 19], ["2012/12/19", 15], ["2012/12/20", 22], ["2012/12/21", 6], ["2012/12/22", 0], ["2012/12/23", 1], ["2012/12/24", 0], ["2012/12/25", 0], ["2012/12/26", 0], ["2012/12/27", 3], ["2012/12/28", 3], ["2012/12/29", 0], ["2012/12/30", 5], ["2012/12/31", 0], ["2013/01/01", 1], ["2013/01/02", 8], ["2013/01/03", 7], ["2013/01/04", 3], ["2013/01/05", 3], ["2013/01/06", 4], ["2013/01/07", 14], ["2013/01/08", 4], ["2013/01/09", 8], ["2013/01/10", 7], ["2013/01/11", 8], ["2013/01/12", 0], ["2013/01/13", 0], ["2013/01/14", 14], ["2013/01/15", 0], ["2013/01/16", 10], ["2013/01/17", 2], ["2013/01/18", 6], ["2013/01/19", 0], ["2013/01/20", 4], ["2013/01/21", 0], ["2013/01/22", 15], ["2013/01/23", 11], ["2013/01/24", 13], ["2013/01/25", 2], ["2013/01/26", 0], ["2013/01/27", 0], ["2013/01/28", 15], ["2013/01/29", 8], ["2013/01/30", 8], ["2013/01/31", 6], ["2013/02/01", 1], ["2013/02/02", 0], ["2013/02/03", 7], ["2013/02/04", 5], ["2013/02/05", 5], ["2013/02/06", 3], ["2013/02/07", 8], ["2013/02/08", 9], ["2013/02/09", 1], ["2013/02/10", 2], ["2013/02/11", 0], ["2013/02/12", 6], ["2013/02/13", 2], ["2013/02/14", 0], ["2013/02/15", 8], ["2013/02/16", 0], ["2013/02/17", 1], ["2013/02/18", 4], ["2013/02/19", 27], ["2013/02/20", 20], ["2013/02/21", 30], ["2013/02/22", 8], ["2013/02/23", 3], ["2013/02/24", 10], ["2013/02/25", 12], ["2013/02/26", 25], ["2013/02/27", 11], ["2013/02/28", 15], ["2013/03/01", 2], ["2013/03/02", 12], ["2013/03/03", 14], ["2013/03/04", 0], ["2013/03/05", 7], ["2013/03/06", 0], ["2013/03/07", 9], ["2013/03/08", 9], ["2013/03/09", 2], ["2013/03/10", 1], ["2013/03/11", 4], ["2013/03/12", 8], ["2013/03/13", 5], ["2013/03/14", 2], ["2013/03/15", 7], ["2013/03/16", 0], ["2013/03/17", 3], ["2013/03/18", 8], ["2013/03/19", 6], ["2013/03/20", 0], ["2013/03/21", 6], ["2013/03/22", 7], ["2013/03/23", 6], ["2013/03/24", 2], ["2013/03/25", 5], ["2013/03/26", 3], ["2013/03/27", 5], ["2013/03/28", 13], ["2013/03/29", 3], ["2013/03/30", 1], ["2013/03/31", 4], ["2013/04/01", 5], ["2013/04/02", 6], ["2013/04/03", 4], ["2013/04/04", 4], ["2013/04/05", 8], ["2013/04/06", 0], ["2013/04/07", 3], ["2013/04/08", 5], ["2013/04/09", 6], ["2013/04/10", 8], ["2013/04/11", 5], ["2013/04/12", 4], ["2013/04/13", 1], ["2013/04/14", 10], ["2013/04/15", 1], ["2013/04/16", 6], ["2013/04/17", 5], ["2013/04/18", 3], ["2013/04/19", 9], ["2013/04/20", 5], ["2013/04/21", 3], ["2013/04/22", 2], ["2013/04/23", 0], ["2013/04/24", 2], ["2013/04/25", 0], ["2013/04/26", 2], ["2013/04/27", 3], ["2013/04/28", 1], ["2013/04/29", 25], ["2013/04/30", 34], ["2013/05/01", 12], ["2013/05/02", 17], ["2013/05/03", 8], ["2013/05/04", 14], ["2013/05/05", 7], ["2013/05/06", 8], ["2013/05/07", 22], ["2013/05/08", 6], ["2013/05/09", 20], ["2013/05/10", 14], ["2013/05/11", 6], ["2013/05/12", 0], ["2013/05/13", 6], ["2013/05/14", 3], ["2013/05/15", 7], ["2013/05/16", 7], ["2013/05/17", 1], ["2013/05/18", 6], ["2013/05/19", 1], ["2013/05/20", 6], ["2013/05/21", 6], ["2013/05/22", 4], ["2013/05/23", 9], ["2013/05/24", 7], ["2013/05/25", 5], ["2013/05/26", 5], ["2013/05/27", 0], ["2013/05/28", 7], ["2013/05/29", 3], ["2013/05/30", 6], ["2013/05/31", 5], ["2013/06/01", 7], ["2013/06/02", 1], ["2013/06/03", 7], ["2013/06/04", 7], ["2013/06/05", 5], ["2013/06/06", 6], ["2013/06/07", 8], ["2013/06/08", 9], ["2013/06/09", 3], ["2013/06/10", 5], ["2013/06/11", 2], ["2013/06/12", 8], ["2013/06/13", 9], ["2013/06/14", 5], ["2013/06/15", 5], ["2013/06/16", 0], ["2013/06/17", 0], ["2013/06/18", 5], ["2013/06/19", 7], ["2013/06/20", 7], ["2013/06/21", 6], ["2013/06/22", 8], ["2013/06/23", 1], ["2013/06/24", 1], ["2013/06/25", 3], ["2013/06/26", 11], ["2013/06/27", 0], ["2013/06/28", 0], ["2013/06/29", 8], ["2013/06/30", 3], ["2013/07/01", 0], ["2013/07/02", 42], ["2013/07/03", 30], ["2013/07/04", 10], ["2013/07/05", 3], ["2013/07/06", 5], ["2013/07/07", 2], ["2013/07/08", 0], ["2013/07/09", 11], ["2013/07/10", 30], ["2013/07/11", 14], ["2013/07/12", 0], ["2013/07/13", 17], ["2013/07/14", 4], ["2013/07/15", 2], ["2013/07/16", 0], ["2013/07/17", 1], ["2013/07/18", 8], ["2013/07/19", 6], ["2013/07/20", 6], ["2013/07/21", 2], ["2013/07/22", 4], ["2013/07/23", 7], ["2013/07/24", 2], ["2013/07/25", 0], ["2013/07/26", 14], ["2013/07/27", 0], ["2013/07/28", 4], ["2013/07/29", 2], ["2013/07/30", 0], ["2013/07/31", 10], ["2013/08/01", 0], ["2013/08/02", 9], ["2013/08/03", 4], ["2013/08/04", 4], ["2013/08/05", 0], ["2013/08/06", 6], ["2013/08/07", 2], ["2013/08/08", 9], ["2013/08/09", 6], ["2013/08/10", 6], ["2013/08/11", 5], ["2013/08/12", 3], ["2013/08/13", 2], ["2013/08/14", 1], ["2013/08/15", 1], ["2013/08/16", 7], ["2013/08/17", 1], ["2013/08/18", 2], ["2013/08/19", 5], ["2013/08/20", 0], ["2013/08/21", 5], ["2013/08/22", 5], ["2013/08/23", 5], ["2013/08/24", 2], ["2013/08/25", 5], ["2013/08/26", 2], ["2013/08/27", 2], ["2013/08/28", 2], ["2013/08/29", 3], ["2013/08/30", 5], ["2013/08/31", 0], ["2013/09/01", 0], ["2013/09/02", 8], ["2013/09/03", 22], ["2013/09/04", 27], ["2013/09/05", 14], ["2013/09/06", 14], ["2013/09/07", 16], ["2013/09/08", 3], ["2013/09/09", 20], ["2013/09/10", 15], ["2013/09/11", 10], ["2013/09/12", 24], ["2013/09/13", 9], ["2013/09/14", 0], ["2013/09/15", 6], ["2013/09/16", 5], ["2013/09/17", 4], ["2013/09/18", 7], ["2013/09/19", 4], ["2013/09/20", 3], ["2013/09/21", 1], ["2013/09/22", 3], ["2013/09/23", 3], ["2013/09/24", 2], ["2013/09/25", 7], ["2013/09/26", 0], ["2013/09/27", 4], ["2013/09/28", 8], ["2013/09/29", 8], ["2013/09/30", 9], ["2013/10/01", 4], ["2013/10/02", 5], ["2013/10/03", 3], ["2013/10/04", 13], ["2013/10/05", 5], ["2013/10/06", 3], ["2013/10/07", 4], ["2013/10/08", 1], ["2013/10/09", 0], ["2013/10/10", 7], ["2013/10/11", 3], ["2013/10/12", 7], ["2013/10/13", 5], ["2013/10/14", 5], ["2013/10/15", 5], ["2013/10/16", 4], ["2013/10/17", 7], ["2013/10/18", 3], ["2013/10/19", 1], ["2013/10/20", 1], ["2013/10/21", 0], ["2013/10/22", 10], ["2013/10/23", 3], ["2013/10/24", 1], ["2013/10/25", 4], ["2013/10/26", 0], ["2013/10/27", 7], ["2013/10/28", 2], ["2013/10/29", 3], ["2013/10/30", 5], ["2013/10/31", 6], ["2013/11/01", 4], ["2013/11/02", 2], ["2013/11/03", 2], ["2013/11/04", 1], ["2013/11/05", 0], ["2013/11/06", 5], ["2013/11/07", 6], ["2013/11/08", 0], ["2013/11/09", 0], ["2013/11/10", 6], ["2013/11/11", 41], ["2013/11/12", 11], ["2013/11/13", 18], ["2013/11/14", 12], ["2013/11/15", 14], ["2013/11/16", 11], ["2013/11/17", 0], ["2013/11/18", 9], ["2013/11/19", 8], ["2013/11/20", 11], ["2013/11/21", 3], ["2013/11/22", 18], ["2013/11/23", 3], ["2013/11/24", 1], ["2013/11/25", 1], ["2013/11/26", 5], ["2013/11/27", 0]]
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'timecop'
|
3
|
+
|
4
|
+
describe GithubStats do
|
5
|
+
it 'defines the Github magic constant' do
|
6
|
+
expect(GithubStats::GITHUB_MAGIC).to be_an_instance_of Float
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'defines a Datapoint object' do
|
10
|
+
a = GithubStats::Datapoint.new(DateTime.now, 4)
|
11
|
+
expect(a.date).to be_an_instance_of DateTime
|
12
|
+
expect(a.score).to eql 4
|
13
|
+
end
|
14
|
+
|
15
|
+
describe GithubStats::Data do
|
16
|
+
@users = open('spec/examples/results') { |f| JSON.parse f.read }
|
17
|
+
@users.each_key do |name|
|
18
|
+
data = JSON.parse(open("spec/examples/#{name}.user") { |fh| fh.read })
|
19
|
+
@users[name]['data'] = GithubStats::Data.new data
|
20
|
+
end
|
21
|
+
|
22
|
+
@users.each do |name, results|
|
23
|
+
Timecop.freeze Date.parse(results['date'])
|
24
|
+
data = results.delete('data')
|
25
|
+
|
26
|
+
context "for #{name}" do
|
27
|
+
describe '#to_h' do
|
28
|
+
it 'returns the data as a hash' do
|
29
|
+
expect(data.to_h).to be_an_instance_of Hash
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#today' do
|
34
|
+
it 'returns the score for today' do
|
35
|
+
expect(data.today).to eql results['today']
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#[]=' do
|
40
|
+
it 'returns the score for a given day' do
|
41
|
+
expect(data[results['date']]).to eql results['today']
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#scores' do
|
46
|
+
it 'returns the scores as an array' do
|
47
|
+
expect(data.scores).to be_an_instance_of Array
|
48
|
+
expect(data.scores.size).to be 366
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#streaks' do
|
53
|
+
it 'returns all the streaks for a user' do
|
54
|
+
expect(data.streaks.size).to eql results['streaks']
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#longest_streak' do
|
59
|
+
it "returns the user's longest streak" do
|
60
|
+
expect(data.longest_streak.size).to eql results['longest_streak']
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#streak' do
|
65
|
+
it "returns a user's current streak" do
|
66
|
+
expect(data.streak.size).to eql results['streak']
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe '#max' do
|
71
|
+
it 'returns the highest score in the set' do
|
72
|
+
expect(data.max.score).to eql results['max']
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '#mean' do
|
77
|
+
it 'returns the mean score of the set' do
|
78
|
+
expect(data.mean.round 4).to eql results['mean']
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#std_var' do
|
83
|
+
it 'returns the standard variance of the set' do
|
84
|
+
expect(data.std_var.round 4).to eql results['std_var']
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#outliers' do
|
89
|
+
it 'returns the outliers for the distribution' do
|
90
|
+
expect(data.outliers).to eql results['outliers']
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '#quartile_boundaries' do
|
95
|
+
it 'returns a boundaries of the quartiles of the set' do
|
96
|
+
expect(data.quartile_boundaries).to eql results['bounds']
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '#quartiles' do
|
101
|
+
it 'returns the quartiles for a user' do
|
102
|
+
expect(data.quartiles[1].size).to eql results['quartiles']
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe '#quartile' do
|
107
|
+
it 'returns which quartile a point falls into' do
|
108
|
+
results['quartile'].each do |p, q|
|
109
|
+
expect(data.quartile(p.to_i)).to eql q
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe '#pad' do
|
115
|
+
it 'returns a padded dataset' do
|
116
|
+
expect(data.pad.size % 7).to eql 0
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GithubStats do
|
4
|
+
describe '.new' do
|
5
|
+
it 'create a User object' do
|
6
|
+
expect(GithubStats.new).to be_an_instance_of GithubStats::User
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe GithubStats::User do
|
11
|
+
let(:named_user) { GithubStats::User.new 'akerl' }
|
12
|
+
let(:unnamed_user) { GithubStats::User.new }
|
13
|
+
let(:hash_user) { GithubStats::User.new(name: 'fly', url: 'URL-FOR-%s') }
|
14
|
+
|
15
|
+
context 'when created with a string' do
|
16
|
+
it 'uses that string as the username' do
|
17
|
+
expect(named_user.name).to eql 'akerl'
|
18
|
+
end
|
19
|
+
it 'uses the default URL' do
|
20
|
+
expect(named_user.url).to eql GithubStats::DEFAULT_URL % 'akerl'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
context 'when created with no arguments' do
|
24
|
+
it 'guesses the username based on the environment' do
|
25
|
+
expect(unnamed_user.name).to be_an_instance_of String
|
26
|
+
end
|
27
|
+
end
|
28
|
+
context 'when created with a hash' do
|
29
|
+
it 'uses the name parameter as the username' do
|
30
|
+
expect(hash_user.name).to eql 'fly'
|
31
|
+
end
|
32
|
+
it 'uses the URL from the hash' do
|
33
|
+
expect(hash_user.url).to eql 'URL-FOR-fly'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'does not pull data until it needs to' do
|
38
|
+
expect(named_user.instance_variables).to_not include(:@data)
|
39
|
+
expect(named_user.last_updated).to be_nil
|
40
|
+
named_user.data
|
41
|
+
expect(named_user.instance_variables).to include(:@data)
|
42
|
+
expect(named_user.last_updated).to be_an_instance_of DateTime
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'raises an exception if it cannot load data' do
|
46
|
+
expect { hash_user.scores }.to raise_error RuntimeError
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'returns a human-readable string when inspected' do
|
50
|
+
expect(named_user.to_s).to eql 'Contributions from akerl'
|
51
|
+
expect(named_user.inspect).to eql 'Contributions from akerl'
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'proxies requests for Data methods' do
|
55
|
+
expect(named_user.scores).to be_an_instance_of Array
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'truthfully handles respond_to? queries' do
|
59
|
+
expect(named_user.respond_to? :to_s).to be_true
|
60
|
+
expect(named_user.respond_to? :today).to be_true
|
61
|
+
expect(named_user.respond_to? :abcd).to be_false
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: githubstats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Les Aker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curb
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: basiccache
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "<"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "<"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: timecop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: rubocop
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,18 +184,28 @@ files:
|
|
156
184
|
- bin/githubstats
|
157
185
|
- githubstats.gemspec
|
158
186
|
- lib/githubstats.rb
|
187
|
+
- lib/githubstats/data.rb
|
188
|
+
- spec/examples/akerl.user
|
189
|
+
- spec/examples/fly.user
|
190
|
+
- spec/examples/leematos.user
|
191
|
+
- spec/examples/mikegrb.user
|
192
|
+
- spec/examples/results
|
193
|
+
- spec/examples/torvalds.user
|
194
|
+
- spec/githubstats/data_spec.rb
|
195
|
+
- spec/githubstats_spec.rb
|
159
196
|
- spec/spec_helper.rb
|
160
197
|
- vendor/cache/ast-1.1.0.gem
|
198
|
+
- vendor/cache/basiccache-0.0.25.gem
|
161
199
|
- vendor/cache/coveralls-0.7.0.gem
|
162
200
|
- vendor/cache/curb-0.8.5.gem
|
163
201
|
- vendor/cache/diff-lcs-1.2.5.gem
|
164
|
-
- vendor/cache/docile-1.1.
|
202
|
+
- vendor/cache/docile-1.1.1.gem
|
165
203
|
- vendor/cache/fuubar-1.2.1.gem
|
166
204
|
- vendor/cache/hashr-0.0.22.gem
|
167
205
|
- vendor/cache/json-1.8.1.gem
|
168
206
|
- vendor/cache/mime-types-2.0.gem
|
169
207
|
- vendor/cache/multi_json-1.8.2.gem
|
170
|
-
- vendor/cache/parser-2.1.0.
|
208
|
+
- vendor/cache/parser-2.1.0.pre2.gem
|
171
209
|
- vendor/cache/powerpack-0.0.9.gem
|
172
210
|
- vendor/cache/rainbow-1.1.4.gem
|
173
211
|
- vendor/cache/rake-10.1.0.gem
|
@@ -184,6 +222,7 @@ files:
|
|
184
222
|
- vendor/cache/slop-3.4.7.gem
|
185
223
|
- vendor/cache/term-ansicolor-1.2.2.gem
|
186
224
|
- vendor/cache/thor-0.18.1.gem
|
225
|
+
- vendor/cache/timecop-0.6.3.gem
|
187
226
|
- vendor/cache/tins-0.13.1.gem
|
188
227
|
- vendor/cache/travis-lint-1.7.0.gem
|
189
228
|
homepage: https://github.com/akerl/githubstats
|
@@ -211,4 +250,13 @@ signing_key:
|
|
211
250
|
specification_version: 4
|
212
251
|
summary: Present Github contributions stats in a consumable format
|
213
252
|
test_files:
|
253
|
+
- spec/examples/akerl.user
|
254
|
+
- spec/examples/fly.user
|
255
|
+
- spec/examples/leematos.user
|
256
|
+
- spec/examples/mikegrb.user
|
257
|
+
- spec/examples/results
|
258
|
+
- spec/examples/torvalds.user
|
259
|
+
- spec/githubstats/data_spec.rb
|
260
|
+
- spec/githubstats_spec.rb
|
214
261
|
- spec/spec_helper.rb
|
262
|
+
has_rdoc:
|
Binary file
|
Binary file
|