always_be_contributing 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3e6dff897b3078e330db15399888d69b9e699000
4
+ data.tar.gz: 3379d780fbea5f2079d4f60a81a4cfb6ee3b9834
5
+ SHA512:
6
+ metadata.gz: acc1e30fad9888d837d078e5ebfa7d2ca57dec8d78be342e877e1e3f287302060b0720dd3f88b5cac41a46727b091f8b07586f2bfab679f4d0dffd3a682fb69c
7
+ data.tar.gz: f230f131c2de3f50990b0ddb6c321d2e68ddfeadd3b08f5b6f2dd9a54d47ce84dd1eeccdc2bf3079d5cc827f94590d32f2ad782e156fdb83a20d794f7f594619
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1 @@
1
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2013, Joseph Anthony Pasquale Holsten <joseph@josephholsten.com>
2
+
3
+ Permission to use, copy, modify, and/or distribute this software for
4
+ any purpose with or without fee is hereby granted, provided that the
5
+ above copyright notice and this permission notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -0,0 +1,33 @@
1
+ = Always Be Contributing
2
+
3
+ You've got a team of Committers. But who's the best?
4
+
5
+
6
+
7
+ == Getting Started
8
+
9
+ # Install
10
+ gem install always_be_contributing
11
+ # Configure github credentials
12
+ echo machine api.github.com login josephholsten password sekret >> ~/.netrc
13
+ # Run
14
+ always-be-contributing simplymeasured
15
+
16
+ == TODO
17
+
18
+ - Travis CI integrations
19
+ - tdd achievments ala {nose}[http://exogen.github.io/nose-achievements/]
20
+
21
+ Metrics
22
+ - contributions per month
23
+ - consecutive days streak
24
+
25
+ leaderboard groups
26
+ - org per member
27
+ - single project contributors
28
+
29
+ == License
30
+
31
+ Always Be Commiting is Copyright (c) 2013 {Joseph Anthony Pasquale
32
+ Holsten}[http://josephholsten.com] and distributed under the ISC
33
+ license. See the LICENSE file for more info.
@@ -0,0 +1,5 @@
1
+ require 'rdoc/task'
2
+ require 'rake/clean'
3
+ require 'bundler/gem_tasks'
4
+
5
+ RDoc::Task.new
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'always_be_contributing/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "always_be_contributing"
8
+ spec.version = AlwaysBeContributing::VERSION
9
+ spec.author = "Joseph Anthony Pasquale Holsten"
10
+ spec.email = "joseph@josephholsten.com"
11
+ spec.homepage = "https://github.com/josephholsten/always_be_contributing"
12
+ spec.description = <<-EOF
13
+ Always Be Contributing counts who has
14
+ contributing most to your orginization on Github.
15
+ EOF
16
+ spec.extra_rdoc_files = %w[ LICENSE README.rdoc ]
17
+ spec.rdoc_options << "--charset=UTF-8" <<
18
+ "--title" << "Always Be Contributing Documentation" <<
19
+ "--main" << "README.rdoc"
20
+ spec.license = 'ISC'
21
+ spec.summary = spec.description.split(/\.\s+/).first
22
+ spec.files = `git ls-files`.split($/)
23
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
24
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
25
+
26
+ spec.add_development_dependency 'bundler'
27
+ spec.add_development_dependency 'rake'
28
+ spec.add_development_dependency 'rdoc'
29
+ end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ lib = File.expand_path('../../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'always_be_contributing'
6
+
7
+ AlwaysBeContributing::CLI.new(ARGV).run
@@ -0,0 +1,6 @@
1
+ module AlwaysBeContributing # :nodoc:
2
+ end
3
+
4
+ require 'always_be_contributing/version'
5
+ require 'always_be_contributing/core_ext/date/month_calculator'
6
+ require 'always_be_contributing/cli'
@@ -0,0 +1,41 @@
1
+ require 'always_be_contributing/core_ext/date/month_calculator'
2
+ require 'always_be_contributing/org'
3
+ require 'octokit'
4
+
5
+ module AlwaysBeContributing
6
+ class CLI
7
+ attr_accessor :github_org
8
+
9
+ def initialize(args)
10
+ @github_org = args[0]
11
+ Octokit.netrc = true
12
+ end
13
+
14
+ def run
15
+ exit_usage unless github_org
16
+ render
17
+ end
18
+
19
+ private
20
+ def begin_date
21
+ Date.today.beginning_of_month
22
+ end
23
+
24
+ def member_contribution_counts
25
+ @member_contribution_counts ||= begin
26
+ Org.new(github_org).
27
+ member_contribution_count_since(begin_date)
28
+ end
29
+ end
30
+
31
+ def render
32
+ puts "=== Contributions for members of github-org: #{github_org} since: #{begin_date} ==="
33
+ member_contribution_counts.each {|u| puts "%15s %3i" % u }
34
+ end
35
+
36
+ def exit_usage
37
+ $stderr.puts "usage: #{$0} github-org"
38
+ exit 1
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,18 @@
1
+ require 'date'
2
+
3
+ module AlwaysBeContributing
4
+ class Contribution < Struct.new(:date, :value)
5
+ def self.from_raw(raw)
6
+ AlwaysBeContributing::Contribution.new(raw[0],raw[1])
7
+ end
8
+
9
+ def initialize(date, value)
10
+ self.date = Date.parse(date)
11
+ self.value = value
12
+ end
13
+
14
+ def nil?
15
+ self.date.nil? || self.value.nil?
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ class Date
2
+ def beginning_of_month
3
+ change(day: 1)
4
+ end
5
+ def change(options)
6
+ ::Date.new(
7
+ options.fetch(:year, year),
8
+ options.fetch(:month, month),
9
+ options.fetch(:day, day)
10
+ )
11
+ end
12
+ end
@@ -0,0 +1,24 @@
1
+ require 'always_be_contributing/user'
2
+
3
+ module AlwaysBeContributing
4
+ class Org < Struct.new(:name)
5
+ def members
6
+ member_ids.map {|id| User.new id }
7
+ end
8
+
9
+ def member_contribution_count_since(begin_date)
10
+ {}.tap do |contribution_counts|
11
+ members.each do |m|
12
+ contribution_counts[m.name] = m.contribution_count_since(begin_date)
13
+ end
14
+ end.
15
+ sort_by {|u| u[1] }.
16
+ reverse
17
+ end
18
+
19
+ private
20
+ def member_ids
21
+ Octokit.org_members(name).map(&:login)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,34 @@
1
+ require 'json'
2
+ require 'open-uri'
3
+ require 'uri'
4
+
5
+ require 'always_be_contributing/contribution'
6
+
7
+ module AlwaysBeContributing
8
+ class User < Struct.new(:name)
9
+ def contributions
10
+ doc = contribution_url.read
11
+ JSON.parse(doc).map do |cont|
12
+ Contribution.from_raw(cont)
13
+ end
14
+ end
15
+
16
+ def contributions_since(start_date)
17
+ contributions.select do |c|
18
+ c.date >= start_date
19
+ end
20
+ end
21
+
22
+ def contribution_count_since(start_date)
23
+ @contribution_count_since ||= {}
24
+ @contribution_count_since[start_date] ||= begin
25
+ contributions_since(start_date).map(&:value).reduce(&:+)
26
+ end
27
+ end
28
+
29
+ private
30
+ def contribution_url
31
+ URI.parse "https://github.com/users/#{name}/contributions_calendar_data"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ module AlwaysBeContributing
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: always_be_contributing
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Joseph Anthony Pasquale Holsten
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rdoc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: |2
56
+ Always Be Contributing counts who has
57
+ contributing most to your orginization on Github.
58
+ email: joseph@josephholsten.com
59
+ executables:
60
+ - always-be-contributing
61
+ extensions: []
62
+ extra_rdoc_files:
63
+ - LICENSE
64
+ - README.rdoc
65
+ files:
66
+ - .gitignore
67
+ - Gemfile
68
+ - LICENSE
69
+ - README.rdoc
70
+ - Rakefile
71
+ - always_be_contributing.gemspec
72
+ - bin/always-be-contributing
73
+ - lib/always_be_contributing.rb
74
+ - lib/always_be_contributing/cli.rb
75
+ - lib/always_be_contributing/contribution.rb
76
+ - lib/always_be_contributing/core_ext/date/month_calculator.rb
77
+ - lib/always_be_contributing/org.rb
78
+ - lib/always_be_contributing/user.rb
79
+ - lib/always_be_contributing/version.rb
80
+ homepage: https://github.com/josephholsten/always_be_contributing
81
+ licenses:
82
+ - ISC
83
+ metadata: {}
84
+ post_install_message:
85
+ rdoc_options:
86
+ - --charset=UTF-8
87
+ - --title
88
+ - Always Be Contributing Documentation
89
+ - --main
90
+ - README.rdoc
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ requirements: []
104
+ rubyforge_project:
105
+ rubygems_version: 2.0.0
106
+ signing_key:
107
+ specification_version: 4
108
+ summary: Always Be Contributing counts who has contributing most to your orginization
109
+ on Github
110
+ test_files: []