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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 490961246abee4a6221b207045836bb471283ae6
4
- data.tar.gz: 699d7c1e30a093142a3e44d836d24676a7a54844
3
+ metadata.gz: 8c5162de74172469da5d8cf2aaa2ae6b00832eb7
4
+ data.tar.gz: 89375cd9bf386ee8c19de97d2d8761ce1682c7f7
5
5
  SHA512:
6
- metadata.gz: c1868bd7fb99a8c15443412427d5a8c19193307131c4e8b9909aac4359cc962a4da9a198d2d737e4e565cec0186cf51613ad61047184798d7e035e63486316ab
7
- data.tar.gz: fe3c49767a4928df3c5924369c1cfc1a6255c4e5d04dbde517218bcb616d3b0c736cf104a0349e63a0481fb0098ce4419cdfb971142c38907b59fc55e76d7522
6
+ metadata.gz: 1f7b01edb8d6e926adcb59d4a308d84346c987253a93b4a66d33de2f73110a7fe49e3ad2acdb396a532f294b1d5d7e41a379350909c761cac9f9b7c7329549b7
7
+ data.tar.gz: 9d2de5cdaf9f342298bf02a22304559de01ffd271f8a74eb11c377a3a7ae5687c5e640f10487ecc2adedc74ea6a036325de11ba2e04fead4b92722fb900b1ebe
data/Rakefile CHANGED
@@ -1 +1 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
data/bin/bus_factor ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bus_factor'
4
+ require 'optparse'
5
+
6
+ puts BusFactor.worst
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 = "bus_factor"
7
+ spec.name = 'bus_factor'
8
8
  spec.version = BusFactor::VERSION
9
- spec.authors = ["Daniel Heath"]
10
- spec.email = ["daniel@heath.cc"]
11
- spec.summary = %q{Identify dependencies with few maintainers}
12
- spec.description = %q{Find things that are relatively likely to be abandoned unexpectedly}
13
- spec.homepage = "https://github.com/DanielHeath/bus_factor"
14
- spec.license = "MIT"
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 = ["lib"]
19
+ spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.6"
22
- spec.add_development_dependency "rake"
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 "bus_factor/version"
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
- # Your code goes here...
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
@@ -1,3 +1,3 @@
1
1
  module BusFactor
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
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.1
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