repo-small-badge 0.2.2 → 0.2.3

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
  SHA256:
3
- metadata.gz: 081b83b761eb821172f027cc5e3c8deafb78248f0a98a1c71224a6e437d1d943
4
- data.tar.gz: 5ff2a1c6ea4f411ed12bcf14ec7a189d35e14ce152fde779b48d8fb3f49f8809
3
+ metadata.gz: 8d5f7992964dd9cad861f7a69f7570b743362c4edce645a770f54fc16cb5e7ca
4
+ data.tar.gz: 67351cf68c32503cb1e73cd15b995b2aecc188b940e435bec4878f8076aeb59c
5
5
  SHA512:
6
- metadata.gz: a78046560831c4ee737039f3cf388c9918511c240b14088c672f4bb9fbab92921d5c18d09604083cc138583c2e0521ae199847c4b8af71b7c4536d40edc83778
7
- data.tar.gz: cd715bafabfd8ed5d311c431b89dc6c985063cb504c02cddda2027d88e4c4c86ad0cf72367ff7f86dc27c1c74889f4b7bb70da64ba9d0563aa0b49c05ed7894f
6
+ metadata.gz: 4f2f91a28b8f2de41c4c2f7ba3d48195e73cdba2520faec4ea2e53667f7f0b33a5a3950b94ab6a41fcf2016c38bfd0ba04ea469084f0b4b5376e5aa74bd99c5e
7
+ data.tar.gz: 99254c8a452c4d4997c2ce4f55606cddb1038967e029d03a5a07061b43c88b493ec72a01f44210c9de7fea138d41d2f8ae5a00c19b8a4490675744711e071ffa
data/.gitignore CHANGED
@@ -13,4 +13,3 @@ pkg
13
13
 
14
14
  vendor
15
15
  .byebug_history
16
- badges
@@ -0,0 +1,31 @@
1
+ <svg contentScriptType="text/ecmascript" contentStyleType="text/css" preserveAspectRatio="xMidYMid meet" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.0" height="20" width="100%">
2
+
3
+ <linearGradient id="smooth" x2="0" y2="100%">
4
+ <stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
5
+ <stop offset="1" stop-opacity=".1"/>
6
+ </linearGradient>
7
+ <clipPath id="round">
8
+ <rect height="20" width="200" rx="3" fill="#fff"/>
9
+ </clipPath>
10
+ <g clip-path="url(#round)">
11
+ <rect height="20" width="100" fill="#555"/>
12
+ <rect x="100" height="20" width="100" fill="#4dc71f"/>
13
+ <rect height="20" width="200" fill="url(#smooth)"/>
14
+ </g>
15
+ <g fill="#fff" text-anchor="middle" font-family="Helvetica" size="16">
16
+ <text x="50" y="15" fill="#010101" fill-opacity="0.3">
17
+ scov total
18
+ </text>
19
+ <text x="50" y="14">
20
+ scov total
21
+ </text>
22
+ </g>
23
+ <g fill="#fff" text-anchor="middle" font-family="Helvetica-Narrow-Bold" size="16">
24
+ <text x="150" y="15" fill="#010101" fill-opacity="0.3">
25
+ 100%
26
+ </text>
27
+ <text x="150" y="14">
28
+ 100%
29
+ </text>
30
+ </g>
31
+ </svg>
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RepoSmallBadge
4
+ # Hidden class to handle the interface to configuration
5
+ class Configuration
6
+ def initialize(config_hash)
7
+ @config = config_hash
8
+ end
9
+
10
+ def merge!(new_config)
11
+ @config.merge!(new_config)
12
+ end
13
+
14
+ def value_background
15
+ @config.fetch(:value_background, '#4c1')
16
+ end
17
+
18
+ def value_color
19
+ @config.fetch(:value_color, title_color)
20
+ end
21
+
22
+ def value_font
23
+ @config.fetch(:value_font, font)
24
+ end
25
+
26
+ def value_font_size
27
+ @config.fetch(:value_font_size, font_size)
28
+ end
29
+
30
+ def title_background
31
+ @config.fetch(:title_background, '#555')
32
+ end
33
+
34
+ def background
35
+ @config.fetch(:background, '#fff')
36
+ end
37
+
38
+ def title_font
39
+ @config.fetch(:title_font, font)
40
+ end
41
+
42
+ def title_font_size
43
+ @config.fetch(:title_font_size, font_size)
44
+ end
45
+
46
+ def title_color
47
+ @config.fetch(:title_color, '#fff')
48
+ end
49
+
50
+ def font
51
+ @config.fetch(:font, 'Verdana,sans-serif')
52
+ end
53
+
54
+ def font_size
55
+ @config.fetch(:font_size, 11).to_s
56
+ end
57
+
58
+ def rounded_edge_radius
59
+ if @config.fetch(:rounded_border, true)
60
+ @config.fetch(:rounded_edge_radius, '3')
61
+ else
62
+ 0
63
+ end
64
+ end
65
+
66
+ def badge_width
67
+ @config.fetch(:badge_width, 120).to_i
68
+ end
69
+
70
+ def badge_height
71
+ @config.fetch(:badge_height, 20).to_i
72
+ end
73
+
74
+ def badge_middle
75
+ badge_width / 2
76
+ end
77
+
78
+ def filename(suffix = '')
79
+ prefix = @config.fetch(:filename_prefix, 'badge')
80
+ format = @config.fetch(:format, 'svg')
81
+ "#{output_path}/#{prefix}_#{suffix}.#{format}"
82
+ end
83
+
84
+ def title(suffix)
85
+ prefix = @config.fetch(:title_prefix, '')
86
+ if prefix.to_s.empty?
87
+ suffix
88
+ else
89
+ "#{@config.fetch(:title_prefix, '')} #{suffix}"
90
+ end
91
+ end
92
+
93
+ def output_path
94
+ @config.fetch(:output_path, '.')
95
+ end
96
+ end
97
+ end
@@ -1,20 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'victor'
4
+ require 'repo_small_badge/configuration'
4
5
 
5
6
  module RepoSmallBadge
6
- # :nodoc:
7
- # rubocop:disable Metrics/ClassLength
7
+ # Class that creates the Badge SVG image.
8
+ # Behaviour is defined by the configuration hash.
9
+ # For the different configurables see RepoSmallBadge::Configuration.
8
10
  class Image < Victor::SVGBase
9
11
  # Create new instance.
10
12
  # @config is a Hash of configurables. Keys are symbols.
11
13
  def initialize(config = {})
12
- @config = config
14
+ @config = Configuration.new(config)
13
15
  super(template: :html, contentScriptType: 'text/ecmascript',
14
16
  contentStyleType: 'text/css', preserveAspectRatio: 'xMidYMid meet',
15
17
  'xmlns:xlink': 'http://www.w3.org/1999/xlink',
16
18
  xmlns: 'http://www.w3.org/2000/svg', version: '1.0',
17
- height: badge_height)
19
+ height: @config.badge_height)
18
20
  end
19
21
 
20
22
  # Creates the badge.
@@ -23,15 +25,17 @@ module RepoSmallBadge
23
25
  # @value is the overall value to be written to the right side of the badge.
24
26
  def badge(name, title, value)
25
27
  svg_header
28
+ svg_rounded_box
26
29
  svg_boxes
27
- svg_texts(title, value)
28
- save(filename(name))
30
+ svg_title(title)
31
+ svg_value(value)
32
+ save(@config.filename(name))
29
33
  end
30
34
 
31
35
  # Updates the configuration settings and overwrites existing ones.
32
36
  # @config the hash that has to be merged.
33
37
  def config_merge(config)
34
- @config.merge(config)
38
+ @config.merge!(config)
35
39
  end
36
40
 
37
41
  private
@@ -43,100 +47,57 @@ module RepoSmallBadge
43
47
  end
44
48
  end
45
49
 
50
+ # rubocop:disable Metrics/MethodLength
46
51
  def svg_boxes
47
- middle = badge_width / 2
48
- svg_rounded_box
49
-
50
52
  element :g, 'clip-path' => 'url(#round)' do
51
- element :rect, height: badge_height, width: middle,
52
- fill: title_background
53
- element :rect, x: middle, height: badge_height,
54
- width: middle, fill: value_background
55
- element :rect, height: badge_height,
56
- width: badge_width, fill: 'url(#smooth)'
53
+ element :rect, height: @config.badge_height,
54
+ width: @config.badge_middle,
55
+ fill: @config.title_background
56
+ element :rect, x: @config.badge_middle,
57
+ height: @config.badge_height,
58
+ width: @config.badge_middle,
59
+ fill: @config.value_background
60
+ element :rect, height: @config.badge_height,
61
+ width: @config.badge_width, fill: 'url(#smooth)'
57
62
  end
63
+ # rubocop:enable Metrics/MethodLength
58
64
  end
59
65
 
60
66
  def svg_rounded_box
61
67
  element :clipPath, id: 'round' do
62
- element :rect, height: badge_height, width: badge_width,
63
- rx: rounded_edge_radius, fill: background
68
+ element :rect, height: @config.badge_height, width: @config.badge_width,
69
+ rx: @config.rounded_edge_radius, fill: @config.background
64
70
  end
65
71
  end
66
72
 
67
73
  # rubocop:disable Metrics/AbcSize
68
- def svg_texts(title, value)
69
- middle = badge_width / 2
70
- element :g, fill: title_color, 'text-anchor': 'middle',
71
- 'font-family': font, size: font_size do |_svg|
72
- element :text, title(title), x: middle / 2, y: badge_height - 5,
73
- fill: '#010101', 'fill-opacity': '0.3'
74
- element :text, title(title), x: middle / 2, y: badge_height - 6
75
- element :text, value, x: middle / 2 + middle, y: badge_height - 5,
76
- fill: '#010101', 'fill-opacity': '0.3'
77
- element :text, value, x: middle / 2 + middle, y: badge_height - 6
78
- end
79
- end
80
- # rubocop:enable Metrics/AbcSize
81
-
82
- def value_background
83
- @config.fetch(:value_background, '#4c1')
84
- end
85
-
86
- def title_background
87
- @config.fetch(:title_background, '#555')
88
- end
89
-
90
- def background
91
- @config.fetch(:background, '#fff')
92
- end
93
-
94
- def title_color
95
- @config.fetch(:title_color, '#fff')
96
- end
97
-
98
- def font
99
- @config.fetch(:font, 'Verdana,sans-serif')
100
- end
101
-
102
- def font_size
103
- @config.fetch(:font_size, 11).to_s
104
- end
105
-
106
- def rounded_edge_radius
107
- if @config.fetch(:rounded_border, true)
108
- @config.fetch(:rounded_edge_radius, '3')
109
- else
110
- 0
74
+ def svg_title(title)
75
+ element :g, fill: @config.title_color, 'text-anchor': 'middle',
76
+ 'font-family': @config.title_font,
77
+ size: @config.title_font_size do |_svg|
78
+ element :text, @config.title(title),
79
+ x: @config.badge_middle / 2, y: @config.badge_height - 5,
80
+ fill: '#010101', 'fill-opacity': '0.3'
81
+ element :text, @config.title(title),
82
+ x: @config.badge_middle / 2, y: @config.badge_height - 6
111
83
  end
112
84
  end
113
85
 
114
- def badge_width
115
- @config.fetch(:badge_width, 120).to_i
116
- end
117
-
118
- def badge_height
119
- @config.fetch(:badge_height, 20).to_i
120
- end
121
-
122
- def filename(suffix = '')
123
- prefix = @config.fetch(:filename_prefix, 'badge')
124
- format = @config.fetch(:format, 'svg')
125
- "#{output_path}/#{prefix}_#{suffix}.#{format}"
126
- end
127
-
128
- def title(suffix)
129
- prefix = @config.fetch(:title_prefix, '')
130
- if prefix.to_s.empty?
131
- suffix
132
- else
133
- "#{@config.fetch(:title_prefix, '')} #{suffix}"
86
+ # rubocop:disable Metrics/MethodLength
87
+ def svg_value(value)
88
+ element :g, fill: @config.value_color, 'text-anchor': 'middle',
89
+ 'font-family': @config.value_font,
90
+ size: @config.value_font_size do |_svg|
91
+ element :text, value,
92
+ x: @config.badge_middle / 2 + @config.badge_middle,
93
+ y: @config.badge_height - 5,
94
+ fill: '#010101', 'fill-opacity': '0.3'
95
+ element :text, value,
96
+ x: @config.badge_middle / 2 + @config.badge_middle,
97
+ y: @config.badge_height - 6
134
98
  end
135
99
  end
136
-
137
- def output_path
138
- @config.fetch(:output_path, '.')
139
- end
100
+ # rubocop:enable Metrics/MethodLength
101
+ # rubocop:enable Metrics/AbcSize
140
102
  end
141
- # rubocop:enable Metrics/ClassLength
142
103
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RepoSmallBadge
4
- VERSION = '0.2.2'
4
+ VERSION = '0.2.3'
5
5
  end
@@ -9,7 +9,7 @@ describe RepoSmallBadge::Image do
9
9
  describe '#coverage' do
10
10
  it do
11
11
  allow(File).to receive(:write)
12
- .with('./badge_total.svg', default_svg_string).and_return(true)
12
+ .with('./badge_total.svg', rounded_svg_string).and_return(true)
13
13
  expect(subject.badge('total', 'Total', '100%'))
14
14
  .to be_truthy
15
15
  end
@@ -27,6 +27,15 @@ describe RepoSmallBadge::Image do
27
27
  end
28
28
  end
29
29
 
30
+ context 'with different fonts colors size' do
31
+ subject do
32
+ described_class
33
+ .new(badge_width: 200,
34
+ title_color: '#ffffff', title_font: 'Verdura', title_size: 12,
35
+ value_color: '#ffffcc', value_font: 'Berdura', value_size: 10)
36
+ end
37
+ end
38
+
30
39
  context '#config_merge' do
31
40
  it do
32
41
  expect(subject.config_merge(badge_height: 10)[:badge_height]).to eq 10
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TestRepoSmallBadge
4
- # rubocop:disable Metrics/MethodLength, Metrics/LineLength
5
- def default_svg_string
4
+ # rubocop:disable Metrics/MethodLength,Metrics/LineLength,Metrics/ParameterLists
5
+ def rounded_svg_string(title_color: '#fff', title_font: 'Verdana,sans-serif', title_font_size: 11,
6
+ value_color: '#fff', value_font: 'Verdana,sans-serif', value_font_size: 11)
6
7
  %(<svg contentScriptType="text/ecmascript" contentStyleType="text/css" preserveAspectRatio="xMidYMid meet" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.0" height="20" width="100%">
7
8
 
8
9
  <linearGradient id="smooth" x2="0" y2="100%">
@@ -17,13 +18,15 @@ module TestRepoSmallBadge
17
18
  <rect x="60" height="20" width="60" fill="#4c1"/>
18
19
  <rect height="20" width="120" fill="url(#smooth)"/>
19
20
  </g>
20
- <g fill="#fff" text-anchor="middle" font-family="Verdana,sans-serif" size="11">
21
+ <g fill="#{title_color}" text-anchor="middle" font-family="#{title_font}" size="#{title_font_size}">
21
22
  <text x="30" y="15" fill="#010101" fill-opacity="0.3">
22
23
  Total
23
24
  </text>
24
25
  <text x="30" y="14">
25
26
  Total
26
27
  </text>
28
+ </g>
29
+ <g fill="#{value_color}" text-anchor="middle" font-family="#{value_font}" size="#{value_font_size}">
27
30
  <text x="90" y="15" fill="#010101" fill-opacity="0.3">
28
31
  100%
29
32
  </text>
@@ -56,6 +59,8 @@ badge Total
56
59
  <text x="50" y="14">
57
60
  badge Total
58
61
  </text>
62
+ </g>
63
+ <g fill="#fff" text-anchor="middle" font-family="Verdana,sans-serif" size="11">
59
64
  <text x="150" y="15" fill="#010101" fill-opacity="0.3">
60
65
  100%
61
66
  </text>
@@ -65,5 +70,5 @@ badge Total
65
70
  </g>
66
71
  </svg>)
67
72
  end
68
- # rubocop:enable Metrics/MethodLength, Metrics/LineLength
73
+ # rubocop:enable Metrics/MethodLength,Metrics/LineLength,Metrics/ParameterLists
69
74
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: repo-small-badge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marc Grimme
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-17 00:00:00.000000000 Z
11
+ date: 2019-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: victor
@@ -114,8 +114,10 @@ files:
114
114
  - MIT-LICENSE
115
115
  - README.md
116
116
  - Rakefile
117
+ - badges/coverage_badge_total.svg
117
118
  - bin/console
118
119
  - lib/repo_small_badge.rb
120
+ - lib/repo_small_badge/configuration.rb
119
121
  - lib/repo_small_badge/image.rb
120
122
  - lib/repo_small_badge/version.rb
121
123
  - repo-small-badge.gemspec