waxy 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 +7 -0
- data/.gitignore +17 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/CHANGELOG.md +9 -0
- data/CODE_OF_CONDUCT.md +76 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +41 -0
- data/LICENSE.txt +16 -0
- data/README.md +86 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/examples/img/random.png +0 -0
- data/examples/img/rectangle.png +0 -0
- data/lib/waxy.rb +71 -0
- data/lib/waxy/geometry.rb +60 -0
- data/lib/waxy/geometry/fractional_hex.rb +62 -0
- data/lib/waxy/geometry/hex.rb +93 -0
- data/lib/waxy/geometry/layout.rb +130 -0
- data/lib/waxy/geometry/orientation.rb +50 -0
- data/lib/waxy/geometry/point.rb +30 -0
- data/lib/waxy/meta.rb +71 -0
- data/lib/waxy/render.rb +20 -0
- data/lib/waxy/render/canvas.rb +28 -0
- data/lib/waxy/render/svg.rb +134 -0
- data/lib/waxy/render/templates/close_svg.erb +1 -0
- data/lib/waxy/render/templates/hex.erb +6 -0
- data/lib/waxy/render/templates/hex_pie.erb +32 -0
- data/lib/waxy/render/templates/open_svg.erb +1 -0
- data/lib/waxy/render/templates/svg.erb +59 -0
- data/lib/waxy/version.rb +3 -0
- data/waxy.gemspec +46 -0
- metadata +163 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
module Waxy
|
2
|
+
module Render
|
3
|
+
module Svg
|
4
|
+
|
5
|
+
# Concept from http://www-cs-students.stanford.edu/~amitp/game-programming/grids/draw_grid.rb
|
6
|
+
class Canvas
|
7
|
+
|
8
|
+
attr_accessor :width, :height
|
9
|
+
attr_accessor :body
|
10
|
+
|
11
|
+
def initialize(_width = 1000, _height = 1000)
|
12
|
+
@width = _width
|
13
|
+
@height = _height
|
14
|
+
|
15
|
+
@body = ''
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_svg
|
19
|
+
doc = Waxy::Render::Svg.open_svg(self)
|
20
|
+
doc << body
|
21
|
+
doc << Waxy::Render::Svg.close_svg
|
22
|
+
doc
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
module Waxy
|
2
|
+
module Render
|
3
|
+
module Svg
|
4
|
+
|
5
|
+
TEMPLATE_PATH = File.join(__dir__, 'templates').freeze
|
6
|
+
|
7
|
+
def self.open_svg(canvas)
|
8
|
+
t = Tilt.new(File.join(TEMPLATE_PATH, 'open_svg.erb'))
|
9
|
+
t.render(canvas)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.close_svg
|
13
|
+
t = Tilt.new(File.join(TEMPLATE_PATH, 'close_svg.erb'))
|
14
|
+
t.render
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.hexagon(layout, hex, color = 'black')
|
18
|
+
t = Tilt.new(File.join(TEMPLATE_PATH, 'hex.erb'))
|
19
|
+
t.render(layout, hex: hex, color: color)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.hex_pie(layout, hex, meta = Waxy::Meta.new)
|
23
|
+
hex.size = meta.size
|
24
|
+
t = Tilt.new(File.join(TEMPLATE_PATH, 'hex_pie.erb'))
|
25
|
+
s = t.render(layout, hex: hex, meta: meta)
|
26
|
+
end
|
27
|
+
|
28
|
+
# A spiral layout that is continuous from an
|
29
|
+
# empty center.
|
30
|
+
# TODO: use a theta/spiral calc and pixel_to_hex
|
31
|
+
# to simplify(?) the algorithim
|
32
|
+
def self.spiral(layout, radius, metadata)
|
33
|
+
str = ''
|
34
|
+
hex = Waxy::Geometry::Hex.new( 0, 0, nil)
|
35
|
+
directions = [2, 3, 4, 5]
|
36
|
+
|
37
|
+
(0..radius).each do |r|
|
38
|
+
(0..r).each do |z|
|
39
|
+
hex = hex.hex_neighbor(0)
|
40
|
+
str << Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop )
|
41
|
+
return str if metadata.size == 0
|
42
|
+
end
|
43
|
+
|
44
|
+
(0..r - 1).each do |o|
|
45
|
+
hex = hex.hex_neighbor(1)
|
46
|
+
str << Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop )
|
47
|
+
return str if metadata.size == 0
|
48
|
+
end
|
49
|
+
|
50
|
+
directions.each do |v1|
|
51
|
+
(0..r).each do |y|
|
52
|
+
hex = hex.hex_neighbor(v1)
|
53
|
+
str << Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop)
|
54
|
+
return str if metadata.size == 0
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
str
|
59
|
+
end
|
60
|
+
|
61
|
+
# Code directly from Amit/RedBlob games
|
62
|
+
# This is for known radius, if you don't
|
63
|
+
# have enough hexes it won't render a full hexagon,
|
64
|
+
# "painted" because it completes in bands
|
65
|
+
def self.painted_hexagon(layout, map_radius, metadata)
|
66
|
+
str = ''
|
67
|
+
((-1 * map_radius)..(map_radius - 1)).each do |q|
|
68
|
+
r1 = [(-1 * map_radius), (-1 * q) - map_radius].max
|
69
|
+
r2 = [map_radius, (-1 * q) + map_radius].min
|
70
|
+
|
71
|
+
(r1 ... r2 - 1).each do |r|
|
72
|
+
hex = Waxy::Geometry::Hex.new( q, r, ((-1 * q) - r))
|
73
|
+
str << Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop)
|
74
|
+
|
75
|
+
return str if metadata.size == 0
|
76
|
+
end
|
77
|
+
end
|
78
|
+
str
|
79
|
+
end
|
80
|
+
|
81
|
+
# Map for Square
|
82
|
+
def self.square(layout, metadata)
|
83
|
+
str = ''
|
84
|
+
h = Math.sqrt(metadata.size).to_i
|
85
|
+
|
86
|
+
(0..h).each do |r|
|
87
|
+
(0..h).each do |j|
|
88
|
+
return str if metadata.size == 0
|
89
|
+
q = j - (r/2).floor
|
90
|
+
hex = Waxy::Geometry::Hex.new(q, r)
|
91
|
+
str << Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
str
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
def self.rectangle(layout, metadata, w = 10, h = 10)
|
99
|
+
str = ''
|
100
|
+
|
101
|
+
(0..h).each do |r|
|
102
|
+
layout.reset_w_padding
|
103
|
+
(0..w).each do |j|
|
104
|
+
return str if metadata.size == 0
|
105
|
+
q = j - (r/2).floor
|
106
|
+
hex = Waxy::Geometry::Hex.new(q, r)
|
107
|
+
str << Waxy::Render::Svg.hex_pie(layout, hex, metadata.pop)
|
108
|
+
layout.increase_w_padding
|
109
|
+
end
|
110
|
+
layout.increase_h_padding
|
111
|
+
end
|
112
|
+
str
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
# Interesting capped layout
|
117
|
+
# r = i
|
118
|
+
# q = j - [0, r - j].max
|
119
|
+
|
120
|
+
# Point top triangle
|
121
|
+
# r = i
|
122
|
+
# q = j - [0, j - r].max
|
123
|
+
|
124
|
+
# Upside down triangle
|
125
|
+
# r = i
|
126
|
+
# q = j - r - [0, (j - r)].max
|
127
|
+
|
128
|
+
# left pointing triangle
|
129
|
+
# r = i
|
130
|
+
# q = j - r - [0, (j - r)].max
|
131
|
+
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
</svg>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<% meta ||= Waxy::Meta.new %>
|
2
|
+
<%= "<a href=\"#{meta.link}\" class=\"waxy__link\">" if meta.link %>
|
3
|
+
<g>
|
4
|
+
<polygon fill="<%= color %>" stroke="white" points="<%= polygon_corners(hex).collect{|p| [p.x, p.y].join(',') }.join(' ') %>"></polygon>"
|
5
|
+
</g>
|
6
|
+
<%= '</a>' if meta.link %>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<%= meta.hex_link_start %>
|
2
|
+
<g class="waxy__hexagon">
|
3
|
+
<%= meta.hex_link_title %>
|
4
|
+
<% c = polygon_corners(hex) %>
|
5
|
+
|
6
|
+
<% triangles(hex).each_with_index do |t, i| %>
|
7
|
+
<%= "<a href=\"#{meta.pie_links[i]}\" class=\"waxy__pie_link\">" if meta.pie_links[i] %>
|
8
|
+
<polygon class="waxy__triangle"
|
9
|
+
fill="<%= meta.colors[i] %>"
|
10
|
+
points="<%= t.collect{|p| [p.x + pad_w_offset, p.y + pad_h_offset].join(',') }.join(' ') %>" >
|
11
|
+
</polygon>
|
12
|
+
<%= "</a>" if meta.pie_links[i] %>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<g stroke="white" width="2">
|
16
|
+
<% (0..2).each do |i| %>
|
17
|
+
<line
|
18
|
+
x1="<%= c[i].x + pad_w_offset %>"
|
19
|
+
y1="<%= c[i].y + pad_h_offset %>"
|
20
|
+
x2="<%= c[i + 3].x + pad_w_offset %>"
|
21
|
+
y2="<%= c[i + 3].y + pad_h_offset %>"
|
22
|
+
/>
|
23
|
+
<% end %>
|
24
|
+
</g>
|
25
|
+
|
26
|
+
<polygon stroke="<%= meta.stroke %>"
|
27
|
+
fill-opacity="0.0"
|
28
|
+
points="<%= c.collect{|p| [p.x + pad_w_offset, p.y + pad_h_offset].join(',') }.join(' ') %>">
|
29
|
+
</polygon>
|
30
|
+
|
31
|
+
</g>
|
32
|
+
<%= meta.hex_link_end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg id="image-fill" xmlns="http://www.w3.org/2000/svg" version="1.1" width="<%= width %>" height="<%= height %>" xmlns:xlink="http://www.w3.org/1999/xlink">
|
@@ -0,0 +1,59 @@
|
|
1
|
+
|
2
|
+
module Waxy
|
3
|
+
module Render
|
4
|
+
module Svg
|
5
|
+
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
# total = 100
|
10
|
+
|
11
|
+
# def point(center, size, i)
|
12
|
+
# angle_deg = 60.0 * i
|
13
|
+
# angle_rad = Math::PI / 180 * angle_deg
|
14
|
+
# return ((center.x + size) * Math.cos(angle_rad)), ((center.y + size ) * Math.sin(angle_rad))
|
15
|
+
# end
|
16
|
+
|
17
|
+
# def triangle(center, size, i)
|
18
|
+
# points = []
|
19
|
+
# points.push [0,0]
|
20
|
+
# points.push point(center, size, i)
|
21
|
+
# points.push point(center, size, (i + 1 == 7 ? 1 : i + 1))
|
22
|
+
# points
|
23
|
+
# end
|
24
|
+
|
25
|
+
# def hexagon(sizes)
|
26
|
+
# center = Center.new(SIZE, SIZE)
|
27
|
+
# triangles = []
|
28
|
+
# sizes.each_with_index do |s, i|
|
29
|
+
# next if s < 1.0
|
30
|
+
# triangles.push triangle(center, s, i.to_f)
|
31
|
+
# end
|
32
|
+
|
33
|
+
# triangles.each_with_index do |t, i|
|
34
|
+
# color = COLORS[i + 1]
|
35
|
+
# puts "<polygon fill=\"#{color}\" class=\"triangle\" points=\"#{t.collect{|p| p.join(',')}.join(' ')}\"></polygon>"
|
36
|
+
# puts "<line x1=\"0\" y1=\"0\" x2=\"#{t[1][0]}\" y2=\"#{t[1][1]}\" stroke=\"white\" width=\"2\" />"
|
37
|
+
# puts "<line x1=\"0\" y1=\"0\" x2=\"#{t[2][0]}\" y2=\"#{t[2][1]}\" stroke=\"white\" width=\"2\" />"
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
|
41
|
+
# puts '<svg id="image-fill" xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="1000" xmlns:xlink="http://www.w3.org/1999/xlink">'
|
42
|
+
|
43
|
+
# i = 0.0
|
44
|
+
# j = 0.0
|
45
|
+
|
46
|
+
# total.times.each do |z|
|
47
|
+
# sizes = (1..6).collect{|s| rand(0..SIZE) }
|
48
|
+
|
49
|
+
# puts "<g transform=\"translate(#{(i * 50.0) + 50.0} , #{(j * 50.0 + 50.0)})\">"
|
50
|
+
# hexagon(sizes)
|
51
|
+
# puts '</g>'
|
52
|
+
# i += 1
|
53
|
+
# if i > 9
|
54
|
+
# i = 0
|
55
|
+
# j = j + 1
|
56
|
+
# end
|
57
|
+
# end
|
58
|
+
|
59
|
+
# puts '</svg>'
|
data/lib/waxy/version.rb
ADDED
data/waxy.gemspec
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "waxy/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "waxy"
|
8
|
+
spec.version = Waxy::VERSION
|
9
|
+
spec.authors = ["Matt Yoder"]
|
10
|
+
spec.email = ["diapriid@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Waxy is an experimental tool to generate hexagonal SVG visualizations using Ruby.}
|
13
|
+
spec.description = %q{Really, that's it.}
|
14
|
+
spec.homepage = "https://github.com/SpeciesFileGroup/waxy"
|
15
|
+
spec.license = "NCSA"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
19
|
+
if spec.respond_to?(:metadata)
|
20
|
+
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
21
|
+
|
22
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
23
|
+
spec.metadata["source_code_uri"] = "https://github.com/SpeciesFileGroup/waxy"
|
24
|
+
# spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
|
25
|
+
else
|
26
|
+
raise "RubyGems 2.0 or newer is required to protect against " \
|
27
|
+
"public gem pushes."
|
28
|
+
end
|
29
|
+
|
30
|
+
# Specify which files should be added to the gem when it is released.
|
31
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
32
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
33
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
34
|
+
end
|
35
|
+
spec.bindir = "exe"
|
36
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
37
|
+
spec.require_paths = ["lib"]
|
38
|
+
|
39
|
+
spec.add_dependency "tilt", "~> 2.0.9"
|
40
|
+
|
41
|
+
spec.add_development_dependency "byebug", "~> 11"
|
42
|
+
spec.add_development_dependency "awesome_print"
|
43
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
44
|
+
spec.add_development_dependency "rake", "~> 12.0"
|
45
|
+
spec.add_development_dependency "rspec", "~> 3.8"
|
46
|
+
end
|
metadata
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: waxy
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matt Yoder
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-04-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tilt
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.0.9
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.0.9
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: byebug
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '11'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '11'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: awesome_print
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '12.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '12.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.8'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.8'
|
97
|
+
description: Really, that's it.
|
98
|
+
email:
|
99
|
+
- diapriid@gmail.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- ".gitignore"
|
105
|
+
- ".rspec"
|
106
|
+
- ".travis.yml"
|
107
|
+
- CHANGELOG.md
|
108
|
+
- CODE_OF_CONDUCT.md
|
109
|
+
- Gemfile
|
110
|
+
- Gemfile.lock
|
111
|
+
- LICENSE.txt
|
112
|
+
- README.md
|
113
|
+
- Rakefile
|
114
|
+
- bin/console
|
115
|
+
- bin/setup
|
116
|
+
- examples/img/random.png
|
117
|
+
- examples/img/rectangle.png
|
118
|
+
- lib/waxy.rb
|
119
|
+
- lib/waxy/geometry.rb
|
120
|
+
- lib/waxy/geometry/fractional_hex.rb
|
121
|
+
- lib/waxy/geometry/hex.rb
|
122
|
+
- lib/waxy/geometry/layout.rb
|
123
|
+
- lib/waxy/geometry/orientation.rb
|
124
|
+
- lib/waxy/geometry/point.rb
|
125
|
+
- lib/waxy/meta.rb
|
126
|
+
- lib/waxy/render.rb
|
127
|
+
- lib/waxy/render/canvas.rb
|
128
|
+
- lib/waxy/render/svg.rb
|
129
|
+
- lib/waxy/render/templates/close_svg.erb
|
130
|
+
- lib/waxy/render/templates/hex.erb
|
131
|
+
- lib/waxy/render/templates/hex_pie.erb
|
132
|
+
- lib/waxy/render/templates/open_svg.erb
|
133
|
+
- lib/waxy/render/templates/svg.erb
|
134
|
+
- lib/waxy/version.rb
|
135
|
+
- waxy.gemspec
|
136
|
+
homepage: https://github.com/SpeciesFileGroup/waxy
|
137
|
+
licenses:
|
138
|
+
- NCSA
|
139
|
+
metadata:
|
140
|
+
homepage_uri: https://github.com/SpeciesFileGroup/waxy
|
141
|
+
source_code_uri: https://github.com/SpeciesFileGroup/waxy
|
142
|
+
post_install_message:
|
143
|
+
rdoc_options: []
|
144
|
+
require_paths:
|
145
|
+
- lib
|
146
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
156
|
+
requirements: []
|
157
|
+
rubyforge_project:
|
158
|
+
rubygems_version: 2.7.8
|
159
|
+
signing_key:
|
160
|
+
specification_version: 4
|
161
|
+
summary: Waxy is an experimental tool to generate hexagonal SVG visualizations using
|
162
|
+
Ruby.
|
163
|
+
test_files: []
|