whirled_peas 0.2.0 → 0.6.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 (166) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/CHANGELOG.md +38 -0
  4. data/Gemfile +1 -0
  5. data/README.md +275 -81
  6. data/Rakefile +38 -3
  7. data/examples/intro.rb +52 -0
  8. data/examples/scrolling.rb +53 -0
  9. data/exe/whirled_peas +7 -0
  10. data/lib/whirled_peas.rb +12 -42
  11. data/lib/whirled_peas/command_line.rb +255 -0
  12. data/lib/whirled_peas/config.rb +21 -0
  13. data/lib/whirled_peas/errors.rb +7 -0
  14. data/lib/whirled_peas/frame.rb +0 -8
  15. data/lib/whirled_peas/frame/consumer.rb +14 -50
  16. data/lib/whirled_peas/frame/debug_consumer.rb +30 -0
  17. data/lib/whirled_peas/frame/event_loop.rb +68 -38
  18. data/lib/whirled_peas/frame/producer.rb +36 -32
  19. data/lib/whirled_peas/graphics.rb +5 -0
  20. data/lib/whirled_peas/graphics/box_painter.rb +108 -0
  21. data/lib/whirled_peas/graphics/canvas.rb +107 -0
  22. data/lib/whirled_peas/graphics/composer.rb +80 -0
  23. data/lib/whirled_peas/graphics/container_coords.rb +71 -0
  24. data/lib/whirled_peas/graphics/container_dimensions.rb +75 -0
  25. data/lib/whirled_peas/graphics/container_painter.rb +234 -0
  26. data/lib/whirled_peas/graphics/debugger.rb +52 -0
  27. data/lib/whirled_peas/graphics/grid_painter.rb +68 -0
  28. data/lib/whirled_peas/graphics/mock_screen.rb +26 -0
  29. data/lib/whirled_peas/graphics/painter.rb +19 -0
  30. data/lib/whirled_peas/graphics/renderer.rb +21 -0
  31. data/lib/whirled_peas/graphics/screen.rb +70 -0
  32. data/lib/whirled_peas/graphics/text_dimensions.rb +15 -0
  33. data/lib/whirled_peas/graphics/text_painter.rb +40 -0
  34. data/lib/whirled_peas/settings.rb +5 -0
  35. data/lib/whirled_peas/settings/bg_color.rb +22 -0
  36. data/lib/whirled_peas/settings/border.rb +101 -0
  37. data/lib/whirled_peas/settings/box_settings.rb +8 -0
  38. data/lib/whirled_peas/settings/color.rb +69 -0
  39. data/lib/whirled_peas/settings/container_settings.rb +139 -0
  40. data/lib/whirled_peas/settings/debugger.rb +96 -0
  41. data/lib/whirled_peas/settings/display_flow.rb +25 -0
  42. data/lib/whirled_peas/settings/element_settings.rb +61 -0
  43. data/lib/whirled_peas/settings/grid_settings.rb +15 -0
  44. data/lib/whirled_peas/settings/margin.rb +8 -0
  45. data/lib/whirled_peas/settings/padding.rb +8 -0
  46. data/lib/whirled_peas/settings/position.rb +15 -0
  47. data/lib/whirled_peas/settings/scrollbar.rb +15 -0
  48. data/lib/whirled_peas/settings/spacing.rb +24 -0
  49. data/lib/whirled_peas/settings/text_align.rb +19 -0
  50. data/lib/whirled_peas/settings/text_color.rb +19 -0
  51. data/lib/whirled_peas/settings/text_settings.rb +15 -0
  52. data/lib/whirled_peas/utils.rb +5 -0
  53. data/lib/whirled_peas/utils/ansi.rb +53 -0
  54. data/lib/whirled_peas/utils/formatted_string.rb +64 -0
  55. data/lib/whirled_peas/utils/title_font.rb +75 -0
  56. data/lib/whirled_peas/version.rb +1 -1
  57. data/screen_test/rendered/elements/box.frame +1 -0
  58. data/screen_test/rendered/elements/box.rb +20 -0
  59. data/screen_test/rendered/elements/grid.frame +1 -0
  60. data/screen_test/rendered/elements/grid.rb +13 -0
  61. data/screen_test/rendered/elements/screen_overflow.frame +1 -0
  62. data/screen_test/rendered/elements/screen_overflow.rb +9 -0
  63. data/screen_test/rendered/elements/text.frame +1 -0
  64. data/screen_test/rendered/elements/text.rb +9 -0
  65. data/screen_test/rendered/elements/text_multiline.frame +1 -0
  66. data/screen_test/rendered/elements/text_multiline.rb +9 -0
  67. data/screen_test/rendered/settings/align/box.frame +1 -0
  68. data/screen_test/rendered/settings/align/box.rb +24 -0
  69. data/screen_test/rendered/settings/align/children_center.frame +1 -0
  70. data/screen_test/rendered/settings/align/children_center.rb +13 -0
  71. data/screen_test/rendered/settings/align/children_left.frame +1 -0
  72. data/screen_test/rendered/settings/align/children_left.rb +13 -0
  73. data/screen_test/rendered/settings/align/children_right.frame +1 -0
  74. data/screen_test/rendered/settings/align/children_right.rb +13 -0
  75. data/screen_test/rendered/settings/align/grid.frame +1 -0
  76. data/screen_test/rendered/settings/align/grid.rb +20 -0
  77. data/screen_test/rendered/settings/ansi/bold.frame +1 -0
  78. data/screen_test/rendered/settings/ansi/bold.rb +15 -0
  79. data/screen_test/rendered/settings/ansi/color.frame +1 -0
  80. data/screen_test/rendered/settings/ansi/color.rb +37 -0
  81. data/screen_test/rendered/settings/ansi/underline.frame +1 -0
  82. data/screen_test/rendered/settings/ansi/underline.rb +15 -0
  83. data/screen_test/rendered/settings/border.frame +1 -0
  84. data/screen_test/rendered/settings/border.rb +13 -0
  85. data/screen_test/rendered/settings/flow/box_b2t.frame +1 -0
  86. data/screen_test/rendered/settings/flow/box_b2t.rb +24 -0
  87. data/screen_test/rendered/settings/flow/box_l2r.frame +1 -0
  88. data/screen_test/rendered/settings/flow/box_l2r.rb +24 -0
  89. data/screen_test/rendered/settings/flow/box_r2l.frame +1 -0
  90. data/screen_test/rendered/settings/flow/box_r2l.rb +24 -0
  91. data/screen_test/rendered/settings/flow/box_t2b.frame +1 -0
  92. data/screen_test/rendered/settings/flow/box_t2b.rb +24 -0
  93. data/screen_test/rendered/settings/flow/grid_b2t.frame +1 -0
  94. data/screen_test/rendered/settings/flow/grid_b2t.rb +14 -0
  95. data/screen_test/rendered/settings/flow/grid_l2r.frame +1 -0
  96. data/screen_test/rendered/settings/flow/grid_l2r.rb +14 -0
  97. data/screen_test/rendered/settings/flow/grid_r2l.frame +1 -0
  98. data/screen_test/rendered/settings/flow/grid_r2l.rb +14 -0
  99. data/screen_test/rendered/settings/flow/grid_t2b.frame +1 -0
  100. data/screen_test/rendered/settings/flow/grid_t2b.rb +14 -0
  101. data/screen_test/rendered/settings/height/box.frame +1 -0
  102. data/screen_test/rendered/settings/height/box.rb +13 -0
  103. data/screen_test/rendered/settings/height/grid.frame +1 -0
  104. data/screen_test/rendered/settings/height/grid.rb +14 -0
  105. data/screen_test/rendered/settings/height/overflow_box.frame +1 -0
  106. data/screen_test/rendered/settings/height/overflow_box.rb +13 -0
  107. data/screen_test/rendered/settings/height/overflow_box_l2r.frame +1 -0
  108. data/screen_test/rendered/settings/height/overflow_box_l2r.rb +15 -0
  109. data/screen_test/rendered/settings/height/overflow_box_t2b.frame +1 -0
  110. data/screen_test/rendered/settings/height/overflow_box_t2b.rb +14 -0
  111. data/screen_test/rendered/settings/height/overflow_grid.frame +1 -0
  112. data/screen_test/rendered/settings/height/overflow_grid.rb +16 -0
  113. data/screen_test/rendered/settings/margin.frame +1 -0
  114. data/screen_test/rendered/settings/margin.rb +14 -0
  115. data/screen_test/rendered/settings/padding.frame +1 -0
  116. data/screen_test/rendered/settings/padding.rb +11 -0
  117. data/screen_test/rendered/settings/position/box_left.frame +1 -0
  118. data/screen_test/rendered/settings/position/box_left.rb +17 -0
  119. data/screen_test/rendered/settings/position/box_left_negative.frame +1 -0
  120. data/screen_test/rendered/settings/position/box_left_negative.rb +17 -0
  121. data/screen_test/rendered/settings/position/box_top.frame +1 -0
  122. data/screen_test/rendered/settings/position/box_top.rb +17 -0
  123. data/screen_test/rendered/settings/position/box_top_negative.frame +1 -0
  124. data/screen_test/rendered/settings/position/box_top_negative.rb +17 -0
  125. data/screen_test/rendered/settings/position/grid_left.frame +1 -0
  126. data/screen_test/rendered/settings/position/grid_left.rb +18 -0
  127. data/screen_test/rendered/settings/position/grid_left_negative.frame +1 -0
  128. data/screen_test/rendered/settings/position/grid_left_negative.rb +18 -0
  129. data/screen_test/rendered/settings/position/grid_top.frame +1 -0
  130. data/screen_test/rendered/settings/position/grid_top.rb +18 -0
  131. data/screen_test/rendered/settings/position/grid_top_negative.frame +1 -0
  132. data/screen_test/rendered/settings/position/grid_top_negative.rb +18 -0
  133. data/screen_test/rendered/settings/scroll/horiz_box.frame +1 -0
  134. data/screen_test/rendered/settings/scroll/horiz_box.rb +15 -0
  135. data/screen_test/rendered/settings/scroll/vert_box.frame +1 -0
  136. data/screen_test/rendered/settings/scroll/vert_box.rb +18 -0
  137. data/screen_test/rendered/settings/title_font.frame +1 -0
  138. data/screen_test/rendered/settings/title_font.rb +12 -0
  139. data/screen_test/rendered/settings/width/box.frame +1 -0
  140. data/screen_test/rendered/settings/width/box.rb +13 -0
  141. data/screen_test/rendered/settings/width/grid.frame +1 -0
  142. data/screen_test/rendered/settings/width/grid.rb +14 -0
  143. data/screen_test/rendered/settings/width/overflow_box.frame +1 -0
  144. data/screen_test/rendered/settings/width/overflow_box.rb +11 -0
  145. data/screen_test/rendered/settings/width/overflow_box_l2r.frame +1 -0
  146. data/screen_test/rendered/settings/width/overflow_box_l2r.rb +14 -0
  147. data/screen_test/rendered/settings/width/overflow_box_t2b.frame +1 -0
  148. data/screen_test/rendered/settings/width/overflow_box_t2b.rb +15 -0
  149. data/screen_test/rendered/settings/width/overflow_grid.frame +1 -0
  150. data/screen_test/rendered/settings/width/overflow_grid.rb +14 -0
  151. data/screen_test/screen_tester.rb +201 -0
  152. data/whirled_peas.gemspec +4 -2
  153. metadata +147 -20
  154. data/lib/whirled_peas/ui.rb +0 -7
  155. data/lib/whirled_peas/ui/ansi.rb +0 -154
  156. data/lib/whirled_peas/ui/canvas.rb +0 -35
  157. data/lib/whirled_peas/ui/element.rb +0 -225
  158. data/lib/whirled_peas/ui/painter.rb +0 -283
  159. data/lib/whirled_peas/ui/screen.rb +0 -62
  160. data/lib/whirled_peas/ui/settings.rb +0 -521
  161. data/lib/whirled_peas/ui/stroke.rb +0 -29
  162. data/sandbox/auto.rb +0 -13
  163. data/sandbox/box.rb +0 -19
  164. data/sandbox/grid.rb +0 -13
  165. data/sandbox/sandbox.rb +0 -17
  166. data/sandbox/text.rb +0 -33
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛Thing 1Thing 2[?25h
@@ -0,0 +1,13 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ settings.align = :right
7
+ settings.width = 50
8
+ settings.full_border
9
+ composer.add_text('Text1') { 'Thing 1' }
10
+ composer.add_text('Text2') { 'Thing 2' }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┣━━━━━━━━━━━━━━━━━━━━━━━┫┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━┛This is an aligned griddefault┏━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┣━━━━━━━━━━━━━━━━━━━━━━━┫┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━┛This is an aligned gridleft┏━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┣━━━━━━━━━━━━━━━━━━━━━━━┫┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━┛This is an aligned gridcenter┏━━━━┃ ┣━━━━┃ ┗━━━━This[?25h
@@ -0,0 +1,20 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
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
9
+ settings.full_border
10
+ settings.align = align
11
+ # Keep the title long so grids below will be wide enough to use the
12
+ # alignment attribute. Don't rely on the `width` attribute to keep
13
+ # `align` isolated in this test.
14
+ composer.add_text('Title') { 'This is an aligned grid' }
15
+ composer.add_text('Content') { align || :default }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1 @@
1
+ [?25lThis is boldThis is not bold[?25h
@@ -0,0 +1,15 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_text('Bold') do |_, settings|
7
+ settings.bold = true
8
+ "This is bold"
9
+ end
10
+ composer.add_text('NotBold') do |_, settings|
11
+ "This is not bold"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ [?25lBLACK on WHITEGRAY on BRIGHT_REDRED on BRIGHT_GREENGREEN on BRIGHT_YELLOWYELLOW on BRIGHT_BLUEBLUE on BRIGHT_MAGENTAMAGENTA on BRIGHT_CYANCYAN on BRIGHT_WHITEWHITE on BLACKBRIGHT_RED on GRAYBRIGHT_GREEN on REDBRIGHT_YELLOW on GREENBRIGHT_BLUE on YELLOWBRIGHT_MAGENTA on BLUEBRIGHT_CYAN on MAGENTABRIGHT_WHITE on CYAN[?25h
@@ -0,0 +1,37 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ COLORS = %i[
5
+ black
6
+ gray
7
+ red
8
+ green
9
+ yellow
10
+ blue
11
+ magenta
12
+ cyan
13
+ white
14
+ bright_red
15
+ bright_green
16
+ bright_yellow
17
+ bright_blue
18
+ bright_magenta
19
+ bright_cyan
20
+ bright_white
21
+ ]
22
+ def build(*)
23
+ WhirledPeas.template do |composer|
24
+ composer.add_grid('Colors') do |composer, settings|
25
+ settings.num_cols = 1
26
+ COLORS.each.with_index do |color, index|
27
+ bg_color = COLORS[(index + COLORS.length / 2) % COLORS.length]
28
+ composer.add_text("#{color.upcase}-#{bg_color.upcase}") do |_, settings|
29
+ settings.color = color
30
+ settings.bg_color = bg_color
31
+ "#{color.upcase} on #{bg_color.upcase}"
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1 @@
1
+ [?25lThis is underlinedThis is not underlined[?25h
@@ -0,0 +1,15 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_text('Underline') do |_, settings|
7
+ settings.underline = true
8
+ "This is underlined"
9
+ end
10
+ composer.add_text('NotUnderline') do |_, settings|
11
+ "This is not underlined"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ [?25l╔══╦══╦══╗║ ║ ║ ║╠══╬══╬══╣║ ║ ║ ║╠══╬══╬══╣║ ║ ║ ║╠══╬══╬══╣║ ║ ║ ║╚══╩══╩══╝01234567891011[?25h
@@ -0,0 +1,13 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_grid('Grid') do |composer, settings|
7
+ settings.full_border(style: :double, color: :green)
8
+ settings.num_cols = 3
9
+ 12.times.map(&:itself)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━┛┏━━━━━━━━━┓┃ ┃┗━━━━━━━━━┛3. NARROW┏━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━━━━━━━┛2. WIDE┏━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━┛1. MEDIUM[?25h
@@ -0,0 +1,24 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ settings.flow = :b2t
7
+ settings.full_border
8
+ composer.add_box('Medium') do |composer, settings|
9
+ settings.full_border
10
+ settings.set_padding(left: 3, right: 3)
11
+ '1. MEDIUM'
12
+ end
13
+ composer.add_box('Wide') do |composer, settings|
14
+ settings.full_border
15
+ settings.set_padding(left: 7, right: 7)
16
+ '2. WIDE'
17
+ end
18
+ composer.add_box('Narrow') do |composer, settings|
19
+ settings.full_border
20
+ '3. NARROW'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛┏━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━┛1. MEDIUM┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛2. TALL┏━━━━━━━━┓┃ ┃┗━━━━━━━━┛3. SHORT[?25h
@@ -0,0 +1,24 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ settings.flow = :l2r
7
+ settings.full_border
8
+ composer.add_box('Medium') do |composer, settings|
9
+ settings.set_padding(top: 2, bottom: 2)
10
+ settings.full_border
11
+ '1. MEDIUM'
12
+ end
13
+ composer.add_box('Tall') do |composer, settings|
14
+ settings.set_padding(top: 4, bottom: 4)
15
+ settings.full_border
16
+ '2. TALL'
17
+ end
18
+ composer.add_box('Short') do |composer, settings|
19
+ settings.full_border
20
+ '3. SHORT'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛┏━━━━━━━━┓┃ ┃┗━━━━━━━━┛3. SHORT┏━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━┛2. TALL┏━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━┛1. MEDIUM[?25h
@@ -0,0 +1,24 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ settings.flow = :r2l
7
+ settings.full_border
8
+ composer.add_box('Medium') do |composer, settings|
9
+ settings.set_padding(top: 2, bottom: 2)
10
+ settings.full_border
11
+ '1. MEDIUM'
12
+ end
13
+ composer.add_box('Tall') do |composer, settings|
14
+ settings.set_padding(top: 4, bottom: 4)
15
+ settings.full_border
16
+ '2. TALL'
17
+ end
18
+ composer.add_box('Short') do |composer, settings|
19
+ settings.full_border
20
+ '3. SHORT'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━┛┏━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━┛1. MEDIUM┏━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━━━━━━━┛2. WIDE┏━━━━━━━━━┓┃ ┃┗━━━━━━━━━┛3. NARROW[?25h
@@ -0,0 +1,24 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ settings.flow = :t2b
7
+ settings.full_border
8
+ composer.add_box('Medium') do |composer, settings|
9
+ settings.full_border
10
+ settings.set_padding(left: 3, right: 3)
11
+ '1. MEDIUM'
12
+ end
13
+ composer.add_box('Wide') do |composer, settings|
14
+ settings.full_border
15
+ settings.set_padding(left: 7, right: 7)
16
+ '2. WIDE'
17
+ end
18
+ composer.add_box('Narrow') do |composer, settings|
19
+ settings.full_border
20
+ '3. NARROW'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━┳━━┳━━┳━━┓┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┗━━┻━━┻━━┻━━┛1234567891011121314[?25h
@@ -0,0 +1,14 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_grid do |_, settings|
7
+ settings.flow = :b2t
8
+ settings.full_border
9
+ settings.num_cols = 4
10
+ 14.times.map { |i| i + 1 }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━┳━━┳━━┳━━┓┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┗━━┻━━┻━━┻━━┛1234567891011121314[?25h
@@ -0,0 +1,14 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ composer.add_grid do |_, settings|
7
+ settings.flow = :l2r
8
+ settings.full_border
9
+ settings.num_cols = 4
10
+ 14.times.map { |i| i + 1 }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━┳━━┳━━┳━━┓┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┗━━┻━━┻━━┻━━┛1234567891011121314[?25h
@@ -0,0 +1,14 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ composer.add_grid do |_, settings|
7
+ settings.flow = :r2l
8
+ settings.full_border
9
+ settings.num_cols = 4
10
+ 14.times.map { |i| i + 1 }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━┳━━┳━━┳━━┓┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┣━━╋━━╋━━╋━━┫┃ ┃ ┃ ┃ ┃┗━━┻━━┻━━┻━━┛1234567891011121314[?25h
@@ -0,0 +1,14 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ composer.add_grid do |_, settings|
7
+ settings.flow = :t2b
8
+ settings.full_border
9
+ settings.num_cols = 4
10
+ 14.times.map { |i| i + 1 }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━┛MultiLine[?25h
@@ -0,0 +1,13 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_box('Tall') do |_, settings|
7
+ settings.full_border
8
+ settings.height = 5
9
+ "Multi\nLine"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━┳━┳━┳━┓┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┣━╋━╋━╋━┫┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┣━╋━╋━╋━┫┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┃ ┃ ┃ ┃ ┃┗━┻━┻━┻━┛0123456789[?25h
@@ -0,0 +1,14 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer|
6
+ composer.add_grid('Tall') do |_, settings|
7
+ settings.full_border
8
+ settings.num_cols = 4
9
+ settings.height = 5
10
+ 10.times.map(&:itself)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━┛01234[?25h
@@ -0,0 +1,13 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ TALL_STRING = 10.times.map(&:to_s).join("\n")
5
+
6
+ def build(*)
7
+ WhirledPeas.template do |_, settings|
8
+ settings.full_border
9
+ settings.height = 5
10
+ TALL_STRING
11
+ end
12
+ end
13
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━┛012340123401234[?25h
@@ -0,0 +1,15 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ TALL_STRING = 10.times.map(&:to_s).join("\n")
5
+
6
+ def build(*)
7
+ WhirledPeas.template do |composer, settings|
8
+ settings.full_border
9
+ settings.height = 5
10
+ 3.times do |i|
11
+ composer.add_text { TALL_STRING }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━┛XOXOXOXOXO[?25h
@@ -0,0 +1,14 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ settings.flow = :t2b
7
+ settings.height = 5
8
+ settings.full_border
9
+ 10.times do
10
+ composer.add_text { 'XO' }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━┛01234[?25h
@@ -0,0 +1,16 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ TALL_STRING = 10.times.map(&:to_s).join("\n")
5
+
6
+ def build(*)
7
+ WhirledPeas.template do |composer|
8
+ composer.add_grid('TallGrid') do |composer, settings|
9
+ settings.full_border
10
+ settings.height = 5
11
+ settings.num_cols = 1
12
+ composer.add_text { TALL_STRING }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━━━━━━━━━━┛┏━━━━━━━━━┓┃ ┃┗━━━━━━━━━┛Inner Box[?25h