bus_factor 0.0.1 → 0.0.2

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.
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