victor 0.4.0 → 0.5.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
  SHA256:
3
- metadata.gz: 6cfb9ab7b01c8fe3986d973cf09708e47b05ec61d726f4db2e5c94f5b7697d8b
4
- data.tar.gz: 55936a274c2b1f662ad6dfb4aacb8396499fe6f5c7366d33fde7858e082d02d1
3
+ metadata.gz: 86eac1cab671c40d60409cf11e0e06800add519f2a11e80f33adbb8a516b7906
4
+ data.tar.gz: ff574def00c021acf82c0071ce6d9467576a74e0651663ecd7291ca2e5884ea7
5
5
  SHA512:
6
- metadata.gz: 59e8f7b5c39d6c156b322eecd4719ecb3e036e51484ba915c4642400c3ec3547b79f057a4717188ff67e7b8aee9f999f1d493552e88cbb344ff2fe9e521ca087
7
- data.tar.gz: 560fe1f61b66cce12912073349b33b1ad73c656ad47780be3c713deb735d3d71a1d2bdb896c419447a7a84ad73360bfc080b56bb69113c2874641826c8519fa3
6
+ metadata.gz: 1fa1657d2e98c4bf98468f9f1e9a69a07c0c049eac6033d0bb3d2bbe603627cb448034923f94e6aef31db755ca66916a484ad521c86534c32274ef764a31ed79
7
+ data.tar.gz: 1a0662ce919d6abed8bea839c4fef03f7314960dbeaa5602b1627b44e4f69082e3ce933de57170c17973a58ab8f61ee7bb214796c99e641b35a3dec59a54d945
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
- ![Victor](/examples/16_victor_logo.svg)
1
+ <div align='center'>
2
+ <img src='assets/logo.svg' width=500>
2
3
 
3
4
  # Victor - Ruby SVG Image Builder
4
5
 
@@ -6,12 +7,14 @@
6
7
  [![Build Status](https://github.com/DannyBen/victor/workflows/Test/badge.svg)](https://github.com/DannyBen/victor/actions?query=workflow%3ATest)
7
8
  [![Maintainability](https://api.codeclimate.com/v1/badges/85cc05c219d6d233ab78/maintainability)](https://codeclimate.com/github/DannyBen/victor/maintainability)
8
9
 
9
- ---
10
+ ## [victor.dannyb.co](https://victor.dannyb.co)
11
+
12
+ </div>
10
13
 
11
- Victor is a direct Ruby-to-SVG builder. All method calls are converted
12
- directly to SVG elements.
14
+ ---
13
15
 
14
- ![Demo](assets/animated.gif)
16
+ **Victor** is a lightweight, zero-dependencies Ruby library that lets you build
17
+ SVG images using Ruby code.
15
18
 
16
19
  ---
17
20
 
@@ -21,472 +24,46 @@ directly to SVG elements.
21
24
  $ gem install victor
22
25
  ```
23
26
 
24
- Or with bundler:
25
-
26
- ```ruby
27
- gem 'victor'
28
- ```
29
-
30
- ## Examples
31
-
32
- ```ruby
33
- require 'victor'
34
-
35
- svg = Victor::SVG.new width: 140, height: 100, style: { background: '#ddd' }
36
-
37
- svg.build do
38
- rect x: 10, y: 10, width: 120, height: 80, rx: 10, fill: '#666'
39
-
40
- circle cx: 50, cy: 50, r: 30, fill: 'yellow'
41
- circle cx: 58, cy: 32, r: 4, fill: 'black'
42
- polygon points: %w[45,50 80,30 80,70], fill: '#666'
43
-
44
- 3.times do |i|
45
- x = 80 + i*18
46
- circle cx: x, cy: 50, r: 4, fill: 'yellow'
47
- end
48
- end
49
-
50
- svg.save 'pacman'
51
- ```
52
-
53
- Output:
54
-
55
- [![pacman](https://cdn.rawgit.com/DannyBen/victor/master/examples/10_pacman.svg)](https://github.com/DannyBen/victor/blob/master/examples/10_pacman.rb)
56
-
57
-
58
- See the [examples] folder for several ruby scripts and their SVG output.
59
-
60
-
61
- ## Usage
62
-
63
- Initialize your SVG image:
64
-
65
- ```ruby
66
- require 'victor'
67
- svg = Victor::SVG.new
68
- ```
69
-
70
- Any option you provide to `SVG.new` will be added as an attribute to the
71
- main `<svg>` element. By default, `height` and `width` are set to 100%.
72
-
73
- ```ruby
74
- svg = Victor::SVG.new width: '100%', height: '100%'
75
- # same as just Victor::SVG.new
76
-
77
- svg = Victor::SVG.new width: '100%', height: '100%', viewBox: "0 0 200 100"
78
- ```
79
-
80
- As an alternative, you can set the root SVG attributes using the `setup` method:
81
-
82
- ```ruby
83
- require 'victor'
84
- svg = Victor::SVG.new
85
- svg.setup width: 200, height: 150
86
- ```
87
-
88
- Victor uses a single method (`element`) to generate all SVG elements:
89
-
90
- ```ruby
91
- svg.element :rect, x: 2, y: 2, width: 200, height: 200
92
- # => <rect x="2" y="2" width="200" height="200"/>
93
- ```
94
-
95
- But you can omit it. Calls to any other method, will be delegated to the
96
- `element` method, so normal usage looks more like this:
97
-
98
- ```ruby
99
- svg.rect x: 2, y: 2, width: 200, height: 200
100
- # => <rect x="2" y="2" width="200" height="200"/>
101
- ```
102
-
103
- In other words, these are the same:
104
-
105
- ```ruby
106
- svg.element :anything, option: 'value'
107
- svg.anything option: 'value'
108
- ```
109
-
110
- You can use the `build` method, to generate the SVG with a block
111
-
112
- ```ruby
113
- svg.build do
114
- rect x: 0, y: 0, width: 100, height: 100, fill: '#ccc'
115
- rect x: 20, y: 20, width: 60, height: 60, fill: '#f99'
116
- end
117
- ```
118
-
119
- If the value of an attribute is a hash, it will be converted to a
120
- style-compatible string:
121
-
122
- ```ruby
123
- svg.rect x: 0, y: 0, width: 100, height: 100, style: { stroke: '#ccc', fill: 'red' }
124
- # => <rect x=0 y=0 width=100 height=100 style="stroke:#ccc; fill:red"/>
125
- ```
126
-
127
- If the value of an attribute is an array, it will be converted to a
128
- space delimited string:
129
-
130
- ```ruby
131
- svg.path d: ['M', 150, 0, 'L', 75, 200, 'L', 225, 200, 'Z']
132
- # => <path d="M 150 0 L 75 200 L 225 200 Z"/>
133
- ```
134
-
135
- For SVG elements that have an inner content - such as text - simply pass it as
136
- the first argument:
137
-
138
- ```ruby
139
- svg.text "Victor", x: 40, y: 50
140
- # => <text x="40" y="50">Victor</text>
141
- ```
142
-
143
- You can also nest elements with blocks:
144
-
145
- ```ruby
146
- svg.build do
147
- g font_size: 30, font_family: 'arial', fill: 'white' do
148
- text "Scalable Victor Graphics", x: 40, y: 50
149
- end
150
- end
151
- # => <g font-size="30" font-family="arial" fill="white">
152
- # <text x="40" y="50">Scalable Victor Graphics</text>
153
- # </g>
154
- ```
155
-
156
- Underscores in attribute names are converted to dashes:
157
-
158
- ```ruby
159
- svg.text "Victor", x: 40, y: 50, font_family: 'arial', font_weight: 'bold', font_size: 40
160
- # => <text x="40" y="50" font-family="arial" font-weight="bold" font-size="40">
161
- # Victor
162
- # </text>
163
- ```
164
-
165
- ## Features
166
-
167
- ### Composite SVG
168
-
169
- Victor also supports the ability to combine several smaller SVG objects into
170
- one using the `<<` operator or the `#append` method.
171
-
172
- This operator expects to receive any object that responds to `#to_s` (can be another `SVG` object).
173
-
174
- ```ruby
175
- require 'victor'
176
- include Victor
177
-
178
- # Create a reusable SVG object
179
- frame = SVG.new
180
- frame.rect x: 0, y: 0, width: 100, height: 100, fill: '#336'
181
- frame.rect x: 10, y: 10, width: 80, height: 80, fill: '#fff'
182
-
183
- # ... and another
184
- troll = SVG.new
185
- troll.circle cx: 50, cy: 60, r: 24, fill: 'yellow'
186
- troll.polygon points: %w[24,50 50,14 76,54], fill: 'red'
187
-
188
- # Combine objects into a single image
189
- svg = SVG.new viewBox: '0 0 100 100'
190
- svg << frame
191
- svg << troll
192
-
193
- # ... and save it
194
- svg.save 'framed-troll'
195
- ```
196
-
197
- Output:
198
-
199
- [![troll](https://cdn.rawgit.com/DannyBen/victor/master/examples/14_composite_svg.svg)](https://cdn.rawgit.com/DannyBen/victor/master/examples/14_composite_svg.svg)
200
-
201
- These two calls are identical:
202
-
203
- ```ruby
204
- svg << other
205
- svg.append other
206
- ```
207
-
208
- To make this common use case a little easier to use, you can use a block when instantiating a new `SVG` object:
209
-
210
- ```ruby
211
- troll = SVG.new do
212
- circle cx: 50, cy: 60, r: 24, fill: 'yellow'
213
- end
214
- ```
215
-
216
- Which is the same as:
217
-
218
- ```ruby
219
- troll = SVG.new
220
- troll.build do
221
- circle cx: 50, cy: 60, r: 24, fill: 'yellow'
222
- end
223
- ```
224
-
225
- Another approach to a more modular SVG composition, would be to subclass
226
- `Victor::SVG`.
227
-
228
- See the [composite svg example](https://github.com/DannyBen/victor/tree/master/examples#14-composite-svg)
229
- or the [subclassing example](https://github.com/DannyBen/victor/tree/master/examples#15-subclassing)
230
- for more details.
231
-
232
-
233
- ### Saving the Output
234
-
235
- Generate the full SVG to a string with `render`:
236
-
237
- ```ruby
238
- result = svg.render
239
- ```
240
-
241
- Or, save it to a file with `save`:
242
-
243
- ```ruby
244
- svg.save 'filename'
245
- # the '.svg' extension is optional
246
- ```
247
-
248
- ### SVG Templates
249
-
250
- Victor renders its content using the [`:default` template][default-template].
251
-
252
- If you wish to use another template, you can either use one of the built-in
253
- templates (`:default` or `:minimal`), or provide your own:
254
-
255
- ```ruby
256
- svg = Victor::SVG.new template: :minimal
257
- svg = Victor::SVG.new template: 'path/to/template.svg'
258
- ```
259
-
260
- See the [templates] folder for an understanding of how templates are
261
- structured.
262
-
263
- Templates can also be provided when rendering or saving the output:
264
-
265
- ```ruby
266
- svg.save 'filename', template: :minimal
267
- svg.render template: :minimal
268
- ```
269
-
270
-
271
- ### CSS
272
-
273
- CSS gets a special treatment in `Victor::SVG`, in order to provide a DSL-like
274
- syntax for CSS rules.
275
-
276
- The `Victor::SVG` object has a `css` property, which can contain either a
277
- Hash or a String:
278
-
279
- ```ruby
280
- svg = Victor::SVG.new
281
-
282
- svg.css = css_hash_or_string
283
- # or without the equal sign:
284
- svg.css css_hash_or_string
285
-
286
- svg.build do
287
- # ...
288
- end
289
- ```
290
-
291
- This flexibility allows you to apply CSS in multiple ways. Below are some
292
- examples.
293
-
294
- #### Assigning CSS rules using the hash syntax
295
-
296
- ```ruby
297
- svg = Victor::SVG.new
298
-
299
- svg.build do
300
- css['.main'] = {
301
- stroke: "green",
302
- stroke_width: 2,
303
- fill: "yellow"
304
- }
305
-
306
- circle cx: 35, cy: 35, r: 20, class: 'main'
307
- end
308
- ```
309
-
310
- #### Assigning a full hash to the CSS property
27
+ ## Example
311
28
 
312
- ```ruby
313
- svg.css = {
314
- '.bar': {
315
- fill: '#666',
316
- stroke: '#fff',
317
- stroke_width: 1
318
- },
319
- '.negative': {
320
- fill: '#f66'
321
- },
322
- '.positive': {
323
- fill: '#6f6'
324
- }
325
- }
326
- ```
327
-
328
- Underscore characters will be converted to dashes (`stroke_width` becomes
329
- `stroke-width`).
330
-
331
- #### Importing CSS from an external file
332
-
333
- ```ruby
334
- svg.css = File.read 'styles.css'
335
- ```
29
+ <table><tr><td width="250">
336
30
 
337
- #### CSS `@import` directives
31
+ <img src='assets/ghost.svg' width=250>
338
32
 
339
- If you need to add CSS statements , like `@import`, use the following syntax:
33
+ </td><td>
340
34
 
341
35
  ```ruby
342
- css['@import'] = [
343
- "url('https://fonts.googleapis.com/css?family=Audiowide')",
344
- "url('https://fonts.googleapis.com/css?family=Pacifico')"
345
- ]
346
- ```
347
-
348
- This is achieved thanks to the fact that when Victor encounters an array
349
- in the CSS hash, it will prefix each of the array elements with the hash
350
- key, so the above will result in two `@import url(...)` rows.
351
-
352
- See the [css example](https://github.com/DannyBen/victor/tree/master/examples#08-css),
353
- [css string example](https://github.com/DannyBen/victor/tree/master/examples#09-css-string),
354
- or the [custom fonts example](https://github.com/DannyBen/victor/tree/master/examples#13-custom-fonts).
355
-
356
-
357
- ### Tagless Elements
358
-
359
- Using underscore (`_`) as the element name will simply add the value to the
360
- generated SVG, without any surrounding element. This is designed to allow
361
- generating something like this:
36
+ setup viewBox: '0 0 100 100'
362
37
 
363
- ```xml
364
- <text>
365
- You are
366
- <tspan font-weight="bold">not</tspan>
367
- a banana
368
- </text>
369
- ```
370
-
371
- using this Ruby code:
38
+ build do
39
+ rect x: 0, y: 0, width: 100, height: 100, fill: :white
40
+ circle cx: 50, cy: 50, r: 40, fill: 'yellow'
41
+ rect x: 10, y: 50, width: 80, height: 50, fill: :yellow
372
42
 
373
- ```ruby
374
- svg.build do
375
- text do
376
- _ 'You are'
377
- tspan 'not', font_weight: "bold"
378
- _ 'a banana'
43
+ [25, 50].each do |x|
44
+ circle cx: x, cy: 40, r: 8, fill: :white
379
45
  end
380
- end
381
- ```
382
-
383
- See the [tagless elements example](https://github.com/DannyBen/victor/tree/master/examples#17-tagless-elements).
384
-
385
-
386
- ### XML Encoding
387
-
388
- Plain text values are encoded automatically:
389
-
390
- ```ruby
391
- svg.build do
392
- text "Ben & Jerry's"
393
- end
394
- # <text>Ben &amp; Jerry's</text>
395
- ```
396
-
397
- If you need to use the raw, unencoded string, add `!` to the element's name:
398
-
399
- ```ruby
400
- svg.build do
401
- text! "Ben & Jerry's"
402
- end
403
- # <text>Ben & Jerry's</text>
404
- ```
405
-
406
- See the [xml encoding example](https://github.com/DannyBen/victor/tree/master/examples#18-xml-encoding).
407
-
408
-
409
- ### XML Newlines
410
-
411
- By default, the generated SVGs will have a newline glue between the elements.
412
- You can change this (for example, to an empty string) if the default newlines
413
- are not appropriate for your use case.
414
-
415
- ```ruby
416
- svg = Victor::SVG.new glue: ''
417
- ```
418
46
 
419
- The glue can also be provided when rendering or saving the output:
420
-
421
- ```ruby
422
- svg.save 'filename', glue: ''
423
- svg.render glue: ''
424
- ```
425
-
426
- ### DSL Syntax
427
-
428
- Victor also supports a DSL-like syntax. To use it, simply `require 'victor/script'`.
429
-
430
- Once required, you have access to:
431
-
432
- - `svg` - returns an instance of `Victor::SVG`
433
- - All the methods that are available on the `SVG` object, are included at the root level.
434
-
435
- For example:
436
-
437
- ```ruby
438
- require 'victor/script'
439
-
440
- setup width: 100, height: 100
441
-
442
- build do
443
- circle cx: 50, cy: 50, r: 30, fill: "yellow"
47
+ path fill: 'white', d: %w[
48
+ M11 100 l13 -15 l13 15 l13 -15
49
+ l13 15 l13 -15 l13 15 Z
50
+ ]
444
51
  end
445
-
446
- puts render
447
- save 'output.svg'
448
52
  ```
449
53
 
450
- See the [dsl example](https://github.com/DannyBen/victor/tree/master/examples#19-dsl).
451
-
452
- ## Related Projects
453
-
454
- ### [Victor CLI][victor-cli]
455
-
456
- A command line utility that allows converting Ruby to SVG as well as SVG to
457
- Victor Ruby scripts.
458
-
459
- ### [Victor Opal][victor-opal]
460
-
461
- A Victor playground that works in the browser.
462
-
463
- ### [Minichart][minichart]
54
+ </td></tr></table>
464
55
 
465
- A Ruby gem that uses Victor to generate SVG charts
466
56
 
467
- [![Minichart](assets/minichart.svg)][minichart]
468
-
469
-
470
- ### [Icodi][icodi]
471
-
472
- A Ruby gem that uses Victor to generate consistent random icon
473
- images, similar to GitHub's identicon.
474
-
475
- [![Icodi](assets/icodi.svg)][icodi]
57
+ ## Documentation
476
58
 
59
+ - [Victor Homepage][docs]
477
60
 
478
61
  ## Contributing / Support
479
62
 
480
63
  If you experience any issue, have a question or a suggestion, or if you wish
481
- to contribute, feel free to [open an issue][issues].
482
-
483
- ---
64
+ to contribute, feel free to [open an issue][issues] or
65
+ [start a discussion][discussions].
484
66
 
485
- [examples]: https://github.com/DannyBen/victor/tree/master/examples#examples
486
- [templates]: https://github.com/DannyBen/victor/tree/master/lib/victor/templates
487
- [default-template]: https://github.com/DannyBen/victor/blob/master/lib/victor/templates/default.svg?short_path=c28efa4
488
- [icodi]: https://github.com/DannyBen/icodi
489
- [minichart]: https://github.com/DannyBen/minichart
490
- [victor-opal]: https://kuboon.github.io/victor-opal/
491
- [victor-cli]: https://github.com/DannyBen/victor-cli
492
67
  [issues]: https://github.com/DannyBen/victor/issues
68
+ [discussions]: https://github.com/DannyBen/victor/discussions
69
+ [docs]: https://victor.dannyb.co/
@@ -0,0 +1,61 @@
1
+ require 'forwardable'
2
+
3
+ module Victor
4
+ class Component
5
+ extend Forwardable
6
+ include Marshaling
7
+
8
+ def_delegators :svg, :save, :render, :content, :element, :tag, :css, :to_s
9
+
10
+ # Marshaling data
11
+ def marshaling = %i[width height x y svg merged_css]
12
+
13
+ # Subclasses MUST implement this
14
+ def body
15
+ raise(NotImplementedError, "#{self.class.name} must implement `body'")
16
+ end
17
+
18
+ # Subclasses MUST override these methods, OR assign instance vars
19
+ def height
20
+ @height || raise(NotImplementedError,
21
+ "#{self.class.name} must implement `height' or `@height'")
22
+ end
23
+
24
+ def width
25
+ @width || raise(NotImplementedError,
26
+ "#{self.class.name} must implement `width' or `@width'")
27
+ end
28
+
29
+ # Subclasses MAY override these methods, OR assign instance vars
30
+ def style = @style ||= {}
31
+ def x = @x ||= 0
32
+ def y = @y ||= 0
33
+
34
+ # Appending/Embedding - DSL for the `#body` implementation
35
+ def append(component)
36
+ svg_instance.append component.svg
37
+ merged_css.merge! component.merged_css
38
+ end
39
+ alias embed append
40
+
41
+ # SVG / CSS
42
+ def svg
43
+ @svg ||= begin
44
+ body
45
+ svg_instance.css = merged_css
46
+ svg_instance
47
+ end
48
+ end
49
+
50
+ protected
51
+
52
+ # Start with an ordinary SVG instance
53
+ def svg_instance = @svg_instance ||= SVG.new(viewBox: "#{x} #{y} #{width} #{height}")
54
+
55
+ # Internal DSL to enable `add.anything` in the `#body` implementation
56
+ alias add svg_instance
57
+
58
+ # Start with a copy of our own style
59
+ def merged_css = @merged_css ||= style.dup
60
+ end
61
+ end
data/lib/victor/dsl.rb CHANGED
@@ -3,7 +3,7 @@ require 'forwardable'
3
3
  module Victor
4
4
  module DSL
5
5
  extend Forwardable
6
- def_delegators :svg, :setup, :build, :save, :render, :append, :element, :css
6
+ def_delegators :svg, :setup, :build, :save, :render, :append, :element, :tag, :css
7
7
 
8
8
  def svg
9
9
  @svg ||= Victor::SVG.new
@@ -1,39 +1,33 @@
1
1
  module Victor
2
2
  module Marshaling
3
+ def marshaling
4
+ raise NotImplementedError, "#{self.class.name} must implement `marshaling'"
5
+ end
6
+
3
7
  # YAML serialization methods
4
8
  def encode_with(coder)
5
- coder['template'] = @template
6
- coder['glue'] = @glue
7
- coder['svg_attributes'] = @svg_attributes
8
- coder['css'] = @css
9
- coder['content'] = @content
9
+ marshaling.each do |attr|
10
+ coder[attr.to_s] = send(attr)
11
+ end
10
12
  end
11
13
 
12
14
  def init_with(coder)
13
- @template = coder['template']
14
- @glue = coder['glue']
15
- @svg_attributes = coder['svg_attributes']
16
- @css = coder['css']
17
- @content = coder['content']
15
+ marshaling.each do |attr|
16
+ instance_variable_set(:"@#{attr}", coder[attr.to_s])
17
+ end
18
18
  end
19
19
 
20
20
  # Marshal serialization methods
21
21
  def marshal_dump
22
- {
23
- template: @template,
24
- glue: @glue,
25
- svg_attributes: @svg_attributes,
26
- css: @css,
27
- content: @content,
28
- }
22
+ marshaling.to_h do |attr|
23
+ [attr, send(attr)]
24
+ end
29
25
  end
30
26
 
31
27
  def marshal_load(data)
32
- @template = data[:template]
33
- @glue = data[:glue]
34
- @svg_attributes = data[:svg_attributes]
35
- @css = data[:css]
36
- @content = data[:content]
28
+ marshaling.each do |attr|
29
+ instance_variable_set(:"@#{attr}", data[attr])
30
+ end
37
31
  end
38
32
  end
39
33
  end
data/lib/victor/svg.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Victor
2
2
  class SVG < SVGBase
3
3
  def method_missing(method_sym, ...)
4
- element(method_sym, ...)
4
+ tag(method_sym, ...)
5
5
  end
6
6
 
7
7
  def respond_to_missing?(*)
@@ -12,10 +12,15 @@ module Victor
12
12
  build(&block) if block
13
13
  end
14
14
 
15
+ def marshaling
16
+ %i[template glue svg_attributes css content]
17
+ end
18
+
15
19
  def <<(additional_content)
16
20
  content.push additional_content.to_s
17
21
  end
18
22
  alias append <<
23
+ alias embed <<
19
24
 
20
25
  def setup(attributes = nil)
21
26
  attributes ||= {}
@@ -35,7 +40,7 @@ module Victor
35
40
  instance_eval(&block)
36
41
  end
37
42
 
38
- def element(name, value = nil, attributes = {})
43
+ def tag(name, value = nil, attributes = {})
39
44
  if value.is_a? Hash
40
45
  attributes = value
41
46
  value = nil
@@ -63,6 +68,7 @@ module Victor
63
68
  content.push "<#{name} #{attributes}/>"
64
69
  end
65
70
  end
71
+ alias element tag
66
72
 
67
73
  def css(defs = nil)
68
74
  @css ||= {}
@@ -1,8 +1,4 @@
1
- <svg %{attributes}
2
- xmlns="http://www.w3.org/2000/svg"
3
- xmlns:xlink="http://www.w3.org/1999/xlink">
4
-
1
+ <svg %{attributes} xmlns="http://www.w3.org/2000/svg">
5
2
  %{style}
6
3
  %{content}
7
-
8
4
  </svg>
@@ -1,3 +1,3 @@
1
1
  module Victor
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.0'
3
3
  end
data/lib/victor.rb CHANGED
@@ -1,7 +1,11 @@
1
1
  require 'victor/version'
2
- require 'victor/marshaling'
3
- require 'victor/svg_base'
4
- require 'victor/svg'
5
- require 'victor/attributes'
6
- require 'victor/css'
7
- require 'victor/dsl'
2
+
3
+ module Victor
4
+ autoload :Attributes, 'victor/attributes'
5
+ autoload :Component, 'victor/component'
6
+ autoload :CSS, 'victor/css'
7
+ autoload :DSL, 'victor/dsl'
8
+ autoload :Marshaling, 'victor/marshaling'
9
+ autoload :SVG, 'victor/svg'
10
+ autoload :SVGBase, 'victor/svg_base'
11
+ 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.4.0
4
+ version: 0.5.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: 2024-08-25 00:00:00.000000000 Z
11
+ date: 2024-08-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Build SVG images with ease
14
14
  email: db@dannyben.com
@@ -19,6 +19,7 @@ files:
19
19
  - README.md
20
20
  - lib/victor.rb
21
21
  - lib/victor/attributes.rb
22
+ - lib/victor/component.rb
22
23
  - lib/victor/css.rb
23
24
  - lib/victor/dsl.rb
24
25
  - lib/victor/marshaling.rb
@@ -34,6 +35,7 @@ licenses:
34
35
  metadata:
35
36
  bug_tracker_uri: https://github.com/DannyBen/victor/issues
36
37
  changelog_uri: https://github.com/DannyBen/victor/blob/master/CHANGELOG.md
38
+ homepage_uri: https://victor.dannyb.co/
37
39
  source_code_uri: https://github.com/DannyBen/victor
38
40
  rubygems_mfa_required: 'true'
39
41
  post_install_message: