dragonfly_svg 0.0.3 → 0.0.4
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 +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +2 -2
- data/README.md +9 -1
- data/lib/dragonfly_svg.rb +3 -7
- data/lib/dragonfly_svg/analysers/aspect_ratio_analyser.rb +17 -0
- data/lib/dragonfly_svg/analysers/base.rb +11 -0
- data/lib/dragonfly_svg/analysers/height_analyser.rb +16 -0
- data/lib/dragonfly_svg/analysers/landscape_analyser.rb +17 -0
- data/lib/dragonfly_svg/analysers/portrait_analyser.rb +17 -0
- data/lib/dragonfly_svg/analysers/svg_properties.rb +4 -6
- data/lib/dragonfly_svg/analysers/width_analyser.rb +16 -0
- data/lib/dragonfly_svg/plugin.rb +16 -20
- data/lib/dragonfly_svg/processors/extend_ids.rb +4 -6
- data/lib/dragonfly_svg/processors/remove_namespaces.rb +2 -3
- data/lib/dragonfly_svg/processors/set_attribute.rb +1 -3
- data/lib/dragonfly_svg/processors/set_dimensions.rb +4 -12
- data/lib/dragonfly_svg/processors/set_namespace.rb +2 -4
- data/lib/dragonfly_svg/processors/set_preserve_aspect_ratio.rb +3 -11
- data/lib/dragonfly_svg/processors/set_view_box.rb +3 -12
- data/lib/dragonfly_svg/version.rb +1 -1
- data/samples/sample.png +0 -0
- data/test/dragonfly_svg/analysers/svg_properties_test.rb +1 -3
- data/test/dragonfly_svg/plugin_test.rb +42 -3
- data/test/dragonfly_svg/processors/extend_ids_test.rb +1 -3
- data/test/dragonfly_svg/processors/remove_namespaces_test.rb +1 -3
- data/test/dragonfly_svg/processors/set_attribute_test.rb +3 -5
- data/test/dragonfly_svg/processors/set_dimensions_test.rb +1 -3
- data/test/dragonfly_svg/processors/set_namespace_test.rb +1 -3
- data/test/dragonfly_svg/processors/set_preserve_aspect_ratio_test.rb +4 -6
- data/test/dragonfly_svg/processors/set_view_box_test.rb +1 -3
- data/test/test_helper.rb +3 -3
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a80f5be599ee36aeef6e1fb8b3ac547eacfa5dd
|
4
|
+
data.tar.gz: 3381778fb2df92c6c806404a39f8e873aee38193
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: daa3efc319ebe8457c22f460f1cf69e00c6bd8b9f270d98983d7d5d927b6d36c12dedf183ffe8f7d93c98014880bd0a795b7694ba98291a0c55a8ba1b48648fb
|
7
|
+
data.tar.gz: bb23dfbe0b3f524e276962fe851bb95a8712fb442c7164df77d761d6baac63b7bf39af1595804a239cc2c14ac4422d94ecfe366eaca0f5d0c2e8c9d8d8afbbcb
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -60,6 +60,14 @@ Removes the `xmlns` namespace from the SVG.
|
|
60
60
|
svg.remove_namespaces
|
61
61
|
```
|
62
62
|
|
63
|
+
### SetAttribute
|
64
|
+
|
65
|
+
Allows to set attribute for specified `xpath`:
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
svg.set_attribute('./*[name()="svg"]', 'style', 'margin: 50px;')
|
69
|
+
```
|
70
|
+
|
63
71
|
### SetDimensions
|
64
72
|
|
65
73
|
Sets the dimensions of the SVG. Takes two parameters: `width` and `height`
|
@@ -100,4 +108,4 @@ svg.set_viewbox(0, 0, 400, 600) # viewBox="0 0 400 600"
|
|
100
108
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
101
109
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
102
110
|
4. Push to the branch (`git push origin my-new-feature`)
|
103
|
-
5. Create a new Pull Request
|
111
|
+
5. Create a new Pull Request
|
data/lib/dragonfly_svg.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
module DragonflySvg
|
2
|
+
module Analysers
|
3
|
+
class AspectRatioAnalyser < Base
|
4
|
+
def initialize(app)
|
5
|
+
original = app.analysers.items[:aspect_ratio]
|
6
|
+
app.add_analyser(:aspect_ratio) do |content|
|
7
|
+
if is_svg?(content)
|
8
|
+
attrs = content.analyse(:svg_properties)
|
9
|
+
attrs[:width].to_f / attrs[:height]
|
10
|
+
elsif original
|
11
|
+
original.call(content)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module DragonflySvg
|
2
|
+
module Analysers
|
3
|
+
class HeightAnalyser < Base
|
4
|
+
def initialize(app)
|
5
|
+
original = app.analysers.items[:height]
|
6
|
+
app.add_analyser(:height) do |content|
|
7
|
+
if is_svg?(content)
|
8
|
+
content.analyse(:svg_properties)[:height]
|
9
|
+
elsif original
|
10
|
+
original.call(content)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module DragonflySvg
|
2
|
+
module Analysers
|
3
|
+
class LandscapeAnalyser < Base
|
4
|
+
def initialize(app)
|
5
|
+
original = app.analysers.items[:landscape]
|
6
|
+
app.add_analyser(:landscape) do |content|
|
7
|
+
if is_svg?(content)
|
8
|
+
attrs = content.analyse(:svg_properties)
|
9
|
+
attrs[:width] >= attrs[:height]
|
10
|
+
elsif original
|
11
|
+
original.call(content)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module DragonflySvg
|
2
|
+
module Analysers
|
3
|
+
class PortraitAnalyser < Base
|
4
|
+
def initialize(app)
|
5
|
+
original = app.analysers.items[:portrait]
|
6
|
+
app.add_analyser(:portrait) do |content|
|
7
|
+
if is_svg?(content)
|
8
|
+
attrs = content.analyse(:svg_properties)
|
9
|
+
attrs[:width] <= attrs[:height]
|
10
|
+
elsif original
|
11
|
+
original.call(content)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -3,24 +3,22 @@ require 'nokogiri'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Analysers
|
5
5
|
class SvgProperties
|
6
|
-
|
7
|
-
def call content
|
6
|
+
def call(content)
|
8
7
|
node = svg_node(content)
|
9
8
|
|
10
9
|
{
|
11
10
|
width: node.get_attribute('width').to_f,
|
12
11
|
height: node.get_attribute('height').to_f,
|
13
|
-
id: node.get_attribute('id')
|
12
|
+
id: node.get_attribute('id')
|
14
13
|
}
|
15
14
|
end
|
16
15
|
|
17
16
|
private # =============================================================
|
18
17
|
|
19
|
-
def svg_node
|
18
|
+
def svg_node(content)
|
20
19
|
return unless doc = Nokogiri::XML(content.data)
|
21
20
|
doc.xpath("//*[name()='svg']").first
|
22
21
|
end
|
23
|
-
|
24
22
|
end
|
25
23
|
end
|
26
|
-
end
|
24
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module DragonflySvg
|
2
|
+
module Analysers
|
3
|
+
class WidthAnalyser < Base
|
4
|
+
def initialize(app)
|
5
|
+
original = app.analysers.items[:width]
|
6
|
+
app.add_analyser(:width) do |content|
|
7
|
+
if is_svg?(content)
|
8
|
+
content.analyse(:svg_properties)[:width]
|
9
|
+
elsif original
|
10
|
+
original.call(content)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/dragonfly_svg/plugin.rb
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
+
require 'dragonfly_svg/analysers/base'
|
2
|
+
|
3
|
+
require 'dragonfly_svg/analysers/aspect_ratio_analyser'
|
4
|
+
require 'dragonfly_svg/analysers/height_analyser'
|
5
|
+
require 'dragonfly_svg/analysers/landscape_analyser'
|
6
|
+
require 'dragonfly_svg/analysers/portrait_analyser'
|
1
7
|
require 'dragonfly_svg/analysers/svg_properties'
|
8
|
+
require 'dragonfly_svg/analysers/width_analyser'
|
9
|
+
|
2
10
|
require 'dragonfly_svg/processors/extend_ids'
|
3
11
|
require 'dragonfly_svg/processors/remove_namespaces'
|
4
12
|
require 'dragonfly_svg/processors/set_attribute'
|
@@ -9,26 +17,15 @@ require 'dragonfly_svg/processors/set_view_box'
|
|
9
17
|
|
10
18
|
module DragonflySvg
|
11
19
|
class Plugin
|
12
|
-
|
13
|
-
def call app, opts={}
|
20
|
+
def call(app, _opts = {})
|
14
21
|
app.add_analyser :svg_properties, DragonflySvg::Analysers::SvgProperties.new
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
app
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
attrs = content.analyse(:svg_properties)
|
23
|
-
attrs[:width].to_f / attrs[:height].to_f
|
24
|
-
end
|
25
|
-
app.add_analyser :portrait do |content|
|
26
|
-
attrs = content.analyse(:svg_properties)
|
27
|
-
attrs[:width] <= attrs[:height]
|
28
|
-
end
|
29
|
-
app.add_analyser :landscape do |content|
|
30
|
-
!content.analyse(:portrait)
|
31
|
-
end
|
22
|
+
|
23
|
+
DragonflySvg::Analysers::WidthAnalyser.new(app)
|
24
|
+
DragonflySvg::Analysers::HeightAnalyser.new(app)
|
25
|
+
DragonflySvg::Analysers::AspectRatioAnalyser.new(app)
|
26
|
+
DragonflySvg::Analysers::PortraitAnalyser.new(app)
|
27
|
+
DragonflySvg::Analysers::LandscapeAnalyser.new(app)
|
28
|
+
|
32
29
|
app.add_analyser :id do |content|
|
33
30
|
content.analyse(:svg_properties)[:id]
|
34
31
|
end
|
@@ -45,7 +42,6 @@ module DragonflySvg
|
|
45
42
|
app.add_processor :set_preserve_aspect_ratio, DragonflySvg::Processors::SetPreserveAspectRatio.new
|
46
43
|
app.add_processor :set_view_box, DragonflySvg::Processors::SetViewBox.new
|
47
44
|
end
|
48
|
-
|
49
45
|
end
|
50
46
|
end
|
51
47
|
|
@@ -3,25 +3,23 @@ require 'nokogiri'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
class ExtendIds
|
6
|
-
|
7
|
-
def call content, append_str=SecureRandom.urlsafe_base64(8)
|
6
|
+
def call(content, append_str = SecureRandom.urlsafe_base64(8))
|
8
7
|
doc = Nokogiri::XML(content.data)
|
9
8
|
|
10
9
|
# nodes with id attributes
|
11
|
-
doc.xpath(
|
10
|
+
doc.xpath('//*[@id]').each do |node|
|
12
11
|
node_id = node.get_attribute 'id'
|
13
12
|
node.set_attribute 'id', [node_id, append_str].join('-')
|
14
13
|
end
|
15
14
|
|
16
15
|
# nodes with id references
|
17
|
-
doc.xpath(
|
16
|
+
doc.xpath('//*[@href]').each do |node|
|
18
17
|
node_href = node.get_attribute 'href'
|
19
18
|
node.set_attribute 'href', [node_href, append_str].join('-')
|
20
19
|
end
|
21
20
|
|
22
21
|
content.update(doc.to_xml)
|
23
22
|
end
|
24
|
-
|
25
23
|
end
|
26
24
|
end
|
27
|
-
end
|
25
|
+
end
|
@@ -3,8 +3,7 @@ require 'nokogiri'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
class RemoveNamespaces
|
6
|
-
|
7
|
-
def call content
|
6
|
+
def call(content)
|
8
7
|
doc = Nokogiri::XML(content.data)
|
9
8
|
|
10
9
|
doc.remove_namespaces!
|
@@ -13,4 +12,4 @@ module DragonflySvg
|
|
13
12
|
end
|
14
13
|
end
|
15
14
|
end
|
16
|
-
end
|
15
|
+
end
|
@@ -3,8 +3,7 @@ require 'nokogiri'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
class SetAttribute
|
6
|
-
|
7
|
-
def call content, xpath, attribute_name, value
|
6
|
+
def call(content, xpath, attribute_name, value)
|
8
7
|
doc = Nokogiri::XML(content.data)
|
9
8
|
|
10
9
|
doc.xpath(xpath).each do |node|
|
@@ -13,7 +12,6 @@ module DragonflySvg
|
|
13
12
|
|
14
13
|
content.update(doc.to_xml)
|
15
14
|
end
|
16
|
-
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
@@ -3,18 +3,10 @@ require 'nokogiri'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
class SetDimensions
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
if svg_node = doc.xpath("//*[name()='svg']").first
|
11
|
-
svg_node.set_attribute 'width', width unless width.nil?
|
12
|
-
svg_node.set_attribute 'height', height unless height.nil?
|
13
|
-
end
|
14
|
-
|
15
|
-
content.update(doc.to_xml)
|
6
|
+
def call(content, width, height)
|
7
|
+
SetAttribute.new.call(content, "//*[name()='svg']", 'width', width) if width
|
8
|
+
SetAttribute.new.call(content, "//*[name()='svg']", 'height', height) if height
|
16
9
|
end
|
17
|
-
|
18
10
|
end
|
19
11
|
end
|
20
|
-
end
|
12
|
+
end
|
@@ -3,8 +3,7 @@ require 'nokogiri'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
class SetNamespace
|
6
|
-
|
7
|
-
def call content, namespace="http://www.w3.org/2000/svg"
|
6
|
+
def call(content, namespace = 'http://www.w3.org/2000/svg')
|
8
7
|
doc = Nokogiri::XML(content.data)
|
9
8
|
|
10
9
|
if svg_node = doc.xpath("//*[name()='svg']").first
|
@@ -16,7 +15,6 @@ module DragonflySvg
|
|
16
15
|
|
17
16
|
content.update(doc.to_xml)
|
18
17
|
end
|
19
|
-
|
20
18
|
end
|
21
19
|
end
|
22
|
-
end
|
20
|
+
end
|
@@ -3,17 +3,9 @@ require 'nokogiri'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
class SetPreserveAspectRatio
|
6
|
-
|
7
|
-
|
8
|
-
doc = Nokogiri::XML(content.data)
|
9
|
-
|
10
|
-
if svg_node = doc.xpath("//*[name()='svg']").first
|
11
|
-
svg_node.set_attribute 'preserveAspectRatio', value
|
12
|
-
end
|
13
|
-
|
14
|
-
content.update(doc.to_xml)
|
6
|
+
def call(content, value = 'xMinYMin meet')
|
7
|
+
SetAttribute.new.call(content, "//*[name()='svg']", 'preserveAspectRatio', value)
|
15
8
|
end
|
16
|
-
|
17
9
|
end
|
18
10
|
end
|
19
|
-
end
|
11
|
+
end
|
@@ -3,19 +3,10 @@ require 'nokogiri'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
class SetViewBox
|
6
|
-
|
7
|
-
def call content, min_x, min_y, width, height
|
8
|
-
doc = Nokogiri::XML(content.data)
|
9
|
-
|
6
|
+
def call(content, min_x, min_y, width, height)
|
10
7
|
value = [min_x, min_y, width, height].map(&:to_s).join(' ')
|
11
|
-
|
12
|
-
if svg_node = doc.xpath("//*[name()='svg']").first
|
13
|
-
svg_node.set_attribute 'viewBox', value
|
14
|
-
end
|
15
|
-
|
16
|
-
content.update(doc.to_xml)
|
8
|
+
SetAttribute.new.call(content, "//*[name()='svg']", 'viewBox', value)
|
17
9
|
end
|
18
|
-
|
19
10
|
end
|
20
11
|
end
|
21
|
-
end
|
12
|
+
end
|
data/samples/sample.png
ADDED
Binary file
|
@@ -3,7 +3,6 @@ require 'test_helper'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Analysers
|
5
5
|
describe SvgProperties do
|
6
|
-
|
7
6
|
let(:app) { test_app.configure_with(:svg) }
|
8
7
|
let(:analyser) { DragonflySvg::Analysers::SvgProperties.new }
|
9
8
|
let(:svg) { app.fetch_file(SAMPLES_DIR.join('sample.svg')) }
|
@@ -28,7 +27,6 @@ module DragonflySvg
|
|
28
27
|
svg_properties[:id].must_equal 'sample_id'
|
29
28
|
end
|
30
29
|
end
|
31
|
-
|
32
30
|
end
|
33
31
|
end
|
34
|
-
end
|
32
|
+
end
|
@@ -2,7 +2,6 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module DragonflySvg
|
4
4
|
describe Plugin do
|
5
|
-
|
6
5
|
let(:app) { test_app.configure_with(:svg) }
|
7
6
|
let(:svg) { app.fetch_file(SAMPLES_DIR.join('sample.svg')) }
|
8
7
|
|
@@ -15,19 +14,60 @@ module DragonflySvg
|
|
15
14
|
|
16
15
|
it 'adds #width' do
|
17
16
|
svg.must_respond_to :width
|
17
|
+
svg.width.must_equal 200.0
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'adds #height' do
|
21
21
|
svg.must_respond_to :height
|
22
|
+
svg.height.must_equal 300.0
|
22
23
|
end
|
23
24
|
|
24
25
|
it 'adds #aspect_ratio' do
|
25
26
|
svg.must_respond_to :aspect_ratio
|
27
|
+
svg.aspect_ratio.must_equal 0.6666666666666666
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'adds #portrait' do
|
31
|
+
svg.must_respond_to :portrait
|
32
|
+
svg.portrait.must_equal true
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'adds #landscape' do
|
36
|
+
svg.must_respond_to :landscape
|
37
|
+
svg.landscape.must_equal false
|
26
38
|
end
|
27
39
|
|
28
40
|
it 'adds #id' do
|
29
41
|
svg.must_respond_to :id
|
30
42
|
end
|
43
|
+
|
44
|
+
describe "when handling non svg files" do
|
45
|
+
let(:png) { app.fetch_file(SAMPLES_DIR.join('sample.png')) }
|
46
|
+
|
47
|
+
before do
|
48
|
+
test_app.configure_with(:image_magick)
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'still works to get the width' do
|
52
|
+
png.width.must_equal 1
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'still works to get the height' do
|
56
|
+
png.height.must_equal 1
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'still works to get the aspect ratio' do
|
60
|
+
png.aspect_ratio.must_equal 1.0
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'still works to ask for portrait' do
|
64
|
+
png.portrait.must_equal true
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'still works to ask for landscape' do
|
68
|
+
png.landscape.must_equal false
|
69
|
+
end
|
70
|
+
end
|
31
71
|
end
|
32
72
|
|
33
73
|
# ---------------------------------------------------------------------
|
@@ -57,6 +97,5 @@ module DragonflySvg
|
|
57
97
|
svg.must_respond_to :set_view_box
|
58
98
|
end
|
59
99
|
end
|
60
|
-
|
61
100
|
end
|
62
|
-
end
|
101
|
+
end
|
@@ -3,7 +3,6 @@ require 'test_helper'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
describe ExtendIds do
|
6
|
-
|
7
6
|
let(:app) { test_app.configure_with(:svg) }
|
8
7
|
let(:processor) { DragonflySvg::Processors::ExtendIds.new }
|
9
8
|
let(:analyser) { DragonflySvg::Analysers::SvgProperties.new }
|
@@ -22,7 +21,6 @@ module DragonflySvg
|
|
22
21
|
processor.call(svg, 'foo')
|
23
22
|
analyser.call(svg)[:id].must_equal "#{@orig_id}-foo"
|
24
23
|
end
|
25
|
-
|
26
24
|
end
|
27
25
|
end
|
28
|
-
end
|
26
|
+
end
|
@@ -3,7 +3,6 @@ require 'test_helper'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
describe RemoveNamespaces do
|
6
|
-
|
7
6
|
let(:app) { test_app.configure_with(:svg) }
|
8
7
|
let(:processor) { DragonflySvg::Processors::RemoveNamespaces.new }
|
9
8
|
let(:svg) { Dragonfly::Content.new(app, SAMPLES_DIR.join('sample.svg')) }
|
@@ -12,7 +11,6 @@ module DragonflySvg
|
|
12
11
|
processor.call(svg)
|
13
12
|
svg.data.wont_include 'xmlns='
|
14
13
|
end
|
15
|
-
|
16
14
|
end
|
17
15
|
end
|
18
|
-
end
|
16
|
+
end
|
@@ -3,7 +3,6 @@ require 'test_helper'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
describe SetAttribute do
|
6
|
-
|
7
6
|
let(:app) { test_app.configure_with(:svg) }
|
8
7
|
let(:processor) { DragonflySvg::Processors::SetAttribute.new }
|
9
8
|
let(:analyser) { DragonflySvg::Analysers::SvgProperties.new }
|
@@ -11,17 +10,16 @@ module DragonflySvg
|
|
11
10
|
|
12
11
|
let(:xpath) { "./*[name()='svg']" }
|
13
12
|
let(:attribute_name) { 'style' }
|
14
|
-
let(:
|
13
|
+
let(:attribute_value) { 'margin: 50px;' }
|
15
14
|
|
16
15
|
before do
|
17
|
-
processor.call(svg, xpath, attribute_name,
|
16
|
+
processor.call(svg, xpath, attribute_name, attribute_value)
|
18
17
|
end
|
19
18
|
|
20
19
|
it 'sets attribute' do
|
21
20
|
Nokogiri::XML(svg.data).xpath(xpath).count.must_equal 1
|
22
|
-
Nokogiri::XML(svg.data).xpath(xpath).first.get_attribute('style').must_equal
|
21
|
+
Nokogiri::XML(svg.data).xpath(xpath).first.get_attribute('style').must_equal attribute_value
|
23
22
|
end
|
24
|
-
|
25
23
|
end
|
26
24
|
end
|
27
25
|
end
|
@@ -3,7 +3,6 @@ require 'test_helper'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
describe SetDimensions do
|
6
|
-
|
7
6
|
let(:app) { test_app.configure_with(:svg) }
|
8
7
|
let(:processor) { DragonflySvg::Processors::SetDimensions.new }
|
9
8
|
let(:analyser) { DragonflySvg::Analysers::SvgProperties.new }
|
@@ -20,7 +19,6 @@ module DragonflySvg
|
|
20
19
|
it 'sets height' do
|
21
20
|
analyser.call(svg)[:height].must_equal 600
|
22
21
|
end
|
23
|
-
|
24
22
|
end
|
25
23
|
end
|
26
|
-
end
|
24
|
+
end
|
@@ -3,7 +3,6 @@ require 'test_helper'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
describe SetNamespace do
|
6
|
-
|
7
6
|
let(:app) { test_app.configure_with(:svg) }
|
8
7
|
let(:processor) { DragonflySvg::Processors::SetNamespace.new }
|
9
8
|
let(:svg) { Dragonfly::Content.new(app, SAMPLES_DIR.join('sample.svg')) }
|
@@ -17,7 +16,6 @@ module DragonflySvg
|
|
17
16
|
processor.call(svg, 'custom_namespace')
|
18
17
|
svg.data.must_include 'custom_namespace'
|
19
18
|
end
|
20
|
-
|
21
19
|
end
|
22
20
|
end
|
23
|
-
end
|
21
|
+
end
|
@@ -3,7 +3,6 @@ require 'test_helper'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
describe SetPreserveAspectRatio do
|
6
|
-
|
7
6
|
let(:app) { test_app.configure_with(:svg) }
|
8
7
|
let(:processor) { DragonflySvg::Processors::SetPreserveAspectRatio.new }
|
9
8
|
let(:svg) { Dragonfly::Content.new(app, SAMPLES_DIR.join('sample.svg')) }
|
@@ -11,22 +10,21 @@ module DragonflySvg
|
|
11
10
|
describe 'with default value' do
|
12
11
|
it 'adds preserveAspectRatio attribute' do
|
13
12
|
processor.call(svg)
|
14
|
-
svg.data.must_include
|
13
|
+
svg.data.must_include 'preserveAspectRatio'
|
15
14
|
end
|
16
15
|
|
17
16
|
it 'sets default value' do
|
18
17
|
processor.call(svg)
|
19
|
-
svg.data.must_include
|
18
|
+
svg.data.must_include 'xMinYMin meet'
|
20
19
|
end
|
21
20
|
end
|
22
21
|
|
23
22
|
describe 'with specified value' do
|
24
23
|
it 'adds preserveAspectRatio with specified value' do
|
25
24
|
processor.call(svg, 'xMidYMid meet')
|
26
|
-
svg.data.must_include
|
25
|
+
svg.data.must_include 'xMidYMid meet'
|
27
26
|
end
|
28
27
|
end
|
29
|
-
|
30
28
|
end
|
31
29
|
end
|
32
|
-
end
|
30
|
+
end
|
@@ -3,7 +3,6 @@ require 'test_helper'
|
|
3
3
|
module DragonflySvg
|
4
4
|
module Processors
|
5
5
|
describe SetViewBox do
|
6
|
-
|
7
6
|
let(:app) { test_app.configure_with(:svg) }
|
8
7
|
let(:processor) { DragonflySvg::Processors::SetViewBox.new }
|
9
8
|
let(:svg) { Dragonfly::Content.new(app, SAMPLES_DIR.join('sample.svg')) }
|
@@ -15,7 +14,6 @@ module DragonflySvg
|
|
15
14
|
it 'sets view box' do
|
16
15
|
svg.data.must_include '0 0 400 600'
|
17
16
|
end
|
18
|
-
|
19
17
|
end
|
20
18
|
end
|
21
|
-
end
|
19
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -13,9 +13,9 @@ SAMPLES_DIR = Pathname.new(File.expand_path('../../samples', __FILE__))
|
|
13
13
|
|
14
14
|
# ---------------------------------------------------------------------
|
15
15
|
|
16
|
-
def test_app
|
16
|
+
def test_app(name = nil)
|
17
17
|
app = Dragonfly::App.instance(name)
|
18
18
|
app.datastore = Dragonfly::MemoryDataStore.new
|
19
|
-
app.secret =
|
19
|
+
app.secret = 'test secret'
|
20
20
|
app
|
21
|
-
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dragonfly_svg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Celizna
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dragonfly
|
@@ -125,7 +125,13 @@ files:
|
|
125
125
|
- Rakefile
|
126
126
|
- dragonfly_svg.gemspec
|
127
127
|
- lib/dragonfly_svg.rb
|
128
|
+
- lib/dragonfly_svg/analysers/aspect_ratio_analyser.rb
|
129
|
+
- lib/dragonfly_svg/analysers/base.rb
|
130
|
+
- lib/dragonfly_svg/analysers/height_analyser.rb
|
131
|
+
- lib/dragonfly_svg/analysers/landscape_analyser.rb
|
132
|
+
- lib/dragonfly_svg/analysers/portrait_analyser.rb
|
128
133
|
- lib/dragonfly_svg/analysers/svg_properties.rb
|
134
|
+
- lib/dragonfly_svg/analysers/width_analyser.rb
|
129
135
|
- lib/dragonfly_svg/plugin.rb
|
130
136
|
- lib/dragonfly_svg/processors/extend_ids.rb
|
131
137
|
- lib/dragonfly_svg/processors/remove_namespaces.rb
|
@@ -135,6 +141,7 @@ files:
|
|
135
141
|
- lib/dragonfly_svg/processors/set_preserve_aspect_ratio.rb
|
136
142
|
- lib/dragonfly_svg/processors/set_view_box.rb
|
137
143
|
- lib/dragonfly_svg/version.rb
|
144
|
+
- samples/sample.png
|
138
145
|
- samples/sample.svg
|
139
146
|
- test/dragonfly_svg/analysers/svg_properties_test.rb
|
140
147
|
- test/dragonfly_svg/plugin_test.rb
|