Skip to content

Commit 19bb16e

Browse files
committed
Add UnicodePlot.canvas_types
[Fix GH-42]
1 parent 7af855c commit 19bb16e

7 files changed

Lines changed: 29 additions & 11 deletions

File tree

lib/unicode_plot/canvas.rb

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,13 @@ module UnicodePlot
22
class Canvas
33
include BorderPrinter
44

5+
CANVAS_CLASS_MAP = {}
6+
57
def self.create(canvas_type, width, height, **kw)
6-
case canvas_type
7-
when :ascii
8-
AsciiCanvas.new(width, height, **kw)
9-
when :braille
10-
BrailleCanvas.new(width, height, **kw)
11-
when :density
12-
DensityCanvas.new(width, height, **kw)
13-
when :dot
14-
DotCanvas.new(width, height, **kw)
15-
when :block
16-
BlockCanvas.new(width, height, **kw)
8+
canvas_class = CANVAS_CLASS_MAP[canvas_type]
9+
case canvas_class
10+
when Class
11+
canvas_class.new(width, height, **kw)
1712
else
1813
raise ArgumentError, "unknown canvas type: #{canvas_type}"
1914
end
@@ -168,10 +163,16 @@ def lines!(x, y, color = :normal)
168163
raise ArgumentError, "#{name} has to be positive"
169164
end
170165
end
166+
167+
def self.canvas_types
168+
Canvas::CANVAS_CLASS_MAP.keys
169+
end
171170
end
172171

173172
require_relative 'canvas/ascii_canvas'
174173
require_relative 'canvas/block_canvas'
175174
require_relative 'canvas/braille_canvas'
176175
require_relative 'canvas/density_canvas'
177176
require_relative 'canvas/dot_canvas'
177+
178+
UnicodePlot::Canvas::CANVAS_CLASS_MAP.freeze

lib/unicode_plot/canvas/ascii_canvas.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
module UnicodePlot
44
class AsciiCanvas < LookupCanvas
5+
Canvas::CANVAS_CLASS_MAP[:ascii] = self
6+
57
ASCII_SIGNS = [
68
[ 0b100_000_000, 0b000_100_000, 0b000_000_100 ].freeze,
79
[ 0b010_000_000, 0b000_010_000, 0b000_000_010 ].freeze,

lib/unicode_plot/canvas/block_canvas.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ module UnicodePlot
77
# into 4 pixels that can individually be manipulated
88
# using binary operations.
99
class BlockCanvas < LookupCanvas
10+
Canvas::CANVAS_CLASS_MAP[:block] = self
11+
1012
X_PIXEL_PER_CHAR = 2
1113
Y_PIXEL_PER_CHAR = 2
1214

lib/unicode_plot/canvas/braille_canvas.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module UnicodePlot
22
class BrailleCanvas < Canvas
3+
Canvas::CANVAS_CLASS_MAP[:braille] = self
4+
35
X_PIXEL_PER_CHAR = 2
46
Y_PIXEL_PER_CHAR = 4
57

lib/unicode_plot/canvas/density_canvas.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module UnicodePlot
22
class DensityCanvas < Canvas
3+
Canvas::CANVAS_CLASS_MAP[:density] = self
4+
35
DENSITY_SIGNS = [" ", "░", "▒", "▓", "█"].freeze
46

57
MIN_WIDTH = 5

lib/unicode_plot/canvas/dot_canvas.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module UnicodePlot
22
class DotCanvas < LookupCanvas
3+
Canvas::CANVAS_CLASS_MAP[:dot] = self
4+
35
DOT_SIGNS = [
46
[
57
0b10,

test/test-utils.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class UnicodePlotTest < Test::Unit::TestCase
2+
test("UnicodePlot.canvas_types") do
3+
available_canvas_types = [:ascii, :block, :braille, :density, :dot]
4+
assert_equal(available_canvas_types,
5+
UnicodePlot.canvas_types)
6+
end
7+
end

0 commit comments

Comments
 (0)