bus_factor 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/bin/bus_factor +6 -0
- data/bus_factor.gemspec +11 -10
- data/lib/bus_factor.rb +48 -2
- data/lib/bus_factor/version.rb +1 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c5162de74172469da5d8cf2aaa2ae6b00832eb7
|
4
|
+
data.tar.gz: 89375cd9bf386ee8c19de97d2d8761ce1682c7f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f7b01edb8d6e926adcb59d4a308d84346c987253a93b4a66d33de2f73110a7fe49e3ad2acdb396a532f294b1d5d7e41a379350909c761cac9f9b7c7329549b7
|
7
|
+
data.tar.gz: 9d2de5cdaf9f342298bf02a22304559de01ffd271f8a74eb11c377a3a7ae5687c5e640f10487ecc2adedc74ea6a036325de11ba2e04fead4b92722fb900b1ebe
|
data/Rakefile
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
data/bin/bus_factor
ADDED
data/bus_factor.gemspec
CHANGED
@@ -4,20 +4,21 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'bus_factor/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'bus_factor'
|
8
8
|
spec.version = BusFactor::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.summary =
|
12
|
-
spec.description =
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
9
|
+
spec.authors = ['Daniel Heath']
|
10
|
+
spec.email = ['daniel@heath.cc']
|
11
|
+
spec.summary = 'Identify dependencies with few maintainers'
|
12
|
+
spec.description = 'Find things that are relatively likely to be abandoned unexpectedly'
|
13
|
+
spec.homepage = 'https://github.com/DanielHeath/bus_factor'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency
|
22
|
-
spec.add_development_dependency
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
22
|
+
spec.add_development_dependency 'rake'
|
23
|
+
spec.add_development_dependency 'rest-client'
|
23
24
|
end
|
data/lib/bus_factor.rb
CHANGED
@@ -1,5 +1,51 @@
|
|
1
|
-
require
|
1
|
+
require 'bus_factor/version'
|
2
|
+
require 'json'
|
3
|
+
require 'bundler'
|
4
|
+
require 'rest-client'
|
5
|
+
Bundler.require :all
|
2
6
|
|
3
7
|
module BusFactor
|
4
|
-
|
8
|
+
class << self
|
9
|
+
Result = Struct.new(:name, :emails) do
|
10
|
+
def to_s(length_chars: 2, spec_chars:15)
|
11
|
+
fs = "%#{length_chars}s, %#{spec_chars}s: %s"
|
12
|
+
format(
|
13
|
+
fs,
|
14
|
+
emails.length,
|
15
|
+
name,
|
16
|
+
emails.join(', ')
|
17
|
+
)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# TODO: how often updated?
|
22
|
+
def worst
|
23
|
+
sorted_specs.map do |spec|
|
24
|
+
Result.new(
|
25
|
+
spec.name,
|
26
|
+
owners_of(spec).map { |o| o['email'] }
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def sorted_specs
|
32
|
+
specs = Bundler.locked_gems.specs.map(&:__materialize__)
|
33
|
+
specs.sort_by do |spec|
|
34
|
+
owners_of(spec).length
|
35
|
+
end
|
36
|
+
specs
|
37
|
+
end
|
38
|
+
|
39
|
+
def owners_of(geem)
|
40
|
+
geem = geem.name if geem.respond_to? :name
|
41
|
+
owner_cache[geem]
|
42
|
+
end
|
43
|
+
|
44
|
+
def owner_cache
|
45
|
+
@owner_cache ||= Hash.new do |hash, key|
|
46
|
+
uri = "https://rubygems.org/api/v1/gems/#{key}/owners.json"
|
47
|
+
hash[key] = JSON.parse(RestClient.get uri)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
5
51
|
end
|
data/lib/bus_factor/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bus_factor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Heath
|
@@ -38,10 +38,25 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rest-client
|
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'
|
41
55
|
description: Find things that are relatively likely to be abandoned unexpectedly
|
42
56
|
email:
|
43
57
|
- daniel@heath.cc
|
44
|
-
executables:
|
58
|
+
executables:
|
59
|
+
- bus_factor
|
45
60
|
extensions: []
|
46
61
|
extra_rdoc_files: []
|
47
62
|
files:
|
@@ -50,6 +65,7 @@ files:
|
|
50
65
|
- LICENSE.txt
|
51
66
|
- README.md
|
52
67
|
- Rakefile
|
68
|
+
- bin/bus_factor
|
53
69
|
- bus_factor.gemspec
|
54
70
|
- lib/bus_factor.rb
|
55
71
|
- lib/bus_factor/version.rb
|