scale 0.1.0 → 0.1.1
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/.rspec +1 -0
- data/examples/example.svg +6 -0
- data/examples/positions.svg +4 -0
- data/examples/shapes.svg +17 -0
- data/lib/scale.rb +8 -1
- data/lib/scale/dsl.rb +40 -0
- data/lib/scale/node.rb +49 -0
- data/lib/scale/shapes/circle.rb +12 -0
- data/lib/scale/shapes/ellipse.rb +13 -0
- data/lib/scale/shapes/rectangle.rb +16 -0
- data/lib/scale/svg.rb +29 -0
- data/lib/scale/text.rb +16 -0
- data/lib/scale/version.rb +1 -1
- data/scale.gemspec +3 -0
- metadata +53 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86687ce7ff6a5fd49f8e64362b33eafdc2918fbb
|
4
|
+
data.tar.gz: db33554c486c5f7f8bb5202395898667305bb95b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af23fb556e2d43618624455e4c04a24a12e927410bab6f36a4f3be9936225fa5ff6b55ebc5f6dbac11ab9cb873f7e8cf2712a96b3062d4e9dcacb9ee221dd42a
|
7
|
+
data.tar.gz: 4b4571e4e4054dddb9a5b278f64c86a953e5d0c588263f8c09849038fc981284e599a016ad773676b6f4d3f5e4907e0f374f42b2f538e9dd407106c646c96a31
|
data/.rspec
CHANGED
@@ -0,0 +1,6 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<svg version="1.1" baseProfile="full" width="300" height="200" xmlns="http://www.w3.org/2000/svg">
|
3
|
+
<rect width="100%" height="100%" fill="red" />
|
4
|
+
<circle cx="150" cy="100" r="80" fill="green" />
|
5
|
+
<text x="150" y="125" font-size="60" text-anchor="middle" fill="white">SVG</text>
|
6
|
+
</svg>
|
data/examples/shapes.svg
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
2
|
+
<svg width="200" height="250" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
3
|
+
<rect x="10" y="10" width="30" height="30" stroke="black" fill="transparent" stroke-width="5" />
|
4
|
+
<rect x="60" y="10" rx="10" ry="10" width="30" height="30" stroke="black" fill="transparent" stroke-width="5"/>
|
5
|
+
|
6
|
+
<circle cx="25" cy="75" r="20" stroke="red" fill="transparent" stroke-width="5"/>
|
7
|
+
<ellipse cx="75" cy="75" rx="20" ry="5" stroke="red" fill="transparent" stroke-width="5"/>
|
8
|
+
|
9
|
+
<line x1="10" x2="50" y1="110" y2="150" stroke="orange" fill="transparent" stroke-width="5"/>
|
10
|
+
<polyline points="60 110 65 120 70 115 75 130 80 125 85 140 90 135 95 150 100 145"
|
11
|
+
stroke="orange" fill="transparent" stroke-width="5"/>
|
12
|
+
|
13
|
+
<polygon points="50 160 55 180 70 180 60 190 65 205 50 195 35 205 40 190 30 180 45 180"
|
14
|
+
stroke="green" fill="transparent" stroke-width="5"/>
|
15
|
+
|
16
|
+
<path d="M20,230 Q40,205 50,230 T90,230" fill="none" stroke="blue" stroke-width="5"/>
|
17
|
+
</svg>
|
data/lib/scale.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
require "scale/version"
|
2
|
+
require "scale/node"
|
3
|
+
require "scale/svg"
|
4
|
+
require "scale/shapes/rectangle"
|
5
|
+
require "scale/shapes/circle"
|
6
|
+
require "scale/shapes/ellipse"
|
7
|
+
require "scale/text"
|
8
|
+
require "scale/dsl"
|
2
9
|
|
3
10
|
module Scale
|
4
|
-
# Your code goes here...
|
11
|
+
# Your code goes here... NOT!
|
5
12
|
end
|
data/lib/scale/dsl.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
module Scale
|
2
|
+
class DSL
|
3
|
+
def run
|
4
|
+
DSLBuilder.new.tap do |builder|
|
5
|
+
yield builder
|
6
|
+
end.to_xml
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class DSLCommand
|
11
|
+
def initialize(name, args, block)
|
12
|
+
@name = name
|
13
|
+
@args = args
|
14
|
+
@block = block
|
15
|
+
end
|
16
|
+
|
17
|
+
def run(svg)
|
18
|
+
type = Kernel.const_get("Scale::#{@name.to_s.capitalize}")
|
19
|
+
svg.add(type.new(*@args))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class DSLBuilder
|
24
|
+
def initialize(commands = [])
|
25
|
+
@commands = commands
|
26
|
+
end
|
27
|
+
|
28
|
+
def method_missing(name, *args, &block)
|
29
|
+
@commands.push(DSLCommand.new(name, args, block))
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_xml
|
33
|
+
svg = SVG.new
|
34
|
+
@commands.each do |command|
|
35
|
+
command.run(svg)
|
36
|
+
end
|
37
|
+
svg.to_xml
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/scale/node.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'virtus'
|
2
|
+
|
3
|
+
module Scale
|
4
|
+
module Node
|
5
|
+
include Enumerable
|
6
|
+
include Virtus.module
|
7
|
+
attr_reader :content
|
8
|
+
|
9
|
+
def children
|
10
|
+
@children ||= []
|
11
|
+
end
|
12
|
+
|
13
|
+
def add(node)
|
14
|
+
children.push(node)
|
15
|
+
end
|
16
|
+
|
17
|
+
def each
|
18
|
+
children.each do |child|
|
19
|
+
yield child
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_xml
|
24
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
25
|
+
append_to(xml)
|
26
|
+
end
|
27
|
+
builder.to_xml
|
28
|
+
end
|
29
|
+
|
30
|
+
def append_to(builder)
|
31
|
+
builder.send(xml_tag.to_sym, *xml_parameters) do
|
32
|
+
each do |node|
|
33
|
+
node.append_to(builder)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def xml_attributes
|
39
|
+
attributes.delete_if { |key, value| value.nil? }
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def xml_parameters
|
45
|
+
return [xml_attributes] if content.nil?
|
46
|
+
[content, xml_attributes]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Scale
|
2
|
+
class Rectangle
|
3
|
+
include Node
|
4
|
+
attribute :width, String
|
5
|
+
attribute :height, String
|
6
|
+
attribute :fill, String
|
7
|
+
attribute :x, Integer
|
8
|
+
attribute :y, Integer
|
9
|
+
attribute :rx, Integer
|
10
|
+
attribute :ry, Integer
|
11
|
+
|
12
|
+
def xml_tag
|
13
|
+
:rect
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/scale/svg.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module Scale
|
4
|
+
class SVG
|
5
|
+
include Node
|
6
|
+
attr_accessor :width, :height
|
7
|
+
|
8
|
+
def initialize(width: nil, height: nil)
|
9
|
+
@width, @height = width, height
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def xml_tag
|
15
|
+
:svg
|
16
|
+
end
|
17
|
+
|
18
|
+
def attributes
|
19
|
+
attributes = {
|
20
|
+
version: "1.1",
|
21
|
+
baseProfile: "full",
|
22
|
+
xmlns: "http://www.w3.org/2000/svg",
|
23
|
+
}
|
24
|
+
attributes[:width] = width unless width.nil?
|
25
|
+
attributes[:height] = height unless height.nil?
|
26
|
+
attributes
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/scale/text.rb
ADDED
data/lib/scale/version.rb
CHANGED
data/scale.gemspec
CHANGED
@@ -19,6 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
+
spec.add_dependency "nokogiri", "~> 1.6.6"
|
23
|
+
spec.add_dependency "virtus", "~> 1.0"
|
22
24
|
spec.add_development_dependency "bundler", "~> 1.9"
|
23
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "rspec", "~> 3.2"
|
24
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scale
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mo khan
|
@@ -10,6 +10,34 @@ bindir: exe
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2015-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.6.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.6.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: virtus
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: bundler
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +66,20 @@ dependencies:
|
|
38
66
|
- - "~>"
|
39
67
|
- !ruby/object:Gem::Version
|
40
68
|
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.2'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.2'
|
41
83
|
description: A simple DSL for producing SVG images.
|
42
84
|
email:
|
43
85
|
- mo@mokhan.ca
|
@@ -55,7 +97,17 @@ files:
|
|
55
97
|
- Rakefile
|
56
98
|
- bin/console
|
57
99
|
- bin/setup
|
100
|
+
- examples/example.svg
|
101
|
+
- examples/positions.svg
|
102
|
+
- examples/shapes.svg
|
58
103
|
- lib/scale.rb
|
104
|
+
- lib/scale/dsl.rb
|
105
|
+
- lib/scale/node.rb
|
106
|
+
- lib/scale/shapes/circle.rb
|
107
|
+
- lib/scale/shapes/ellipse.rb
|
108
|
+
- lib/scale/shapes/rectangle.rb
|
109
|
+
- lib/scale/svg.rb
|
110
|
+
- lib/scale/text.rb
|
59
111
|
- lib/scale/version.rb
|
60
112
|
- scale.gemspec
|
61
113
|
homepage: http://www.mokhan.ca/
|