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
data/lib/vedeu/api/api.rb DELETED
@@ -1,239 +0,0 @@
1
- require 'vedeu/support/terminal'
2
-
3
- module Vedeu
4
-
5
- # Provides the API to Vedeu. Methods therein, and classes belonging to this
6
- # module expose Vedeu's core functionality.
7
- #
8
- # @api public
9
- module API
10
-
11
- extend Forwardable
12
-
13
- # @see Vedeu::Events#add
14
- def_delegators Events, :event
15
- def_delegators Keymap, :keys
16
- def_delegators Keymaps, :keypress
17
- def_delegators Vedeu::Terminal, :height, :width
18
-
19
- # Configure Vedeu using a simple configuration DSL.
20
- #
21
- # @param block [Proc]
22
- # @raise [InvalidSyntax] When the required block is not given.
23
- # @return [Hash]
24
- # @see Vedeu::Configuration
25
- def configure(&block)
26
- fail InvalidSyntax, '`configure` requires a block.' unless block_given?
27
-
28
- Vedeu::Configuration.configure(&block)
29
- end
30
-
31
- # Returns information about various registered subsystems when used with
32
- # a defined method within {Vedeu::API::Defined}.
33
- #
34
- # @return [Vedeu::API::Defined]
35
- # @see Vedeu::API::Defined
36
- def defined
37
- Vedeu::API::Defined
38
- end
39
-
40
- # Used after defining an interface or interfaces to set the initially
41
- # focussed interface.
42
- #
43
- # @param name [String] The interface to focus; must be defined.
44
- # @return [String] The name of the interface now in focus.
45
- # @raise [ModelNotFound] When the interface cannot be found.
46
- def focus(name)
47
- Vedeu.trigger(:_focus_by_name_, name)
48
- end
49
-
50
-
51
- # Register an interface by name which will display output from a event or
52
- # command. This provides the means for you to define your application's
53
- # views without their content.
54
- #
55
- # @todo More documentation required.
56
- # @param name [String] The name of the interface. Used to reference the
57
- # interface throughout your application's execution lifetime.
58
- # @param block [Proc] A set of attributes which define the features of the
59
- # interface.
60
- #
61
- # @example
62
- # Vedeu.interface 'my_interface' do
63
- # ...
64
- #
65
- # Vedeu.interface do
66
- # name 'interfaces_must_have_a_name'
67
- # ...
68
- #
69
- # @return [TrueClass]
70
- def interface(name = '', &block)
71
- API::Interface.define({ name: name }, &block)
72
- end
73
-
74
- # Register a menu by name which will display a collection of items for your
75
- # users to select; and provide interactivity within your application.
76
- #
77
- # @param name [String] The name of the menu. Used to reference the
78
- # menu throughout your application's execution lifetime.
79
- # @param block [Proc] A set of attributes which define the features of the
80
- # menu. See {Vedeu::API::Menu#items} and {Vedeu::API::Menu#name}.
81
- #
82
- # @example
83
- # Vedeu.menu 'my_interface' do
84
- # items [:item_1, :item_2, :item_3]
85
- # ...
86
- #
87
- # Vedeu.menu do
88
- # name 'menus_must_have_a_name'
89
- # items Track.all_my_favourites
90
- # ...
91
- #
92
- # @raise [InvalidSyntax] When the required block is not given.
93
- # @return [API::Menu]
94
- def menu(name = '', &block)
95
- fail InvalidSyntax, '`menu` requires a block.' unless block_given?
96
-
97
- API::Menu.define({ name: name }, &block)
98
- end
99
-
100
- # Directly write a view buffer to the terminal. Using this method means
101
- # that the refresh event does not need to be triggered after creating the
102
- # view or views, though can be later triggered if needed.
103
- #
104
- # @param block [Proc] The directives you wish to send to render. Must
105
- # include `view` or `views` with associated sub-
106
- # directives.
107
- #
108
- # @example
109
- # Vedeu.render do
110
- # views do
111
- # view 'my_interface' do
112
- # ...
113
- #
114
- # Vedeu.render do
115
- # view 'my_interface' do
116
- # ...
117
- #
118
- # @raise [InvalidSyntax] When the required block is not given.
119
- # @return [Array] A collection of strings, each defining containing the
120
- # escape sequences and content. This data has already been sent to the
121
- # terminal to be output.
122
- def render(&block)
123
- API::Composition.render(&block)
124
- end
125
-
126
- # When the terminal emit the 'SIGWINCH' signal, Vedeu can intercept this
127
- # and attempt to redraw the current interface with varying degrees of
128
- # success. Can also be used to simulate a terminal resize.
129
- #
130
- # @return [TrueClass]
131
- def resize
132
- trigger(:_clear_)
133
-
134
- trigger(:_refresh_)
135
-
136
- true
137
- end
138
-
139
- # Trigger a registered or system event by name with arguments. If the
140
- # event stored returns a value, that is returned. If multiple events are
141
- # registered for a name, then the result of each event will be returned as
142
- # part of a collection.
143
- #
144
- # @param name [Symbol] The name of the event you wish to trigger. The event
145
- # does not have to exist.
146
- # @param args [Array] Any arguments the event needs to execute correctly.
147
- #
148
- # @example
149
- # Vedeu.trigger(:my_event, :oxidize, 'nitrogen')
150
- #
151
- # @return [Array|undefined]
152
- def trigger(name, *args)
153
- Events.use(name, *args)
154
- end
155
-
156
- # Unregisters the event by name, effectively deleting the associated events
157
- # bound with it also.
158
- #
159
- # @param name [Symbol]
160
- # @return [Hash]
161
- def unevent(name)
162
- Events.remove(name)
163
- end
164
-
165
- # Use attributes of another interface whilst defining one.
166
- #
167
- # @todo More documentation required.
168
- # @param name [String] The name of the interface you wish to use. Typically
169
- # used when defining interfaces to share geometry.
170
- #
171
- # @example
172
- # Vedeu.interface 'main_screen' do
173
- # width use('my_interface').width
174
- # x use('my_interface').east(1)
175
- # ...
176
- #
177
- # @return [Vedeu::Interface]
178
- def use(name)
179
- Vedeu::Interface.new(Vedeu::Interfaces.find(name))
180
- end
181
-
182
- # Define a view (content) for an interface.
183
- #
184
- # @todo More documentation required.
185
- # @param name [String] The name of the interface you are targetting for this
186
- # view.
187
- # @param block [Proc] The directives you wish to send to this interface.
188
- #
189
- # @example
190
- # view 'my_interface' do
191
- # ...
192
- #
193
- # @return [Hash]
194
- def view(name, &block)
195
- API::Composition.build { view(name, &block) }
196
- end
197
-
198
- # Instruct Vedeu to treat contents of block as a single composition.
199
- #
200
- # @note The views declared within this block are stored in their respective
201
- # interface back buffers until a refresh event occurs. When the refresh
202
- # event is triggered, the back buffers are swapped into the front buffers
203
- # and the content here will be rendered to {Terminal.output}.
204
- #
205
- # @param block [Proc] Instructs Vedeu to treat all of the 'view' directives
206
- # therein as one instruction. Useful for redrawing multiple interfaces at
207
- # once.
208
- #
209
- # @example
210
- # views do
211
- # view 'my_interface' do
212
- # ... some attributes ...
213
- # end
214
- # view 'my_other_interface' do
215
- # ... some other attributes ...
216
- # end
217
- # ...
218
- #
219
- # composition do
220
- # view 'my_interface' do
221
- # ...
222
- # ...
223
- #
224
- # @raise [InvalidSyntax] When the required block is not given.
225
- # @return [Array]
226
- def views(&block)
227
- fail InvalidSyntax, '`views` requires a block.' unless block_given?
228
-
229
- API::Composition.build(&block)
230
- end
231
- alias_method :composition, :views
232
-
233
- end # API
234
-
235
- extend API
236
-
237
- trap('SIGWINCH') { Vedeu.trigger(:_resize_) }
238
-
239
- end # Vedeu
@@ -1,38 +0,0 @@
1
- module Vedeu
2
-
3
- module API
4
-
5
- # @see Vedeu::Composition
6
- #
7
- # @api public
8
- class Composition < Vedeu::Composition
9
-
10
- # @param block [Proc]
11
- # @return [Array]
12
- # @see Vedeu::API#render
13
- def self.render(&block)
14
- fail InvalidSyntax, '`render` requires a block.' unless block_given?
15
-
16
- attributes = API::Composition.build({}, &block)
17
-
18
- Vedeu::Composition.new(attributes).interfaces.map do |interface|
19
- Buffers.add(interface.attributes)
20
-
21
- interface.name
22
- end.map { |name| Vedeu::Refresh.by_name(name) }
23
- end
24
-
25
- # @param name [String]
26
- # @param block [Proc]
27
- # @return [Hash]
28
- # @see Vedeu::API#view
29
- def view(name, &block)
30
- attributes[:interfaces] << API::Interface
31
- .build({ name: name, parent: self.view_attributes }, &block)
32
- end
33
-
34
- end # Composition
35
-
36
- end # API
37
-
38
- end # Vedeu
@@ -1,52 +0,0 @@
1
- module Vedeu
2
-
3
- module API
4
-
5
- # Provides a set of helpful API methods to return information about various
6
- # registered subsystems.
7
- #
8
- # @api public
9
- module Defined
10
-
11
- extend self
12
-
13
- # Returns all events currently registered with Vedeu.
14
- #
15
- # @return [Array]
16
- def events
17
- Vedeu::Events.registered
18
- end
19
-
20
- # Returns all groups currently registered with Vedeu.
21
- #
22
- # @return [Array]
23
- def groups
24
- Vedeu::Groups.registered
25
- end
26
-
27
- # Returns all interfaces currently registered with Vedeu.
28
- #
29
- # @return [Array]
30
- def interfaces
31
- Vedeu::Interfaces.registered
32
- end
33
-
34
- # Returns the names of all keymaps currently registered with Vedeu.
35
- #
36
- # @return [Array]
37
- def keymaps
38
- Vedeu::Keymaps.registered
39
- end
40
-
41
- # Returns all menus currently registered with Vedeu.
42
- #
43
- # @return [Array]
44
- def menus
45
- Vedeu::Menus.registered
46
- end
47
-
48
- end # Defined
49
-
50
- end # API
51
-
52
- end # Vedeu
@@ -1,161 +0,0 @@
1
- module Vedeu
2
-
3
- module API
4
-
5
- # Provides colour and style helpers for use in the {API::Interface},
6
- # {API::Line} and {API::Stream} classes.
7
- #
8
- # @api public
9
- module Helpers
10
-
11
- include Common
12
-
13
- # Define the background colour for an interface, line, or a stream. When
14
- # called with a block, will create a new stream with the background colour
15
- # specified; see {Vedeu::API::Stream} for directives which are valid
16
- # within the block. When the block terminates, the background will return
17
- # to that of the parent.
18
- #
19
- # @param value [String]
20
- # @param block [Proc]
21
- #
22
- # @example
23
- # interface 'my_interface' do
24
- # background '#0022ff'
25
- # ...
26
- #
27
- # line do
28
- # background '#0022ff'
29
- # ...
30
- #
31
- # stream do
32
- # background '#0022ff'
33
- # ...
34
- #
35
- # foreground('#0022ff') { 'This will be blue.' }
36
- #
37
- # @raise [InvalidSyntax] When the value is not defined.
38
- # @return [Hash]
39
- def background(value = '', &block)
40
- unless defined_value?(value)
41
- fail InvalidSyntax, '`background` requires a value.'
42
- end
43
-
44
- if block_given?
45
- attributes[:streams] << API::Stream
46
- .build({ colour: { background: value },
47
- parent: self.view_attributes }, &block)
48
-
49
- else
50
- attributes[:colour].merge!({ background: value })
51
-
52
- end
53
- end
54
-
55
- # Define either or both foreground and background colours for an
56
- # interface, line or a stream.
57
- #
58
- # @param values [Hash]
59
- #
60
- # @example
61
- # interface 'my_interface' do
62
- # colour background: '#000000', foreground: '#ffffff'
63
- # ...
64
- #
65
- # line do
66
- # colour background: '#000000', foreground: '#ffffff'
67
- # ...
68
- #
69
- # stream do
70
- # colour background: '#000000', foreground: '#ffffff'
71
- # ...
72
- #
73
- # @raise [InvalidSyntax] When the values parameter does not contain
74
- # required keys.
75
- # @return [Hash]
76
- def colour(values)
77
- unless values.key?(:foreground) || values.key?(:background)
78
- fail InvalidSyntax, '#colour expects a Hash containing ' \
79
- ':foreground or :background or both.'
80
- end
81
-
82
- attributes[:colour] = values
83
- end
84
-
85
- # Define the foreground colour for an interface, line, or a stream. When
86
- # called with a block, will create a new stream with the foreground colour
87
- # specified; see {Vedeu::API::Stream} for directives which are valid
88
- # within the block. When the block terminates, the foreground will return
89
- # to that of the parent.
90
- #
91
- # @param value [String]
92
- # @param block [Proc]
93
- #
94
- # @example
95
- # interface 'my_interface' do
96
- # foreground '#0022ff'
97
- # ...
98
- #
99
- # line do
100
- # foreground '#0022ff'
101
- # ...
102
- #
103
- # stream do
104
- # foreground '#0022ff'
105
- # ...
106
- #
107
- # foreground('#0022ff') { 'This will be blue.' }
108
- #
109
- # @raise [InvalidSyntax] When the value is not defined.
110
- # @return [Hash]
111
- def foreground(value = '', &block)
112
- unless defined_value?(value)
113
- fail InvalidSyntax, '`foreground` requires a value.'
114
- end
115
-
116
- if block_given?
117
- attributes[:streams] << API::Stream
118
- .build({ colour: { foreground: value },
119
- parent: self.view_attributes }, &block)
120
-
121
- else
122
- attributes[:colour].merge!({ foreground: value })
123
-
124
- end
125
- end
126
-
127
- # Define a style or styles for an interface, line or a stream.
128
- #
129
- # @param values [Array|String]
130
- # @param block [Proc]
131
- #
132
- # @example
133
- # interface 'my_interface' do
134
- # style 'normal'
135
- # ...
136
- #
137
- # line do
138
- # style ['bold', 'underline']
139
- # ...
140
- #
141
- # stream do
142
- # style 'blink'
143
- # ...
144
- #
145
- # @return [Array]
146
- def style(values = [], &block)
147
- if block_given?
148
- attributes[:streams] << API::Stream
149
- .build({ style: Array(values) }, &block)
150
-
151
- else
152
- Array(values).each { |value| attributes[:style] << value }
153
-
154
- end
155
- end
156
-
157
- end # Helpers
158
-
159
- end # API
160
-
161
- end # Vedeu