how_is 10.0.0 → 11.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 +0 -1
- data/CHANGELOG.md +34 -0
- data/README.md +43 -7
- data/fixtures/vcr_cassettes/how_is-example-repository.yml +951 -0
- data/fixtures/vcr_cassettes/how_is-with-config-file.yml +23582 -0
- data/how_is.gemspec +2 -0
- data/lib/how_is/analyzer.rb +21 -0
- data/lib/how_is/cli/parser.rb +22 -15
- data/lib/how_is/cli.rb +6 -0
- data/lib/how_is/fetcher.rb +4 -1
- data/lib/how_is/pulse.rb +10 -2
- data/lib/how_is/report/html.rb +2 -2
- data/lib/how_is/report/json.rb +1 -1
- data/lib/how_is/report.rb +42 -6
- data/lib/how_is/version.rb +1 -1
- data/lib/how_is.rb +11 -1
- data/roadmap.markdown +50 -17
- metadata +34 -6
- data/data/issues.plg +0 -22
- data/lib/how_is/chart.rb +0 -83
- data/lib/how_is/report/pdf.rb +0 -78
data/lib/how_is/chart.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
class HowIs::Chart
|
2
|
-
# Generates the gnuplot script in data/issues.plg.
|
3
|
-
#
|
4
|
-
# Some configuration is available. Font locations are path to a TTF or other
|
5
|
-
# Gnuplot-readable font name.
|
6
|
-
#
|
7
|
-
# For example that could be '/Users/anne/Library/Fonts/InputMono-Medium.ttf'
|
8
|
-
# or just 'Helvetica'.
|
9
|
-
#
|
10
|
-
# @param font_location [String] Font for the chart
|
11
|
-
# @param font_size [Integer] Size of the chart text
|
12
|
-
# @param label_font_location [String] Font for labels
|
13
|
-
# @param label_font_size [Integer] Size of the label text
|
14
|
-
#
|
15
|
-
# @return void
|
16
|
-
def self.gnuplot(font_location: nil,
|
17
|
-
font_size: 16,
|
18
|
-
label_font_location: nil,
|
19
|
-
label_font_size: 10,
|
20
|
-
chartsize: '500,500',
|
21
|
-
data_file:,
|
22
|
-
png_file:)
|
23
|
-
default_font_location =
|
24
|
-
if Gem.win_platform?
|
25
|
-
'Arial'
|
26
|
-
else
|
27
|
-
'Helvetica'
|
28
|
-
end
|
29
|
-
|
30
|
-
font_location ||= default_font_location
|
31
|
-
label_font_location ||= font_location
|
32
|
-
|
33
|
-
cmd = %Q{
|
34
|
-
gnuplot -e "labelfont='#{label_font_location},#{label_font_size}'" \
|
35
|
-
-e "chartfont='#{font_location},#{font_size}'" \
|
36
|
-
-e "chartsize='#{chartsize}'" \
|
37
|
-
-e "data='#{data_file}'" \
|
38
|
-
-e "pngfile='#{png_file}'" \
|
39
|
-
-c data/issues.plg
|
40
|
-
}
|
41
|
-
puts cmd
|
42
|
-
IO.popen(cmd, 'w')
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.rotate(offset, filename)
|
46
|
-
if Gem.win_platform?
|
47
|
-
rotate_with_dotnet(filename, offset)
|
48
|
-
else
|
49
|
-
rotate_with_minimagick(filename, offset)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def self.rotate_with_dotnet(filename, offset)
|
54
|
-
ps_rotate_flip = {
|
55
|
-
90 => 'Rotate90FlipNone',
|
56
|
-
180 => 'Rotate180FlipNone',
|
57
|
-
270 => 'Rotate270FlipNone',
|
58
|
-
-90 => 'Rotate270FlipNone'
|
59
|
-
}[offset]
|
60
|
-
|
61
|
-
command = %Q{
|
62
|
-
$path = "#{filename}"
|
63
|
-
|
64
|
-
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms");
|
65
|
-
$i = new-object System.Drawing.Bitmap $path
|
66
|
-
|
67
|
-
$i.RotateFlip("#{ps_rotate_flip}")
|
68
|
-
|
69
|
-
$i.Save($path,"png")
|
70
|
-
|
71
|
-
exit
|
72
|
-
}
|
73
|
-
|
74
|
-
IO.popen(["powershell", "-Command", command], 'w') { |io| }
|
75
|
-
end
|
76
|
-
|
77
|
-
def self.rotate_with_minimagick(filename, offset)
|
78
|
-
require 'mini_magick'
|
79
|
-
image = MiniMagick::Image.new(filename) { |b| b.rotate offset.to_s }
|
80
|
-
image.format 'png'
|
81
|
-
image.write filename
|
82
|
-
end
|
83
|
-
end
|
data/lib/how_is/report/pdf.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
require 'prawn'
|
2
|
-
require 'how_is/chart'
|
3
|
-
|
4
|
-
module HowIs
|
5
|
-
class PdfReport < BaseReport
|
6
|
-
def format
|
7
|
-
:pdf
|
8
|
-
end
|
9
|
-
|
10
|
-
attr_accessor :pdf
|
11
|
-
|
12
|
-
def title(_text)
|
13
|
-
pdf.pad_bottom(10) {
|
14
|
-
pdf.text(_text, size: 25)
|
15
|
-
}
|
16
|
-
end
|
17
|
-
|
18
|
-
def header(_text)
|
19
|
-
pdf.pad_top(15) {
|
20
|
-
pdf.pad_bottom(3) {
|
21
|
-
pdf.text _text, size: 20
|
22
|
-
}
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
def link(_text, url)
|
27
|
-
# TODO: Actually have links.
|
28
|
-
_text
|
29
|
-
end
|
30
|
-
|
31
|
-
def horizontal_bar_graph(data)
|
32
|
-
filename_base = "./issues-per-label"
|
33
|
-
dat_file = filename_base + '.dat'
|
34
|
-
png_file = filename_base + '.png'
|
35
|
-
|
36
|
-
File.open(dat_file, 'w') do |f|
|
37
|
-
data.each_with_index do |(label, n, link), i|
|
38
|
-
f.puts "#{i}\t#{n}\t\"#{label}\""
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
Chart.gnuplot(label_font_size: 10,
|
43
|
-
font_size: 16,
|
44
|
-
data_file: dat_file,
|
45
|
-
png_file: png_file)
|
46
|
-
Chart.rotate(90, png_file)
|
47
|
-
|
48
|
-
pdf.image png_file
|
49
|
-
end
|
50
|
-
|
51
|
-
def text(_text)
|
52
|
-
pdf.text _text
|
53
|
-
end
|
54
|
-
|
55
|
-
# Prawn (afaict) doesn't let you export to a binary blob.
|
56
|
-
# So export to a file, then read the file.
|
57
|
-
def export(&block)
|
58
|
-
# TODO: Use actual temporary file.
|
59
|
-
export!('temp.pdf', &block)
|
60
|
-
|
61
|
-
open('temp.pdf').read
|
62
|
-
end
|
63
|
-
|
64
|
-
def export!(file, &block)
|
65
|
-
_self = self
|
66
|
-
|
67
|
-
Prawn::Document.generate(file) do |pdf|
|
68
|
-
_self.pdf = pdf
|
69
|
-
|
70
|
-
pdf.font("Helvetica")
|
71
|
-
|
72
|
-
pdf.span(450, position: :center) do
|
73
|
-
_self.instance_eval(&block)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|