vedeu 0.2.12 → 0.3.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 (305) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Guardfile +13 -0
  4. data/README.md +11 -9
  5. data/Rakefile +10 -1
  6. data/bin/vedeu_test +14 -0
  7. data/config/cucumber.yml +8 -0
  8. data/docs/api.md +45 -16
  9. data/docs/events.md +21 -9
  10. data/docs/getting_started.md +16 -0
  11. data/docs/views.md +158 -0
  12. data/examples/borders_app.rb +236 -110
  13. data/examples/colour_support.sh +98 -0
  14. data/examples/colours_app.rb +41 -0
  15. data/examples/configuration_app.rb +11 -6
  16. data/examples/cursor_app.rb +60 -61
  17. data/examples/focus_app.rb +72 -34
  18. data/examples/hello_world.rb +13 -8
  19. data/examples/lines_app.rb +37 -28
  20. data/features/start_stop.feature +27 -0
  21. data/features/support/env.rb +14 -0
  22. data/lib/vedeu/all.rb +29 -0
  23. data/lib/vedeu/api.rb +39 -0
  24. data/lib/vedeu/application.rb +15 -7
  25. data/lib/vedeu/bindings.rb +121 -0
  26. data/lib/vedeu/buffers/all.rb +10 -0
  27. data/lib/vedeu/{repositories/models → buffers}/buffer.rb +47 -64
  28. data/lib/vedeu/buffers/display_buffer.rb +118 -0
  29. data/lib/vedeu/configuration/all.rb +6 -0
  30. data/lib/vedeu/configuration/api.rb +3 -1
  31. data/lib/vedeu/configuration/cli.rb +3 -1
  32. data/lib/vedeu/configuration/configuration.rb +23 -2
  33. data/lib/vedeu/cursor/all.rb +23 -0
  34. data/lib/vedeu/cursor/cursor.rb +116 -0
  35. data/lib/vedeu/cursor/move_cursor.rb +137 -0
  36. data/lib/vedeu/cursor/toggle_cursor.rb +53 -0
  37. data/lib/vedeu/dsl/all.rb +28 -0
  38. data/lib/vedeu/dsl/components/all.rb +7 -0
  39. data/lib/vedeu/dsl/components/border.rb +104 -0
  40. data/lib/vedeu/dsl/components/geometry.rb +153 -0
  41. data/lib/vedeu/dsl/components/keymap.rb +93 -0
  42. data/lib/vedeu/dsl/components/menu.rb +82 -0
  43. data/lib/vedeu/dsl/composition.rb +72 -0
  44. data/lib/vedeu/dsl/interface.rb +210 -0
  45. data/lib/vedeu/dsl/line.rb +135 -0
  46. data/lib/vedeu/dsl/shared/all.rb +7 -0
  47. data/lib/vedeu/dsl/shared/colour.rb +85 -0
  48. data/lib/vedeu/dsl/shared/style.rb +38 -0
  49. data/lib/vedeu/dsl/shared/text.rb +102 -0
  50. data/lib/vedeu/dsl/shared/use.rb +47 -0
  51. data/lib/vedeu/dsl/stream.rb +49 -0
  52. data/lib/vedeu/dsl/view.rb +136 -0
  53. data/lib/vedeu/events/all.rb +10 -0
  54. data/lib/vedeu/{repositories/models → events}/event.rb +97 -8
  55. data/lib/vedeu/events/trigger.rb +58 -0
  56. data/lib/vedeu/exceptions.rb +34 -0
  57. data/lib/vedeu/input/all.rb +29 -0
  58. data/lib/vedeu/input/input.rb +26 -0
  59. data/lib/vedeu/{models → input}/key.rb +21 -11
  60. data/lib/vedeu/input/keymap.rb +130 -0
  61. data/lib/vedeu/input/keys.rb +8 -0
  62. data/lib/vedeu/input/mapper.rb +112 -0
  63. data/lib/vedeu/launcher.rb +7 -4
  64. data/lib/vedeu/models/all.rb +12 -0
  65. data/lib/vedeu/models/collection.rb +71 -0
  66. data/lib/vedeu/{repositories → models}/focus.rb +63 -21
  67. data/lib/vedeu/models/geometry.rb +100 -259
  68. data/lib/vedeu/{repositories/models → models}/group.rb +16 -14
  69. data/lib/vedeu/{repositories/models → models}/menu.rb +85 -22
  70. data/lib/vedeu/models/model.rb +51 -0
  71. data/lib/vedeu/models/view/all.rb +12 -0
  72. data/lib/vedeu/models/view/char.rb +84 -0
  73. data/lib/vedeu/models/view/chars.rb +8 -0
  74. data/lib/vedeu/models/view/composition.rb +101 -0
  75. data/lib/vedeu/models/view/interface.rb +215 -0
  76. data/lib/vedeu/models/view/interfaces.rb +8 -0
  77. data/lib/vedeu/models/view/line.rb +134 -0
  78. data/lib/vedeu/models/view/lines.rb +8 -0
  79. data/lib/vedeu/models/view/stream.rb +144 -0
  80. data/lib/vedeu/models/view/streams.rb +8 -0
  81. data/lib/vedeu/output/all.rb +8 -0
  82. data/lib/vedeu/output/border.rb +387 -0
  83. data/lib/vedeu/output/compositor.rb +41 -30
  84. data/lib/vedeu/output/output.rb +6 -13
  85. data/lib/vedeu/output/viewport.rb +78 -94
  86. data/lib/vedeu/output/writer.rb +29 -0
  87. data/lib/vedeu/presentation/all.rb +9 -0
  88. data/lib/vedeu/{colours → presentation}/background.rb +1 -9
  89. data/lib/vedeu/{colours → presentation}/colour.rb +21 -8
  90. data/lib/vedeu/{colours → presentation}/foreground.rb +5 -9
  91. data/lib/vedeu/presentation/presentation.rb +91 -0
  92. data/lib/vedeu/presentation/style.rb +47 -0
  93. data/lib/vedeu/{colours → presentation}/translator.rb +11 -5
  94. data/lib/vedeu/repositories/all.rb +5 -0
  95. data/lib/vedeu/repositories/menus.rb +5 -42
  96. data/lib/vedeu/{support → repositories}/repository.rb +78 -41
  97. data/lib/vedeu/support/all.rb +22 -0
  98. data/lib/vedeu/support/bounding_area.rb +2 -1
  99. data/lib/vedeu/support/coercions.rb +18 -1
  100. data/lib/vedeu/support/console.rb +73 -0
  101. data/lib/vedeu/support/content_geometry.rb +69 -0
  102. data/lib/vedeu/support/coordinate.rb +246 -0
  103. data/lib/vedeu/support/esc.rb +29 -2
  104. data/lib/vedeu/support/log.rb +36 -2
  105. data/lib/vedeu/support/node.rb +61 -0
  106. data/lib/vedeu/support/position.rb +28 -13
  107. data/lib/vedeu/support/position_validator.rb +79 -0
  108. data/lib/vedeu/support/read.rb +65 -0
  109. data/lib/vedeu/support/refresh.rb +8 -32
  110. data/lib/vedeu/support/terminal.rb +34 -4
  111. data/lib/vedeu/support/text.rb +104 -0
  112. data/lib/vedeu/support/trace.rb +11 -23
  113. data/lib/vedeu/support/visible.rb +75 -0
  114. data/lib/vedeu/support/write.rb +85 -0
  115. data/lib/vedeu/traps.rb +18 -0
  116. data/lib/vedeu.rb +41 -101
  117. data/test/integration/dsl/compositions_test.rb +27 -0
  118. data/test/integration/dsl/interfaces_test.rb +261 -0
  119. data/test/integration/dsl/keymaps_test.rb +42 -0
  120. data/test/integration/dsl/lines_test.rb +146 -0
  121. data/test/integration/dsl/menus_test.rb +59 -0
  122. data/test/integration/dsl/streams_test.rb +129 -0
  123. data/test/integration/dsl/views_test.rb +63 -0
  124. data/test/lib/vedeu/api_test.rb +163 -0
  125. data/test/lib/vedeu/application_test.rb +19 -10
  126. data/test/lib/vedeu/bindings_test.rb +54 -0
  127. data/test/lib/vedeu/buffers/all_test.rb +11 -0
  128. data/test/lib/vedeu/buffers/buffer_test.rb +196 -0
  129. data/test/lib/vedeu/buffers/display_buffer_test.rb +58 -0
  130. data/test/lib/vedeu/configuration/api_test.rb +42 -58
  131. data/test/lib/vedeu/configuration/cli_test.rb +4 -4
  132. data/test/lib/vedeu/configuration/configuration_test.rb +11 -29
  133. data/test/lib/vedeu/cursor/all_test.rb +33 -0
  134. data/test/lib/vedeu/cursor/cursor_test.rb +85 -0
  135. data/test/lib/vedeu/cursor/move_cursor_test.rb +212 -0
  136. data/test/lib/vedeu/cursor/toggle_cursor_test.rb +63 -0
  137. data/test/lib/vedeu/dsl/components/border_test.rb +414 -0
  138. data/test/lib/vedeu/dsl/components/geometry_test.rb +231 -0
  139. data/test/lib/vedeu/dsl/components/keymap_test.rb +80 -0
  140. data/test/lib/vedeu/dsl/components/menu_test.rb +115 -0
  141. data/test/lib/vedeu/dsl/composition_test.rb +41 -0
  142. data/test/lib/vedeu/dsl/interface_test.rb +470 -0
  143. data/test/lib/vedeu/dsl/line_test.rb +60 -0
  144. data/test/lib/vedeu/dsl/shared/colour_test.rb +100 -0
  145. data/test/lib/vedeu/dsl/shared/style_test.rb +22 -0
  146. data/test/lib/vedeu/dsl/shared/text_test.rb +15 -0
  147. data/test/lib/vedeu/dsl/shared/use_test.rb +27 -0
  148. data/test/lib/vedeu/dsl/stream_test.rb +26 -0
  149. data/test/lib/vedeu/dsl/view_test.rb +73 -0
  150. data/test/lib/vedeu/events/all_test.rb +11 -0
  151. data/test/lib/vedeu/events/event_test.rb +109 -0
  152. data/test/lib/vedeu/events/trigger_test.rb +60 -0
  153. data/test/lib/vedeu/input/all_test.rb +11 -0
  154. data/test/lib/vedeu/input/input_test.rb +7 -3
  155. data/test/lib/vedeu/input/key_test.rb +72 -0
  156. data/test/lib/vedeu/input/keymap_test.rb +89 -0
  157. data/test/lib/vedeu/input/mapper_test.rb +94 -0
  158. data/test/lib/vedeu/launcher_test.rb +19 -20
  159. data/test/lib/vedeu/models/collection_test.rb +114 -0
  160. data/test/lib/vedeu/{repositories → models}/focus_test.rb +46 -13
  161. data/test/lib/vedeu/models/geometry_test.rb +35 -39
  162. data/test/lib/vedeu/models/group_test.rb +100 -0
  163. data/test/lib/vedeu/models/menu_test.rb +288 -0
  164. data/test/lib/vedeu/models/model_test.rb +31 -0
  165. data/test/lib/vedeu/models/view/char_test.rb +166 -0
  166. data/test/lib/vedeu/models/view/chars_test.rb +18 -0
  167. data/test/lib/vedeu/models/view/composition_test.rb +41 -0
  168. data/test/lib/vedeu/models/view/interface_test.rb +128 -0
  169. data/test/lib/vedeu/models/view/interfaces_test.rb +18 -0
  170. data/test/lib/vedeu/models/view/line_test.rb +214 -0
  171. data/test/lib/vedeu/models/view/lines_test.rb +18 -0
  172. data/test/lib/vedeu/models/view/stream_test.rb +106 -0
  173. data/test/lib/vedeu/models/view/streams_test.rb +18 -0
  174. data/test/lib/vedeu/output/border_test.rb +357 -0
  175. data/test/lib/vedeu/output/compositor_test.rb +61 -15
  176. data/test/lib/vedeu/output/output_test.rb +25 -84
  177. data/test/lib/vedeu/output/viewport_test.rb +171 -45
  178. data/test/lib/vedeu/output/writer_test.rb +45 -0
  179. data/test/lib/vedeu/{colours → presentation}/background_test.rb +0 -0
  180. data/test/lib/vedeu/{colours → presentation}/colour_test.rb +5 -5
  181. data/test/lib/vedeu/{colours → presentation}/foreground_test.rb +0 -0
  182. data/test/lib/vedeu/presentation/presentation_test.rb +56 -0
  183. data/test/lib/vedeu/presentation/style_test.rb +69 -0
  184. data/test/lib/vedeu/presentation/translator_test.rb +63 -0
  185. data/test/lib/vedeu/repositories/all_test.rb +7 -0
  186. data/test/lib/vedeu/repositories/menus_test.rb +3 -156
  187. data/test/lib/vedeu/repositories/repository_test.rb +271 -0
  188. data/test/lib/vedeu/support/bounding_area_test.rb +3 -3
  189. data/test/lib/vedeu/support/coercions_test.rb +39 -0
  190. data/test/lib/vedeu/support/common_test.rb +31 -16
  191. data/test/lib/vedeu/support/console_test.rb +85 -0
  192. data/test/lib/vedeu/support/content_geometry_test.rb +107 -0
  193. data/test/lib/vedeu/support/coordinate_test.rb +190 -0
  194. data/test/lib/vedeu/support/esc_test.rb +18 -0
  195. data/test/lib/vedeu/support/grid_test.rb +15 -10
  196. data/test/lib/vedeu/support/log_test.rb +3 -0
  197. data/test/lib/vedeu/support/position_test.rb +22 -2
  198. data/test/lib/vedeu/support/position_validator_test.rb +11 -0
  199. data/test/lib/vedeu/support/read_test.rb +88 -0
  200. data/test/lib/vedeu/support/refresh_test.rb +44 -12
  201. data/test/lib/vedeu/support/sentence_test.rb +6 -4
  202. data/test/lib/vedeu/support/terminal_test.rb +81 -70
  203. data/test/lib/vedeu/support/text_test.rb +93 -0
  204. data/test/lib/vedeu/support/trace_test.rb +21 -9
  205. data/test/lib/vedeu/support/visible_test.rb +148 -0
  206. data/test/lib/vedeu/support/write_test.rb +136 -0
  207. data/test/lib/vedeu/traps_test.rb +11 -0
  208. data/test/lib/vedeu_test.rb +2 -0
  209. data/test/support/helpers/all.rb +7 -0
  210. data/test/support/helpers/dsl_model_test_class.rb +25 -0
  211. data/test/support/{test_classes → helpers}/helpers.rb +0 -2
  212. data/test/support/helpers/misc.rb +15 -0
  213. data/test/support/helpers/model_test_class.rb +34 -0
  214. data/test/support/{test_classes → helpers}/presentation.rb +0 -0
  215. data/test/support/{test_classes → helpers}/repositories.rb +3 -3
  216. data/test/support/{test_modules/repository.rb → helpers/repository_test_module.rb} +5 -1
  217. data/test/test_helper.rb +19 -22
  218. data/vedeu.gemspec +11 -6
  219. metadata +322 -181
  220. data/lib/vedeu/api/api.rb +0 -239
  221. data/lib/vedeu/api/composition.rb +0 -38
  222. data/lib/vedeu/api/defined.rb +0 -52
  223. data/lib/vedeu/api/helpers.rb +0 -161
  224. data/lib/vedeu/api/interface.rb +0 -287
  225. data/lib/vedeu/api/keymap.rb +0 -75
  226. data/lib/vedeu/api/line.rb +0 -107
  227. data/lib/vedeu/api/menu.rb +0 -111
  228. data/lib/vedeu/api/stream.rb +0 -96
  229. data/lib/vedeu/models/border.rb +0 -238
  230. data/lib/vedeu/models/char.rb +0 -43
  231. data/lib/vedeu/models/composition.rb +0 -72
  232. data/lib/vedeu/models/line.rb +0 -100
  233. data/lib/vedeu/models/stream.rb +0 -130
  234. data/lib/vedeu/models/style.rb +0 -52
  235. data/lib/vedeu/repositories/buffers.rb +0 -52
  236. data/lib/vedeu/repositories/cursors.rb +0 -64
  237. data/lib/vedeu/repositories/events.rb +0 -147
  238. data/lib/vedeu/repositories/groups.rb +0 -47
  239. data/lib/vedeu/repositories/interfaces.rb +0 -78
  240. data/lib/vedeu/repositories/keymaps.rb +0 -196
  241. data/lib/vedeu/repositories/models/cursor.rb +0 -209
  242. data/lib/vedeu/repositories/models/interface.rb +0 -163
  243. data/lib/vedeu/repositories/models/keymap.rb +0 -111
  244. data/lib/vedeu/repositories/models/offset.rb +0 -91
  245. data/lib/vedeu/repositories/offsets.rb +0 -69
  246. data/lib/vedeu/support/exceptions.rb +0 -34
  247. data/lib/vedeu/support/keymap_validator.rb +0 -100
  248. data/lib/vedeu/support/model.rb +0 -14
  249. data/lib/vedeu/support/presentation.rb +0 -86
  250. data/lib/vedeu/support/registrar.rb +0 -53
  251. data/test/integration/api/api_test.rb +0 -97
  252. data/test/integration/api_dsl/dsl_api_test.rb +0 -4
  253. data/test/integration/api_dsl/dsl_composition_test.rb +0 -4
  254. data/test/integration/api_dsl/dsl_defined_test.rb +0 -4
  255. data/test/integration/api_dsl/dsl_helpers_test.rb +0 -4
  256. data/test/integration/api_dsl/dsl_interface_test.rb +0 -4
  257. data/test/integration/api_dsl/dsl_keymap.rb +0 -4
  258. data/test/integration/api_dsl/dsl_line_test.rb +0 -4
  259. data/test/integration/api_dsl/dsl_menu_test.rb +0 -4
  260. data/test/integration/api_dsl/dsl_stream_test.rb +0 -138
  261. data/test/integration/cursors_test.rb +0 -9
  262. data/test/integration/defining_interfaces_test.rb +0 -26
  263. data/test/integration/run_once_test.rb +0 -26
  264. data/test/integration/views/basic_view_test.rb +0 -807
  265. data/test/lib/vedeu/api/api_test.rb +0 -204
  266. data/test/lib/vedeu/api/composition_test.rb +0 -31
  267. data/test/lib/vedeu/api/defined_test.rb +0 -79
  268. data/test/lib/vedeu/api/helpers_test.rb +0 -111
  269. data/test/lib/vedeu/api/interface_test.rb +0 -410
  270. data/test/lib/vedeu/api/keymap_test.rb +0 -65
  271. data/test/lib/vedeu/api/line_test.rb +0 -83
  272. data/test/lib/vedeu/api/menu_test.rb +0 -85
  273. data/test/lib/vedeu/api/stream_test.rb +0 -59
  274. data/test/lib/vedeu/colours/translator_test.rb +0 -22
  275. data/test/lib/vedeu/models/border_test.rb +0 -197
  276. data/test/lib/vedeu/models/char_test.rb +0 -52
  277. data/test/lib/vedeu/models/composition_test.rb +0 -45
  278. data/test/lib/vedeu/models/key_test.rb +0 -43
  279. data/test/lib/vedeu/models/line_test.rb +0 -123
  280. data/test/lib/vedeu/models/stream_test.rb +0 -233
  281. data/test/lib/vedeu/models/style_test.rb +0 -59
  282. data/test/lib/vedeu/repositories/buffers_test.rb +0 -37
  283. data/test/lib/vedeu/repositories/cursors_test.rb +0 -62
  284. data/test/lib/vedeu/repositories/events_test.rb +0 -57
  285. data/test/lib/vedeu/repositories/groups_test.rb +0 -28
  286. data/test/lib/vedeu/repositories/interfaces_test.rb +0 -51
  287. data/test/lib/vedeu/repositories/keymaps_test.rb +0 -223
  288. data/test/lib/vedeu/repositories/models/buffer_test.rb +0 -174
  289. data/test/lib/vedeu/repositories/models/cursor_test.rb +0 -158
  290. data/test/lib/vedeu/repositories/models/event_test.rb +0 -53
  291. data/test/lib/vedeu/repositories/models/group_test.rb +0 -98
  292. data/test/lib/vedeu/repositories/models/interface_test.rb +0 -130
  293. data/test/lib/vedeu/repositories/models/keymap_test.rb +0 -27
  294. data/test/lib/vedeu/repositories/models/menu_test.rb +0 -246
  295. data/test/lib/vedeu/repositories/models/offset_test.rb +0 -128
  296. data/test/lib/vedeu/repositories/offsets_test.rb +0 -39
  297. data/test/lib/vedeu/support/keymap_validator_test.rb +0 -62
  298. data/test/lib/vedeu/support/model_test.rb +0 -23
  299. data/test/lib/vedeu/support/presentation_test.rb +0 -53
  300. data/test/lib/vedeu/support/registrar_test.rb +0 -94
  301. data/test/lib/vedeu/support/repository_test.rb +0 -208
  302. data/test/support/test_classes/all.rb +0 -5
  303. data/test/support/test_classes/coercions.rb +0 -16
  304. data/test/support/test_classes/model.rb +0 -23
  305. data/test/support/test_modules/all.rb +0 -1
@@ -0,0 +1,75 @@
1
+ require 'vedeu/support/esc'
2
+
3
+ module Vedeu
4
+
5
+ class Visible
6
+
7
+ # @return [Visible]
8
+ def self.coerce(value)
9
+ if value.is_a?(self)
10
+ value
11
+
12
+ else
13
+ new(value)
14
+
15
+ end
16
+ end
17
+
18
+ # @return [Visible]
19
+ def initialize(visible = nil)
20
+ @visible = if visible == :hide || visible == false
21
+ false
22
+
23
+ elsif visible == :show || visible == true
24
+ true
25
+
26
+ else
27
+ !!visible
28
+
29
+ end
30
+ end
31
+
32
+ # Returns log friendly output.
33
+ #
34
+ # @return [String]
35
+ def inspect
36
+ "<#{self.class.name} (#{@visible.to_s})>"
37
+ end
38
+
39
+ # @return [String]
40
+ def cursor
41
+ if visible?
42
+ Esc.string('show_cursor')
43
+
44
+ else
45
+ Esc.string('hide_cursor')
46
+
47
+ end
48
+ end
49
+
50
+ def visible?
51
+ @visible
52
+ end
53
+
54
+ def invisible?
55
+ !@visible
56
+ end
57
+
58
+ # @return [Visible]
59
+ def hide
60
+ Visible.new(false)
61
+ end
62
+
63
+ # @return [Visible]
64
+ def show
65
+ Visible.new(true)
66
+ end
67
+
68
+ # @return [Visible]
69
+ def toggle
70
+ visible? ? hide : show
71
+ end
72
+
73
+ end # Visible
74
+
75
+ end # Vedeu
@@ -0,0 +1,85 @@
1
+ module Vedeu
2
+
3
+ # The basis of a fake output device.
4
+ class Write
5
+
6
+ # @see Vedeu::Write#write
7
+ def self.to(console, data = nil)
8
+ new(console, data).write
9
+ end
10
+
11
+ # @return [Vedeu::Write]
12
+ def initialize(console, data = nil)
13
+ @console = console
14
+ @data = data
15
+ end
16
+
17
+ # Provides IO.console emulation of #print.
18
+ #
19
+ # @return [Array]
20
+ def print(string = nil)
21
+ @data = string unless string.nil?
22
+
23
+ write
24
+ end
25
+
26
+ # @return [Array<Array>|Array<String>]
27
+ def write
28
+ streams
29
+ end
30
+
31
+ private
32
+
33
+ attr_reader :console, :data
34
+
35
+ # @return [Array<Char>|Array<String>]
36
+ def streams
37
+ lines.map do |line|
38
+ if line.size > visible_columns
39
+ line[0, visible_columns]
40
+
41
+ else
42
+ line
43
+
44
+ end
45
+ end
46
+ end
47
+
48
+ # @return [Array<Array>|Array<String>]
49
+ def lines
50
+ if content.size > visible_lines
51
+ content[0, visible_lines]
52
+
53
+ else
54
+ content
55
+
56
+ end
57
+ end
58
+
59
+ # @return [Array|Array<String>|Array<Array>]
60
+ def content
61
+ if data.nil? || data.empty?
62
+ []
63
+
64
+ elsif data.is_a?(String)
65
+ data.split(/\n/)
66
+
67
+ else
68
+ data
69
+
70
+ end
71
+ end
72
+
73
+ # @return [Fixnum]
74
+ def visible_columns
75
+ console.width #- 1
76
+ end
77
+
78
+ # @return [Fixnum]
79
+ def visible_lines
80
+ console.height #- 1
81
+ end
82
+
83
+ end # Write
84
+
85
+ end # Vedeu
@@ -0,0 +1,18 @@
1
+ module Vedeu
2
+
3
+ # Vedeu can respond to various signals which are handled here.
4
+ module Traps
5
+
6
+ Signal.trap('INT') { exit! }
7
+
8
+ Signal.trap('TERM') { exit! }
9
+
10
+ #TTIN
11
+ #USR1
12
+ #USR2
13
+
14
+ Signal.trap('SIGWINCH') { Vedeu.trigger(:_resize_) }
15
+
16
+ end # Traps
17
+
18
+ end # Vedeu
data/lib/vedeu.rb CHANGED
@@ -1,37 +1,3 @@
1
- # Vedeu is a GUI framework for terminal/console applications written in Ruby.
2
- #
3
- module Vedeu
4
-
5
- # When Vedeu is included within one of your classes, you should have all
6
- # API methods at your disposal.
7
- #
8
- # @example
9
- # class YourClassHere
10
- # include Vedeu
11
- # ...
12
- #
13
- def self.included(receiver)
14
- receiver.send(:include, API)
15
- receiver.extend(API)
16
- end
17
-
18
- # Write a message to the Vedeu log file.
19
- #
20
- # @param message [String] The message you wish to emit to the log
21
- # file, useful for debugging.
22
- # @param force [Boolean] When evaluates to true will attempt to
23
- # write to the log file regardless of the Configuration setting.
24
- #
25
- # @example
26
- # Vedeu.log('A useful debugging message: Error!')
27
- #
28
- # @return [TrueClass]
29
- def self.log(message, force = false)
30
- Vedeu::Log.logger.debug(message) if Configuration.debug? || force
31
- end
32
-
33
- end # Vedeu
34
-
35
1
  $LIB_DIR = File.dirname(__FILE__) + '/../lib'
36
2
  $LOAD_PATH.unshift($LIB_DIR) unless $LOAD_PATH.include?($LIB_DIR)
37
3
 
@@ -44,85 +10,59 @@ require 'set'
44
10
  require 'singleton'
45
11
  require 'time'
46
12
 
47
- require 'vedeu/support/common'
48
- require 'vedeu/support/exceptions'
49
- require 'vedeu/support/model'
50
-
51
- require 'vedeu/configuration/cli'
52
- require 'vedeu/configuration/api'
53
- require 'vedeu/configuration/configuration'
54
-
55
13
  require 'vedeu/support/log'
56
- require 'vedeu/support/trace'
57
-
58
- require 'vedeu/support/repository'
59
- require 'vedeu/repositories/models/event'
60
- require 'vedeu/repositories/events'
61
- require 'vedeu/repositories/keymaps'
62
- require 'vedeu/repositories/models/keymap'
63
- require 'vedeu/api/keymap'
64
- require 'vedeu/api/api'
65
14
 
66
- require 'vedeu/colours/translator'
67
- require 'vedeu/colours/background'
68
- require 'vedeu/colours/foreground'
69
- require 'vedeu/colours/colour'
70
-
71
- require 'vedeu/support/coercions'
72
- require 'vedeu/support/esc'
73
- require 'vedeu/support/position'
74
- require 'vedeu/support/presentation'
75
- require 'vedeu/support/sentence'
76
- require 'vedeu/support/terminal'
15
+ # Vedeu is a GUI framework for terminal/console applications written in Ruby.
16
+ #
17
+ module Vedeu
77
18
 
78
- require 'vedeu/models/border'
79
- require 'vedeu/models/char'
80
- require 'vedeu/models/composition'
81
- require 'vedeu/models/geometry'
82
- require 'vedeu/models/key'
83
- require 'vedeu/models/line'
84
- require 'vedeu/models/stream'
85
- require 'vedeu/models/style'
19
+ DOCS_URL = 'http://www.rubydoc.info/github/gavinlaking/vedeu/master'
86
20
 
87
- require 'vedeu/repositories/models/interface'
88
- require 'vedeu/repositories/interfaces'
21
+ extend Forwardable
22
+ extend self
89
23
 
90
- require 'vedeu/api/defined'
91
- require 'vedeu/api/composition'
92
- require 'vedeu/api/helpers'
93
- require 'vedeu/api/interface'
94
- require 'vedeu/api/line'
95
- require 'vedeu/api/menu'
96
- require 'vedeu/api/stream'
24
+ def_delegators Vedeu::Log, :log
97
25
 
98
- require 'vedeu/repositories/models/buffer'
99
- require 'vedeu/repositories/models/cursor'
100
- require 'vedeu/repositories/models/group'
101
- require 'vedeu/repositories/models/menu'
102
- require 'vedeu/repositories/models/offset'
26
+ # @return [Vedeu::Focus]
27
+ def self.focusable
28
+ @_focusable ||= Vedeu::Focus
29
+ end
103
30
 
104
- require 'vedeu/support/keymap_validator'
31
+ # @return [Vedeu::Repository]
32
+ def self.geometries
33
+ @_geometries ||= Vedeu::Repository.new(Vedeu::Geometry)
34
+ end
105
35
 
106
- require 'vedeu/repositories/buffers'
107
- require 'vedeu/repositories/cursors'
108
- require 'vedeu/repositories/focus'
109
- require 'vedeu/repositories/groups'
110
- require 'vedeu/repositories/menus'
111
- require 'vedeu/repositories/offsets'
36
+ # @return [Vedeu::Repository]
37
+ def self.groups
38
+ @_groups ||= Vedeu::Repository.new(Vedeu::Group)
39
+ end
112
40
 
113
- require 'vedeu/support/registrar'
114
- require 'vedeu/support/refresh'
41
+ # @return [Vedeu::Repository]
42
+ def self.interfaces
43
+ @_interfaces ||= Vedeu::Repository.new(Vedeu::Interface)
44
+ end
115
45
 
116
- require 'vedeu/output/compositor'
117
- require 'vedeu/output/output'
118
- require 'vedeu/output/viewport'
46
+ # When Vedeu is included within one of your classes, you should have all
47
+ # API methods at your disposal.
48
+ #
49
+ # @example
50
+ # class YourClassHere
51
+ # include Vedeu
52
+ # ...
53
+ #
54
+ def included(receiver)
55
+ receiver.send(:include, API)
56
+ receiver.extend(API)
57
+ end
119
58
 
120
- require 'vedeu/support/bounding_area'
121
- require 'vedeu/support/grid'
59
+ private
122
60
 
123
- require 'vedeu/input/input'
61
+ end # Vedeu
124
62
 
125
- require 'vedeu/application'
126
- require 'vedeu/launcher'
63
+ require 'vedeu/all'
127
64
 
65
+ require 'vedeu/support/trace'
66
+ Vedeu::Trace.call
67
+ # force tracing
128
68
  # Vedeu::Trace.call({ trace: true })
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ describe 'Compositions' do
4
+
5
+ describe '#view' do
6
+ subject {
7
+ Vedeu.views do
8
+ view 'compositions' do
9
+ # ...
10
+ end
11
+ end
12
+ }
13
+
14
+ #it { subject.must_be_instance_of(Vedeu::Composition) }
15
+
16
+ # it 'allows the use of Vedeu.view' do
17
+ # skip
18
+ # end
19
+
20
+ context 'when no block is given' do
21
+ subject { Vedeu.view }
22
+
23
+ #it { proc { subject }.must_raise(Vedeu::InvalidSyntax) }
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,261 @@
1
+ require 'test_helper'
2
+
3
+ describe 'Interfaces' do
4
+
5
+ describe '#background' do
6
+ subject {
7
+ Vedeu.interface 'interfaces' do
8
+ background ''
9
+ end
10
+ }
11
+
12
+ it { subject.must_be_instance_of(Vedeu::Interface) }
13
+
14
+ # it 'allows the use of background within Vedeu.interface' do
15
+ # skip
16
+ # end
17
+
18
+ context 'when no value is provided' do
19
+
20
+ end
21
+ end
22
+
23
+ describe '#border' do
24
+ subject {
25
+ Vedeu.interface 'interfaces' do
26
+ border do
27
+ end
28
+ end
29
+ }
30
+
31
+ it { subject.must_be_instance_of(Vedeu::Interface) }
32
+
33
+ # it 'allows the use of border within Vedeu.interface' do
34
+ # skip
35
+ # end
36
+
37
+ context 'when no value is provided' do
38
+
39
+ end
40
+ end
41
+
42
+ describe '#colour' do
43
+ subject {
44
+ Vedeu.interface 'interfaces' do
45
+ colour ''
46
+ end
47
+ }
48
+
49
+ #it { subject.must_be_instance_of(Vedeu::Interface) }
50
+
51
+ # it 'allows the use of colour within Vedeu.interface' do
52
+ # skip
53
+ # end
54
+
55
+ context 'when no value is provided' do
56
+
57
+ end
58
+ end
59
+
60
+ describe '#foreground' do
61
+ subject {
62
+ Vedeu.interface 'interfaces' do
63
+ foreground ''
64
+ end
65
+ }
66
+
67
+ it { subject.must_be_instance_of(Vedeu::Interface) }
68
+
69
+ # it 'allows the use of foreground within Vedeu.interface' do
70
+ # skip
71
+ # end
72
+
73
+ context 'when no value is provided' do
74
+
75
+ end
76
+ end
77
+
78
+ describe '#cursor' do
79
+ subject {
80
+ Vedeu.interface 'interfaces' do
81
+ cursor ''
82
+ end
83
+ }
84
+
85
+ #it { subject.must_be_instance_of(Vedeu::Interface) }
86
+
87
+ # it 'allows the use of cursor within Vedeu.interface' do
88
+ # skip
89
+ # end
90
+
91
+ context 'when no value is provided' do
92
+
93
+ end
94
+ end
95
+
96
+ describe '#cursor!' do
97
+ subject {
98
+ Vedeu.interface 'interfaces' do
99
+ cursor!
100
+ end
101
+ }
102
+
103
+ #it { subject.must_be_instance_of(Vedeu::Interface) }
104
+
105
+ # it 'allows the use of cursor! within Vedeu.interface' do
106
+ # skip
107
+ # end
108
+
109
+ context 'when no value is provided' do
110
+
111
+ end
112
+ end
113
+
114
+ describe '#delay' do
115
+ subject {
116
+ Vedeu.interface 'interfaces' do
117
+ delay ''
118
+ end
119
+ }
120
+
121
+ it { subject.must_be_instance_of(Vedeu::Interface) }
122
+
123
+ # it 'allows the use of delay within Vedeu.interface' do
124
+ # skip
125
+ # end
126
+
127
+ context 'when no value is provided' do
128
+
129
+ end
130
+ end
131
+
132
+ describe '#focus!' do
133
+ subject {
134
+ Vedeu.interface 'interfaces' do
135
+ focus!
136
+ end
137
+ }
138
+
139
+ #it { subject.must_be_instance_of(Vedeu::Interface) }
140
+
141
+ # it 'allows the use of focus! within Vedeu.interface' do
142
+ # skip
143
+ # end
144
+
145
+ context 'when no value is provided' do
146
+
147
+ end
148
+ end
149
+
150
+ describe '#geometry' do
151
+ subject {
152
+ Vedeu.interface 'interfaces' do
153
+ geometry do
154
+ end
155
+ end
156
+ }
157
+
158
+ it { subject.must_be_instance_of(Vedeu::Interface) }
159
+
160
+ # it 'allows the use of geometry within Vedeu.interface' do
161
+ # skip
162
+ # end
163
+
164
+ context 'when no value is provided' do
165
+
166
+ end
167
+ end
168
+
169
+ describe '#group' do
170
+ subject {
171
+ Vedeu.interface 'interfaces' do
172
+ group 'compounds'
173
+ end
174
+ }
175
+
176
+ it { subject.must_be_instance_of(Vedeu::Interface) }
177
+
178
+ # it 'allows the use of group within Vedeu.interface' do
179
+ # skip
180
+ # end
181
+
182
+ context 'when no value is provided' do
183
+
184
+ end
185
+ end
186
+
187
+ describe '#keys' do
188
+ subject {
189
+ Vedeu.interface 'interfaces' do
190
+ keys do
191
+ end
192
+ end
193
+ }
194
+
195
+ #it { subject.must_be_instance_of(Vedeu::Interface) }
196
+
197
+ # it 'allows the use of keys within Vedeu.interface' do
198
+ # skip
199
+ # end
200
+
201
+ context 'when no value is provided' do
202
+
203
+ end
204
+ end
205
+
206
+ describe '#lines' do
207
+ subject {
208
+ Vedeu.interface 'interfaces' do
209
+ lines do
210
+ end
211
+ end
212
+ }
213
+
214
+ #it { subject.must_be_instance_of(Vedeu::Interface) }
215
+
216
+ # it 'allows the use of lines within Vedeu.interface' do
217
+ # skip
218
+ # end
219
+
220
+ context 'when no value is provided' do
221
+
222
+ end
223
+ end
224
+
225
+ describe '#name' do
226
+ subject {
227
+ Vedeu.interface do
228
+ name 'interfaces'
229
+ end
230
+ }
231
+
232
+ it { subject.must_be_instance_of(Vedeu::Interface) }
233
+
234
+ # it 'allows the use of name within Vedeu.interface' do
235
+ # skip
236
+ # end
237
+
238
+ context 'when no value is provided' do
239
+
240
+ end
241
+ end
242
+
243
+ describe '#style' do
244
+ subject {
245
+ Vedeu.interface 'interfaces' do
246
+ style ''
247
+ end
248
+ }
249
+
250
+ it { subject.must_be_instance_of(Vedeu::Interface) }
251
+
252
+ # it 'allows the use of style within Vedeu.interface' do
253
+ # skip
254
+ # end
255
+
256
+ context 'when no value is provided' do
257
+
258
+ end
259
+ end
260
+
261
+ end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+
3
+ describe 'Keymaps' do
4
+
5
+ describe '#key' do
6
+ subject {
7
+ Vedeu.keymap 'keymaps' do
8
+ key '' do
9
+ end
10
+ end
11
+ }
12
+
13
+ #it { subject.must_be_instance_of(Vedeu::Keymap) }
14
+
15
+ # it 'allows the use of ... within Vedeu.keymap' do
16
+ # skip
17
+ # end
18
+
19
+ context 'when no value is provided' do
20
+
21
+ end
22
+ end
23
+
24
+ describe '#name' do
25
+ subject {
26
+ Vedeu.keymap 'keymaps' do
27
+ name ''
28
+ end
29
+ }
30
+
31
+ #it { subject.must_be_instance_of(Vedeu::Keymap) }
32
+
33
+ # it 'allows the use of ... within Vedeu.keymap' do
34
+ # skip
35
+ # end
36
+
37
+ context 'when no value is provided' do
38
+
39
+ end
40
+ end
41
+
42
+ end