#
Introduction to Victor
Victor is a lightweight, zero-dependencies Ruby library that lets you build SVG images using Ruby code.
#
Example
Building a Meter Bar with Victor.
require 'victor'
include Victor
led_width = 10
led_gap = 2
total_width = 10 * (led_width + led_gap) + 8
svg = SVG.new viewBox: "0 0 #{total_width} 30"
# Add frame
svg.rect x: 2, y: 2, width: total_width - 4, height: 26,
rx: 4, fill: 'none', stroke: '#666'
# Add leds
x = 5
10.times do |i|
opacity = i < 7 ? 1 : 0.3
svg.rect x: x, y: 5, width: led_width, height: 20,
rx: 3, fill: 'green', fill_opacity: opacity
x += led_width + led_gap
end
svg.save 'meter'
<svg viewBox="0 0 128 30" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg">
<rect x="2" y="2" width="124" height="26" rx="4" fill="none" stroke="#666"/>
<rect x="5" y="5" width="10" height="20" rx="3" fill="green" fill-opacity="1"/>
<rect x="17" y="5" width="10" height="20" rx="3" fill="green" fill-opacity="1"/>
<rect x="29" y="5" width="10" height="20" rx="3" fill="green" fill-opacity="1"/>
<rect x="41" y="5" width="10" height="20" rx="3" fill="green" fill-opacity="1"/>
<rect x="53" y="5" width="10" height="20" rx="3" fill="green" fill-opacity="1"/>
<rect x="65" y="5" width="10" height="20" rx="3" fill="green" fill-opacity="1"/>
<rect x="77" y="5" width="10" height="20" rx="3" fill="green" fill-opacity="1"/>
<rect x="89" y="5" width="10" height="20" rx="3" fill="green" fill-opacity="0.3"/>
<rect x="101" y="5" width="10" height="20" rx="3" fill="green" fill-opacity="0.3"/>
<rect x="113" y="5" width="10" height="20" rx="3" fill="green" fill-opacity="0.3"/>
</svg>
#
How it works
Victor allows you to build SVG elements using plain Ruby. It translates any
method call it doesn’t recognize into an SVG tag, so calling methods like
rect
, circle
, or line
automatically generates the corresponding SVG
tags.
#
Key Features
Initialization
Create an SVG with attributes like viewBox
or style
.
svg = Victor::SVG.new viewBox: '0 0 100 100'
SVG Elements
Add SVG elements with attributes by calling methods with the desired tag name.
svg.rect x: 0, y: 10, width: 100
Nesting
Organize SVG elements hierarchically by nesting them within blocks.
svg.g transform: 'translate(10 10)' do
svg.rect x: 10, y: 10
end
Attributes and Inline Styling
Apply attributes and inline styles directly within the method call.
svg.rect style: {
fill: :blue, font_family: 'Roboto'
}
CSS
Define stylesheets using a hash.
svg.css['.box'] = { fill: :red }
#
Installation
Install Victor:
gem install victor
Optionally, if you want to work with the Victor Command Line Interface:
gem install victor-cli