whirled_peas 0.1.1 → 0.5.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 (155) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/CHANGELOG.md +32 -0
  4. data/Gemfile +1 -0
  5. data/README.md +240 -79
  6. data/Rakefile +37 -3
  7. data/bin/debug +35 -0
  8. data/exe/whirled_peas +7 -0
  9. data/lib/whirled_peas.rb +17 -37
  10. data/lib/whirled_peas/command_line.rb +263 -0
  11. data/lib/whirled_peas/config.rb +21 -0
  12. data/lib/whirled_peas/debugger.rb +80 -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 -51
  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 +37 -34
  19. data/lib/whirled_peas/graphics.rb +5 -0
  20. data/lib/whirled_peas/graphics/box_painter.rb +100 -0
  21. data/lib/whirled_peas/graphics/canvas.rb +107 -0
  22. data/lib/whirled_peas/graphics/container_coords.rb +61 -0
  23. data/lib/whirled_peas/graphics/container_dimensions.rb +65 -0
  24. data/lib/whirled_peas/graphics/container_painter.rb +116 -0
  25. data/lib/whirled_peas/graphics/debugger.rb +43 -0
  26. data/lib/whirled_peas/graphics/grid_painter.rb +56 -0
  27. data/lib/whirled_peas/graphics/mock_screen.rb +26 -0
  28. data/lib/whirled_peas/graphics/painter.rb +24 -0
  29. data/lib/whirled_peas/graphics/renderer.rb +49 -0
  30. data/lib/whirled_peas/graphics/screen.rb +65 -0
  31. data/lib/whirled_peas/graphics/text_dimensions.rb +15 -0
  32. data/lib/whirled_peas/graphics/text_painter.rb +38 -0
  33. data/lib/whirled_peas/settings.rb +5 -0
  34. data/lib/whirled_peas/settings/bg_color.rb +22 -0
  35. data/lib/whirled_peas/settings/border.rb +101 -0
  36. data/lib/whirled_peas/settings/box_settings.rb +8 -0
  37. data/lib/whirled_peas/settings/color.rb +69 -0
  38. data/lib/whirled_peas/settings/container_settings.rb +128 -0
  39. data/lib/whirled_peas/settings/debugger.rb +87 -0
  40. data/lib/whirled_peas/settings/display_flow.rb +25 -0
  41. data/lib/whirled_peas/settings/element_settings.rb +61 -0
  42. data/lib/whirled_peas/settings/grid_settings.rb +11 -0
  43. data/lib/whirled_peas/settings/margin.rb +8 -0
  44. data/lib/whirled_peas/settings/padding.rb +8 -0
  45. data/lib/whirled_peas/settings/position.rb +15 -0
  46. data/lib/whirled_peas/settings/spacing.rb +24 -0
  47. data/lib/whirled_peas/settings/text_align.rb +19 -0
  48. data/lib/whirled_peas/settings/text_color.rb +19 -0
  49. data/lib/whirled_peas/settings/text_settings.rb +15 -0
  50. data/lib/whirled_peas/template.rb +5 -0
  51. data/lib/whirled_peas/template/box_element.rb +8 -0
  52. data/lib/whirled_peas/template/composer.rb +68 -0
  53. data/lib/whirled_peas/template/container.rb +28 -0
  54. data/lib/whirled_peas/template/debugger.rb +34 -0
  55. data/lib/whirled_peas/template/element.rb +13 -0
  56. data/lib/whirled_peas/template/grid_element.rb +8 -0
  57. data/lib/whirled_peas/template/text_element.rb +24 -0
  58. data/lib/whirled_peas/utils.rb +5 -0
  59. data/lib/whirled_peas/utils/ansi.rb +53 -0
  60. data/lib/whirled_peas/utils/formatted_string.rb +64 -0
  61. data/lib/whirled_peas/utils/title_font.rb +75 -0
  62. data/lib/whirled_peas/version.rb +1 -1
  63. data/screen_test/rendered/elements/box.frame +1 -0
  64. data/screen_test/rendered/elements/box.rb +20 -0
  65. data/screen_test/rendered/elements/grid.frame +1 -0
  66. data/screen_test/rendered/elements/grid.rb +13 -0
  67. data/screen_test/rendered/elements/screen_overflow.rb +9 -0
  68. data/screen_test/rendered/elements/text.frame +1 -0
  69. data/screen_test/rendered/elements/text.rb +9 -0
  70. data/screen_test/rendered/elements/text_multiline.frame +1 -0
  71. data/screen_test/rendered/elements/text_multiline.rb +9 -0
  72. data/screen_test/rendered/settings/align/box.frame +1 -0
  73. data/screen_test/rendered/settings/align/box.rb +20 -0
  74. data/screen_test/rendered/settings/align/children_center.frame +1 -0
  75. data/screen_test/rendered/settings/align/children_center.rb +13 -0
  76. data/screen_test/rendered/settings/align/children_left.frame +1 -0
  77. data/screen_test/rendered/settings/align/children_left.rb +13 -0
  78. data/screen_test/rendered/settings/align/children_right.frame +1 -0
  79. data/screen_test/rendered/settings/align/children_right.rb +13 -0
  80. data/screen_test/rendered/settings/align/grid.frame +1 -0
  81. data/screen_test/rendered/settings/align/grid.rb +20 -0
  82. data/screen_test/rendered/settings/ansi/bold.frame +1 -0
  83. data/screen_test/rendered/settings/ansi/bold.rb +15 -0
  84. data/screen_test/rendered/settings/ansi/color.frame +1 -0
  85. data/screen_test/rendered/settings/ansi/color.rb +37 -0
  86. data/screen_test/rendered/settings/ansi/underline.frame +1 -0
  87. data/screen_test/rendered/settings/ansi/underline.rb +15 -0
  88. data/screen_test/rendered/settings/border.frame +1 -0
  89. data/screen_test/rendered/settings/border.rb +13 -0
  90. data/screen_test/rendered/settings/flow/l2r.frame +1 -0
  91. data/screen_test/rendered/settings/flow/l2r.rb +24 -0
  92. data/screen_test/rendered/settings/flow/t2b.frame +1 -0
  93. data/screen_test/rendered/settings/flow/t2b.rb +24 -0
  94. data/screen_test/rendered/settings/height/box.frame +1 -0
  95. data/screen_test/rendered/settings/height/box.rb +13 -0
  96. data/screen_test/rendered/settings/height/grid.frame +1 -0
  97. data/screen_test/rendered/settings/height/grid.rb +14 -0
  98. data/screen_test/rendered/settings/height/overflow_box.frame +1 -0
  99. data/screen_test/rendered/settings/height/overflow_box.rb +13 -0
  100. data/screen_test/rendered/settings/height/overflow_box_l2r.frame +1 -0
  101. data/screen_test/rendered/settings/height/overflow_box_l2r.rb +15 -0
  102. data/screen_test/rendered/settings/height/overflow_box_t2b.frame +1 -0
  103. data/screen_test/rendered/settings/height/overflow_box_t2b.rb +14 -0
  104. data/screen_test/rendered/settings/height/overflow_grid.frame +1 -0
  105. data/screen_test/rendered/settings/height/overflow_grid.rb +16 -0
  106. data/screen_test/rendered/settings/margin.frame +1 -0
  107. data/screen_test/rendered/settings/margin.rb +14 -0
  108. data/screen_test/rendered/settings/padding.frame +1 -0
  109. data/screen_test/rendered/settings/padding.rb +11 -0
  110. data/screen_test/rendered/settings/position/box_left.frame +1 -0
  111. data/screen_test/rendered/settings/position/box_left.rb +17 -0
  112. data/screen_test/rendered/settings/position/box_left_negative.frame +1 -0
  113. data/screen_test/rendered/settings/position/box_left_negative.rb +17 -0
  114. data/screen_test/rendered/settings/position/box_top.frame +1 -0
  115. data/screen_test/rendered/settings/position/box_top.rb +17 -0
  116. data/screen_test/rendered/settings/position/box_top_negative.frame +1 -0
  117. data/screen_test/rendered/settings/position/box_top_negative.rb +17 -0
  118. data/screen_test/rendered/settings/position/grid_left.frame +1 -0
  119. data/screen_test/rendered/settings/position/grid_left.rb +18 -0
  120. data/screen_test/rendered/settings/position/grid_left_negative.frame +1 -0
  121. data/screen_test/rendered/settings/position/grid_left_negative.rb +18 -0
  122. data/screen_test/rendered/settings/position/grid_top.frame +1 -0
  123. data/screen_test/rendered/settings/position/grid_top.rb +18 -0
  124. data/screen_test/rendered/settings/position/grid_top_negative.frame +1 -0
  125. data/screen_test/rendered/settings/position/grid_top_negative.rb +18 -0
  126. data/screen_test/rendered/settings/title_font.frame +1 -0
  127. data/screen_test/rendered/settings/title_font.rb +12 -0
  128. data/screen_test/rendered/settings/width/box.frame +1 -0
  129. data/screen_test/rendered/settings/width/box.rb +13 -0
  130. data/screen_test/rendered/settings/width/grid.frame +1 -0
  131. data/screen_test/rendered/settings/width/grid.rb +14 -0
  132. data/screen_test/rendered/settings/width/overflow_box.frame +1 -0
  133. data/screen_test/rendered/settings/width/overflow_box.rb +11 -0
  134. data/screen_test/rendered/settings/width/overflow_box_l2r.frame +1 -0
  135. data/screen_test/rendered/settings/width/overflow_box_l2r.rb +14 -0
  136. data/screen_test/rendered/settings/width/overflow_box_t2b.frame +1 -0
  137. data/screen_test/rendered/settings/width/overflow_box_t2b.rb +15 -0
  138. data/screen_test/rendered/settings/width/overflow_grid.frame +1 -0
  139. data/screen_test/rendered/settings/width/overflow_grid.rb +14 -0
  140. data/screen_test/screen_tester.rb +191 -0
  141. data/whirled_peas.gemspec +4 -2
  142. metadata +136 -20
  143. data/lib/whirled_peas/ui.rb +0 -7
  144. data/lib/whirled_peas/ui/ansi.rb +0 -154
  145. data/lib/whirled_peas/ui/canvas.rb +0 -35
  146. data/lib/whirled_peas/ui/element.rb +0 -199
  147. data/lib/whirled_peas/ui/painter.rb +0 -283
  148. data/lib/whirled_peas/ui/screen.rb +0 -62
  149. data/lib/whirled_peas/ui/settings.rb +0 -512
  150. data/lib/whirled_peas/ui/stroke.rb +0 -29
  151. data/sandbox/auto.rb +0 -13
  152. data/sandbox/box.rb +0 -19
  153. data/sandbox/grid.rb +0 -13
  154. data/sandbox/sandbox.rb +0 -17
  155. data/sandbox/text.rb +0 -33
@@ -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_text('Title') do |_, settings|
7
+ settings.title_font = :default
8
+ "Test"
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛How big is it?[?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('Wide') do |_, settings|
7
+ settings.full_border
8
+ settings.width = 50
9
+ "How big is it?"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ ┃ ┃┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫┃ ┃ ┃┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫┃ ┃ ┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛How big is it?How big is it?How big is it?How big is it?How big is it?How big is it?[?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('Wide') do |_, settings|
7
+ settings.full_border
8
+ settings.width = 30
9
+ settings.num_cols = 2
10
+ 6.times.map { "How big is it?" }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━┛ABCDEFGHIJ[?25h
@@ -0,0 +1,11 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ settings.width = 10
7
+ settings.full_border
8
+ "ABCDEFGHIJKLMNOPQRSTUVWZYZ"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━┛0|0|1|0|1|[?25h
@@ -0,0 +1,14 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ settings.width = 10
7
+ settings.full_border
8
+ str = ''
9
+ 10.times do |i|
10
+ composer.add_text { str += "#{i}|" }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━┛XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO[?25h
@@ -0,0 +1,15 @@
1
+ require 'whirled_peas'
2
+
3
+ class TemplateFactory
4
+ def build(*)
5
+ WhirledPeas.template do |composer, settings|
6
+ settings.width = 10
7
+ settings.flow = :t2b
8
+ settings.full_border
9
+ str = ''
10
+ 10.times do
11
+ composer.add_text { str += 'XO' }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ [?25l┏━━━━━━━━━━┓┃ ┃┗━━━━━━━━━━┛ABCDEFGHIJ[?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('grid') do |_, settings|
7
+ settings.width = 10
8
+ settings.full_border
9
+ settings.num_cols = 1
10
+ ["ABCDEFGHIJKLMNOPQRSTUVWZYZ"]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,191 @@
1
+ require 'bundler/setup'
2
+ require 'whirled_peas'
3
+ require 'whirled_peas/frame/event_loop'
4
+ require 'whirled_peas/frame/producer'
5
+ require 'whirled_peas/graphics/debugger'
6
+ require 'whirled_peas/graphics/renderer'
7
+ require 'whirled_peas/graphics/screen'
8
+ require 'whirled_peas/settings/text_color'
9
+ require 'whirled_peas/utils/formatted_string'
10
+
11
+ module WhirledPeas
12
+ class ScreenTester
13
+ def self.run_all
14
+ base_dir = File.dirname(__FILE__)
15
+ test_files = Dir.glob(File.join(base_dir, 'rendered', '**', '*.rb'))
16
+ failures = {}
17
+ pendings = Set.new
18
+ test_files.each do |file|
19
+ tester = new(file)
20
+ if tester.pending?
21
+ print Utils::FormattedString.new('.', Settings::TextColor::YELLOW)
22
+ pendings << file
23
+ elsif tester.failed?
24
+ print Utils::FormattedString.new('.', Settings::TextColor::RED)
25
+ failures[file] = tester.error
26
+ else
27
+ print Utils::FormattedString.new('.', Settings::TextColor::GREEN)
28
+ end
29
+ STDOUT.flush
30
+ end
31
+ puts
32
+ puts if pendings.count > 0
33
+ pendings.each do |file|
34
+ puts Utils::FormattedString.new("PENDING: #{file}", Settings::TextColor::YELLOW)
35
+ end
36
+ puts if failures.count > 0
37
+ failures.each do |file, error|
38
+ puts Utils::FormattedString.new("Failed: #{file}:\n\n #{error}\n", Settings::TextColor::RED)
39
+ end
40
+
41
+ if failures.count == 0
42
+ puts
43
+ puts Utils::FormattedString.new('No failures', Settings::TextColor::GREEN)
44
+ else
45
+ exit(1)
46
+ end
47
+ end
48
+
49
+ def self.update_all
50
+ base_dir = File.dirname(__FILE__)
51
+ test_files = Dir.glob(File.join(base_dir, 'rendered', '**', '*.rb'))
52
+ test_files.each do |file|
53
+ tester = new(file)
54
+ if tester.pending?
55
+ tester.ask_pending
56
+ elsif tester.failed?
57
+ tester.ask_failed
58
+ end
59
+ end
60
+ end
61
+
62
+ attr_reader :error
63
+
64
+ def initialize(test_file)
65
+ @full_test_file = test_file[0] == '/' ? test_file : File.join(Dir.pwd, test_file)
66
+ raise ArgumentError, "File not found: #{test_file}" unless File.exist?(@full_test_file)
67
+ @test_file = test_file.sub(File.dirname(__FILE__), '')[1..-1]
68
+ @full_output_file = @full_test_file.sub(/\.rb$/, '.frame')
69
+ @output_file = @full_output_file.sub(File.dirname(__FILE__), '')[1..-1]
70
+ end
71
+
72
+ def pending?
73
+ !File.exist?(full_output_file)
74
+ end
75
+
76
+ def failed?
77
+ if rendered != File.read(full_output_file)
78
+ @error = 'Rendered output does not match saved output'
79
+ end
80
+ !@error.nil?
81
+ end
82
+
83
+ def view
84
+ with_template_factory do |template_factory|
85
+ render_screen(template_factory, STDOUT)
86
+ end
87
+ end
88
+
89
+ def debug
90
+ with_template_factory do |template_factory|
91
+ template = template_factory.build('Test', {})
92
+ painter = Graphics::Renderer.new(template, *Graphics::Screen.current_dimensions).painter
93
+ puts Graphics::Debugger.new(painter).debug
94
+ end
95
+ end
96
+
97
+ def save
98
+ if File.exist?(full_output_file)
99
+ puts "Existing output file found: #{full_output_file}"
100
+ puts "overwriting..."
101
+ else
102
+ puts "Writing output to file: #{full_output_file}"
103
+ end
104
+
105
+ with_template_factory do |template_factory|
106
+ File.open(full_output_file, 'w') do |file|
107
+ render_screen(template_factory, file)
108
+ end
109
+ end
110
+ end
111
+
112
+ def ask_pending
113
+ puts Utils::FormattedString.new("Frame file does not exist for #{test_file}", Settings::TextColor::YELLOW)
114
+ print 'View rendered frame? [Y/n/q] '
115
+ STDOUT.flush
116
+ response = STDIN.gets.strip.downcase
117
+ case response
118
+ when 'q'
119
+ exit
120
+ when 'n'
121
+ return
122
+ end
123
+ print rendered
124
+ STDOUT.flush
125
+ ask_to_save
126
+ end
127
+
128
+ def ask_failed
129
+ puts Utils::FormattedString.new("Output from test does not match saved output for #{test_file}", Settings::TextColor::RED)
130
+ print 'View expected output? [Y/q] '
131
+ STDOUT.flush
132
+ exit if 'q' == STDIN.gets.strip.downcase
133
+ print File.read(full_output_file)
134
+ print 'View actual output? [Y/q] '
135
+ STDOUT.flush
136
+ exit if 'q' == STDIN.gets.strip.downcase
137
+ print rendered
138
+ STDOUT.flush
139
+ ask_to_save
140
+ end
141
+
142
+ private
143
+
144
+ attr_reader :full_test_file, :test_file, :full_output_file, :output_file
145
+
146
+ def ask_to_save
147
+ print "Save actual as the expected test output (#{output_file})? [y/N/q] "
148
+ STDOUT.flush
149
+ response = STDIN.gets.strip.downcase
150
+ print Utils::Ansi.cursor_pos(left: 0, top: 0)
151
+ print Utils::Ansi.clear_down
152
+ if response == 'y'
153
+ File.open(full_output_file, 'w') { |file| file.print(rendered) }
154
+ puts "Saved to #{output_file}"
155
+ elsif response == 'q'
156
+ puts 'Exiting'
157
+ exit
158
+ else
159
+ puts 'Skipped'
160
+ end
161
+ end
162
+
163
+ def rendered
164
+ @rendered ||= begin
165
+ string_io = StringIO.new
166
+ with_template_factory do |template_factory|
167
+ render_screen(template_factory, string_io)
168
+ end
169
+ string_io.string
170
+ end
171
+ end
172
+
173
+ def with_template_factory(&block)
174
+ require full_test_file
175
+ raise 'TemplateFactory must be defined' unless defined?(TemplateFactory)
176
+ yield TemplateFactory.new
177
+ ensure
178
+ Object.send(:remove_const, :TemplateFactory)
179
+ end
180
+
181
+ def render_screen(template_factory, output)
182
+ screen = Graphics::Screen.new(output)
183
+ consumer = Frame::EventLoop.new(
184
+ template_factory, screen: screen, refresh_rate: 100000
185
+ )
186
+ Frame::Producer.produce(consumer) do |producer|
187
+ producer.send_frame('test', args: {})
188
+ end
189
+ end
190
+ end
191
+ end
@@ -18,11 +18,13 @@ Gem::Specification.new do |spec|
18
18
  # Specify which files should be added to the gem when it is released.
19
19
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
20
20
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
21
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec|sandbox)/}) }
22
22
  end
23
+ spec.bindir = 'exe'
24
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
25
  spec.require_paths = ['lib']
24
26
 
25
27
  spec.add_runtime_dependency 'highline', '~> 2.0'
26
28
  spec.add_runtime_dependency 'json', '~> 2.5'
27
- spec.add_runtime_dependency 'tty-cursor', '~> 0.7'
29
+ spec.add_runtime_dependency 'ruby_figlet', '~> 0.6'
28
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whirled_peas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Collier
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-20 00:00:00.000000000 Z
11
+ date: 2021-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -39,23 +39,24 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.5'
41
41
  - !ruby/object:Gem::Dependency
42
- name: tty-cursor
42
+ name: ruby_figlet
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.7'
47
+ version: '0.6'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.7'
54
+ version: '0.6'
55
55
  description:
56
56
  email:
57
57
  - tcollier@gmail.com
58
- executables: []
58
+ executables:
59
+ - whirled_peas
59
60
  extensions: []
60
61
  extra_rdoc_files: []
61
62
  files:
@@ -69,27 +70,142 @@ files:
69
70
  - README.md
70
71
  - Rakefile
71
72
  - bin/console
73
+ - bin/debug
72
74
  - bin/setup
75
+ - exe/whirled_peas
73
76
  - lib/whirled_peas.rb
77
+ - lib/whirled_peas/command_line.rb
78
+ - lib/whirled_peas/config.rb
79
+ - lib/whirled_peas/debugger.rb
80
+ - lib/whirled_peas/errors.rb
74
81
  - lib/whirled_peas/frame.rb
75
82
  - lib/whirled_peas/frame/consumer.rb
83
+ - lib/whirled_peas/frame/debug_consumer.rb
76
84
  - lib/whirled_peas/frame/event_loop.rb
77
85
  - lib/whirled_peas/frame/producer.rb
86
+ - lib/whirled_peas/graphics.rb
87
+ - lib/whirled_peas/graphics/box_painter.rb
88
+ - lib/whirled_peas/graphics/canvas.rb
89
+ - lib/whirled_peas/graphics/container_coords.rb
90
+ - lib/whirled_peas/graphics/container_dimensions.rb
91
+ - lib/whirled_peas/graphics/container_painter.rb
92
+ - lib/whirled_peas/graphics/debugger.rb
93
+ - lib/whirled_peas/graphics/grid_painter.rb
94
+ - lib/whirled_peas/graphics/mock_screen.rb
95
+ - lib/whirled_peas/graphics/painter.rb
96
+ - lib/whirled_peas/graphics/renderer.rb
97
+ - lib/whirled_peas/graphics/screen.rb
98
+ - lib/whirled_peas/graphics/text_dimensions.rb
99
+ - lib/whirled_peas/graphics/text_painter.rb
78
100
  - lib/whirled_peas/null_logger.rb
79
- - lib/whirled_peas/ui.rb
80
- - lib/whirled_peas/ui/ansi.rb
81
- - lib/whirled_peas/ui/canvas.rb
82
- - lib/whirled_peas/ui/element.rb
83
- - lib/whirled_peas/ui/painter.rb
84
- - lib/whirled_peas/ui/screen.rb
85
- - lib/whirled_peas/ui/settings.rb
86
- - lib/whirled_peas/ui/stroke.rb
101
+ - lib/whirled_peas/settings.rb
102
+ - lib/whirled_peas/settings/bg_color.rb
103
+ - lib/whirled_peas/settings/border.rb
104
+ - lib/whirled_peas/settings/box_settings.rb
105
+ - lib/whirled_peas/settings/color.rb
106
+ - lib/whirled_peas/settings/container_settings.rb
107
+ - lib/whirled_peas/settings/debugger.rb
108
+ - lib/whirled_peas/settings/display_flow.rb
109
+ - lib/whirled_peas/settings/element_settings.rb
110
+ - lib/whirled_peas/settings/grid_settings.rb
111
+ - lib/whirled_peas/settings/margin.rb
112
+ - lib/whirled_peas/settings/padding.rb
113
+ - lib/whirled_peas/settings/position.rb
114
+ - lib/whirled_peas/settings/spacing.rb
115
+ - lib/whirled_peas/settings/text_align.rb
116
+ - lib/whirled_peas/settings/text_color.rb
117
+ - lib/whirled_peas/settings/text_settings.rb
118
+ - lib/whirled_peas/template.rb
119
+ - lib/whirled_peas/template/box_element.rb
120
+ - lib/whirled_peas/template/composer.rb
121
+ - lib/whirled_peas/template/container.rb
122
+ - lib/whirled_peas/template/debugger.rb
123
+ - lib/whirled_peas/template/element.rb
124
+ - lib/whirled_peas/template/grid_element.rb
125
+ - lib/whirled_peas/template/text_element.rb
126
+ - lib/whirled_peas/utils.rb
127
+ - lib/whirled_peas/utils/ansi.rb
128
+ - lib/whirled_peas/utils/formatted_string.rb
129
+ - lib/whirled_peas/utils/title_font.rb
87
130
  - lib/whirled_peas/version.rb
88
- - sandbox/auto.rb
89
- - sandbox/box.rb
90
- - sandbox/grid.rb
91
- - sandbox/sandbox.rb
92
- - sandbox/text.rb
131
+ - screen_test/rendered/elements/box.frame
132
+ - screen_test/rendered/elements/box.rb
133
+ - screen_test/rendered/elements/grid.frame
134
+ - screen_test/rendered/elements/grid.rb
135
+ - screen_test/rendered/elements/screen_overflow.rb
136
+ - screen_test/rendered/elements/text.frame
137
+ - screen_test/rendered/elements/text.rb
138
+ - screen_test/rendered/elements/text_multiline.frame
139
+ - screen_test/rendered/elements/text_multiline.rb
140
+ - screen_test/rendered/settings/align/box.frame
141
+ - screen_test/rendered/settings/align/box.rb
142
+ - screen_test/rendered/settings/align/children_center.frame
143
+ - screen_test/rendered/settings/align/children_center.rb
144
+ - screen_test/rendered/settings/align/children_left.frame
145
+ - screen_test/rendered/settings/align/children_left.rb
146
+ - screen_test/rendered/settings/align/children_right.frame
147
+ - screen_test/rendered/settings/align/children_right.rb
148
+ - screen_test/rendered/settings/align/grid.frame
149
+ - screen_test/rendered/settings/align/grid.rb
150
+ - screen_test/rendered/settings/ansi/bold.frame
151
+ - screen_test/rendered/settings/ansi/bold.rb
152
+ - screen_test/rendered/settings/ansi/color.frame
153
+ - screen_test/rendered/settings/ansi/color.rb
154
+ - screen_test/rendered/settings/ansi/underline.frame
155
+ - screen_test/rendered/settings/ansi/underline.rb
156
+ - screen_test/rendered/settings/border.frame
157
+ - screen_test/rendered/settings/border.rb
158
+ - screen_test/rendered/settings/flow/l2r.frame
159
+ - screen_test/rendered/settings/flow/l2r.rb
160
+ - screen_test/rendered/settings/flow/t2b.frame
161
+ - screen_test/rendered/settings/flow/t2b.rb
162
+ - screen_test/rendered/settings/height/box.frame
163
+ - screen_test/rendered/settings/height/box.rb
164
+ - screen_test/rendered/settings/height/grid.frame
165
+ - screen_test/rendered/settings/height/grid.rb
166
+ - screen_test/rendered/settings/height/overflow_box.frame
167
+ - screen_test/rendered/settings/height/overflow_box.rb
168
+ - screen_test/rendered/settings/height/overflow_box_l2r.frame
169
+ - screen_test/rendered/settings/height/overflow_box_l2r.rb
170
+ - screen_test/rendered/settings/height/overflow_box_t2b.frame
171
+ - screen_test/rendered/settings/height/overflow_box_t2b.rb
172
+ - screen_test/rendered/settings/height/overflow_grid.frame
173
+ - screen_test/rendered/settings/height/overflow_grid.rb
174
+ - screen_test/rendered/settings/margin.frame
175
+ - screen_test/rendered/settings/margin.rb
176
+ - screen_test/rendered/settings/padding.frame
177
+ - screen_test/rendered/settings/padding.rb
178
+ - screen_test/rendered/settings/position/box_left.frame
179
+ - screen_test/rendered/settings/position/box_left.rb
180
+ - screen_test/rendered/settings/position/box_left_negative.frame
181
+ - screen_test/rendered/settings/position/box_left_negative.rb
182
+ - screen_test/rendered/settings/position/box_top.frame
183
+ - screen_test/rendered/settings/position/box_top.rb
184
+ - screen_test/rendered/settings/position/box_top_negative.frame
185
+ - screen_test/rendered/settings/position/box_top_negative.rb
186
+ - screen_test/rendered/settings/position/grid_left.frame
187
+ - screen_test/rendered/settings/position/grid_left.rb
188
+ - screen_test/rendered/settings/position/grid_left_negative.frame
189
+ - screen_test/rendered/settings/position/grid_left_negative.rb
190
+ - screen_test/rendered/settings/position/grid_top.frame
191
+ - screen_test/rendered/settings/position/grid_top.rb
192
+ - screen_test/rendered/settings/position/grid_top_negative.frame
193
+ - screen_test/rendered/settings/position/grid_top_negative.rb
194
+ - screen_test/rendered/settings/title_font.frame
195
+ - screen_test/rendered/settings/title_font.rb
196
+ - screen_test/rendered/settings/width/box.frame
197
+ - screen_test/rendered/settings/width/box.rb
198
+ - screen_test/rendered/settings/width/grid.frame
199
+ - screen_test/rendered/settings/width/grid.rb
200
+ - screen_test/rendered/settings/width/overflow_box.frame
201
+ - screen_test/rendered/settings/width/overflow_box.rb
202
+ - screen_test/rendered/settings/width/overflow_box_l2r.frame
203
+ - screen_test/rendered/settings/width/overflow_box_l2r.rb
204
+ - screen_test/rendered/settings/width/overflow_box_t2b.frame
205
+ - screen_test/rendered/settings/width/overflow_box_t2b.rb
206
+ - screen_test/rendered/settings/width/overflow_grid.frame
207
+ - screen_test/rendered/settings/width/overflow_grid.rb
208
+ - screen_test/screen_tester.rb
93
209
  - whirled_peas.gemspec
94
210
  homepage: https://github.com/tcollier/whirled_peas
95
211
  licenses: