svg_optimizer 0.0.4 → 0.0.5

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.

Potentially problematic release.


This version of svg_optimizer might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57b703a501df1067d13975a65831cfa8eb07e602
4
- data.tar.gz: 48295ee163a4dcbce704d3044e84e442c7fb3957
3
+ metadata.gz: 967fe8ee11fe2dfd0f45a43b8162f63407a9b66b
4
+ data.tar.gz: 92ae939384c1111548a7972cab68c438c24066d3
5
5
  SHA512:
6
- metadata.gz: fc04c56579a8c2ef51015c23ebc77865ef63712f16382caf9dbde46efc148c4cb75d8d64c575a6c457baecb7a380829887718be9d44598d42b790abc9dab3d21
7
- data.tar.gz: 26553ccf7bba878f75209ec42c64949867e8eff07bba8184af4ea3c219e358f6c4057a22a17ab0775f836c6ead457f049fa04804ef16b4707e72e4d989c6b90e
6
+ metadata.gz: 00ed5692f1ca0e2cb01b99c3fb4fd05bf7a0f304841ed21f256d4dc819e0c56faf4b3b685d35316879d38632f253fe48ef15f967809ef97865078292d6d403f1
7
+ data.tar.gz: 6f30a9fba01672b745858889f972fc562025b49f353032dcccdeff418c12daea995cfd3dcac122b9a82700f94cc3fca5b8966da9946ee1afab0e183f6a7c66eb
@@ -0,0 +1,48 @@
1
+ module SvgOptimizer
2
+ module Plugins
3
+ class CollapseGroups < Base
4
+ def process
5
+ xml.css('g:not(:empty)').each do |group|
6
+ collapse(group)
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def collapse(group)
13
+ collapse_attributes(group)
14
+ group.swap(group.children) if collapse?(group)
15
+ end
16
+
17
+ def collapse_attributes(group)
18
+ child = group.first_element_child
19
+ return unless collapse_attributes?(group, child)
20
+
21
+ group.attributes.each do |attr, val|
22
+ if %w(transform class).include?(attr)
23
+ child[attr] = [val, child[attr]].compact.join(' ')
24
+ else
25
+ child[attr] ||= val
26
+ end
27
+ group.delete(attr)
28
+ end
29
+ end
30
+
31
+ def collapse?(group)
32
+ group.attributes.empty? &&
33
+ !group.element_children.map(&:name).include?('animate')
34
+ end
35
+
36
+ def collapse_attributes?(group, child)
37
+ return false unless group.attributes.any?
38
+ return false unless group.element_children.length == 1
39
+ return false if child.has_attribute?('id')
40
+ return false unless !group.has_attribute?('clip-path') ||
41
+ child.name == 'g' &&
42
+ !group.has_attribute?('transform') &&
43
+ !child.has_attribute?('transform')
44
+ true
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,62 @@
1
+ module SvgOptimizer
2
+ module Plugins
3
+ class RemoveUselessStrokeAndFill < Base
4
+ SELECTOR = %w(circle ellipse line path polygon polyline rect).join(',')
5
+ STROKE_ATTRS = %w(stroke stroke-opacity stroke-width stroke-dashoffset)
6
+ FILL_ATTRS = %w(fill-opacity fill-rule)
7
+
8
+ def process
9
+ return if xml.css('style, script').any?
10
+ xml.css(SELECTOR).each do |node|
11
+ remove_useless_attributes(node)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def remove_useless_attributes(node)
18
+ return if inherited_attribute(node, 'id')
19
+ remove_stroke(node) if remove_stroke?(node)
20
+ remove_fill(node) if remove_fill?(node)
21
+ end
22
+
23
+ def remove_stroke(node)
24
+ STROKE_ATTRS.each { |attr| node.delete(attr) }
25
+ node['stroke'] = 'none' if decline_inherited_stroke?(node)
26
+ end
27
+
28
+ def remove_fill(node)
29
+ FILL_ATTRS.each { |attr| node.delete(attr) }
30
+ node['fill'] = 'none' if decline_inherited_fill?(node)
31
+ end
32
+
33
+ def decline_inherited_stroke?(node)
34
+ (inherited_attribute(node.parent, 'stroke') || 'none') != 'none'
35
+ end
36
+
37
+ def decline_inherited_fill?(node)
38
+ !inherited_attribute(node, 'fill') || node.has_attribute?('fill')
39
+ end
40
+
41
+ def remove_stroke?(node)
42
+ return true if (inherited_attribute(node, 'stroke') || 'none') == 'none'
43
+ return true if inherited_attribute(node, 'stroke-opacity') == '0'
44
+ return inherited_attribute(node, 'stroke-width') == '0'
45
+ end
46
+
47
+ def remove_fill?(node)
48
+ fill = inherited_attribute(node, 'fill')
49
+ return true if fill == 'none'
50
+ return true if inherited_attribute(node, 'fill-opacity') == '0'
51
+ return !fill
52
+ end
53
+
54
+ def inherited_attribute(node, attr)
55
+ return nil if node.nil? || node.document?
56
+ return node[attr] if node.has_attribute?(attr)
57
+ inherited_attribute(node.parent, attr)
58
+ end
59
+ end
60
+ end
61
+ end
62
+
@@ -1,3 +1,3 @@
1
1
  module SvgOptimizer
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/svg_optimizer.rb CHANGED
@@ -4,6 +4,7 @@ require "svg_optimizer/version"
4
4
  require "svg_optimizer/plugins/base"
5
5
  require "svg_optimizer/plugins/cleanup_attribute"
6
6
  require "svg_optimizer/plugins/cleanup_id"
7
+ require "svg_optimizer/plugins/collapse_groups"
7
8
  require "svg_optimizer/plugins/remove_comment"
8
9
  require "svg_optimizer/plugins/remove_metadata"
9
10
  require "svg_optimizer/plugins/remove_empty_text_node"
@@ -13,6 +14,7 @@ require "svg_optimizer/plugins/remove_hidden_element"
13
14
  require "svg_optimizer/plugins/remove_raster_image"
14
15
  require "svg_optimizer/plugins/remove_empty_attribute"
15
16
  require "svg_optimizer/plugins/remove_unused_namespace"
17
+ require "svg_optimizer/plugins/remove_useless_stroke_and_fill"
16
18
 
17
19
  module SvgOptimizer
18
20
  PLUGINS = %w[
@@ -25,6 +27,8 @@ module SvgOptimizer
25
27
  RemoveUnusedNamespace
26
28
  RemoveRasterImage
27
29
  RemoveEmptyAttribute
30
+ CollapseGroups
31
+ RemoveUselessStrokeAndFill
28
32
  RemoveEmptyTextNode
29
33
  RemoveEmptyContainer
30
34
  ]
@@ -0,0 +1,13 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <g>
3
+ <g>
4
+ <path d="..."/>
5
+ </g>
6
+ </g>
7
+ </svg>
8
+
9
+ @@@
10
+
11
+ <svg xmlns="http://www.w3.org/2000/svg">
12
+ <path d="..."/>
13
+ </svg>
@@ -0,0 +1,13 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <g>
3
+ <g attr1="val1">
4
+ <path d="..."/>
5
+ </g>
6
+ </g>
7
+ </svg>
8
+
9
+ @@@
10
+
11
+ <svg xmlns="http://www.w3.org/2000/svg">
12
+ <path d="..." attr1="val1"/>
13
+ </svg>
@@ -0,0 +1,13 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <g attr1="val1">
3
+ <g attr2="val2">
4
+ <path d="..."/>
5
+ </g>
6
+ </g>
7
+ </svg>
8
+
9
+ @@@
10
+
11
+ <svg xmlns="http://www.w3.org/2000/svg">
12
+ <path d="..." attr2="val2" attr1="val1"/>
13
+ </svg>
@@ -0,0 +1,17 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <g attr1="val1">
3
+ <g>
4
+ <path d="..."/>
5
+ </g>
6
+ <path d="..."/>
7
+ </g>
8
+ </svg>
9
+
10
+ @@@
11
+
12
+ <svg xmlns="http://www.w3.org/2000/svg">
13
+ <g attr1="val1">
14
+ <path d="..."/>
15
+ <path d="..."/>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,17 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <g attr1="val1">
3
+ <g attr2="val2">
4
+ <path d="..."/>
5
+ </g>
6
+ <path d="..."/>
7
+ </g>
8
+ </svg>
9
+
10
+ @@@
11
+
12
+ <svg xmlns="http://www.w3.org/2000/svg">
13
+ <g attr1="val1">
14
+ <path d="..." attr2="val2"/>
15
+ <path d="..."/>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,17 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <g attr1="val1">
3
+ <g attr2="val2">
4
+ <path attr2="val3" d="..."/>
5
+ </g>
6
+ <path d="..."/>
7
+ </g>
8
+ </svg>
9
+
10
+ @@@
11
+
12
+ <svg xmlns="http://www.w3.org/2000/svg">
13
+ <g attr1="val1">
14
+ <path attr2="val3" d="..."/>
15
+ <path d="..."/>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,17 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <g attr1="val1">
3
+ <g transform="rotate(45)">
4
+ <path transform="scale(2)" d="..."/>
5
+ </g>
6
+ <path d="..."/>
7
+ </g>
8
+ </svg>
9
+
10
+ @@@
11
+
12
+ <svg xmlns="http://www.w3.org/2000/svg">
13
+ <g attr1="val1">
14
+ <path transform="rotate(45) scale(2)" d="..."/>
15
+ <path d="..."/>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,25 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <clipPath id="a">
3
+ <path d="..."/>
4
+ </clipPath>
5
+ <g transform="matrix(0 -1.25 -1.25 0 100 100)" clip-path="url(#a)">
6
+ <g transform="scale(.2)">
7
+ <path d="..."/>
8
+ <path d="..."/>
9
+ </g>
10
+ </g>
11
+ </svg>
12
+
13
+ @@@
14
+
15
+ <svg xmlns="http://www.w3.org/2000/svg">
16
+ <clipPath id="a">
17
+ <path d="..."/>
18
+ </clipPath>
19
+ <g transform="matrix(0 -1.25 -1.25 0 100 100)" clip-path="url(#a)">
20
+ <g transform="scale(.2)">
21
+ <path d="..."/>
22
+ <path d="..."/>
23
+ </g>
24
+ </g>
25
+ </svg>
@@ -0,0 +1,35 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <clipPath id="a">
3
+ <path d="..."/>
4
+ </clipPath>
5
+ <clipPath id="b">
6
+ <path d="..."/>
7
+ </clipPath>
8
+ <g transform="matrix(0 -1.25 -1.25 0 100 100)" clip-path="url(#a)">
9
+ <g transform="scale(.2)">
10
+ <g>
11
+ <g clip-path="url(#b)">
12
+ <path d="..."/>
13
+ <path d="..."/>
14
+ </g>
15
+ </g>
16
+ </g>
17
+ </g>
18
+ </svg>
19
+
20
+ @@@
21
+
22
+ <svg xmlns="http://www.w3.org/2000/svg">
23
+ <clipPath id="a">
24
+ <path d="..."/>
25
+ </clipPath>
26
+ <clipPath id="b">
27
+ <path d="..."/>
28
+ </clipPath>
29
+ <g transform="matrix(0 -1.25 -1.25 0 100 100)" clip-path="url(#a)">
30
+ <g clip-path="url(#b)" transform="scale(.2)">
31
+ <path d="..."/>
32
+ <path d="..."/>
33
+ </g>
34
+ </g>
35
+ </svg>
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <clipPath id="a">
3
+ <path d="..."/>
4
+ </clipPath>
5
+ <g clip-path="url(#a)">
6
+ <path d="..." transform="scale(.2)"/>
7
+ </g>
8
+ </svg>
9
+
10
+ @@@
11
+
12
+ <svg xmlns="http://www.w3.org/2000/svg">
13
+ <clipPath id="a">
14
+ <path d="..."/>
15
+ </clipPath>
16
+ <g clip-path="url(#a)">
17
+ <path d="..." transform="scale(.2)"/>
18
+ </g>
19
+ </svg>
@@ -0,0 +1,29 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <g stroke="#000">
3
+ <g id="star">
4
+ <path id="bar" d="..."/>
5
+ </g>
6
+ </g>
7
+ <g>
8
+ <animate id="frame0" attributeName="visibility" values="visible" dur="33ms" begin="0s;frame27.end"/>
9
+ <path d="..." fill="#272727"/>
10
+ <path d="..." fill="#404040"/>
11
+ <path d="..." fill="#2d2d2d"/>
12
+ </g>
13
+ </svg>
14
+
15
+ @@@
16
+
17
+ <svg xmlns="http://www.w3.org/2000/svg">
18
+ <g stroke="#000">
19
+ <g id="star">
20
+ <path id="bar" d="..."/>
21
+ </g>
22
+ </g>
23
+ <g>
24
+ <animate id="frame0" attributeName="visibility" values="visible" dur="33ms" begin="0s;frame27.end"/>
25
+ <path d="..." fill="#272727"/>
26
+ <path d="..." fill="#404040"/>
27
+ <path d="..." fill="#2d2d2d"/>
28
+ </g>
29
+ </svg>
@@ -0,0 +1,41 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <g id="test">
4
+ <rect stroke-dashoffset="5" width="100" height="100"/>
5
+ </g>
6
+ </defs>
7
+ <circle fill="red" stroke-width="6" stroke-dashoffset="5" cx="60" cy="60" r="50"/>
8
+ <circle fill="red" stroke="#000" stroke-width="6" stroke-dashoffset="5" stroke-opacity="0" cx="60" cy="60" r="50"/>
9
+ <circle fill="red" stroke="#000" stroke-width="0" stroke-dashoffset="5" cx="60" cy="60" r="50"/>
10
+ <circle fill="red" stroke="#000" stroke-width="6" stroke-dashoffset="5" cx="60" cy="60" r="50"/>
11
+ <g stroke="#000" stroke-width="6">
12
+ <circle fill="red" stroke="red" stroke-width="0" stroke-dashoffset="5" cx="60" cy="60" r="50"/>
13
+ <circle fill="red" stroke-dashoffset="5" cx="60" cy="60" r="50"/>
14
+ </g>
15
+ <g stroke="#000">
16
+ <circle fill="red" stroke-width="0" stroke-dashoffset="5" cx="60" cy="60" r="50"/>
17
+ <circle fill="red" stroke="none" stroke-dashoffset="5" cx="60" cy="60" r="50"/>
18
+ </g>
19
+ </svg>
20
+
21
+ @@@
22
+
23
+ <svg xmlns="http://www.w3.org/2000/svg">
24
+ <defs>
25
+ <g id="test">
26
+ <rect stroke-dashoffset="5" width="100" height="100"/>
27
+ </g>
28
+ </defs>
29
+ <circle fill="red" cx="60" cy="60" r="50"/>
30
+ <circle fill="red" cx="60" cy="60" r="50"/>
31
+ <circle fill="red" cx="60" cy="60" r="50"/>
32
+ <circle fill="red" stroke="#000" stroke-width="6" stroke-dashoffset="5" cx="60" cy="60" r="50"/>
33
+ <g stroke="#000" stroke-width="6">
34
+ <circle fill="red" cx="60" cy="60" r="50" stroke="none"/>
35
+ <circle fill="red" stroke-dashoffset="5" cx="60" cy="60" r="50"/>
36
+ </g>
37
+ <g stroke="#000">
38
+ <circle fill="red" cx="60" cy="60" r="50" stroke="none"/>
39
+ <circle fill="red" cx="60" cy="60" r="50" stroke="none"/>
40
+ </g>
41
+ </svg>
@@ -0,0 +1,31 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <g id="test">
4
+ <rect fill-opacity=".5" width="100" height="100"/>
5
+ </g>
6
+ </defs>
7
+ <circle fill="none" fill-rule="evenodd" cx="60" cy="60" r="50"/>
8
+ <circle fill="red" fill-opacity="0" cx="90" cy="90" r="50"/>
9
+ <circle fill-opacity="0" fill-rule="evenodd" cx="90" cy="60" r="50"/>
10
+ <circle fill="red" fill-opacity=".5" cx="60" cy="60" r="50"/>
11
+ <g fill="none">
12
+ <circle fill-opacity=".5" cx="60" cy="60" r="50"/>
13
+ </g>
14
+ </svg>
15
+
16
+ @@@
17
+
18
+ <svg xmlns="http://www.w3.org/2000/svg">
19
+ <defs>
20
+ <g id="test">
21
+ <rect fill-opacity=".5" width="100" height="100"/>
22
+ </g>
23
+ </defs>
24
+ <circle fill="none" cx="60" cy="60" r="50"/>
25
+ <circle fill="none" cx="90" cy="90" r="50"/>
26
+ <circle cx="90" cy="60" r="50" fill="none"/>
27
+ <circle fill="red" fill-opacity=".5" cx="60" cy="60" r="50"/>
28
+ <g fill="none">
29
+ <circle cx="60" cy="60" r="50"/>
30
+ </g>
31
+ </svg>
@@ -0,0 +1,21 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <style>
3
+
4
+ </style>
5
+ <circle fill="none" fill-rule="evenodd" cx="60" cy="60" r="50"/>
6
+ <circle fill-opacity="0" fill-rule="evenodd" cx="90" cy="60" r="50"/>
7
+ <circle fill="red" stroke-width="6" stroke-dashoffset="5" cx="60" cy="60" r="50"/>
8
+ <circle fill="red" stroke="#000" stroke-width="6" stroke-dashoffset="5" stroke-opacity="0" cx="60" cy="60" r="50"/>
9
+ </svg>
10
+
11
+ @@@
12
+
13
+ <svg xmlns="http://www.w3.org/2000/svg">
14
+ <style>
15
+
16
+ </style>
17
+ <circle fill="none" fill-rule="evenodd" cx="60" cy="60" r="50"/>
18
+ <circle fill-opacity="0" fill-rule="evenodd" cx="90" cy="60" r="50"/>
19
+ <circle fill="red" stroke-width="6" stroke-dashoffset="5" cx="60" cy="60" r="50"/>
20
+ <circle fill="red" stroke="#000" stroke-width="6" stroke-dashoffset="5" stroke-opacity="0" cx="60" cy="60" r="50"/>
21
+ </svg>
data/spec/spec_helper.rb CHANGED
@@ -11,13 +11,38 @@ module RSpecHelpers
11
11
  </svg>
12
12
  XML
13
13
 
14
- def with_svg_plugin(content)
15
- let(:file_path) { File.expand_path("../fixtures/#{content}", __FILE__) }
16
- let(:input_xml) { Nokogiri::XML(File.file?(file_path) ? File.read(file_path) : SVG % content) }
14
+ def fixtures_path
15
+ File.expand_path("../fixtures", __FILE__)
16
+ end
17
+
18
+ def setup_plugin_test
19
+ let(:input_xml) { Nokogiri::XML(input_content, &:noblanks) }
17
20
  let(:plugin) { described_class.new(input_xml) }
18
21
  let(:xml) { plugin.xml }
19
22
  before { plugin.process }
20
23
  end
24
+
25
+ def with_svg_plugin(content)
26
+ let(:file_path) { File.join(fixtures_path, content) }
27
+ let(:input_content) { File.file?(file_path) ? File.read(file_path) : SVG % content }
28
+ setup_plugin_test
29
+ end
30
+
31
+ def test_with_fixture_set(name)
32
+ Dir.glob(File.join(fixtures_path, name, '*.svg')).each do |fixture|
33
+ context "output from fixture: #{fixture}" do
34
+ let(:fixture_content) { File.read(fixture) }
35
+ let(:input_content) { fixture_content.split('@@@')[0].strip }
36
+ let(:expected_content) { fixture_content.split('@@@')[1].strip }
37
+ let(:expected) { Nokogiri::XML(expected_content, &:noblanks).root.to_xml }
38
+ subject { xml.root.to_xml }
39
+ setup_plugin_test
40
+
41
+ it { is_expected.to eq(expected) }
42
+ end
43
+ end
44
+ end
45
+
21
46
  end
22
47
 
23
48
  RSpec.configure do |config|
@@ -25,4 +50,5 @@ RSpec.configure do |config|
25
50
  config.filter_run :focus
26
51
  config.order = "random"
27
52
  config.extend RSpecHelpers
53
+ config.include RSpecHelpers
28
54
  end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe SvgOptimizer::Plugins::CollapseGroups do
4
+ test_with_fixture_set('collapse_groups')
5
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe SvgOptimizer::Plugins::RemoveUselessStrokeAndFill do
4
+ test_with_fixture_set('remove_useless_stroke_and_fill')
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: svg_optimizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-29 00:00:00.000000000 Z
11
+ date: 2016-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -93,6 +93,7 @@ files:
93
93
  - lib/svg_optimizer/plugins/base.rb
94
94
  - lib/svg_optimizer/plugins/cleanup_attribute.rb
95
95
  - lib/svg_optimizer/plugins/cleanup_id.rb
96
+ - lib/svg_optimizer/plugins/collapse_groups.rb
96
97
  - lib/svg_optimizer/plugins/remove_comment.rb
97
98
  - lib/svg_optimizer/plugins/remove_editor_namespace.rb
98
99
  - lib/svg_optimizer/plugins/remove_empty_attribute.rb
@@ -102,15 +103,31 @@ files:
102
103
  - lib/svg_optimizer/plugins/remove_metadata.rb
103
104
  - lib/svg_optimizer/plugins/remove_raster_image.rb
104
105
  - lib/svg_optimizer/plugins/remove_unused_namespace.rb
106
+ - lib/svg_optimizer/plugins/remove_useless_stroke_and_fill.rb
105
107
  - lib/svg_optimizer/version.rb
106
108
  - spec/fixtures/cleanup_id.svg
107
109
  - spec/fixtures/cleanup_id_expected.svg
110
+ - spec/fixtures/collapse_groups/collapseGroups.01.svg
111
+ - spec/fixtures/collapse_groups/collapseGroups.02.svg
112
+ - spec/fixtures/collapse_groups/collapseGroups.03.svg
113
+ - spec/fixtures/collapse_groups/collapseGroups.04.svg
114
+ - spec/fixtures/collapse_groups/collapseGroups.05.svg
115
+ - spec/fixtures/collapse_groups/collapseGroups.06.svg
116
+ - spec/fixtures/collapse_groups/collapseGroups.07.svg
117
+ - spec/fixtures/collapse_groups/collapseGroups.08.svg
118
+ - spec/fixtures/collapse_groups/collapseGroups.09.svg
119
+ - spec/fixtures/collapse_groups/collapseGroups.10.svg
120
+ - spec/fixtures/collapse_groups/collapseGroups.11.svg
108
121
  - spec/fixtures/green.svg
109
122
  - spec/fixtures/namespaced_attribute.svg
123
+ - spec/fixtures/remove_useless_stroke_and_fill/removeUselessStrokeAndFill.01.svg
124
+ - spec/fixtures/remove_useless_stroke_and_fill/removeUselessStrokeAndFill.02.svg
125
+ - spec/fixtures/remove_useless_stroke_and_fill/removeUselessStrokeAndFill.03.svg
110
126
  - spec/fixtures/unused_namespace.svg
111
127
  - spec/spec_helper.rb
112
128
  - spec/svg_optimizer/plugins/cleanup_attribute_spec.rb
113
129
  - spec/svg_optimizer/plugins/cleanup_id_spec.rb
130
+ - spec/svg_optimizer/plugins/collapse_groups_spec.rb
114
131
  - spec/svg_optimizer/plugins/remove_comment_spec.rb
115
132
  - spec/svg_optimizer/plugins/remove_editor_namespace_spec.rb
116
133
  - spec/svg_optimizer/plugins/remove_empty_attribute_spec.rb
@@ -120,6 +137,7 @@ files:
120
137
  - spec/svg_optimizer/plugins/remove_metadata_spec.rb
121
138
  - spec/svg_optimizer/plugins/remove_raster_image_spec.rb
122
139
  - spec/svg_optimizer/plugins/remove_unused_namespace_spec.rb
140
+ - spec/svg_optimizer/plugins/remove_useless_stroke_and_fill_spec.rb
123
141
  homepage: https://github.com/fnando/svg_optimizer
124
142
  licenses:
125
143
  - MIT
@@ -147,12 +165,27 @@ summary: SVG optimization based on Node's SVGO
147
165
  test_files:
148
166
  - spec/fixtures/cleanup_id.svg
149
167
  - spec/fixtures/cleanup_id_expected.svg
168
+ - spec/fixtures/collapse_groups/collapseGroups.01.svg
169
+ - spec/fixtures/collapse_groups/collapseGroups.02.svg
170
+ - spec/fixtures/collapse_groups/collapseGroups.03.svg
171
+ - spec/fixtures/collapse_groups/collapseGroups.04.svg
172
+ - spec/fixtures/collapse_groups/collapseGroups.05.svg
173
+ - spec/fixtures/collapse_groups/collapseGroups.06.svg
174
+ - spec/fixtures/collapse_groups/collapseGroups.07.svg
175
+ - spec/fixtures/collapse_groups/collapseGroups.08.svg
176
+ - spec/fixtures/collapse_groups/collapseGroups.09.svg
177
+ - spec/fixtures/collapse_groups/collapseGroups.10.svg
178
+ - spec/fixtures/collapse_groups/collapseGroups.11.svg
150
179
  - spec/fixtures/green.svg
151
180
  - spec/fixtures/namespaced_attribute.svg
181
+ - spec/fixtures/remove_useless_stroke_and_fill/removeUselessStrokeAndFill.01.svg
182
+ - spec/fixtures/remove_useless_stroke_and_fill/removeUselessStrokeAndFill.02.svg
183
+ - spec/fixtures/remove_useless_stroke_and_fill/removeUselessStrokeAndFill.03.svg
152
184
  - spec/fixtures/unused_namespace.svg
153
185
  - spec/spec_helper.rb
154
186
  - spec/svg_optimizer/plugins/cleanup_attribute_spec.rb
155
187
  - spec/svg_optimizer/plugins/cleanup_id_spec.rb
188
+ - spec/svg_optimizer/plugins/collapse_groups_spec.rb
156
189
  - spec/svg_optimizer/plugins/remove_comment_spec.rb
157
190
  - spec/svg_optimizer/plugins/remove_editor_namespace_spec.rb
158
191
  - spec/svg_optimizer/plugins/remove_empty_attribute_spec.rb
@@ -162,3 +195,4 @@ test_files:
162
195
  - spec/svg_optimizer/plugins/remove_metadata_spec.rb
163
196
  - spec/svg_optimizer/plugins/remove_raster_image_spec.rb
164
197
  - spec/svg_optimizer/plugins/remove_unused_namespace_spec.rb
198
+ - spec/svg_optimizer/plugins/remove_useless_stroke_and_fill_spec.rb