victor 0.0.2 → 0.1.0

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
  SHA1:
3
- metadata.gz: 54f32fa0b60b2a0c70bb9a6d52ad88757d6e4701
4
- data.tar.gz: 3c1b19ee5f21bf29966f10ffefc9a13344490956
3
+ metadata.gz: 6e578183630315066cfac8073fe7a95df4b200a2
4
+ data.tar.gz: 12cd33f3ad1dbbf877f7fd84c56bc26c05c15024
5
5
  SHA512:
6
- metadata.gz: f2ae86c7705f26d3f1945eae9c263b94aae563de16b4e597f41a9e5a055e27784cfa0806599a68d5778f514cc9d087277ad5db774116b86e98b1b3a5a89c4792
7
- data.tar.gz: ed055f13b4aeff0a56db603e067704555eca6f6f1a29f9440571d42cd56f0667bba0c43294edc4876388de3d9a0c5990d31665a635131c2fc285ee2e635fafdf
6
+ metadata.gz: 16ff14fb0e35c9d866d3ceb69750aa2220cfc4c3ceb28760c44da377003b8e8ba8667818582a375a2a7c8dbff08527e0db0e71d8f38d39e43b596a6b57e3c535
7
+ data.tar.gz: 96f4949a8103de5e5f535530b43e033fc8cc29088bc7f967baa8e4e15c45ac1a2a17396122280ebf4e59f3c0ae0c3e3ed9449195bdbc57d37ef0f247418322c9
data/README.md CHANGED
@@ -84,6 +84,15 @@ svg.rect x: 0, y: 0, width: 100, height: 100, style: { stroke: '#ccc', fill: 're
84
84
  # => <rect x=0 y=0 width=100 height=100 style="stroke:#ccc; fill:red"/>
85
85
  ```
86
86
 
87
+ If the value of an attribute is an array, it will be converted to a
88
+ space delimited string:
89
+
90
+ ```ruby
91
+ svg.path ['M', 150, 0, 'L', 75, 200, 'L', 225, 200, 'Z']
92
+ # => <rect x=0 y=0 width=100 height=100 style="stroke:#ccc; fill:red"/>
93
+ ```
94
+
95
+
87
96
  For SVG elements that have an inner content - such as text - simply pass it as
88
97
  the first argument:
89
98
 
@@ -117,7 +126,52 @@ svg.save 'filename'
117
126
  # the '.svg' extension is optional
118
127
  ```
119
128
 
129
+ SVG Templates
130
+ --------------------------------------------------
131
+
132
+ The `:default` SVG template is designed to be a full XML document (i.e.,
133
+ a standalone SVG image). If you wish to use the output as an SVG element
134
+ inside HTML, you can change the SVG template:
135
+
136
+ ```ruby
137
+ svg = SVG.new template: :html
138
+ # accepts :html, :default or a filename
139
+ ```
140
+
141
+ You can also point it to any other template file:
142
+
143
+ ```ruby
144
+ svg = SVG.new template: 'path/to/template.svg'
145
+ ```
146
+
147
+ See the [templates] folder for an understanding of how templates are
148
+ structured.
149
+
150
+
151
+ CSS
152
+ --------------------------------------------------
153
+
154
+ To add a CSS to your SVG, simply use the `css` command inside your `build`
155
+ block, like this:
156
+
157
+ ```ruby
158
+ svg = SVG.new
159
+
160
+ svg.build do
161
+ css['.main'] = {
162
+ stroke: "green",
163
+ stroke_width: 2,
164
+ fill: "yellow"
165
+ }
166
+
167
+ circle cx: 35, cy: 35, r: 20, class: 'main'
168
+ end
169
+ ```
170
+
171
+ Underscore characters will be converted to dashes (`stroke_width` becomes
172
+ `stroke-width`).
120
173
 
121
174
  ---
122
175
 
123
176
  [examples]: https://github.com/DannyBen/victor/tree/master/examples#examples
177
+ [templates]: https://github.com/DannyBen/victor/tree/master/lib/victor/templates
data/lib/victor.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'victor/version'
2
2
  require 'victor/svg'
3
+ require 'victor/attributes'
4
+ require 'victor/css'
3
5
 
4
6
  include Victor
@@ -0,0 +1,47 @@
1
+
2
+
3
+ module Victor
4
+
5
+ class Attributes
6
+ attr_reader :attributes
7
+
8
+ def initialize(attributes={})
9
+ @attributes = attributes
10
+ end
11
+
12
+ def to_s
13
+ mapped = attributes.map do |key, value|
14
+ key = key.to_s.tr '_', '-'
15
+
16
+ if value.is_a? Hash
17
+ style = Attributes.new(value).to_style
18
+ "#{key}=\"#{style}\""
19
+ elsif value.is_a? Array
20
+ "#{key}=\"#{value.join ' '}\""
21
+ else
22
+ "#{key}=\"#{value}\""
23
+ end
24
+ end
25
+
26
+ mapped.join ' '
27
+ end
28
+
29
+ def to_style
30
+ mapped = attributes.map do |key, value|
31
+ "#{key}:#{value}"
32
+ end
33
+
34
+ mapped.join '; '
35
+ end
36
+
37
+ def [](key)
38
+ attributes[key]
39
+ end
40
+
41
+ def []=(key, value)
42
+ attributes[key] = value
43
+ end
44
+
45
+ end
46
+
47
+ end
data/lib/victor/css.rb ADDED
@@ -0,0 +1,27 @@
1
+
2
+
3
+ module Victor
4
+
5
+ class CSS
6
+ attr_reader :attributes
7
+
8
+ def initialize(attributes={})
9
+ @attributes = attributes
10
+ end
11
+
12
+ def to_s
13
+ result = []
14
+ attributes.each do |selector, styles|
15
+ result.push " #{selector} {"
16
+ styles.each do |key, value|
17
+ key = key.to_s.tr '_', '-'
18
+ result.push " #{key}: #{value};"
19
+ end
20
+ result.push " }"
21
+ end
22
+
23
+ result.join "\n"
24
+ end
25
+ end
26
+
27
+ end
data/lib/victor/svg.rb CHANGED
@@ -3,14 +3,16 @@
3
3
  module Victor
4
4
 
5
5
  class SVG
6
- attr_accessor :attributes
7
- attr_reader :content
6
+ attr_accessor :template, :css
7
+ attr_reader :content, :svg_attributes
8
8
 
9
9
  def initialize(attributes={})
10
- @attributes = attributes
11
- attributes[:width] ||= "100%"
12
- attributes[:height] ||= "100%"
10
+ @template = attributes.delete(:template) || :default
11
+ @svg_attributes = Attributes.new attributes
12
+ svg_attributes[:width] ||= "100%"
13
+ svg_attributes[:height] ||= "100%"
13
14
  @content = []
15
+ @css = {}
14
16
  end
15
17
 
16
18
  def method_missing(method_sym, *arguments, &block)
@@ -27,19 +29,23 @@ module Victor
27
29
  value = nil
28
30
  end
29
31
 
30
- xml_attributes = expand attributes
32
+ attributes = Attributes.new attributes
31
33
 
32
34
  if block_given? || value
33
- content.push "<#{name} #{xml_attributes}".strip + ">"
35
+ content.push "<#{name} #{attributes}".strip + ">"
34
36
  value ? content.push(value) : yield
35
37
  content.push "</#{name}>"
36
38
  else
37
- content.push "<#{name} #{xml_attributes}/>"
39
+ content.push "<#{name} #{attributes}/>"
38
40
  end
39
41
  end
40
42
 
41
43
  def render
42
- template % { attributes: expand(attributes), content: content.join("\n") }
44
+ svg_template % {
45
+ css: CSS.new(css),
46
+ attributes: svg_attributes,
47
+ content: content.join("\n")
48
+ }
43
49
  end
44
50
 
45
51
  def save(filename)
@@ -49,33 +55,16 @@ module Victor
49
55
 
50
56
  private
51
57
 
52
- def expand(attributes={})
53
- mapped = attributes.map do |key, value|
54
- key = key.to_s.tr '_', '-'
55
- value.is_a?(Hash) ? inner_expand(key, value) : "#{key}=\"#{value}\""
56
- end
57
-
58
- mapped.join ' '
59
- end
60
-
61
- def inner_expand(name, attributes)
62
- mapped = attributes.map do |key, value|
63
- "#{key}:#{value}"
64
- end
65
-
66
- "#{name}=\"#{mapped.join '; '}\""
67
- end
68
-
69
- def template
58
+ def svg_template
70
59
  File.read template_path
71
60
  end
72
61
 
73
62
  def template_path
74
- File.join File.dirname(__FILE__), 'templates', template_file
75
- end
76
-
77
- def template_file
78
- 'default.svg'
63
+ if template.is_a? Symbol
64
+ File.join File.dirname(__FILE__), 'templates', "#{template}.svg"
65
+ else
66
+ template
67
+ end
79
68
  end
80
69
  end
81
70
 
@@ -2,5 +2,13 @@
2
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
3
 
4
4
  <svg %{attributes} xmlns="http://www.w3.org/2000/svg">
5
+
6
+ <style type="text/css">
7
+ <![CDATA[
8
+ %{css}
9
+ ]]>
10
+ </style>
11
+
5
12
  %{content}
13
+
6
14
  </svg>
@@ -0,0 +1,10 @@
1
+ <svg %{attributes}>
2
+
3
+ <style type="text/css" scoped>
4
+ <![CDATA[
5
+ %{css}
6
+ ]]>
7
+ </style>
8
+
9
+ %{content}
10
+ </svg>
@@ -1,3 +1,3 @@
1
1
  module Victor
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: victor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-27 00:00:00.000000000 Z
11
+ date: 2016-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: runfile
@@ -88,8 +88,11 @@ extra_rdoc_files: []
88
88
  files:
89
89
  - README.md
90
90
  - lib/victor.rb
91
+ - lib/victor/attributes.rb
92
+ - lib/victor/css.rb
91
93
  - lib/victor/svg.rb
92
94
  - lib/victor/templates/default.svg
95
+ - lib/victor/templates/html.svg
93
96
  - lib/victor/version.rb
94
97
  homepage: https://github.com/DannyBen/victor
95
98
  licenses: