simplecov-formatter-shield 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -0
- data/README.md +15 -0
- data/bin/console +2 -2
- data/lib/simplecov-formatter-shield.rb +24 -3
- data/lib/simplecov-formatter-shield/generators/png.rb +32 -0
- data/lib/simplecov-formatter-shield/generators/shields_io.rb +1 -1
- data/lib/simplecov-formatter-shield/generators/svg.rb +64 -0
- data/lib/simplecov-formatter-shield/generators/svg/template.svg.erb +23 -0
- data/lib/simplecov-formatter-shield/version.rb +1 -1
- data/simplecov-formatter-shield.gemspec +1 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27e463f02332e752dc9821958206eae655dee1bf
|
4
|
+
data.tar.gz: b55fe4ddc507c4efcb3afa00440d551ece0395c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9728c59982c40a1a79d2bee1da0f74af21671f39eca87fb8b781ae20bd314812377a15fc0bcee6c0c0448538e3ef45a18dc53d4e23e60ea7d6078de9a621a26
|
7
|
+
data.tar.gz: 9644d299bc01013164b3c4fb6db19d3cc16a2232e0745017b44d07d945c5c1d80b00858e2454c58f0d9c0f6ec55cfa8453ed7c80defd0afbecf3e24a5d907975
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -2,6 +2,21 @@
|
|
2
2
|
|
3
3
|
SimpleCov formatter to generate status shields for your reports. Although one already existed, the idea was to create one with as little dependencies as possible, and eventually more than one backend (i.e. not strictly dependent on shields.io).
|
4
4
|
|
5
|
+
## Dependencies
|
6
|
+
|
7
|
+
If you're going to use the PNG generator, you'll need to install the following: ghostscript, librsvg, imagemagick
|
8
|
+
|
9
|
+
If you're on OSX, you can use homebrew to install all dependencies:
|
10
|
+
|
11
|
+
```
|
12
|
+
brew install ghostscript
|
13
|
+
brew install librsvg
|
14
|
+
brew install imagemagick --with-librsvg
|
15
|
+
```
|
16
|
+
|
17
|
+
Ghostscript installs the required fonts, otherwise converting from SVG to PNG would generate errors. Using librsvg will
|
18
|
+
convert SVGs to PNGs more accurately.
|
19
|
+
|
5
20
|
## Installation
|
6
21
|
|
7
22
|
Add this line to your application's Gemfile:
|
data/bin/console
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'simplecov-formatter-shield/generators'
|
2
|
-
|
3
1
|
module SimpleCov
|
4
2
|
module Formatter
|
5
3
|
class ShieldFormatter
|
@@ -11,6 +9,29 @@ module SimpleCov
|
|
11
9
|
def filename=(filename)
|
12
10
|
@filename = filename
|
13
11
|
end
|
12
|
+
|
13
|
+
def generator
|
14
|
+
self.generator = :shields_io if @generator.nil?
|
15
|
+
return @generator
|
16
|
+
end
|
17
|
+
|
18
|
+
def generator=(generator)
|
19
|
+
@generator = case generator
|
20
|
+
when :svg
|
21
|
+
require 'simplecov-formatter-shield/generators/svg'
|
22
|
+
SimpleCov::Formatter::ShieldFormatter::Generators::Svg
|
23
|
+
when :png
|
24
|
+
require 'simplecov-formatter-shield/generators/png'
|
25
|
+
SimpleCov::Formatter::ShieldFormatter::Generators::Png
|
26
|
+
when :shields_io
|
27
|
+
require 'simplecov-formatter-shield/generators/shield_io'
|
28
|
+
SimpleCov::Formatter::ShieldFormatter::Generators::ShieldsIO
|
29
|
+
else
|
30
|
+
Logger.warn("Unknown generator #{generator}; pick one of: :svg, :png, :shields_io")
|
31
|
+
end
|
32
|
+
|
33
|
+
return @generator
|
34
|
+
end
|
14
35
|
end
|
15
36
|
|
16
37
|
TEXT = 'coverage'.freeze
|
@@ -63,7 +84,7 @@ module SimpleCov
|
|
63
84
|
private :status
|
64
85
|
|
65
86
|
def image(options)
|
66
|
-
generator =
|
87
|
+
generator = self.class.generator.new(options)
|
67
88
|
return generator.generate
|
68
89
|
end
|
69
90
|
private :image
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'simplecov-formatter-shield/generators/svg'
|
2
|
+
require 'tempfile'
|
3
|
+
require 'mini_magick'
|
4
|
+
|
5
|
+
module SimpleCov
|
6
|
+
module Formatter
|
7
|
+
class ShieldFormatter
|
8
|
+
module Generators
|
9
|
+
class Png < Svg
|
10
|
+
def generate!
|
11
|
+
return svg2png(super)
|
12
|
+
end
|
13
|
+
private :generate!
|
14
|
+
|
15
|
+
def svg2png(svg)
|
16
|
+
image = MiniMagick::Image.create('.svg') do |tmpfile|
|
17
|
+
tmpfile.write(svg)
|
18
|
+
end
|
19
|
+
|
20
|
+
image.format('png') do |converter|
|
21
|
+
converter.resize "#{widths.reduce(&:+)}x20"
|
22
|
+
converter.background 'transparent'
|
23
|
+
converter.alpha 'on'
|
24
|
+
end
|
25
|
+
|
26
|
+
return image.to_blob
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'tempfile'
|
3
|
+
require 'mini_magick'
|
4
|
+
|
5
|
+
module SimpleCov
|
6
|
+
module Formatter
|
7
|
+
class ShieldFormatter
|
8
|
+
module Generators
|
9
|
+
class Svg
|
10
|
+
CHAR_WIDTH = 0.7 * 10
|
11
|
+
PADDING = 4
|
12
|
+
COLOR_MAP = {
|
13
|
+
brightgreen: [nil, '#4c1'],
|
14
|
+
green: [nil, '#97CA00'],
|
15
|
+
yellow: [nil, '#dfb317'],
|
16
|
+
yellowgreen: [nil, '#a4a61d'],
|
17
|
+
orange: [nil, '#fe7d37'],
|
18
|
+
red: [nil, '#e05d44']
|
19
|
+
}.freeze
|
20
|
+
|
21
|
+
def initialize(options)
|
22
|
+
@options = options
|
23
|
+
@template = ERB.new(File.read(File.expand_path('../svg/template.svg.erb', __FILE__)))
|
24
|
+
@image = nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def generate
|
28
|
+
return @image ||= begin
|
29
|
+
generate!
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def inspect
|
34
|
+
return "#{self.class.name}: options => <#{@options}>"
|
35
|
+
end
|
36
|
+
|
37
|
+
def generate!
|
38
|
+
texts = self.texts
|
39
|
+
widths = self.widths
|
40
|
+
colors = self.colors
|
41
|
+
|
42
|
+
return @template.result(binding)
|
43
|
+
end
|
44
|
+
private :generate!
|
45
|
+
|
46
|
+
def texts
|
47
|
+
return @texts ||= [@options.text, @options.status]
|
48
|
+
end
|
49
|
+
protected :texts
|
50
|
+
|
51
|
+
def widths
|
52
|
+
return @widths ||= texts.map { |str| (str.length * CHAR_WIDTH).ceil + PADDING + 1 }
|
53
|
+
end
|
54
|
+
protected :widths
|
55
|
+
|
56
|
+
def colors
|
57
|
+
return @colors ||= COLOR_MAP[@options.color]
|
58
|
+
end
|
59
|
+
protected :colors
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="<%= widths[0]+ widths[1] %>" height="20">
|
2
|
+
<linearGradient id="smooth" x2="0" y2="100%">
|
3
|
+
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
|
4
|
+
<stop offset="1" stop-opacity=".1"/>
|
5
|
+
</linearGradient>
|
6
|
+
|
7
|
+
<mask id="round">
|
8
|
+
<rect width="<%= widths[0]+ widths[1] %>" height="20" rx="3" fill="#fff"/>
|
9
|
+
</mask>
|
10
|
+
|
11
|
+
<g mask="url(#round)">
|
12
|
+
<rect width="<%= widths[0] %>" height="20" fill="<%= colors[0] || "#555" %>"/>
|
13
|
+
<rect x="<%= widths[0] %>" width="<%= widths[1] %>" height="20" fill="<%= colors[1] || "#4c1" %>"/>
|
14
|
+
<rect width="<%= widths[0] + widths[1] %>" height="20" fill="url(#smooth)"/>
|
15
|
+
</g>
|
16
|
+
|
17
|
+
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans" font-size="10" font-weigth="lighter">
|
18
|
+
<text x="<%= widths[0]/2 %>" y="15" fill="#010101" fill-opacity=".3"><%= texts[0] %></text>
|
19
|
+
<text x="<%= widths[0]/2 %>" y="14"><%= texts[0] %></text>
|
20
|
+
<text x="<%= widths[0] + widths[1]/2 - 1 %>" y="15" fill="#010101" fill-opacity=".3"><%= texts[1] %></text>
|
21
|
+
<text x="<%= widths[0] + widths[1]/2 - 1 %>" y="14"><%= texts[1] %></text>
|
22
|
+
</g>
|
23
|
+
</svg>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simplecov-formatter-shield
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicolas Pepin-Perreault
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simplecov
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '5.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mini_magick
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 4.5.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 4.5.1
|
69
83
|
description: SimpleCov formatter to generate TravisCI like shields with as little
|
70
84
|
dependencies as possible.
|
71
85
|
email:
|
@@ -86,7 +100,10 @@ files:
|
|
86
100
|
- lib/simplecov-formatter-shield.rb
|
87
101
|
- lib/simplecov-formatter-shield/generators.rb
|
88
102
|
- lib/simplecov-formatter-shield/generators/error.rb
|
103
|
+
- lib/simplecov-formatter-shield/generators/png.rb
|
89
104
|
- lib/simplecov-formatter-shield/generators/shields_io.rb
|
105
|
+
- lib/simplecov-formatter-shield/generators/svg.rb
|
106
|
+
- lib/simplecov-formatter-shield/generators/svg/template.svg.erb
|
90
107
|
- lib/simplecov-formatter-shield/version.rb
|
91
108
|
- simplecov-formatter-shield.gemspec
|
92
109
|
homepage: https://github.com/npepinpe/simplecov-formatter-shield
|