hubtime 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ data
2
+ .DS_Store
3
+ hubtime_config.yml
4
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'commander'
4
+ gem 'active_support'
5
+ gem 'i18n'
6
+ gem 'tzinfo'
7
+
8
+ gem 'octokit'
9
+ gem 'terminal-table'
10
+ gem 'erubis'
11
+ gem 'hashie'
12
+
13
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,56 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ hubtime (0.0.1)
5
+ active_support (~> 3.0)
6
+ commander (~> 4.1)
7
+ erubis (~> 2.7)
8
+ hashie (~> 1.2)
9
+ i18n (~> 0.6)
10
+ octokit (~> 1.20)
11
+ terminal-table (~> 1.4)
12
+ tzinfo (~> 0.3)
13
+
14
+ GEM
15
+ remote: http://rubygems.org/
16
+ specs:
17
+ active_support (3.0.0)
18
+ activesupport (= 3.0.0)
19
+ activesupport (3.0.0)
20
+ addressable (2.3.2)
21
+ commander (4.1.3)
22
+ highline (~> 1.6.11)
23
+ erubis (2.7.0)
24
+ faraday (0.8.4)
25
+ multipart-post (~> 1.1)
26
+ faraday_middleware (0.9.0)
27
+ faraday (>= 0.7.4, < 0.9)
28
+ hashie (1.2.0)
29
+ highline (1.6.15)
30
+ i18n (0.6.1)
31
+ multi_json (1.5.0)
32
+ multipart-post (1.1.5)
33
+ netrc (0.7.7)
34
+ octokit (1.20.0)
35
+ addressable (~> 2.2)
36
+ faraday (~> 0.8)
37
+ faraday_middleware (~> 0.9)
38
+ hashie (~> 1.2)
39
+ multi_json (~> 1.3)
40
+ netrc (~> 0.7.7)
41
+ terminal-table (1.4.5)
42
+ tzinfo (0.3.35)
43
+
44
+ PLATFORMS
45
+ ruby
46
+
47
+ DEPENDENCIES
48
+ active_support
49
+ commander
50
+ erubis
51
+ hashie
52
+ hubtime!
53
+ i18n
54
+ octokit
55
+ terminal-table
56
+ tzinfo
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2012 Brian Leonard
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,109 @@
1
+ ## Hubtime
2
+
3
+ I wanted to be able to see how things went this year, but Github didn't give a graph across all the repositories. I used their API to generate some graphs.
4
+
5
+ ### Commands
6
+
7
+ First, you need to install the gem:
8
+
9
+ gem install hubtime
10
+
11
+ Note: `hubtime` will add the file `hubtime_config.yml` and the directory `data` on the directory you run the command.
12
+
13
+ To give auth (It will store your password encrypted on disk)
14
+
15
+ hubtime auth
16
+
17
+ To see what repositiories it will pull from
18
+
19
+ hubtime repositories
20
+
21
+ To ignore some of those
22
+
23
+ hubtime ignore bleonard/rails
24
+
25
+ Caching is heavily used to not kill Github and speed things up. Caching is done at the sha, time window per repo, and the full history levels.
26
+ Specifically, if you add another repo or something, you'll want to do this
27
+
28
+ hubtime clear activity
29
+
30
+ If things are generally messed up and you want to start again, clear it all
31
+
32
+ hubtime clear all
33
+
34
+ #### To show table of commits and such
35
+
36
+ hubtime table
37
+ hubtime table --months 3
38
+ hubtime table --unit day
39
+ hubtime table --unit day --months 1
40
+ hubtime table --unit year
41
+
42
+ hubtime table --unit month
43
+ +---------+---------+--------+-----------+-----------+
44
+ | Month | Commits | Impact | Additions | Deletions |
45
+ +---------+---------+--------+-----------+-----------+
46
+ | 2012-01 | 241 | 29581 | 15324 | 14257 |
47
+ | 2012-02 | 250 | 15518 | 7844 | 7674 |
48
+ | 2012-03 | 181 | 16647 | 12036 | 4611 |
49
+ | 2012-04 | 130 | 14755 | 12213 | 2542 |
50
+ | 2012-05 | 178 | 40102 | 22883 | 17219 |
51
+ | 2012-06 | 91 | 9870 | 7279 | 2591 |
52
+ | 2012-07 | 50 | 5017 | 4677 | 340 |
53
+ | 2012-08 | 110 | 10124 | 5214 | 4910 |
54
+ | 2012-09 | 49 | 3632 | 2535 | 1097 |
55
+ | 2012-10 | 153 | 54326 | 34419 | 19907 |
56
+ | 2012-11 | 183 | 27958 | 22602 | 5356 |
57
+ | 2012-12 | 123 | 21099 | 13897 | 7202 |
58
+ +---------+---------+--------+-----------+-----------+
59
+
60
+ #### Graph a piece of data
61
+
62
+ hubtime graph
63
+ hubtime graph impact
64
+ hubtime graph deletions
65
+ hubtime graph additions --user otherlogin
66
+
67
+ hubtime graph commits --months 3
68
+
69
+ ![Commit Graph](https://raw.github.com/bleonard/hubtime/master/readme/graph.png)
70
+
71
+ #### All of those work with a stacked graph to see if broken up by repository
72
+
73
+ hubtime graph --stacked
74
+
75
+ hubtime graph impact --stacked
76
+
77
+ ![Stacked Graph](https://raw.github.com/bleonard/hubtime/master/readme/stacked.png)
78
+
79
+ #### Impact Graph like on Github
80
+
81
+ hubtime impact
82
+
83
+ hubtime impact --months 12
84
+
85
+ ![Stacked Graph](https://raw.github.com/bleonard/hubtime/master/readme/impact.png)
86
+
87
+ #### Pie chart of repositories
88
+
89
+ hubtime pie
90
+ hubtime pie impact
91
+
92
+ hubtime pie --months 3
93
+
94
+ ![Stacked Graph](https://raw.github.com/bleonard/hubtime/master/readme/pie.png)
95
+
96
+ #### Sparklines in the console
97
+
98
+ hubtime spark
99
+ hubtime spark commits
100
+
101
+ hubtime spark impact
102
+ ▄▂▂▂▅▁▁▁▇▇▄▃
103
+
104
+ #### Development
105
+
106
+ I use rvm and bundler. Check out this repo and `bundle install` to get started.
107
+ All of the above commands would need `bundle exec` prepended to work in development.
108
+
109
+
data/bin/hubtime ADDED
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'commander/import'
4
+ require 'hubtime'
5
+
6
+ program :name, 'hubtime'
7
+ program :version, Hubtime::VERSION
8
+ program :description, 'See activity on Github.'
9
+
10
+ command :impact do |c|
11
+ c.syntax = 'hubtime impact'
12
+ c.summary = ''
13
+ c.description = 'Graph your additions and deletions'
14
+ c.example 'description', 'command example'
15
+ c.option '--months INTEGER', 'How many months of history'
16
+ c.option '--user USERNAME', 'Which Github user'
17
+ c.action do |args, options|
18
+ options.default :months => 12
19
+ activity = Hubtime::Activity.new(self, options.user, options.months)
20
+ file = activity.impact
21
+ puts "saved: #{file}"
22
+ `open #{file}`
23
+ end
24
+ end
25
+
26
+ command :graph do |c|
27
+ c.syntax = 'hubtime graph [commits|impact|additions|deletions]'
28
+ c.summary = ''
29
+ c.description = 'Graph a single count'
30
+ c.example 'description', 'command example'
31
+ c.option '--months INTEGER', 'How many months of history'
32
+ c.option '--user USERNAME', 'Which Github user'
33
+ c.option '--stacked', 'To see data by repository'
34
+ c.action do |args, options|
35
+ options.default :months => 12
36
+ options.default :data => "count"
37
+ type = args.first
38
+ type ||= "commits"
39
+ type = "count" if type == "commits"
40
+ activity = Hubtime::Activity.new(self, options.user, options.months)
41
+ file = activity.graph(type, options.stacked.present?)
42
+ puts "saved: #{file}"
43
+ `open #{file}`
44
+ end
45
+ end
46
+
47
+ command :pie do |c|
48
+ c.syntax = 'hubtime pie [commits|impact|additions|deletions]'
49
+ c.summary = ''
50
+ c.description = 'Graph a pie chart by repository'
51
+ c.example 'description', 'command example'
52
+ c.option '--months INTEGER', 'How many months of history'
53
+ c.option '--user USERNAME', 'Which Github user'
54
+ c.action do |args, options|
55
+ options.default :months => 12
56
+ options.default :data => "count"
57
+ type = args.first
58
+ type ||= "commits"
59
+ type = "count" if type == "commits"
60
+ activity = Hubtime::Activity.new(self, options.user, options.months)
61
+ file = activity.pie(type)
62
+ puts "saved: #{file}"
63
+ `open #{file}`
64
+ end
65
+ end
66
+
67
+ command :table do |c|
68
+ c.syntax = 'hubtime table [options]'
69
+ c.summary = ''
70
+ c.description = 'Table your time'
71
+ c.example 'description', 'command example'
72
+ c.option '--months INTEGER', 'How many months of history'
73
+ c.option '--user USERNAME', 'How many months of history'
74
+ c.option '--unit (year|month|day)', 'Granularity of the results'
75
+ c.action do |args, options|
76
+ options.default :months => 12
77
+ options.default :unit => "month"
78
+ activity = Hubtime::Activity.new(self, options.user, options.months)
79
+ puts activity.table(options.unit)
80
+ end
81
+ end
82
+
83
+ command :spark do |c|
84
+ c.syntax = 'hubtime spark [options]'
85
+ c.summary = ''
86
+ c.description = 'Graph your time'
87
+ c.example 'description', 'command example'
88
+ c.option '--months INTEGER', 'How many months of history'
89
+ c.option '--user USERNAME', 'How many months of history'
90
+ c.option '--unit (year|month|day)', 'Granularity of the results'
91
+ c.option '--data (count|impact|additions|deletions)', 'Type of results'
92
+ c.action do |args, options|
93
+ options.default :months => 12
94
+ options.default :unit => "month"
95
+ type = args.first
96
+ type ||= "commits"
97
+ type = "count" if type == "commits"
98
+
99
+ activity = Hubtime::Activity.new(self, options.user, options.months)
100
+ puts activity.spark(options.unit, type)
101
+ end
102
+ end
103
+
104
+ command :config do |c|
105
+ c.syntax = 'hubtime config --user USERNAME --password PASSWORD'
106
+ c.summary = ''
107
+ c.description = 'Sets your details'
108
+ c.example 'description', 'command example'
109
+ c.option '--user USERNAME', 'Github user name'
110
+ c.option '--password PASSWORD', 'Github password'
111
+ c.action do |args, options|
112
+ if options.password || options.user
113
+ raise("Need password") unless options.password
114
+ raise("Need github user name") unless options.user
115
+ Hubtime::HubConfig.store(options.user, options.password)
116
+ puts "Set config..."
117
+ else
118
+ puts "Current config..."
119
+ end
120
+
121
+ puts " Username: #{Hubtime::HubConfig.user}"
122
+ puts " Password: #{Hubtime::HubConfig.display_password}"
123
+
124
+ unless options.password || options.user
125
+ puts "To set, use command: hubtime config --user USERNAME --password PASSWORD"
126
+ end
127
+
128
+ puts ""
129
+ end
130
+ end
131
+
132
+ command :auth do |c|
133
+ c.syntax = 'hubtime auth'
134
+ c.summary = ''
135
+ c.description = 'Saves credentials'
136
+ c.action do |args, options|
137
+ username = ask("Github Username: ")
138
+ password = ask("Github Password: ") { |q| q.echo = "*" }
139
+
140
+ raise "Need a username" if username.blank?
141
+ raise "Need a password" if password.blank?
142
+
143
+ Hubtime::HubConfig.auth(username, password)
144
+
145
+ puts "Current auth..."
146
+
147
+ puts " Username: #{Hubtime::HubConfig.user}"
148
+ puts " Password: #{Hubtime::HubConfig.display_password}"
149
+
150
+ unless options.password || options.user
151
+ puts "To set directly, use command: hubtime config --user USERNAME --password PASSWORD"
152
+ end
153
+
154
+ puts ""
155
+ end
156
+ end
157
+
158
+ command :ignore do |c|
159
+ c.syntax = 'hubtime ignore REPO_NAME'
160
+ c.summary = ''
161
+ c.description = 'Stop looking at this repo'
162
+ c.example 'description', 'hubtime ignore bleonard/rails'
163
+ c.action do |args, options|
164
+ if args.first
165
+ Hubtime::HubConfig.add_ignore(args.first)
166
+ Hubtime::Cacher.clear("activity") # different repos
167
+ Hubtime::Cacher.clear("charts")
168
+ end
169
+
170
+ puts "Current ignore list: #{Hubtime::HubConfig.ignore.join(", ")}"
171
+ puts "This list can be edited in the config.yml"
172
+ end
173
+ end
174
+
175
+ command :clear do |c|
176
+ c.syntax = 'hubtime clear'
177
+ c.summary = ''
178
+ c.description = 'Removes items from the cache'
179
+ c.example 'description', 'hubtime clear activity'
180
+ c.action do |args, options|
181
+ args << "activity" if args.size == 0
182
+ args.each do |item|
183
+ Hubtime::Cacher.clear(item)
184
+ end
185
+ end
186
+ end
187
+
188
+ command :repositories do |c|
189
+ c.syntax = 'hubtime repositories'
190
+ c.description = 'Lists known repositories'
191
+ c.option '--user USERNAME', 'Github user name'
192
+ c.action do |args, options|
193
+ user = options.user
194
+ user ||= Hubtime::HubConfig.user
195
+ Hubtime::GithubService.owner.repositories(user).each do |name|
196
+ puts name
197
+ end
198
+ end
199
+ end
data/hubtime.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "hubtime/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "hubtime"
7
+ s.version = Hubtime::VERSION
8
+ s.summary = "Visualization of your Github activity over the past year via Github API."
9
+ s.email = "contact@plataformatec.com.br"
10
+ s.homepage = "http://github.com/bleonard/hubtime"
11
+ s.description = "Visualization of your Github activity over the past year via Github API with visualizations like table, graph, stacked graph and pie chart."
12
+ s.authors = ['Brian Leonard']
13
+
14
+ s.rubyforge_project = "hubtime"
15
+
16
+ s.executables << "hubtime"
17
+ s.files = `git ls-files`.split("\n")
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_dependency("active_support", "~> 3.0")
21
+ s.add_dependency("commander", "~> 4.1")
22
+ s.add_dependency("i18n", "~> 0.6")
23
+ s.add_dependency("tzinfo", "~> 0.3")
24
+ s.add_dependency("octokit", "~> 1.20")
25
+ s.add_dependency("terminal-table", "~> 1.4")
26
+ s.add_dependency("erubis", "~> 2.7")
27
+ s.add_dependency("hashie", "~> 1.2")
28
+ end
data/lib/hubtime.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'active_support'
2
+ require 'active_support/all'
3
+ require 'terminal-table'
4
+ require 'fileutils'
5
+ require 'yaml'
6
+ require 'erubis'
7
+ require 'hashie'
8
+ require 'octokit'
9
+
10
+ require 'hubtime/version'
11
+ require 'hubtime/hub_config'
12
+ require 'hubtime/cacher'
13
+ require 'hubtime/commit'
14
+ require 'hubtime/github'
15
+ require 'hubtime/activity'
16
+ require 'hubtime/repo'