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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 19948dcd258e9e6fe2c2dd1107f9865729580358
4
- data.tar.gz: 8641305345c72fc7d9eb40bee86526a0879d1b93
3
+ metadata.gz: a41f496b849808b8b3914d30dfdcc9573aa874d4
4
+ data.tar.gz: 494012cdbff7ae1ca2fd03f0e8b6e67b395f7dd4
5
5
  SHA512:
6
- metadata.gz: 1e090690830fff33cf761ac7c029fec813e4db023c3feb01e7f82a3a442527c17a09f9c8bd6893de0a4f882f1239442558018d19910b2eb76759a776d1383d46
7
- data.tar.gz: b376c8553ea90afb5cb5374f8b4e702554d3ae165fe5d32b7fbb37a140b28b16859eb8f97c173e3185a3b18c6ccf3bf51fd45423362d0c2e2705996c824521ab
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.1.7)
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.0)
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.pre1)
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/basiccache.png)](https://codeclimate.com/github/akerl/githubstats)
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
- contrib = GithubStats.new ARGV.first
5
+ user = GithubStats.new ARGV.first
6
6
 
7
- puts "Contribution data for #{contrib.user}:
8
- Today's score: #{contrib.today}
9
- Current streak: #{contrib.streak.length}
10
- Longest streak: #{contrib.longest_streak.length}
11
- High score: #{contrib.max.score} on #{contrib.max.date}
12
- Quartile boundaries: #{contrib.quartile_boundaries(github = false).inspect}
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', *contrib.data.pop(60).map { |point| point.score.to_s })
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.1.7'
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
- require 'date'
4
- require 'version'
5
-
3
+ autoload :Rugged, 'rugged'
6
4
  ##
7
- # Rugged is used to check git's configuration for a github user, if available
5
+ # Rugged is used if available to look up the user's Github username
8
6
 
9
7
  begin
10
- require 'rugged'
11
- USING_RUGGED = true
8
+ RUGGED_USER = Rugged::Config.global['github.user']
12
9
  rescue LoadError
13
- USING_RUGGED = false
10
+ RUGGED_USER = nil
14
11
  end
15
12
 
16
13
  ##
17
- # Basic_Cache is used to cache computation results, if available
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
- class << self
31
- ##
32
- # Add .new() helper for creating a new Contributions object
17
+ ##
18
+ # Helper method for creating new user objects
33
19
 
34
- def new(*args)
35
- self::Contributions.new(*args)
36
- end
20
+ def self.new(*args)
21
+ self::User.new(*args)
37
22
  end
38
23
 
39
24
  ##
40
- # Datapoint objects provide a more sane date/time point interface
25
+ # Default URL for grabbing data
41
26
 
42
- Datapoint = Struct.new(:date, :score)
27
+ DEFAULT_URL = 'https://github.com/users/%s/contributions_calendar_data'
43
28
 
44
29
  ##
45
- # Contributions object holds and provides stats data for a user
46
-
47
- class Contributions
48
- attr_reader :user, :data, :last_updated
49
- attr_accessor :url
30
+ # User object
50
31
 
51
- GH_MAGIC = 3.77972616981
32
+ class User
33
+ attr_reader :name, :url, :data, :last_updated
52
34
 
53
35
  ##
54
- # Create a new object
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
- @user = params[:user] || guess_user
61
- @url = "https://github.com/users/#{@user}/contributions_calendar_data"
62
- @data = []
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 #{@user}"
49
+ "Contributions from #{@name}"
73
50
  end
74
- alias_method :to_s, :inspect
51
+ alias_method :inspect, :to_s
75
52
 
76
53
  ##
77
- # Return raw data directly
54
+ # Lazy loader for data
78
55
 
79
- def to_a
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
- # Return Hash where keys are dates and values are scores
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 guess_user
95
- names = []
96
- names << Rugged::Config.global['github.user'] if USING_RUGGED
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
- # Parse the Github data into a pretty objects
72
+ # Guesses the user's name based on system environment
113
73
 
114
- def parse(raw_data)
115
- raw_data.map { |d, s| Datapoint.new(Date.parse(d), s.to_i) }
116
- rescue
117
- raise 'Failed to parse data'
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
- # Update the data based on Github
81
+ # Creates a new Data object from downloaded data
122
82
 
123
- def update
124
- @data = parse download
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
- # Return today's score
89
+ # Downloads new data from Github
131
90
 
132
- def today
133
- @cache.cache { to_h[Date.today] }
134
- end
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
- # Call the provided block and return its value
236
-
237
- def cache(key = nil, &code)
238
- code.call
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.1.7
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-24 00:00:00.000000000 Z
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.0.gem
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.pre1.gem
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