vedeu 0.2.12 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b2a6839a91cbe235601f64318bbeae95e5be439d
4
- data.tar.gz: a3eb219aab24bf02d8cdf2280754c3a5a8375066
3
+ metadata.gz: 95a7c03c3ccd065d3c66d1c5a176e66f6e7d04f4
4
+ data.tar.gz: 2ddf794a56b73ddb0e2cd468ee8d4482baaa347c
5
5
  SHA512:
6
- metadata.gz: d202139c56d5f1d12763ed282387d0c99059d820d2527940d6ae8805e0eb73bd58029aba5fc7ddb511f00ea628ff487dd3349bbf17bdb7a7670b7676b296cac4
7
- data.tar.gz: c941ca66c0c66128ae4d1dd125fe02180d42b0bd28c6f23f8e5697409d4b4c17376ad7a2e801a13f242b00414b83c2c6e6e4dd02cd85e31156e9d37c832c3001
6
+ metadata.gz: 7fc84b1f48e9267a3f8fc5d282cc259764bc61a85dd77bee1f0bad19fb0b499e9e0102b7872d119405c4e25052afa50aa16c811ba72552615de827f69399d324
7
+ data.tar.gz: 391a08f45037963856371ebbcfb82ed17494d4f4b9e93f0df76068dd1c354e7796c5679d02246e643ac526bdf5d8fc577b26cab5de475b0f0634ccf3d3efb5d8
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.1
1
+ 2.2
data/Guardfile CHANGED
@@ -1,3 +1,11 @@
1
+ # guard 'cucumber' do
2
+ # watch(%r{^features/.+\.feature$})
3
+ # watch(%r{^features/support/.+$}) { 'features' }
4
+ # watch(%r{^features/step_definitions/(.+)_steps\.rb$}) do |m|
5
+ # Dir[File.join("**/#{m[1]}.feature")][0] || 'features'
6
+ # end
7
+ # end
8
+
1
9
  guard :minitest, all_after_pass: true, focus_on_failed: true, env: { 'no_simplecov' => true } do
2
10
  watch(%r{^test/(.*)_test\.rb})
3
11
  watch(%r{^lib/(.+)\.rb}) do |m|
@@ -10,3 +18,8 @@ guard :bundler do
10
18
  watch('Gemfile')
11
19
  watch(/^.+\.gemspec/)
12
20
  end
21
+
22
+ guard 'yard' do
23
+ watch(%r{docs/.+\.md})
24
+ watch(%r{lib/.+\.rb})
25
+ end
data/README.md CHANGED
@@ -45,20 +45,20 @@ class MyApp
45
45
  include Vedeu
46
46
 
47
47
  interface 'main' do
48
- ...
48
+ # ...
49
49
  end
50
50
 
51
- event :some_event do
51
+ bind :some_event do
52
52
  # ...
53
53
  end
54
54
 
55
- event :other_event do |hash_args, array_args, args|
55
+ bind :other_event do |hash_args, array_args, args|
56
56
  # ...
57
57
  end
58
58
 
59
59
  keys do
60
- key('a') { trigger(':apple') }
61
- key('b') { trigger(':banana') }
60
+ key('a') { Vedeu.trigger(':apple') }
61
+ key('b') { Vedeu.trigger(':banana') }
62
62
  end
63
63
  end
64
64
  ```
@@ -87,10 +87,12 @@ Views with Vedeu are made up of simple building blocks. These blocks can be arra
87
87
 
88
88
  ```ruby
89
89
  interface 'main' do
90
- y 1
91
- x 1
92
- width 10 # see notes below
93
- height 10
90
+ geometry do
91
+ y 1
92
+ x 1
93
+ width 10 # see notes below
94
+ height 10
95
+ end
94
96
  colour foreground: '#ffffff', background: '#000000'
95
97
  end
96
98
  ```
data/Rakefile CHANGED
@@ -1,10 +1,19 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
+ require 'cucumber'
4
+ require 'cucumber/rake/task'
3
5
 
4
- task :default => :test
6
+ # Don't run cukes for the time being.
7
+ # Cucumber::Rake::Task.new(:cucumber) do |t|
8
+ # t.cucumber_opts = "features --format progress"
9
+ # end
10
+ # Rake::Task['cucumber'].execute
5
11
 
6
12
  Rake::TestTask.new do |t|
7
13
  t.libs.push 'lib'
8
14
  t.libs.push 'test'
9
15
  t.pattern = 'test/**/*_test.rb'
16
+ t.verbose = false
10
17
  end
18
+
19
+ task :default => :test
data/bin/vedeu_test ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib_dir = File.dirname(__FILE__) + '/../lib'
4
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
5
+
6
+ require 'vedeu'
7
+
8
+ class VedeuTestApp
9
+ def self.start(argv = ARGV)
10
+ Vedeu::Launcher.new(argv).execute!
11
+ end
12
+ end
13
+
14
+ VedeuTestApp.start(ARGV)
@@ -0,0 +1,8 @@
1
+ <%
2
+ rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
3
+ rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
4
+ std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'rerun'} --strict --tags ~@wip --tags ~@ok --tags ~@pending --tags ~@failing"
5
+ %>
6
+ default: <%= std_opts %> features --format rerun
7
+ wip: --tags @wip:99 --wip features --format pretty
8
+ rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
data/docs/api.md CHANGED
@@ -15,7 +15,7 @@ Doing it this way will mean you can use any API method without the `Vedeu.` pref
15
15
  class SomeClassInYourApplication
16
16
  include Vedeu
17
17
 
18
- ...
18
+ # ...
19
19
  ```
20
20
 
21
21
 
@@ -25,13 +25,13 @@ Doing it this way means you need to use the `Vedeu.` prefix.
25
25
 
26
26
  ```ruby
27
27
  class OtherClassInYourApplication
28
- ...
28
+ # ...
29
29
 
30
30
  def some_method
31
31
  Vedeu.some_api_method
32
32
  end
33
33
 
34
- ...
34
+ # ...
35
35
  ```
36
36
 
37
37
  ... TODO ...
@@ -43,16 +43,17 @@ Note: Nesting indicates where an API method is allowed/supposed to be used.
43
43
 
44
44
  #### Events
45
45
 
46
- - event
46
+ - bind
47
47
  - trigger
48
- - unevent
48
+ - unbind
49
49
 
50
50
 
51
51
  #### Input
52
52
 
53
53
  - keypress
54
- - keys
54
+ - keymap
55
55
  - key
56
+ - name
56
57
  - interface
57
58
 
58
59
 
@@ -60,32 +61,40 @@ Note: Nesting indicates where an API method is allowed/supposed to be used.
60
61
 
61
62
  - interface
62
63
  - background
63
- - centred (or centred!)
64
+ - border
64
65
  - cursor
65
66
  - colour
66
67
  - delay
67
68
  - focus!
68
69
  - foreground
70
+ - geometry
71
+ - centred (or centred!)
72
+ - height
73
+ - width
74
+ - x
75
+ - y
69
76
  - group
70
- - height
71
- - keys
77
+ - keymap
78
+ - key
79
+ - name
80
+ - interface
72
81
  - line
73
82
  - name
74
83
  - style
75
84
  - use
76
- - width
77
- - x
78
- - y
79
85
 
80
86
 
81
87
  #### Views
82
88
 
83
- - render
84
- - views
85
- - view
89
+ - renders
86
90
  - view
87
91
  - colour
88
92
  - cursor
93
+ - geometry
94
+ - height
95
+ - width
96
+ - x
97
+ - y
89
98
  - line
90
99
  - background
91
100
  - colour
@@ -98,10 +107,17 @@ Note: Nesting indicates where an API method is allowed/supposed to be used.
98
107
  - style
99
108
  - text
100
109
  - width
110
+ - streams
111
+ - stream
112
+ - text
101
113
  - style
114
+ - lines
115
+ - line
102
116
  - name
103
117
  - style
104
118
  - use
119
+ - views
120
+ - ... as #renders
105
121
 
106
122
 
107
123
  #### Menus
@@ -113,10 +129,23 @@ Note: Nesting indicates where an API method is allowed/supposed to be used.
113
129
 
114
130
  #### Miscellany
115
131
 
116
- - defined
132
+ - configure
117
133
  - focus
134
+ - focus_by_name
135
+ - focussed?
136
+ - focus_next
137
+ - focus_previous
138
+
118
139
  - height
140
+ Usage: Vedeu.height
141
+ Returns the height (in lines) for the current terminal.
142
+
119
143
  - log
120
144
  - resize
145
+ Usage: Vedeu.resize
146
+
147
+
121
148
  - width
149
+ Usage: Vedeu.width
150
+ Returns the width (in characters) for the current terminal.
122
151
 
data/docs/events.md CHANGED
@@ -5,10 +5,10 @@ Vedeu provides an event mechanism to facilitate the functionality of your applic
5
5
  Events described in this document assume that you have included Vedeu in your class:
6
6
 
7
7
  ```ruby
8
- class SomeClassInYourApplication
9
- include Vedeu
8
+ class SomeClassInYourApplication
9
+ include Vedeu
10
10
 
11
- ...
11
+ # ...
12
12
  ```
13
13
 
14
14
  ## System Events
@@ -43,9 +43,21 @@ Hides the cursor for the focussed interface.
43
43
 
44
44
  Shows the cursor for the focussed interface.
45
45
 
46
+ ### `:_cursor_hide_by_name_`
47
+
48
+ Hides the cursor for the named interface.
49
+
50
+ ### `:_cursor_show_by_name_`
51
+
52
+ Shows the cursor for the named interface.
53
+
54
+ ### `:_cursor_origin_`
55
+
56
+ Moves the cursor to the top left position of the focussed interface. If this interface has a border,then this is respected.
57
+
46
58
  ### `:_exit_`
47
59
 
48
- When triggered, Vedeu will trigger a `:_cleanup_` event which you can define (to save files, etc) and attempt to exit.
60
+ When triggered, Vedeu will trigger a `:cleanup` event which you can define (to save files, etc) and attempt to exit.
49
61
 
50
62
  ### `:_focus_by_name_`
51
63
 
@@ -130,7 +142,7 @@ When triggered will cause Vedeu to trigger the `:_clear_` and `:_refresh_` event
130
142
 
131
143
  ##### Notes:
132
144
 
133
- System events can be handled or triggered by your application also, but overriding or adding additional events to the Vedeu system event namespace may cause unpredictable results. It is recommended to only to hook into events like :_cleanup_, :_initialize_ and :key if you need to do something respective to those events.
145
+ System events can be handled or triggered by your application also, but overriding or adding additional events to the Vedeu system event namespace may cause unpredictable results. It is recommended to only to hook into events like :cleanup, :_initialize_ and :key if you need to do something respective to those events.
134
146
 
135
147
  ... TODO ... What about events in Vedeu::Menu?
136
148
 
@@ -145,7 +157,7 @@ User events allow you to orchestrate behaviour within your application, ie. the
145
157
 
146
158
  Vedeu pre-defines a few user events, which client applications can listen for, or trigger themselves.
147
159
 
148
- ### `:_cleanup_`
160
+ ### `:cleanup`
149
161
 
150
162
  Vedeu triggers this event when `:_exit_` is triggered. You can hook into this to perform a special action before the application terminates. Saving the user's work, session or preferences might be popular here.
151
163
 
@@ -165,13 +177,13 @@ client application for timing amongst other things.
165
177
  #### How to define user events
166
178
 
167
179
  ```ruby
168
- event :event_name do |arg1, arg2|
169
- ...
180
+ bind :event_name do |arg1, arg2|
181
+ # ...
170
182
 
171
183
  # Things that should happen when the event is triggered; these can be method
172
184
  # calls or the triggering of another event or events.
173
185
 
174
- ...
186
+ # ...
175
187
  end
176
188
  ```
177
189
 
@@ -1,2 +1,18 @@
1
1
  ## Getting Started with Vedeu
2
2
 
3
+ ### Predefined Keys
4
+
5
+ Vedeu automatically defines four keys for your client application:
6
+
7
+ - q = Quit. Internally triggers the :_exit_ system event which in turn
8
+ requests the application stops. This triggers the event :cleanup which
9
+ the client application can bind to and perform any tidying up it wishes
10
+ to perform before exiting.
11
+
12
+ - <esc> = Mode Switch. Toggle between cooked and raw terminal modes.
13
+
14
+ - <tab> = Focus Next. Focus the next interface in the focus list.
15
+
16
+ - <shift+tab> = Focus Previous. Focus the previous interface in the focus
17
+ list.
18
+
data/docs/views.md ADDED
@@ -0,0 +1,158 @@
1
+ ## Views with Vedeu
2
+
3
+ There are two ways to construct views with Vedeu. You would like to draw the
4
+ view to the screen immediately (immediate render) or you want to save a view to
5
+ be drawn when you trigger a refresh event later (deferred view).
6
+
7
+ ** LINK Both of these approaches require that you have defined an interface (or
8
+ 'visible area') first. You can find out how to define an interface with Vedeu
9
+ here. The examples in 'Immediate Render' and 'Deferred View' use these interface
10
+ definitions: (Note: if you use these examples, ensure your terminal is at least
11
+ 70 characters in width and 5 lines in height.)
12
+
13
+ ```ruby
14
+ Vedeu.interface 'main' do
15
+ geometry do
16
+ centred!
17
+ height 4
18
+ width 50
19
+ end
20
+ end
21
+
22
+ Vedeu.interface 'title' do
23
+ geometry do
24
+ height 1
25
+ width 50
26
+ x use('main').left
27
+ y use('main').north
28
+ end
29
+ end
30
+ ```
31
+
32
+ Both of these approaches use a concept of Buffers in Vedeu. There are three
33
+ buffers for any defined interface. These are imaginatively called: 'back',
34
+ 'front' and 'previous'.
35
+
36
+ The 'back' buffer is the content for an interface which will be shown next time
37
+ a refresh event is fired globally or for that interface. So, 'back' becomes
38
+ 'front'.
39
+
40
+ The 'front' buffer is the content for an interface which is currently showing.
41
+ When a refresh event is fired, again, globally or for that interface
42
+ specifically, the content of this 'front' buffer is first copied to the
43
+ 'previous' buffer, and then the current 'back' buffer overwrites this 'front'
44
+ buffer.
45
+
46
+ The 'previous' buffer contains what was shown on the 'front' before the current
47
+ 'front'.
48
+
49
+ You can only write to either the 'front' (you want the content to be drawn
50
+ immediately) or the 'back' (you would like the content to be drawn on the next
51
+ refresh).
52
+
53
+ ### Immediate Render
54
+
55
+ The immediate render DSL for Vedeu is accessed via `Vedeu.renders`. When this
56
+ approach is used, the content defined is written directly to the 'front'
57
+ buffer(s) for the interface(s) concerned. Take a glance at the example below:
58
+
59
+ ```ruby
60
+ Vedeu.renders do
61
+ view 'title' do
62
+ line do
63
+ stream do
64
+ left 'Title goes here', width: 35
65
+ end
66
+ stream do
67
+ right Time.now.strftime('%H:%m'), width: 7
68
+ end
69
+ end
70
+ end
71
+ view 'main' do
72
+ lines do
73
+ line 'This is content for the main interface.'
74
+ line ''
75
+ line 'Pretty easy eh?'
76
+ end
77
+ end
78
+ end
79
+ ```
80
+
81
+ ### Deferred View
82
+
83
+ The deferred view DSL for Vedeu is accessed via `Vedeu.views`. This approach
84
+ writes the content defined to the 'back' buffer(s) for the interface(s)
85
+ concerned. It will become the front when your application triggers the refresh
86
+ event for the interface(s).
87
+
88
+ As you can see by comparing the examples above to these below, the immediate
89
+ render simply wraps what is already here in the deferred view. Again, more
90
+ specific information is available in the Rubydoc.
91
+
92
+ ```ruby
93
+ Vedeu.views do
94
+ view 'title' do
95
+ line do
96
+ stream do
97
+ left 'Title goes here', width: 35
98
+ end
99
+ stream do
100
+ right Time.now.strftime('%H:%m'), width: 7
101
+ end
102
+ end
103
+ end
104
+ view 'main' do
105
+ lines do
106
+ line 'This is content for the main interface.'
107
+ line ''
108
+ line 'Pretty easy eh?'
109
+ end
110
+ end
111
+ end
112
+ ```
113
+
114
+ ### Notes on Geometry
115
+
116
+ ... TODO
117
+
118
+ ### Notes on Refresh
119
+
120
+ ... TODO
121
+
122
+ ### Notes on Building Views
123
+
124
+ The basic view DSL methods look like this:
125
+
126
+ renders/views
127
+ |-- view
128
+ |-- lines
129
+ | |-- line
130
+ | |-- streams
131
+ | | |-- stream
132
+ | | |-- char
133
+ | |
134
+ | |-- stream
135
+ | |-- char
136
+ |
137
+ |-- line
138
+ |-- streams
139
+ | |-- stream
140
+ | |-- char
141
+ |
142
+ |-- stream
143
+ |-- char
144
+
145
+ renders/views
146
+ |-- view
147
+ |-- lines/line
148
+ |-- streams/stream
149
+ |-- char
150
+
151
+ #### Authors Notes
152
+
153
+ The Rubydoc documentation has more specific information about the DSL methods
154
+ demonstrated above; it can be accessed here.
155
+
156
+ I've tried to write the DSL in a way which makes it read nice; believing that
157
+ this will make it easier to use. I hope this is the case for you.
158
+