whirled_peas 0.5.0 → 0.9.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.
Files changed (291) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +1 -0
  4. data/CHANGELOG.md +31 -0
  5. data/README.md +748 -137
  6. data/Rakefile +4 -32
  7. data/bin/easing +33 -0
  8. data/bin/reset_cursor +11 -0
  9. data/bin/screen_test +68 -0
  10. data/examples/graph.rb +54 -0
  11. data/examples/intro.rb +52 -0
  12. data/examples/scrolling.rb +54 -0
  13. data/lib/whirled_peas.rb +4 -12
  14. data/lib/whirled_peas/animator.rb +5 -0
  15. data/lib/whirled_peas/animator/debug_consumer.rb +17 -0
  16. data/lib/whirled_peas/animator/easing.rb +72 -0
  17. data/lib/whirled_peas/animator/frame.rb +5 -0
  18. data/lib/whirled_peas/animator/frameset.rb +33 -0
  19. data/lib/whirled_peas/animator/producer.rb +35 -0
  20. data/lib/whirled_peas/animator/renderer_consumer.rb +31 -0
  21. data/lib/whirled_peas/command.rb +5 -0
  22. data/lib/whirled_peas/command/base.rb +86 -0
  23. data/lib/whirled_peas/command/config_command.rb +44 -0
  24. data/lib/whirled_peas/command/debug.rb +21 -0
  25. data/lib/whirled_peas/command/fonts.rb +22 -0
  26. data/lib/whirled_peas/command/frame_command.rb +34 -0
  27. data/lib/whirled_peas/command/frames.rb +24 -0
  28. data/lib/whirled_peas/command/help.rb +38 -0
  29. data/lib/whirled_peas/command/play.rb +108 -0
  30. data/lib/whirled_peas/command/record.rb +57 -0
  31. data/lib/whirled_peas/command/still.rb +29 -0
  32. data/lib/whirled_peas/command_line.rb +22 -220
  33. data/lib/whirled_peas/config.rb +56 -6
  34. data/lib/whirled_peas/device.rb +5 -0
  35. data/lib/whirled_peas/device/null_device.rb +8 -0
  36. data/lib/whirled_peas/device/output_file.rb +19 -0
  37. data/lib/whirled_peas/device/screen.rb +26 -0
  38. data/lib/whirled_peas/graphics.rb +14 -0
  39. data/lib/whirled_peas/graphics/box_painter.rb +48 -47
  40. data/lib/whirled_peas/graphics/canvas.rb +22 -11
  41. data/lib/whirled_peas/graphics/composer.rb +98 -0
  42. data/lib/whirled_peas/graphics/container_coords.rb +24 -13
  43. data/lib/whirled_peas/graphics/container_dimensions.rb +37 -9
  44. data/lib/whirled_peas/graphics/container_painter.rb +283 -36
  45. data/lib/whirled_peas/graphics/content_dimensions.rb +19 -0
  46. data/lib/whirled_peas/graphics/content_painter.rb +20 -0
  47. data/lib/whirled_peas/graphics/debugger.rb +10 -1
  48. data/lib/whirled_peas/graphics/graph_dimensions.rb +12 -0
  49. data/lib/whirled_peas/graphics/graph_painter.rb +95 -0
  50. data/lib/whirled_peas/graphics/grid_painter.rb +25 -15
  51. data/lib/whirled_peas/graphics/mock_screen.rb +1 -1
  52. data/lib/whirled_peas/graphics/painter.rb +15 -6
  53. data/lib/whirled_peas/graphics/renderer.rb +13 -30
  54. data/lib/whirled_peas/graphics/text_painter.rb +11 -13
  55. data/lib/whirled_peas/settings/alignment.rb +24 -0
  56. data/lib/whirled_peas/settings/bg_color.rb +2 -0
  57. data/lib/whirled_peas/settings/border.rb +16 -16
  58. data/lib/whirled_peas/settings/color.rb +13 -14
  59. data/lib/whirled_peas/settings/container_settings.rb +133 -40
  60. data/lib/whirled_peas/settings/debugger.rb +9 -0
  61. data/lib/whirled_peas/settings/display_flow.rb +13 -11
  62. data/lib/whirled_peas/settings/element_settings.rb +8 -3
  63. data/lib/whirled_peas/settings/graph_settings.rb +21 -0
  64. data/lib/whirled_peas/settings/grid_settings.rb +15 -0
  65. data/lib/whirled_peas/settings/scrollbar.rb +15 -0
  66. data/lib/whirled_peas/settings/sizing.rb +19 -0
  67. data/lib/whirled_peas/settings/spacing.rb +34 -0
  68. data/lib/whirled_peas/settings/text_color.rb +2 -0
  69. data/lib/whirled_peas/settings/vert_alignment.rb +24 -0
  70. data/lib/whirled_peas/utils/ansi.rb +13 -0
  71. data/lib/whirled_peas/utils/file_handler.rb +57 -0
  72. data/lib/whirled_peas/utils/title_font.rb +1 -1
  73. data/lib/whirled_peas/version.rb +1 -1
  74. data/screen_test/{rendered/elements → elements}/box.frame +1 -1
  75. data/screen_test/{rendered/elements → elements}/box.rb +0 -0
  76. data/screen_test/elements/graph.frame +1 -0
  77. data/screen_test/elements/graph.rb +12 -0
  78. data/screen_test/elements/grid.frame +1 -0
  79. data/screen_test/{rendered/elements → elements}/grid.rb +0 -0
  80. data/screen_test/elements/screen_overflow_x.frame +1 -0
  81. data/screen_test/{rendered/elements/screen_overflow.rb → elements/screen_overflow_x.rb} +0 -0
  82. data/screen_test/elements/screen_overflow_y.frame +1 -0
  83. data/screen_test/elements/screen_overflow_y.rb +9 -0
  84. data/screen_test/elements/text.frame +1 -0
  85. data/screen_test/{rendered/elements → elements}/text.rb +0 -0
  86. data/screen_test/elements/text_multiline.frame +1 -0
  87. data/screen_test/{rendered/elements → elements}/text_multiline.rb +0 -0
  88. data/screen_test/settings/align/box_around.frame +1 -0
  89. data/screen_test/settings/align/box_around.rb +16 -0
  90. data/screen_test/settings/align/box_between.frame +1 -0
  91. data/screen_test/settings/align/box_between.rb +16 -0
  92. data/screen_test/settings/align/box_center.frame +1 -0
  93. data/screen_test/{rendered/settings/align/box.rb → settings/align/box_center.rb} +5 -4
  94. data/screen_test/settings/align/box_default.frame +1 -0
  95. data/screen_test/{rendered/settings/align/grid.rb → settings/align/box_default.rb} +6 -6
  96. data/screen_test/settings/align/box_evenly.frame +1 -0
  97. data/screen_test/settings/align/box_evenly.rb +16 -0
  98. data/screen_test/settings/align/box_left.frame +1 -0
  99. data/screen_test/settings/align/box_left.rb +21 -0
  100. data/screen_test/settings/align/box_right.frame +1 -0
  101. data/screen_test/settings/align/box_right.rb +21 -0
  102. data/screen_test/settings/align/children_center.frame +1 -0
  103. data/screen_test/settings/align/children_center.rb +15 -0
  104. data/screen_test/settings/align/children_left.frame +1 -0
  105. data/screen_test/settings/align/children_left.rb +15 -0
  106. data/screen_test/settings/align/children_right.frame +1 -0
  107. data/screen_test/settings/align/children_right.rb +15 -0
  108. data/screen_test/settings/align/grid_center.frame +1 -0
  109. data/screen_test/settings/align/grid_center.rb +18 -0
  110. data/screen_test/settings/align/grid_default.frame +1 -0
  111. data/screen_test/settings/align/grid_default.rb +17 -0
  112. data/screen_test/settings/align/grid_left.frame +1 -0
  113. data/screen_test/settings/align/grid_left.rb +18 -0
  114. data/screen_test/settings/align/grid_right.frame +1 -0
  115. data/screen_test/settings/align/grid_right.rb +18 -0
  116. data/screen_test/settings/ansi/bold.frame +1 -0
  117. data/screen_test/{rendered/settings/width/overflow_box_t2b.rb → settings/ansi/bold.rb} +4 -5
  118. data/screen_test/{rendered/settings → settings}/ansi/color.frame +1 -1
  119. data/screen_test/{rendered/settings → settings}/ansi/color.rb +0 -0
  120. data/screen_test/settings/ansi/underline.frame +1 -0
  121. data/screen_test/{rendered/settings → settings}/ansi/underline.rb +4 -5
  122. data/screen_test/{rendered/settings → settings}/border.frame +1 -1
  123. data/screen_test/{rendered/settings → settings}/border.rb +1 -1
  124. data/screen_test/settings/flow/box_b2t.frame +1 -0
  125. data/screen_test/settings/flow/box_b2t.rb +26 -0
  126. data/screen_test/settings/flow/box_l2r.frame +1 -0
  127. data/screen_test/settings/flow/box_l2r.rb +26 -0
  128. data/screen_test/settings/flow/box_r2l.frame +1 -0
  129. data/screen_test/settings/flow/box_r2l.rb +26 -0
  130. data/screen_test/settings/flow/box_t2b.frame +1 -0
  131. data/screen_test/settings/flow/box_t2b.rb +26 -0
  132. data/screen_test/settings/flow/grid_b2t.frame +1 -0
  133. data/screen_test/settings/flow/grid_b2t.rb +14 -0
  134. data/screen_test/settings/flow/grid_l2r.frame +1 -0
  135. data/screen_test/{rendered/settings/margin.rb → settings/flow/grid_l2r.rb} +4 -4
  136. data/screen_test/settings/flow/grid_r2l.frame +1 -0
  137. data/screen_test/settings/flow/grid_r2l.rb +14 -0
  138. data/screen_test/settings/flow/grid_t2b.frame +1 -0
  139. data/screen_test/settings/flow/grid_t2b.rb +14 -0
  140. data/screen_test/settings/height/box.frame +1 -0
  141. data/screen_test/{rendered/settings → settings}/height/box.rb +0 -0
  142. data/screen_test/settings/height/box_border_sizing.frame +1 -0
  143. data/screen_test/settings/height/box_border_sizing.rb +15 -0
  144. data/screen_test/settings/height/grid.frame +1 -0
  145. data/screen_test/{rendered/settings → settings}/height/grid.rb +0 -0
  146. data/screen_test/settings/height/overflow_box.frame +1 -0
  147. data/screen_test/settings/height/overflow_box.rb +13 -0
  148. data/screen_test/settings/height/overflow_box_l2r.frame +1 -0
  149. data/screen_test/settings/height/overflow_box_l2r.rb +17 -0
  150. data/screen_test/settings/height/overflow_box_t2b.frame +1 -0
  151. data/screen_test/settings/height/overflow_box_t2b.rb +16 -0
  152. data/screen_test/settings/height/overflow_grid.frame +1 -0
  153. data/screen_test/{rendered/settings → settings}/height/overflow_grid.rb +0 -0
  154. data/screen_test/settings/margin.frame +1 -0
  155. data/screen_test/settings/margin.rb +16 -0
  156. data/screen_test/settings/padding.frame +1 -0
  157. data/screen_test/settings/padding.rb +13 -0
  158. data/screen_test/settings/position/box_left.frame +1 -0
  159. data/screen_test/{rendered/settings → settings}/position/box_left.rb +2 -2
  160. data/screen_test/settings/position/box_left_negative.frame +1 -0
  161. data/screen_test/{rendered/settings → settings}/position/box_left_negative.rb +2 -2
  162. data/screen_test/settings/position/box_top.frame +1 -0
  163. data/screen_test/{rendered/settings → settings}/position/box_top.rb +1 -1
  164. data/screen_test/settings/position/box_top_negative.frame +1 -0
  165. data/screen_test/{rendered/settings → settings}/position/box_top_negative.rb +2 -2
  166. data/screen_test/settings/position/grid_left.frame +1 -0
  167. data/screen_test/{rendered/settings → settings}/position/grid_left.rb +1 -1
  168. data/screen_test/settings/position/grid_left_negative.frame +1 -0
  169. data/screen_test/{rendered/settings → settings}/position/grid_left_negative.rb +1 -1
  170. data/screen_test/settings/position/grid_top.frame +1 -0
  171. data/screen_test/{rendered/settings → settings}/position/grid_top.rb +1 -1
  172. data/screen_test/settings/position/grid_top_negative.frame +1 -0
  173. data/screen_test/{rendered/settings → settings}/position/grid_top_negative.rb +1 -1
  174. data/screen_test/settings/scroll/horiz_box.frame +1 -0
  175. data/screen_test/settings/scroll/horiz_box.rb +17 -0
  176. data/screen_test/settings/scroll/horiz_box_align_center.rb +18 -0
  177. data/screen_test/settings/scroll/horiz_box_align_right.rb +18 -0
  178. data/screen_test/settings/scroll/vert_box.frame +1 -0
  179. data/screen_test/settings/scroll/vert_box.rb +20 -0
  180. data/screen_test/settings/title_font.frame +1 -0
  181. data/screen_test/{rendered/settings → settings}/title_font.rb +1 -1
  182. data/screen_test/settings/valign/box_around.frame +1 -0
  183. data/screen_test/settings/valign/box_around.rb +17 -0
  184. data/screen_test/settings/valign/box_between.frame +1 -0
  185. data/screen_test/settings/valign/box_between.rb +17 -0
  186. data/screen_test/settings/valign/box_bottom.frame +1 -0
  187. data/screen_test/settings/valign/box_bottom.rb +17 -0
  188. data/screen_test/settings/valign/box_default.frame +1 -0
  189. data/screen_test/settings/valign/box_default.rb +16 -0
  190. data/screen_test/settings/valign/box_evenly.frame +1 -0
  191. data/screen_test/settings/valign/box_evenly.rb +17 -0
  192. data/screen_test/settings/valign/box_middle.frame +1 -0
  193. data/screen_test/settings/valign/box_middle.rb +17 -0
  194. data/screen_test/settings/valign/box_top.frame +1 -0
  195. data/screen_test/settings/valign/box_top.rb +17 -0
  196. data/screen_test/settings/valign/grid_bottom.frame +1 -0
  197. data/screen_test/settings/valign/grid_bottom.rb +15 -0
  198. data/screen_test/settings/valign/grid_default.frame +1 -0
  199. data/screen_test/settings/valign/grid_default.rb +14 -0
  200. data/screen_test/settings/valign/grid_middle.frame +1 -0
  201. data/screen_test/settings/valign/grid_middle.rb +15 -0
  202. data/screen_test/settings/valign/grid_top.frame +1 -0
  203. data/screen_test/settings/valign/grid_top.rb +15 -0
  204. data/screen_test/settings/width/box_border_sizing.frame +1 -0
  205. data/screen_test/settings/width/box_border_sizing.rb +15 -0
  206. data/screen_test/settings/width/box_content.frame +1 -0
  207. data/screen_test/settings/width/box_content.rb +15 -0
  208. data/screen_test/settings/width/box_default.frame +1 -0
  209. data/screen_test/{rendered/settings/width/box.rb → settings/width/box_default.rb} +3 -2
  210. data/screen_test/settings/width/grid.frame +1 -0
  211. data/screen_test/{rendered/settings → settings}/width/grid.rb +2 -2
  212. data/screen_test/settings/width/overflow_align_center.frame +1 -0
  213. data/screen_test/settings/width/overflow_align_center.rb +14 -0
  214. data/screen_test/settings/width/overflow_align_right.frame +1 -0
  215. data/screen_test/settings/width/overflow_align_right.rb +14 -0
  216. data/screen_test/settings/width/overflow_box.frame +1 -0
  217. data/screen_test/settings/width/overflow_box.rb +13 -0
  218. data/screen_test/settings/width/overflow_box_l2r.frame +1 -0
  219. data/screen_test/settings/width/overflow_box_l2r.rb +16 -0
  220. data/screen_test/settings/width/overflow_box_t2b.frame +1 -0
  221. data/screen_test/settings/width/overflow_box_t2b.rb +17 -0
  222. data/screen_test/settings/width/overflow_grid.frame +1 -0
  223. data/screen_test/{rendered/settings → settings}/width/overflow_grid.rb +0 -0
  224. data/tools/whirled_peas/tools/screen_tester.rb +285 -0
  225. metadata +192 -98
  226. data/bin/debug +0 -35
  227. data/lib/whirled_peas/debugger.rb +0 -80
  228. data/lib/whirled_peas/frame.rb +0 -6
  229. data/lib/whirled_peas/frame/consumer.rb +0 -30
  230. data/lib/whirled_peas/frame/debug_consumer.rb +0 -30
  231. data/lib/whirled_peas/frame/event_loop.rb +0 -90
  232. data/lib/whirled_peas/frame/producer.rb +0 -67
  233. data/lib/whirled_peas/graphics/screen.rb +0 -65
  234. data/lib/whirled_peas/graphics/text_dimensions.rb +0 -15
  235. data/lib/whirled_peas/settings/text_align.rb +0 -19
  236. data/lib/whirled_peas/template.rb +0 -5
  237. data/lib/whirled_peas/template/box_element.rb +0 -8
  238. data/lib/whirled_peas/template/composer.rb +0 -68
  239. data/lib/whirled_peas/template/container.rb +0 -28
  240. data/lib/whirled_peas/template/debugger.rb +0 -34
  241. data/lib/whirled_peas/template/element.rb +0 -13
  242. data/lib/whirled_peas/template/grid_element.rb +0 -8
  243. data/lib/whirled_peas/template/text_element.rb +0 -24
  244. data/screen_test/rendered/elements/grid.frame +0 -1
  245. data/screen_test/rendered/elements/text.frame +0 -1
  246. data/screen_test/rendered/elements/text_multiline.frame +0 -1
  247. data/screen_test/rendered/settings/align/box.frame +0 -1
  248. data/screen_test/rendered/settings/align/children_center.frame +0 -1
  249. data/screen_test/rendered/settings/align/children_center.rb +0 -13
  250. data/screen_test/rendered/settings/align/children_left.frame +0 -1
  251. data/screen_test/rendered/settings/align/children_left.rb +0 -13
  252. data/screen_test/rendered/settings/align/children_right.frame +0 -1
  253. data/screen_test/rendered/settings/align/children_right.rb +0 -13
  254. data/screen_test/rendered/settings/align/grid.frame +0 -1
  255. data/screen_test/rendered/settings/ansi/bold.frame +0 -1
  256. data/screen_test/rendered/settings/ansi/bold.rb +0 -15
  257. data/screen_test/rendered/settings/ansi/underline.frame +0 -1
  258. data/screen_test/rendered/settings/flow/l2r.frame +0 -1
  259. data/screen_test/rendered/settings/flow/l2r.rb +0 -24
  260. data/screen_test/rendered/settings/flow/t2b.frame +0 -1
  261. data/screen_test/rendered/settings/flow/t2b.rb +0 -24
  262. data/screen_test/rendered/settings/height/box.frame +0 -1
  263. data/screen_test/rendered/settings/height/grid.frame +0 -1
  264. data/screen_test/rendered/settings/height/overflow_box.frame +0 -1
  265. data/screen_test/rendered/settings/height/overflow_box.rb +0 -13
  266. data/screen_test/rendered/settings/height/overflow_box_l2r.frame +0 -1
  267. data/screen_test/rendered/settings/height/overflow_box_l2r.rb +0 -15
  268. data/screen_test/rendered/settings/height/overflow_box_t2b.frame +0 -1
  269. data/screen_test/rendered/settings/height/overflow_box_t2b.rb +0 -14
  270. data/screen_test/rendered/settings/height/overflow_grid.frame +0 -1
  271. data/screen_test/rendered/settings/margin.frame +0 -1
  272. data/screen_test/rendered/settings/padding.frame +0 -1
  273. data/screen_test/rendered/settings/padding.rb +0 -11
  274. data/screen_test/rendered/settings/position/box_left.frame +0 -1
  275. data/screen_test/rendered/settings/position/box_left_negative.frame +0 -1
  276. data/screen_test/rendered/settings/position/box_top.frame +0 -1
  277. data/screen_test/rendered/settings/position/box_top_negative.frame +0 -1
  278. data/screen_test/rendered/settings/position/grid_left.frame +0 -1
  279. data/screen_test/rendered/settings/position/grid_left_negative.frame +0 -1
  280. data/screen_test/rendered/settings/position/grid_top.frame +0 -1
  281. data/screen_test/rendered/settings/position/grid_top_negative.frame +0 -1
  282. data/screen_test/rendered/settings/title_font.frame +0 -1
  283. data/screen_test/rendered/settings/width/box.frame +0 -1
  284. data/screen_test/rendered/settings/width/grid.frame +0 -1
  285. data/screen_test/rendered/settings/width/overflow_box.frame +0 -1
  286. data/screen_test/rendered/settings/width/overflow_box.rb +0 -11
  287. data/screen_test/rendered/settings/width/overflow_box_l2r.frame +0 -1
  288. data/screen_test/rendered/settings/width/overflow_box_l2r.rb +0 -14
  289. data/screen_test/rendered/settings/width/overflow_box_t2b.frame +0 -1
  290. data/screen_test/rendered/settings/width/overflow_grid.frame +0 -1
  291. data/screen_test/screen_tester.rb +0 -191
@@ -14,6 +14,8 @@ module WhirledPeas
14
14
  CYAN = new(Utils::Ansi::CYAN)
15
15
  WHITE = new(Utils::Ansi::WHITE)
16
16
  GRAY = BLACK.bright
17
+
18
+ DEFAULT = nil # Use system defined default
17
19
  end
18
20
  end
19
21
  end
@@ -0,0 +1,24 @@
1
+ module WhirledPeas
2
+ module Settings
3
+ module VertAlignment
4
+ TOP = :top
5
+ MIDDLE = :middle
6
+ BOTTOM = :bottom
7
+ BETWEEN = :between
8
+ AROUND = :around
9
+ EVENLY = :evenly
10
+
11
+ DEFAULT = TOP
12
+
13
+ VALID = [TOP, MIDDLE, BOTTOM, BETWEEN, AROUND, EVENLY]
14
+ private_constant :VALID
15
+
16
+ def self.validate!(valign)
17
+ return if valign.nil?
18
+ return valign if VALID.include?(valign)
19
+ raise ArgumentError, "Unsupported vertical alignment: #{valign.inspect}"
20
+ end
21
+ end
22
+ private_constant :VertAlignment
23
+ end
24
+ end
@@ -28,6 +28,19 @@ module WhirledPeas
28
28
  BRIGHT_OFFSET = 60
29
29
 
30
30
  class << self
31
+ def with_screen(output=STDOUT, width: nil, height: nil, &block)
32
+ require 'highline'
33
+ unless width && height
34
+ width, height = HighLine.new.terminal.terminal_size
35
+ end
36
+ yield width, height
37
+ ensure
38
+ output.print clear
39
+ output.print cursor_pos(top: height - 1)
40
+ output.print cursor_visible(true)
41
+ output.flush
42
+ end
43
+
31
44
  def cursor_pos(top: 0, left: 0)
32
45
  "#{ESC}[#{top + 1};#{left + 1}H"
33
46
  end
@@ -0,0 +1,57 @@
1
+ require 'base64'
2
+ require 'zlib'
3
+
4
+ module WhirledPeas
5
+ module Utils
6
+ module FileHandler
7
+ module FileWriter
8
+ VERSION = '1'
9
+
10
+ def self.write(fp, renders)
11
+ fp.puts renders.count
12
+ renders.each do |strokes|
13
+ encoded = Base64.encode64(strokes)
14
+ fp.puts encoded.count("\n")
15
+ fp.puts encoded
16
+ end
17
+ end
18
+ end
19
+ private_constant :FileWriter
20
+
21
+ class FileReaderV1
22
+ def self.read(fp)
23
+ num_renders = Integer(fp.readline.chomp, 10)
24
+ num_renders.times.map do
25
+ num_strokes = Integer(fp.readline.chomp, 10)
26
+ Base64.decode64(num_strokes.times.map { fp.readline }.join)
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ attr_reader :file
33
+ end
34
+ private_constant :FileReaderV1
35
+
36
+ READERS = {
37
+ '1' => FileReaderV1
38
+ }
39
+ private_constant :READERS
40
+
41
+ def self.write(file, renders)
42
+ Zlib::GzipWriter.open(file, Zlib::BEST_COMPRESSION) do |gz|
43
+ gz.puts FileWriter::VERSION
44
+ FileWriter.write(gz, renders)
45
+ end
46
+ end
47
+
48
+ def self.read(file)
49
+ Zlib::GzipReader.open(file) do |gz|
50
+ version = gz.gets.chomp
51
+ raise ArgumentError, "Invalid file: #{file}" unless READERS.key?(version)
52
+ READERS[version].read(gz)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -6,7 +6,7 @@ module WhirledPeas
6
6
 
7
7
  class << self
8
8
  def validate!(font_key)
9
- return unless font_key
9
+ return if font_key.nil?
10
10
  return font_key if fonts.key?(font_key)
11
11
  allowed = fonts.keys.map(&:inspect).sort
12
12
  message = "Unrecognized font: '#{font_key.inspect}', expecting one of #{allowed.join(', ')}"
@@ -1,3 +1,3 @@
1
1
  module WhirledPeas
2
- VERSION = '0.5.0'
2
+ VERSION = '0.9.0'
3
3
  end
@@ -1 +1 @@
1
- [?25lTOP LEFTBOTTOM LEFT TOP RIGHT  BOTTOM RIGHT[?25h
1
+ [?25lTOP LEFTBOTTOM LEFT TOP RIGHT  BOTTOM RIGHT[?25h
@@ -0,0 +1 @@
1
+ [?25l┃ █ ┃ █ ┃ ▄▀ ┃ █ ┃ ▄▀ ┃ █ ┃ ▄▀ ┃ █ ┃ █ ┃ █ ┃ ▄▀ ┗━━━━━━━━━━[?25h
@@ -0,0 +1,12 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_graph('Graph') do |_, settings|
7
+ settings.height = 12
8
+ 10.times.map { |i| i ** 2 }
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━┳━━━━━━┳━━━━━━┓┃ ┃ ┃ ┃┣━━━━━━╋━━━━━━╋━━━━━━┫┃ ┃ ┃ ┃┣━━━━━━╋━━━━━━╋━━━━━━┫┃ ┃ ┃ ┃┗━━━━━━┻━━━━━━┻━━━━━━┛Item 0Item 1Item 2Item 3Item 4Item 5Item 6[?25h
@@ -0,0 +1 @@
1
+ [?25l--------------------------------[?25h
@@ -0,0 +1 @@
1
+ [?25l||||||||||||||||||||||||[?25h
@@ -0,0 +1,9 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do
6
+ "|\n" * 1000
7
+ end
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ [?25lHello, World![?25h
@@ -0,0 +1 @@
1
+ [?25lLine 1Line 2Line 3[?25h
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━┛ABC[?25h
@@ -0,0 +1,16 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_box do |composer, settings|
7
+ settings.full_border
8
+ settings.align = :around
9
+ settings.width = 15
10
+ composer.add_text { 'A' }
11
+ composer.add_text { 'B' }
12
+ composer.add_text { 'C' }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━┛ABC[?25h
@@ -0,0 +1,16 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_box do |composer, settings|
7
+ settings.full_border
8
+ settings.align = :between
9
+ settings.width = 15
10
+ composer.add_text { 'A' }
11
+ composer.add_text { 'B' }
12
+ composer.add_text { 'C' }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━┛This is an aligned boxCenter[?25h
@@ -3,16 +3,17 @@ require 'whirled_peas'
3
3
  class TemplateFactory
4
4
  def build(*)
5
5
  WhirledPeas.template do |composer|
6
- [nil, :left, :center, :right].each do |align|
7
- composer.add_box("Alignment-#{align || :default}") do |composer, settings|
6
+ composer.add_grid do |composer, settings|
7
+ settings.num_cols = 2
8
+ composer.add_box('Alignment') do |composer, settings|
8
9
  settings.flow = :t2b
9
10
  settings.full_border
10
- settings.align = align
11
+ settings.align = :center
11
12
  # Keep the title long so grids below will be wide enough to use the
12
13
  # alignment attribute. Don't rely on the `width` attribute to keep
13
14
  # `align` isolated in this test.
14
15
  composer.add_text('Title') { 'This is an aligned box' }
15
- composer.add_text('Content') { align || :default }
16
+ composer.add_text('Content') { 'Center' }
16
17
  end
17
18
  end
18
19
  end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━┛This is an aligned boxDefault[?25h
@@ -3,16 +3,16 @@ require 'whirled_peas'
3
3
  class TemplateFactory
4
4
  def build(*)
5
5
  WhirledPeas.template do |composer|
6
- [nil, :left, :center, :right].each do |align|
7
- composer.add_grid("Alignment-#{align || :default}") do |composer, settings|
8
- settings.num_cols = 1
6
+ composer.add_grid do |composer, settings|
7
+ settings.num_cols = 2
8
+ composer.add_box('Alignment') do |composer, settings|
9
+ settings.flow = :t2b
9
10
  settings.full_border
10
- settings.align = align
11
11
  # Keep the title long so grids below will be wide enough to use the
12
12
  # alignment attribute. Don't rely on the `width` attribute to keep
13
13
  # `align` isolated in this test.
14
- composer.add_text('Title') { 'This is an aligned grid' }
15
- composer.add_text('Content') { align || :default }
14
+ composer.add_text('Title') { 'This is an aligned box' }
15
+ composer.add_text('Content') { 'Default' }
16
16
  end
17
17
  end
18
18
  end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━┛ABC[?25h
@@ -0,0 +1,16 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_box do |composer, settings|
7
+ settings.full_border
8
+ settings.align = :evenly
9
+ settings.width = 15
10
+ composer.add_text { 'A' }
11
+ composer.add_text { 'B' }
12
+ composer.add_text { 'C' }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━┛This is an aligned boxLeft[?25h
@@ -0,0 +1,21 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_grid do |composer, settings|
7
+ settings.num_cols = 2
8
+ composer.add_box('Alignment') do |composer, settings|
9
+ settings.flow = :t2b
10
+ settings.full_border
11
+ settings.align = :left
12
+ # Keep the title long so grids below will be wide enough to use the
13
+ # alignment attribute. Don't rely on the `width` attribute to keep
14
+ # `align` isolated in this test.
15
+ composer.add_text('Title') { 'This is an aligned box' }
16
+ composer.add_text('Content') { 'Left' }
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━┛This is an aligned boxRight[?25h
@@ -0,0 +1,21 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_grid do |composer, settings|
7
+ settings.num_cols = 2
8
+ composer.add_box('Alignment') do |composer, settings|
9
+ settings.flow = :t2b
10
+ settings.full_border
11
+ settings.align = :right
12
+ # Keep the title long so grids below will be wide enough to use the
13
+ # alignment attribute. Don't rely on the `width` attribute to keep
14
+ # `align` isolated in this test.
15
+ composer.add_text('Title') { 'This is an aligned box' }
16
+ composer.add_text('Content') { 'Right' }
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛Thing 1Thing 2[?25h
@@ -0,0 +1,15 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_box do |composer, settings|
7
+ settings.align = :center
8
+ settings.width = 28
9
+ settings.full_border
10
+ composer.add_text('Text1') { 'Thing 1' }
11
+ composer.add_text('Text2') { 'Thing 2' }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛Thing 1Thing 2[?25h
@@ -0,0 +1,15 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_box do |composer, settings|
7
+ settings.align = :left
8
+ settings.width = 28
9
+ settings.full_border
10
+ composer.add_text('Text1') { 'Thing 1' }
11
+ composer.add_text('Text2') { 'Thing 2' }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛Thing 1Thing 2[?25h
@@ -0,0 +1,15 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_box do |composer, settings|
7
+ settings.align = :right
8
+ settings.width = 28
9
+ settings.full_border
10
+ composer.add_text('Text1') { 'Thing 1' }
11
+ composer.add_text('Text2') { 'Thing 2' }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┣━━━━━━━━━━━━━━━━━━━━━━━┫┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━┛This is an aligned gridCenter[?25h
@@ -0,0 +1,18 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_grid('Alignment') do |composer, settings|
7
+ settings.num_cols = 1
8
+ settings.full_border
9
+ settings.align = :center
10
+ # Keep the title long so grids below will be wide enough to use the
11
+ # alignment attribute. Don't rely on the `width` attribute to keep
12
+ # `align` isolated in this test.
13
+ composer.add_text('Title') { 'This is an aligned grid' }
14
+ composer.add_text('Content') { 'Center' }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┣━━━━━━━━━━━━━━━━━━━━━━━┫┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━┛This is an aligned gridDefault[?25h
@@ -0,0 +1,17 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_grid('Alignment') do |composer, settings|
7
+ settings.num_cols = 1
8
+ settings.full_border
9
+ # Keep the title long so grids below will be wide enough to use the
10
+ # alignment attribute. Don't rely on the `width` attribute to keep
11
+ # `align` isolated in this test.
12
+ composer.add_text('Title') { 'This is an aligned grid' }
13
+ composer.add_text('Content') { 'Default' }
14
+ end
15
+ end
16
+ end
17
+ end