how_is 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rspec +2 -2
- data/.travis.yml +6 -6
- data/CODE_OF_CONDUCT.md +48 -48
- data/Gemfile +4 -4
- data/LICENSE.txt +21 -21
- data/README.md +2 -0
- data/Rakefile +6 -6
- data/bin/console +14 -14
- data/bin/setup +8 -8
- data/data/how_is_spec/generate_report--generates-a-correct-JSON-report.json +1 -0
- data/exe/how_is +6 -2
- data/lib/how_is/analyzer.rb +2 -3
- data/lib/how_is/fetcher.rb +3 -2
- data/lib/how_is/report/html.rb +73 -2
- data/lib/how_is/report/pdf.rb +3 -0
- data/lib/how_is/report.rb +1 -6
- data/lib/how_is/version.rb +1 -1
- data/lib/how_is.rb +26 -12
- metadata +4 -4
- data/lib/how_is/reporter.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d03e9957e3cfefe6c95927bf11693ee2556d318
|
4
|
+
data.tar.gz: 9159d25f1cd1f7d221a21fb7d0d38a844a271fda
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bad3e1bd77fa4958c81c497b3002309121efc4575c8f5b45e31d302abb7ce23a0332999bcf631e08b735a612acb32ae0eb57e4b35df4d7b332b3adf2618506a2
|
7
|
+
data.tar.gz: f6989dc7995c9aaf8215f1dd813d9173a14aa54fc9003bec21d91885e6335ac26c2a33c76ceaad4791a6243e0b3e9291cd89a5f65b3c7ecd190e72057e95926f
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
--format documentation
|
2
|
-
--color
|
1
|
+
--format documentation
|
2
|
+
--color
|
data/.travis.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.2
|
4
|
-
- jruby
|
5
|
-
- rbx-2
|
6
|
-
before_install: gem install bundler -v 1.11.2
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 2.2
|
4
|
+
- jruby
|
5
|
+
- rbx-2
|
6
|
+
before_install: gem install bundler -v 1.11.2
|
data/CODE_OF_CONDUCT.md
CHANGED
@@ -1,49 +1,49 @@
|
|
1
|
-
# Contributor Code of Conduct
|
2
|
-
|
3
|
-
As contributors and maintainers of this project, and in the interest of
|
4
|
-
fostering an open and welcoming community, we pledge to respect all people who
|
5
|
-
contribute through reporting issues, posting feature requests, updating
|
6
|
-
documentation, submitting pull requests or patches, and other activities.
|
7
|
-
|
8
|
-
We are committed to making participation in this project a harassment-free
|
9
|
-
experience for everyone, regardless of level of experience, gender, gender
|
10
|
-
identity and expression, sexual orientation, disability, personal appearance,
|
11
|
-
body size, race, ethnicity, age, religion, or nationality.
|
12
|
-
|
13
|
-
Examples of unacceptable behavior by participants include:
|
14
|
-
|
15
|
-
* The use of sexualized language or imagery
|
16
|
-
* Personal attacks
|
17
|
-
* Trolling or insulting/derogatory comments
|
18
|
-
* Public or private harassment
|
19
|
-
* Publishing other's private information, such as physical or electronic
|
20
|
-
addresses, without explicit permission
|
21
|
-
* Other unethical or unprofessional conduct
|
22
|
-
|
23
|
-
Project maintainers have the right and responsibility to remove, edit, or
|
24
|
-
reject comments, commits, code, wiki edits, issues, and other contributions
|
25
|
-
that are not aligned to this Code of Conduct, or to ban temporarily or
|
26
|
-
permanently any contributor for other behaviors that they deem inappropriate,
|
27
|
-
threatening, offensive, or harmful.
|
28
|
-
|
29
|
-
By adopting this Code of Conduct, project maintainers commit themselves to
|
30
|
-
fairly and consistently applying these principles to every aspect of managing
|
31
|
-
this project. Project maintainers who do not follow or enforce the Code of
|
32
|
-
Conduct may be permanently removed from the project team.
|
33
|
-
|
34
|
-
This code of conduct applies both within project spaces and in public spaces
|
35
|
-
when an individual is representing the project or its community.
|
36
|
-
|
37
|
-
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
38
|
-
reported by contacting a project maintainer at me@duckie.co. All
|
39
|
-
complaints will be reviewed and investigated and will result in a response that
|
40
|
-
is deemed necessary and appropriate to the circumstances. Maintainers are
|
41
|
-
obligated to maintain confidentiality with regard to the reporter of an
|
42
|
-
incident.
|
43
|
-
|
44
|
-
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
45
|
-
version 1.3.0, available at
|
46
|
-
[http://contributor-covenant.org/version/1/3/0/][version]
|
47
|
-
|
48
|
-
[homepage]: http://contributor-covenant.org
|
1
|
+
# Contributor Code of Conduct
|
2
|
+
|
3
|
+
As contributors and maintainers of this project, and in the interest of
|
4
|
+
fostering an open and welcoming community, we pledge to respect all people who
|
5
|
+
contribute through reporting issues, posting feature requests, updating
|
6
|
+
documentation, submitting pull requests or patches, and other activities.
|
7
|
+
|
8
|
+
We are committed to making participation in this project a harassment-free
|
9
|
+
experience for everyone, regardless of level of experience, gender, gender
|
10
|
+
identity and expression, sexual orientation, disability, personal appearance,
|
11
|
+
body size, race, ethnicity, age, religion, or nationality.
|
12
|
+
|
13
|
+
Examples of unacceptable behavior by participants include:
|
14
|
+
|
15
|
+
* The use of sexualized language or imagery
|
16
|
+
* Personal attacks
|
17
|
+
* Trolling or insulting/derogatory comments
|
18
|
+
* Public or private harassment
|
19
|
+
* Publishing other's private information, such as physical or electronic
|
20
|
+
addresses, without explicit permission
|
21
|
+
* Other unethical or unprofessional conduct
|
22
|
+
|
23
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
24
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
25
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
26
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
27
|
+
threatening, offensive, or harmful.
|
28
|
+
|
29
|
+
By adopting this Code of Conduct, project maintainers commit themselves to
|
30
|
+
fairly and consistently applying these principles to every aspect of managing
|
31
|
+
this project. Project maintainers who do not follow or enforce the Code of
|
32
|
+
Conduct may be permanently removed from the project team.
|
33
|
+
|
34
|
+
This code of conduct applies both within project spaces and in public spaces
|
35
|
+
when an individual is representing the project or its community.
|
36
|
+
|
37
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
38
|
+
reported by contacting a project maintainer at me@duckie.co. All
|
39
|
+
complaints will be reviewed and investigated and will result in a response that
|
40
|
+
is deemed necessary and appropriate to the circumstances. Maintainers are
|
41
|
+
obligated to maintain confidentiality with regard to the reporter of an
|
42
|
+
incident.
|
43
|
+
|
44
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
45
|
+
version 1.3.0, available at
|
46
|
+
[http://contributor-covenant.org/version/1/3/0/][version]
|
47
|
+
|
48
|
+
[homepage]: http://contributor-covenant.org
|
49
49
|
[version]: http://contributor-covenant.org/version/1/3/0/
|
data/Gemfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in how_is.gemspec
|
4
|
-
gemspec
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in how_is.gemspec
|
4
|
+
gemspec
|
data/LICENSE.txt
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
The MIT License (MIT)
|
2
|
-
|
3
|
-
Copyright (c) 2016 Ellen Marie Dash
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
7
|
-
in the Software without restriction, including without limitation the rights
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
10
|
-
furnished to do so, subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in
|
13
|
-
all copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
THE SOFTWARE.
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 Ellen Marie Dash
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
|
-
require "rspec/core/rake_task"
|
3
|
-
|
4
|
-
RSpec::Core::RakeTask.new(:spec)
|
5
|
-
|
6
|
-
task :default => :spec
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rspec/core/rake_task"
|
3
|
+
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
5
|
+
|
6
|
+
task :default => :spec
|
data/bin/console
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "how_is"
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require "irb"
|
14
|
-
IRB.start
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "how_is"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
#!/usr/bin/env bash
|
2
|
-
set -euo pipefail
|
3
|
-
IFS=$'\n\t'
|
4
|
-
set -vx
|
5
|
-
|
6
|
-
bundle install
|
7
|
-
|
8
|
-
# Do any other automated setup that you need to do here
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
set -euo pipefail
|
3
|
+
IFS=$'\n\t'
|
4
|
+
set -vx
|
5
|
+
|
6
|
+
bundle install
|
7
|
+
|
8
|
+
# Do any other automated setup that you need to do here
|
@@ -0,0 +1 @@
|
|
1
|
+
{"repository":"rubygems/rubygems","number_of_issues":30,"number_of_pulls":30,"issues_with_label":{"triage":7,"bug report":9,"feedback":4,"osx":1,"bug fix":4,"category - install":5,"feature implementation":2,"major bump":2,"windows":1,"feature request":1,"cleanup":1,"accepted":2,"category - #gem or #require":1,"ready for work":1,"question":3,"administrative":1},"issues_with_no_label":0,"average_issue_age":"approximately 3 months and 1 week","average_pull_age":"approximately 11 months and 3 days","oldest_issue_date":"2016-01-31T21:28:02+00:00","oldest_pull_date":"2013-09-16T15:04:07+00:00"}
|
data/exe/how_is
CHANGED
@@ -39,10 +39,14 @@ opts = OptionParser.new do |opts|
|
|
39
39
|
end
|
40
40
|
opts.parse!
|
41
41
|
|
42
|
-
if
|
42
|
+
if options[:from_file]
|
43
|
+
# Opening this file here seems a bit messy, but it works.
|
44
|
+
options[:repository] = JSON.parse(open(options[:from_file]).read)['repository']
|
45
|
+
abort "Error: Invalid JSON report file." unless options[:repository]
|
46
|
+
elsif ARGV.length >= 1
|
43
47
|
options[:repository] = ARGV.delete_at(0)
|
44
48
|
else
|
45
49
|
abort "Error: No repository specified."
|
46
50
|
end
|
47
51
|
|
48
|
-
HowIs.
|
52
|
+
HowIs.generate_report_file(options)
|
data/lib/how_is/analyzer.rb
CHANGED
@@ -80,11 +80,10 @@ module HowIs
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def average_date_for(issues_or_pulls)
|
83
|
-
timestamps = issues_or_pulls.map { |iop|
|
83
|
+
timestamps = issues_or_pulls.map { |iop| Date.parse(iop['created_at']).strftime('%s').to_i }
|
84
84
|
average_timestamp = timestamps.reduce(:+) / issues_or_pulls.length
|
85
85
|
|
86
|
-
|
87
|
-
Date.parse(average_time.to_s)
|
86
|
+
Date.strptime(average_timestamp.to_s, '%s')
|
88
87
|
end
|
89
88
|
|
90
89
|
# Given an Array of issues or pulls, return the average age of them.
|
data/lib/how_is/fetcher.rb
CHANGED
@@ -24,9 +24,10 @@ class HowIs::Fetcher
|
|
24
24
|
end
|
25
25
|
|
26
26
|
|
27
|
-
Contract String, C::RespondTo[:issues, :pulls] => Results
|
27
|
+
Contract String, C::Or[C::RespondTo[:issues, :pulls], nil] => Results
|
28
28
|
def call(repository,
|
29
|
-
github =
|
29
|
+
github = nil)
|
30
|
+
github ||= Github.new(auto_pagination: true)
|
30
31
|
user, repo = repository.split('/', 2)
|
31
32
|
issues = github.issues.list user: user, repo: repo
|
32
33
|
pulls = github.pulls.list user: user, repo: repo
|
data/lib/how_is/report/html.rb
CHANGED
@@ -1,7 +1,78 @@
|
|
1
1
|
module HowIs
|
2
2
|
class HtmlReport < BaseReport
|
3
|
-
def
|
4
|
-
|
3
|
+
def title(_text)
|
4
|
+
@title = _text
|
5
|
+
@r += "<h1>#{_text}</h1>"
|
6
|
+
end
|
7
|
+
|
8
|
+
def header(_text)
|
9
|
+
@r += "<h2>#{_text}</h2>"
|
10
|
+
end
|
11
|
+
|
12
|
+
def horizontal_bar_graph(data)
|
13
|
+
biggest = data.map(&:last).max
|
14
|
+
get_percentage = ->(number_of_issues) { number_of_issues * 100 / biggest }
|
15
|
+
|
16
|
+
longest_label_length = data.map(&:first).map(&:length).max
|
17
|
+
label_width = "#{longest_label_length}ch"
|
18
|
+
|
19
|
+
@r += '<table class="horizontal-bar-graph">'
|
20
|
+
data.each do |row|
|
21
|
+
percentage = get_percentage.(row[1])
|
22
|
+
@r += <<-EOF
|
23
|
+
<tr>
|
24
|
+
<td style="width: #{label_width}">#{row[0]}</td>
|
25
|
+
<td><span class="fill" style="width: #{percentage}%">#{row[1]}</span></td>
|
26
|
+
</tr>
|
27
|
+
EOF
|
28
|
+
end
|
29
|
+
@r += "</table>"
|
30
|
+
end
|
31
|
+
|
32
|
+
def text(_text)
|
33
|
+
@r += "<p>#{_text}</p>"
|
34
|
+
end
|
35
|
+
|
36
|
+
def export(&block)
|
37
|
+
@r = ''
|
38
|
+
instance_exec(&block)
|
39
|
+
end
|
40
|
+
|
41
|
+
def export!(file, &block)
|
42
|
+
report = export(&block)
|
43
|
+
|
44
|
+
File.open(file, 'w') do |f|
|
45
|
+
f.puts <<-EOF
|
46
|
+
<!DOCTYPE html>
|
47
|
+
<html>
|
48
|
+
<head>
|
49
|
+
<title>#{@title}</title>
|
50
|
+
<style>
|
51
|
+
body { font: sans-serif; }
|
52
|
+
main {
|
53
|
+
max-width: 600px;
|
54
|
+
max-width: 72ch;
|
55
|
+
margin: auto;
|
56
|
+
}
|
57
|
+
|
58
|
+
.horizontal-bar-graph {
|
59
|
+
position: relative;
|
60
|
+
width: 100%;
|
61
|
+
}
|
62
|
+
.horizontal-bar-graph .fill {
|
63
|
+
display: inline-block;
|
64
|
+
background: #CCC;
|
65
|
+
}
|
66
|
+
</style>
|
67
|
+
</head>
|
68
|
+
<body>
|
69
|
+
<main>
|
70
|
+
#{report}
|
71
|
+
</main>
|
72
|
+
</body>
|
73
|
+
</html>
|
74
|
+
EOF
|
75
|
+
end
|
5
76
|
end
|
6
77
|
end
|
7
78
|
end
|
data/lib/how_is/report/pdf.rb
CHANGED
data/lib/how_is/report.rb
CHANGED
@@ -33,6 +33,7 @@ module HowIs
|
|
33
33
|
class Report
|
34
34
|
require 'how_is/report/pdf'
|
35
35
|
require 'how_is/report/json'
|
36
|
+
require 'how_is/report/html'
|
36
37
|
|
37
38
|
REPORT_BLOCK = proc do
|
38
39
|
title "How is #{analysis.repository}?"
|
@@ -49,10 +50,6 @@ module HowIs
|
|
49
50
|
horizontal_bar_graph issues_per_label
|
50
51
|
end
|
51
52
|
|
52
|
-
def self.export(analysis, format = :pdf)
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
53
|
def self.export!(analysis, file)
|
57
54
|
format = file.split('.').last
|
58
55
|
report = get_report_class(format).new(analysis)
|
@@ -64,8 +61,6 @@ module HowIs
|
|
64
61
|
report = get_report_class(format).new(analysis)
|
65
62
|
|
66
63
|
report.export(&REPORT_BLOCK)
|
67
|
-
|
68
|
-
report
|
69
64
|
end
|
70
65
|
|
71
66
|
private
|
data/lib/how_is/version.rb
CHANGED
data/lib/how_is.rb
CHANGED
@@ -8,25 +8,39 @@ module HowIs
|
|
8
8
|
|
9
9
|
require 'how_is/fetcher'
|
10
10
|
require 'how_is/analyzer'
|
11
|
-
require 'how_is/
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
require 'how_is/report'
|
12
|
+
|
13
|
+
def self.generate_report_file(report_file:, **kw_args)
|
14
|
+
analysis = self.generate_analysis(**kw_args)
|
15
|
+
|
16
|
+
Report.export!(analysis, report_file)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.generate_report(format:, **kw_args)
|
20
|
+
analysis = self.generate_analysis(**kw_args)
|
21
|
+
|
22
|
+
Report.export(analysis, format)
|
23
|
+
end
|
24
|
+
private
|
25
|
+
|
26
|
+
|
27
|
+
Contract C::KeywordArgs[repository: String,
|
28
|
+
from_file: C::Optional[C::Or[String, nil]],
|
29
|
+
fetcher: C::Optional[Class],
|
30
|
+
analyzer: C::Optional[Class],
|
31
|
+
github: C::Optional[C::Any]] => C::Any
|
32
|
+
def self.generate_analysis(repository:,
|
19
33
|
from_file: nil,
|
20
|
-
fetcher:
|
34
|
+
fetcher: Fetcher.new,
|
21
35
|
analyzer: Analyzer.new,
|
22
|
-
|
36
|
+
github: nil)
|
23
37
|
if from_file
|
24
38
|
analysis = analyzer.from_file(from_file)
|
25
39
|
else
|
26
|
-
raw_data = fetcher.call(repository)
|
40
|
+
raw_data = fetcher.call(repository, github)
|
27
41
|
analysis = analyzer.call(raw_data)
|
28
42
|
end
|
29
43
|
|
30
|
-
|
44
|
+
analysis
|
31
45
|
end
|
32
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: how_is
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ellen Marie Dash
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: github_api
|
@@ -140,6 +140,7 @@ files:
|
|
140
140
|
- Rakefile
|
141
141
|
- bin/console
|
142
142
|
- bin/setup
|
143
|
+
- data/how_is_spec/generate_report--generates-a-correct-JSON-report.json
|
143
144
|
- data/issues.plg
|
144
145
|
- exe/how_is
|
145
146
|
- how_is.gemspec
|
@@ -151,7 +152,6 @@ files:
|
|
151
152
|
- lib/how_is/report/html.rb
|
152
153
|
- lib/how_is/report/json.rb
|
153
154
|
- lib/how_is/report/pdf.rb
|
154
|
-
- lib/how_is/reporter.rb
|
155
155
|
- lib/how_is/version.rb
|
156
156
|
- roadmap.markdown
|
157
157
|
homepage: https://github.com/duckinator/how_is
|
@@ -174,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
174
|
version: '0'
|
175
175
|
requirements: []
|
176
176
|
rubyforge_project:
|
177
|
-
rubygems_version: 2.
|
177
|
+
rubygems_version: 2.5.1
|
178
178
|
signing_key:
|
179
179
|
specification_version: 4
|
180
180
|
summary: Quantify the health of a GitHub repository is.
|
data/lib/how_is/reporter.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'contracts'
|
2
|
-
require 'prawn'
|
3
|
-
require 'how_is/chart'
|
4
|
-
|
5
|
-
module HowIs
|
6
|
-
class Reporter
|
7
|
-
require 'how_is/report'
|
8
|
-
include Contracts::Core
|
9
|
-
|
10
|
-
##
|
11
|
-
# Given an Analysis, generate a Report
|
12
|
-
#
|
13
|
-
# Returns a class that inherits from Report.
|
14
|
-
Contract Analysis, String => C::Any
|
15
|
-
def call(analysis, report_file)
|
16
|
-
Report.export!(analysis, report_file)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|