always_be_contributing 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []