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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5071624ee48fe8be44468878a0da3d42d44d9039
4
- data.tar.gz: 11612faeb3d01b04c1c9b61360dc3b313004e3be
3
+ metadata.gz: 27e463f02332e752dc9821958206eae655dee1bf
4
+ data.tar.gz: b55fe4ddc507c4efcb3afa00440d551ece0395c9
5
5
  SHA512:
6
- metadata.gz: 362314e8a22e0986faf820091891d29e49763b6792fcfbdcc284392f9723ff05b94438a9b861cf6cff34988b4146a8a5b4ed9deff81b56adb847d451f06be5f4
7
- data.tar.gz: 1bf19b435634a33aad5aad83db6716d8480af6ce38577d773781f628c6202f6a07c9f8cf2242c9cd88de813dc1415b2f6c3d11e86d3d3b0fccbbe2ad6d7b1c67
6
+ metadata.gz: e9728c59982c40a1a79d2bee1da0f74af21671f39eca87fb8b781ae20bd314812377a15fc0bcee6c0c0448538e3ef45a18dc53d4e23e60ea7d6078de9a621a26
7
+ data.tar.gz: 9644d299bc01013164b3c4fb6db19d3cc16a2232e0745017b44d07d945c5c1d80b00858e2454c58f0d9c0f6ec55cfa8453ed7c80defd0afbecf3e24a5d907975
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in simplecov-formatter-shield.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'pry'
8
+ end
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
@@ -2,5 +2,5 @@
2
2
 
3
3
  require 'bundler/setup'
4
4
  require 'simplecov-formatter-shield'
5
- require 'irb'
6
- IRB.start
5
+ require 'pry'
6
+ Pry.start
@@ -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 = Generators::ShieldsIO.new(options)
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
@@ -5,7 +5,7 @@ module SimpleCov
5
5
  class ShieldFormatter
6
6
  module Generators
7
7
  # TODO: Make configurable
8
- class ShieldsIO < StandardError
8
+ class ShieldsIO
9
9
  HOST = 'img.shields.io'.freeze
10
10
  PATH = 'badge'.freeze
11
11
  EXTENSION = 'png'.freeze
@@ -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>
@@ -1,7 +1,7 @@
1
1
  module SimpleCov
2
2
  module Formatter
3
3
  class ShieldFormatter
4
- VERSION = '0.0.4'.freeze
4
+ VERSION = '0.1.0'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency 'bundler', '~> 1.11'
24
24
  spec.add_development_dependency 'rake', '~> 10.0'
25
25
  spec.add_development_dependency 'minitest', '~> 5.0'
26
+ spec.add_development_dependency 'mini_magick', '~> 4.5.1'
26
27
  end
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
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-19 00:00:00.000000000 Z
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