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
@@ -11,103 +11,102 @@ require 'vedeu'
11
11
  class VedeuCursorApp
12
12
  include Vedeu
13
13
 
14
- event(:_initialize_) { Vedeu.trigger(:_refresh_) }
14
+ configure do
15
+ colour_mode 16777216
16
+ debug!
17
+ log '/tmp/vedeu_cursor_app.log'
18
+ end
15
19
 
16
- interface 'iron' do
17
- cursor true
18
- centred true
19
- colour foreground: '#ff0000', background: '#000000'
20
- height 4
21
- width 15
20
+ bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
22
21
 
23
- # provide 'vim' direction keys
24
- keys do
25
- key('k') { Vedeu.trigger(:_cursor_up_) }
26
- key('l') { Vedeu.trigger(:_cursor_right_) }
27
- key('j') { Vedeu.trigger(:_cursor_down_) }
28
- key('h') { Vedeu.trigger(:_cursor_left_) }
22
+ interface 'main_interface' do
23
+ border do
24
+ # adds default border
29
25
  end
30
- end
31
26
 
32
- interface 'gold' do
33
- cursor false
34
- colour foreground: '#00ff00', background: '#001100'
35
- height 4
36
- width 15
37
- x use('iron').left
38
- y use('iron').south
27
+ cursor true
28
+ colour foreground: '#ff0000', background: '#000000'
29
+
30
+ geometry do
31
+ centred true
32
+ height 8
33
+ width 8
34
+ end
39
35
  end
40
36
 
41
- keys do
42
- key(:up) { Vedeu.trigger(:_cursor_up_) }
43
- key(:right) { Vedeu.trigger(:_cursor_right_) }
44
- key(:down) { Vedeu.trigger(:_cursor_down_) }
45
- key(:left) { Vedeu.trigger(:_cursor_left_) }
37
+ keymap('_global_') do
38
+ key(:up, 'k') { Vedeu.trigger(:_cursor_up_) }
39
+ key(:right, 'l') { Vedeu.trigger(:_cursor_right_) }
40
+ key(:down, 'j') { Vedeu.trigger(:_cursor_down_) }
41
+ key(:left, 'h') { Vedeu.trigger(:_cursor_left_) }
46
42
  end
47
43
 
48
- render do
49
- view 'iron' do
50
- line do
51
- stream do
52
- text 'A 23456789 '
44
+ renders do
45
+ view 'main_interface' do
46
+ lines do
47
+ streams do
48
+ text 'A.3456789 '
53
49
  end
54
- stream do
50
+ streams do
55
51
  background '#550000'
56
52
  foreground '#ffff00'
57
53
  text 'hydrogen'
58
54
  end
59
- stream do
55
+ streams do
60
56
  text ' helium'
61
57
  end
62
58
  end
63
- line 'B 23456789 lithium beryllium boron nitrogen'
64
- line do
65
- stream do
66
- text 'C 23456789'
59
+ lines do
60
+ streams do
61
+ text 'B.3456789 lithium beryllium boron nitrogen'
67
62
  end
68
- stream do
63
+ end
64
+ lines do
65
+ streams do
66
+ text 'C.3456789'
69
67
  text ' carbon oxygen '
70
68
  end
71
- stream do
69
+ streams do
72
70
  background '#aadd00'
73
71
  foreground '#000000'
74
72
  text 'fluorine'
75
73
  end
76
74
  end
77
- line 'D 23456789'
78
- line
79
- line 'E 23456789 neon sodium'
80
- line do
81
- stream do
82
- text 'F 23456789 magnesium '
75
+ lines do
76
+ streams do
77
+ text 'D.3456789'
83
78
  end
84
- stream do
79
+ end
80
+ lines do
81
+ streams do
82
+ text 'E.3456789 neon sodium'
83
+ end
84
+ end
85
+ lines do
86
+ streams do
87
+ text 'F.3456789 magnesium '
88
+ end
89
+ streams do
85
90
  foreground '#00aaff'
86
91
  text 'aluminium'
87
92
  end
88
93
  end
89
- line 'G 23456789 silicon'
90
- line do
91
- stream do
94
+ lines do
95
+ streams do
96
+ text 'G.3456789 silicon'
97
+ end
98
+ end
99
+ lines do
100
+ streams do
92
101
  background '#550000'
93
102
  foreground '#ff00ff'
94
- text 'H 234'
103
+ text 'H.34'
95
104
  end
96
105
  end
97
106
  end
98
-
99
- view 'gold' do
100
- cursor false
101
- line 'Cursor: '
102
- end
103
107
  end
104
108
 
105
- focus('iron') # not working right?!
106
-
107
- Vedeu.configure do
108
- debug!
109
- log '/tmp/vedeu_cursor_app.log'
110
- end
109
+ focus_by_name 'main_interface'
111
110
 
112
111
  def self.start(argv = ARGV)
113
112
  Vedeu::Launcher.new(argv).execute!
@@ -19,67 +19,105 @@ require 'vedeu'
19
19
  class VedeuFocusApp
20
20
  include Vedeu
21
21
 
22
- event(:_initialize_) { Vedeu.trigger(:_refresh_) }
22
+ configure do
23
+ colour_mode 16777216
24
+ debug!
25
+ log '/tmp/vedeu_focus_app.log'
26
+ end
27
+
28
+ bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
29
+
30
+ update = Proc.new do
31
+ Vedeu.focus_next
32
+
33
+ Vedeu.renders { view('status') { lines { line(Vedeu.focus) } } }
34
+ end
23
35
 
24
36
  interface 'aluminium' do
25
37
  colour foreground: '#ffffff', background: '#330000'
26
38
  cursor true
27
- height 2
28
- width 2
29
- x 3
30
- y 3
39
+ geometry do
40
+ height 2
41
+ width 2
42
+ x 3
43
+ y 3
44
+ end
45
+ keymap { key(' ') { update.call } }
31
46
  end
32
47
 
33
48
  interface 'boron' do
34
49
  colour foreground: '#ffffff', background: '#003300'
35
50
  cursor true
36
- height 2
37
- width 2
38
- x 6
39
- y 3
51
+ geometry do
52
+ height 2
53
+ width 2
54
+ x 6
55
+ y 3
56
+ end
57
+ keymap { key(' ') { update.call } }
40
58
  end
41
59
 
42
60
  interface 'copper' do
43
61
  colour foreground: '#ffffff', background: '#000033'
44
62
  cursor true
45
63
  focus!
46
- height 2
47
- width 2
48
- x 3
49
- y 6
64
+ geometry do
65
+ height 2
66
+ width 2
67
+ x 3
68
+ y 6
69
+ end
70
+ keymap { key(' ') { update.call } }
50
71
  end
51
72
 
52
73
  interface 'dubnium' do
53
74
  colour foreground: '#ffffff', background: '#333300'
54
75
  cursor true
55
- height 2
56
- width 2
57
- x 6
58
- y 6
76
+ geometry do
77
+ height 2
78
+ width 2
79
+ x 6
80
+ y 6
81
+ end
82
+ keymap { key(' ') { update.call } }
59
83
  end
60
84
 
61
85
  interface 'status' do
62
86
  colour foreground: '#ffffff', background: '#000000'
63
87
  cursor false
64
- height 2
65
- width 10
66
- x 9
67
- y 3
88
+ geometry do
89
+ height 2
90
+ width 10
91
+ x 9
92
+ y 3
93
+ end
94
+ keymap { key(' ') { update.call } }
68
95
  end
69
96
 
70
- render do
71
- view('aluminium') { line 'Al' }
72
- view('boron') { line 'B' }
73
- view('copper') { line 'Cu' }
74
- view('dubnium') { line 'Db' }
75
- view('status') { line Vedeu::Focus.current }
76
-
77
- # Tell Vedeu that each interface can use 'space'.
78
- keys('aluminium', 'boron', 'copper', 'dubnium', 'status') do
79
- key(' ') do
80
- Vedeu::Focus.next_item
81
-
82
- render { view('status') { line Vedeu::Focus.current } }
97
+ renders do
98
+ view('aluminium') do
99
+ lines do
100
+ line 'Al'
101
+ end
102
+ end
103
+ view('boron') do
104
+ lines do
105
+ line 'B'
106
+ end
107
+ end
108
+ view('copper') do
109
+ lines do
110
+ line 'Cu'
111
+ end
112
+ end
113
+ view('dubnium') do
114
+ lines do
115
+ line 'Db'
116
+ end
117
+ end
118
+ view('status') do
119
+ lines do
120
+ line Vedeu.focus
83
121
  end
84
122
  end
85
123
  end
@@ -12,25 +12,30 @@ class HelloWorldApp
12
12
  include Vedeu
13
13
 
14
14
  configure do
15
+ colour_mode 16777216
15
16
  debug!
16
17
  log '/tmp/vedeu_hello_world.log'
17
18
  end
18
19
 
19
- event(:_initialize_) { Vedeu.trigger(:_refresh_) }
20
+ bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
20
21
 
21
22
  interface 'messages' do
22
23
  background '#000000'
23
- centred!
24
24
  foreground '#00ff00'
25
- height 3
26
- width 20
25
+ geometry do
26
+ centred!
27
+ height 3
28
+ width 20
29
+ end
27
30
  end
28
31
 
29
- render do
32
+ renders do
30
33
  view 'messages' do
31
- line ' Hello World!'
32
- line
33
- line " Press 'q' to exit. "
34
+ lines do
35
+ centre 'Hello World!', width: 20
36
+ line
37
+ centre "Press 'q' to exit.", width: 20
38
+ end
34
39
  end
35
40
  end
36
41
 
@@ -11,51 +11,60 @@ require 'vedeu'
11
11
  class VedeuLinesApp
12
12
  include Vedeu
13
13
 
14
- event(:_initialize_) { trigger(:_refresh_) }
14
+ configure do
15
+ colour_mode 16777216
16
+ debug!
17
+ log '/tmp/vedeu_lines_app.log'
18
+ end
19
+
20
+ bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
15
21
 
16
22
  interface 'ruthenium' do
17
- centred true
23
+ geometry do
24
+ centred true
25
+ height 5
26
+ width 40
27
+ end
18
28
  colour foreground: '#ffffff', background: '#000000'
19
- height 5
20
- width 40
21
29
  end
22
30
 
23
31
  interface 'tantalum' do
24
32
  colour foreground: '#00aadd', background: '#000000'
25
- height 1
26
- width 40
27
- x use('ruthenium').left
28
- y use('ruthenium').south
33
+ geometry do
34
+ height 1
35
+ width 40
36
+ x Vedeu.use('ruthenium').left
37
+ y Vedeu.use('ruthenium').south
38
+ end
29
39
  end
30
40
 
31
- keys do
32
- key(:up) { trigger(:_cursor_up_) }
33
- key(:right) { trigger(:_cursor_right_) }
34
- key(:down) { trigger(:_cursor_down_) }
35
- key(:left) { trigger(:_cursor_left_) }
41
+ keymap('_global_') do
42
+ key(:up) { Vedeu.trigger(:_cursor_up_) }
43
+ key(:right) { Vedeu.trigger(:_cursor_right_) }
44
+ key(:down) { Vedeu.trigger(:_cursor_down_) }
45
+ key(:left) { Vedeu.trigger(:_cursor_left_) }
36
46
  end
37
47
 
38
- render do
48
+ renders do
39
49
  view 'ruthenium' do
40
- line 'Ruthenium is a chemical element with'
41
- line 'symbol Ru and atomic number 44. It is a'
42
- line 'rare transition metal belonging to the'
43
- line 'platinum group of the periodic table.'
44
- line 'Like the other metals of the platinum'
45
- line 'group, ruthenium is inert to most other'
46
- line 'chemicals.'
50
+ lines do
51
+ line 'Ruthenium is a chemical element with'
52
+ line 'symbol Ru and atomic number 44. It is a'
53
+ line 'rare transition metal belonging to the'
54
+ line 'platinum group of the periodic table.'
55
+ line 'Like the other metals of the platinum'
56
+ line 'group, ruthenium is inert to most other'
57
+ line 'chemicals.'
58
+ end
47
59
  end
48
60
  view 'tantalum' do
49
- line 'Use cursor keys to navigate, Q to quit.'
61
+ lines do
62
+ line 'Use cursor keys to navigate, Q to quit.'
63
+ end
50
64
  end
51
65
  end
52
66
 
53
- focus 'ruthenium'
54
-
55
- Vedeu.configure do
56
- debug!
57
- log '/tmp/vedeu_lines_app.log'
58
- end
67
+ focus_by_name 'ruthenium'
59
68
 
60
69
  def self.start(argv = ARGV)
61
70
  Vedeu::Launcher.new(argv).execute!
@@ -0,0 +1,27 @@
1
+ Feature: Starting and stopping a client application
2
+
3
+ @basic
4
+ Scenario: The simplest thing that could work
5
+ Given a file named "simple.rb" with mode "0755" and with:
6
+ """ruby
7
+ require 'vedeu'
8
+
9
+ class VedeuTestApp
10
+ include Vedeu
11
+
12
+ configure do
13
+ debug!
14
+ log '/tmp/vedeu_test_helper.log'
15
+ end
16
+
17
+ def self.start(argv = ARGV)
18
+ Vedeu::Launcher.new(argv).execute!
19
+ end
20
+ end
21
+
22
+ VedeuTestApp.start(ARGV)
23
+ """
24
+ When I run `ruby simple.rb` interactively
25
+ And I type "q"
26
+ And I close the stdin stream
27
+ Then the exit status should be 1
@@ -0,0 +1,14 @@
1
+ lib_dir = File.dirname(__FILE__) + '/../../lib'
2
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
3
+
4
+ require 'simplecov'
5
+ require 'aruba'
6
+ require 'aruba/cucumber'
7
+ # require 'aruba/in_process'
8
+ require 'mocha/api'
9
+ require 'vedeu'
10
+
11
+ class CucumberError < StandardError; end
12
+
13
+ # Aruba::InProcess.main_class = Vedeu::Launcher
14
+ # Aruba.process = Aruba::InProcess
data/lib/vedeu/all.rb ADDED
@@ -0,0 +1,29 @@
1
+
2
+ # load order is important
3
+
4
+ require 'vedeu/traps'
5
+ require 'vedeu/exceptions'
6
+
7
+ require 'vedeu/repositories/all'
8
+
9
+ require 'vedeu/api'
10
+ require 'vedeu/bindings'
11
+
12
+ # load order has not been fully established beyond this point
13
+
14
+ require 'vedeu/buffers/all'
15
+ require 'vedeu/configuration/all'
16
+ require 'vedeu/cursor/all'
17
+
18
+ require 'vedeu/dsl/shared/all'
19
+ require 'vedeu/dsl/all'
20
+
21
+ require 'vedeu/events/all'
22
+ require 'vedeu/input/all'
23
+ require 'vedeu/models/all'
24
+ require 'vedeu/output/all'
25
+ require 'vedeu/presentation/all'
26
+ require 'vedeu/support/all'
27
+
28
+ require 'vedeu/application'
29
+ require 'vedeu/launcher'
data/lib/vedeu/api.rb ADDED
@@ -0,0 +1,39 @@
1
+ require 'vedeu/support/common'
2
+ require 'vedeu/support/terminal'
3
+ require 'vedeu/events/all'
4
+ require 'vedeu/models/all'
5
+ require 'vedeu/input/all'
6
+ require 'vedeu/dsl/composition'
7
+ require 'vedeu/dsl/shared/all'
8
+ require 'vedeu/dsl/view'
9
+
10
+ module Vedeu
11
+
12
+ # Provides the API to Vedeu. Methods therein, and classes belonging to this
13
+ # module expose Vedeu's core functionality.
14
+ #
15
+ # @api public
16
+ module API
17
+
18
+ extend Forwardable
19
+ extend self
20
+
21
+ def_delegators Vedeu::Event, :bind, :trigger, :unbind
22
+ def_delegators Vedeu::Configuration, :configure, :configuration
23
+ def_delegators Vedeu::DSL::Use, :use
24
+ def_delegators Vedeu::DSL::View, :interface, :renders, :views
25
+
26
+ def_delegators Vedeu::Focus, :focus, :focus_by_name, :focussed?,
27
+ :focus_next, :focus_previous
28
+ def_delegators Vedeu::Keymap, :keymap
29
+ def_delegators Vedeu::Log, :log
30
+ def_delegators Vedeu::Mapper, :keypress
31
+ def_delegators Vedeu::Menu, :menu
32
+ def_delegators Vedeu::Menus, :menus
33
+ def_delegators Vedeu::Terminal, :height, :width, :resize
34
+
35
+ end # API
36
+
37
+ extend API
38
+
39
+ end # Vedeu
@@ -8,13 +8,13 @@ module Vedeu
8
8
  class << self
9
9
 
10
10
  # @return []
11
- def start
12
- new.start
11
+ def start(configuration)
12
+ new(configuration).start
13
13
  end
14
14
  alias_method :restart, :start
15
15
 
16
16
  # Stops the application!
17
- # - The `:_cleanup_` event is triggered. Vedeu does not handle this event;
17
+ # - The `:cleanup` event is triggered. Vedeu does not handle this event;
18
18
  # the client application may treat this event as Vedeu signalling that it
19
19
  # is about to terminate. Client applications are encouraged to use this
20
20
  # event to close any open buffers, save files, empty trash, etc.
@@ -23,15 +23,19 @@ module Vedeu
23
23
  # terminate the application.
24
24
  # @return [StopIteration]
25
25
  def stop
26
- Vedeu.trigger(:_cleanup_)
26
+ Vedeu.trigger(:cleanup)
27
27
 
28
28
  fail StopIteration
29
29
  end
30
30
 
31
31
  end # Application eigenclass
32
32
 
33
+ # :nocov:
34
+
33
35
  # @return [Application]
34
- def initialize; end
36
+ def initialize(configuration)
37
+ @configuration = configuration
38
+ end
35
39
 
36
40
  # Starts the application!
37
41
  # - A new terminal screen is opened (or rather the current terminal is
@@ -56,12 +60,14 @@ module Vedeu
56
60
 
57
61
  private
58
62
 
63
+ attr_reader :configuration
64
+
59
65
  # Runs the application loop either once, or forever (exceptions and signals
60
66
  # permitting).
61
67
  #
62
68
  # @return []
63
69
  def runner
64
- if Configuration.once?
70
+ if configuration.once?
65
71
  yield
66
72
 
67
73
  else
@@ -79,7 +85,7 @@ module Vedeu
79
85
  #
80
86
  # @return []
81
87
  def main_sequence
82
- if Configuration.interactive?
88
+ if configuration.interactive?
83
89
  Input.capture(Terminal)
84
90
 
85
91
  else
@@ -107,6 +113,8 @@ module Vedeu
107
113
 
108
114
  end
109
115
 
116
+ # :nocov:
117
+
110
118
  end # Application
111
119
 
112
120
  end # Vedeu