svgen 0.0.1 → 0.0.2
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/README.md +27 -0
- data/lib/svgen/element/base.rb +7 -2
- data/lib/svgen/element/circle.rb +10 -1
- data/lib/svgen/element/group.rb +28 -0
- data/lib/svgen/element/line.rb +26 -0
- data/lib/svgen/element/rect.rb +1 -1
- data/lib/svgen/nestable.rb +24 -0
- data/lib/svgen/svg.rb +4 -14
- data/lib/svgen.rb +3 -0
- data/spec/support/circle.svg +1 -1
- data/spec/support/group.svg +8 -0
- data/spec/support/line.svg +5 -0
- data/spec/svgen/svg_spec.rb +17 -0
- data/svgen.gemspec +1 -1
- metadata +8 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba2bf72e26dc27ef68324a6cc8ed88bdaa06327d
|
4
|
+
data.tar.gz: 914b64c57e8d97d1082f19a09f298e2421542771
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd05c6d01bf5f58db290ebde74d35edd0c17fbe1de358c11ddb3829ec9453355aabf788d0c63ebe04fe8b289768d4996d6bbe4a4df548a5cc3946d86972f9bd3
|
7
|
+
data.tar.gz: c4b524f9c66918f231d6874ea7035d2d84cdf9e208df9d2b58ce5c9e66639cca0e777f8753eaf9f7926d799330d8d95b1e64fd73e022493111052297afcb3460
|
data/README.md
CHANGED
@@ -10,12 +10,15 @@ $ gem install svgen
|
|
10
10
|
|
11
11
|
## Usage
|
12
12
|
|
13
|
+
### rect, circle, text
|
14
|
+
|
13
15
|
```rb
|
14
16
|
require "svgen"
|
15
17
|
|
16
18
|
svg = SVGen::SVG.new(width: 600, height: 400) do |svg|
|
17
19
|
svg.rect(width: 300, height: 200, fill: "blue")
|
18
20
|
svg.circle(cx: 100, cy: 100, r: 50, fill: "red")
|
21
|
+
svg.text("Sample Text", x: 20, y: 20)
|
19
22
|
end
|
20
23
|
svg.generate
|
21
24
|
#=>
|
@@ -24,5 +27,29 @@ svg.generate
|
|
24
27
|
# <svg width="600" height="300" xmlns="http://www.w3.org/2000/svg">
|
25
28
|
# <rect width="300" height="200" fill="blue"/>
|
26
29
|
# <circle cx="100" cy="100" r="50" fill="red"/>
|
30
|
+
# <text x="20" cy="20">Sample Text</text>
|
31
|
+
# </svg>
|
32
|
+
```
|
33
|
+
|
34
|
+
### group
|
35
|
+
|
36
|
+
```rb
|
37
|
+
require "svgen"
|
38
|
+
|
39
|
+
svg = SVGen::SVG.new(width: 600, height: 400) do |svg|
|
40
|
+
svg.g(stroke: "red", "stroke-width" => 5) do |g|
|
41
|
+
g.rect(x: 50, y: 50, width: 100, height: 100)
|
42
|
+
g.circle(cx: 200, cy: 200, r: 50)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
svg.generate
|
46
|
+
#=>
|
47
|
+
# <?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
48
|
+
# <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
49
|
+
# <svg width="600" height="300" xmlns="http://www.w3.org/2000/svg">
|
50
|
+
# <g stroke="red" stroke-width="5">
|
51
|
+
# <rect x="50" y="50" width="100" height="100"/>
|
52
|
+
# <circle cx="200" cy="200" r="50"/>
|
53
|
+
# </g>
|
27
54
|
# </svg>
|
28
55
|
```
|
data/lib/svgen/element/base.rb
CHANGED
@@ -4,6 +4,8 @@ module SVGen
|
|
4
4
|
def initialize(attrs = {})
|
5
5
|
@x = attrs[:x] || 0
|
6
6
|
@y = attrs[:y] || 0
|
7
|
+
@stroke = attrs[:stroke]
|
8
|
+
@stroke_width = attrs[:"stroke-width"] || attrs["stroke-width"]
|
7
9
|
end
|
8
10
|
|
9
11
|
def generate(svg)
|
@@ -15,8 +17,11 @@ module SVGen
|
|
15
17
|
def attributes
|
16
18
|
attrs = {}
|
17
19
|
instance_variables.each do |instance_variable|
|
18
|
-
|
19
|
-
|
20
|
+
value = instance_variable_get(instance_variable)
|
21
|
+
next if value.nil?
|
22
|
+
key = instance_variable.to_s.gsub(/@/) { "" }
|
23
|
+
key = key.gsub(/_/) { "-" }
|
24
|
+
attrs[key.to_sym] = value
|
20
25
|
end
|
21
26
|
attrs
|
22
27
|
end
|
data/lib/svgen/element/circle.rb
CHANGED
@@ -6,12 +6,21 @@ module SVGen
|
|
6
6
|
@cx = attrs[:cx] || 0
|
7
7
|
@cy = attrs[:cy] || 0
|
8
8
|
@r = attrs[:r] || 10
|
9
|
-
@fill = attrs[:fill] || "
|
9
|
+
@fill = attrs[:fill] || "rgba(0, 0, 0, 0)"
|
10
10
|
end
|
11
11
|
|
12
12
|
def generate(svg)
|
13
13
|
svg.circle(attributes)
|
14
14
|
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def attributes
|
19
|
+
attrs = super
|
20
|
+
attrs.delete(:x)
|
21
|
+
attrs.delete(:y)
|
22
|
+
attrs
|
23
|
+
end
|
15
24
|
end
|
16
25
|
end
|
17
26
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module SVGen
|
2
|
+
module Element
|
3
|
+
class Group < Base
|
4
|
+
include Nestable
|
5
|
+
|
6
|
+
def initialize(attrs = {}, &block)
|
7
|
+
@children = []
|
8
|
+
@stroke = attrs[:stroke]
|
9
|
+
@stroke_width = attrs[:"stroke-width"] || attrs["stroke-width"]
|
10
|
+
block.call(self) if block_given?
|
11
|
+
end
|
12
|
+
|
13
|
+
def generate(svg)
|
14
|
+
svg.g(attributes) do |g|
|
15
|
+
@children.each { |child| child.generate(g) }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def attributes
|
22
|
+
attrs = super
|
23
|
+
attrs.delete(:children)
|
24
|
+
attrs
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module SVGen
|
2
|
+
module Element
|
3
|
+
class Line < Base
|
4
|
+
def initialize(attrs = {})
|
5
|
+
super(attrs)
|
6
|
+
@x1 = attrs[:x1] || @x
|
7
|
+
@y1 = attrs[:y1] || @y
|
8
|
+
@x2 = attrs[:x2] || @x
|
9
|
+
@y2 = attrs[:y2] || @y
|
10
|
+
end
|
11
|
+
|
12
|
+
def generate(svg)
|
13
|
+
svg.line(attributes)
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def attributes
|
19
|
+
attrs = super
|
20
|
+
attrs.delete(:x)
|
21
|
+
attrs.delete(:y)
|
22
|
+
attrs
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/svgen/element/rect.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
module SVGen
|
2
|
+
module Nestable
|
3
|
+
def rect(attrs = {})
|
4
|
+
@children << Element::Rect.new(attrs)
|
5
|
+
end
|
6
|
+
|
7
|
+
def circle(attrs = {})
|
8
|
+
@children << Element::Circle.new(attrs)
|
9
|
+
end
|
10
|
+
|
11
|
+
def text(text, attrs = {})
|
12
|
+
@children << Element::Text.new(text, attrs)
|
13
|
+
end
|
14
|
+
|
15
|
+
def line(attrs = {})
|
16
|
+
@children << Element::Line.new(attrs)
|
17
|
+
end
|
18
|
+
|
19
|
+
def group(attrs = {}, &block)
|
20
|
+
@children << Element::Group.new(attrs, &block)
|
21
|
+
end
|
22
|
+
alias :g :group
|
23
|
+
end
|
24
|
+
end
|
data/lib/svgen/svg.rb
CHANGED
@@ -2,23 +2,13 @@ require "builder"
|
|
2
2
|
|
3
3
|
module SVGen
|
4
4
|
class SVG
|
5
|
-
|
5
|
+
include Nestable
|
6
|
+
|
7
|
+
def initialize(attrs = {}, &block)
|
6
8
|
@children = []
|
7
9
|
@width = attrs[:width] || 400
|
8
10
|
@height = attrs[:height] || 300
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
def rect(attrs = {})
|
13
|
-
@children << Element::Rect.new(attrs)
|
14
|
-
end
|
15
|
-
|
16
|
-
def circle(attrs = {})
|
17
|
-
@children << Element::Circle.new(attrs)
|
18
|
-
end
|
19
|
-
|
20
|
-
def text(text, attrs = {})
|
21
|
-
@children << Element::Text.new(text, attrs)
|
11
|
+
block.call(self) if block_given?
|
22
12
|
end
|
23
13
|
|
24
14
|
def generate
|
data/lib/svgen.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
lib = File.dirname(__FILE__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
|
4
|
+
require "svgen/nestable"
|
4
5
|
require "svgen/svg"
|
5
6
|
require "svgen/element/base"
|
6
7
|
require "svgen/element/rect"
|
7
8
|
require "svgen/element/circle"
|
8
9
|
require "svgen/element/text"
|
10
|
+
require "svgen/element/line"
|
11
|
+
require "svgen/element/group"
|
data/spec/support/circle.svg
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
2
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
3
3
|
<svg width="600" height="300" xmlns="http://www.w3.org/2000/svg">
|
4
|
-
<circle
|
4
|
+
<circle cx="100" cy="100" r="50" fill="red"/>
|
5
5
|
</svg>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
3
|
+
<svg width="600" height="300" xmlns="http://www.w3.org/2000/svg">
|
4
|
+
<g stroke="red" stroke-width="5">
|
5
|
+
<rect x="0" y="0" width="300" height="200" fill="red"/>
|
6
|
+
<circle cx="50" cy="50" r="10" fill="blue"/>
|
7
|
+
</g>
|
8
|
+
</svg>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
3
|
+
<svg width="600" height="300" xmlns="http://www.w3.org/2000/svg">
|
4
|
+
<line stroke="black" stroke-width="5" x1="10" y1="10" x2="50" y2="50"/>
|
5
|
+
</svg>
|
data/spec/svgen/svg_spec.rb
CHANGED
@@ -32,5 +32,22 @@ describe SVGen::SVG do
|
|
32
32
|
svg.text("Sample Text", x: 20, y: 20)
|
33
33
|
end
|
34
34
|
end
|
35
|
+
|
36
|
+
it "returns SVG data with line" do
|
37
|
+
@sample = Pathname.new("spec/support/line.svg")
|
38
|
+
@svg = SVGen::SVG.new(width: 600, height: 300) do |svg|
|
39
|
+
svg.line(x1: 10, y1: 10, x2: 50, y2: 50, stroke: "black", :"stroke-width" => "5")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns SVG data with group" do
|
44
|
+
@sample = Pathname.new("spec/support/group.svg")
|
45
|
+
@svg = SVGen::SVG.new(width: 600, height: 300) do |svg|
|
46
|
+
svg.g(stroke: "red", "stroke-width" => 5) do |g|
|
47
|
+
g.rect(width: "300", height: "200", fill: "red")
|
48
|
+
g.circle(cx: "50", cy: "50", r: "10", fill: "blue")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
35
52
|
end
|
36
53
|
end
|
data/svgen.gemspec
CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = "svgen"
|
6
|
-
spec.version = "0.0.
|
6
|
+
spec.version = "0.0.2"
|
7
7
|
spec.authors = ["Naoto Kaneko"]
|
8
8
|
spec.email = ["naoty.k@gmail.com"]
|
9
9
|
spec.summary = %q{SVG generator}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: svgen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naoto Kaneko
|
@@ -81,12 +81,17 @@ files:
|
|
81
81
|
- lib/svgen.rb
|
82
82
|
- lib/svgen/element/base.rb
|
83
83
|
- lib/svgen/element/circle.rb
|
84
|
+
- lib/svgen/element/group.rb
|
85
|
+
- lib/svgen/element/line.rb
|
84
86
|
- lib/svgen/element/rect.rb
|
85
87
|
- lib/svgen/element/text.rb
|
88
|
+
- lib/svgen/nestable.rb
|
86
89
|
- lib/svgen/svg.rb
|
87
90
|
- lib/svgen/version.rb
|
88
91
|
- spec/spec_helper.rb
|
89
92
|
- spec/support/circle.svg
|
93
|
+
- spec/support/group.svg
|
94
|
+
- spec/support/line.svg
|
90
95
|
- spec/support/rect.svg
|
91
96
|
- spec/support/sample.svg
|
92
97
|
- spec/support/text.svg
|
@@ -119,6 +124,8 @@ summary: SVG generator
|
|
119
124
|
test_files:
|
120
125
|
- spec/spec_helper.rb
|
121
126
|
- spec/support/circle.svg
|
127
|
+
- spec/support/group.svg
|
128
|
+
- spec/support/line.svg
|
122
129
|
- spec/support/rect.svg
|
123
130
|
- spec/support/sample.svg
|
124
131
|
- spec/support/text.svg
|