vedeu 0.2.12 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Guardfile +13 -0
  4. data/README.md +11 -9
  5. data/Rakefile +10 -1
  6. data/bin/vedeu_test +14 -0
  7. data/config/cucumber.yml +8 -0
  8. data/docs/api.md +45 -16
  9. data/docs/events.md +21 -9
  10. data/docs/getting_started.md +16 -0
  11. data/docs/views.md +158 -0
  12. data/examples/borders_app.rb +236 -110
  13. data/examples/colour_support.sh +98 -0
  14. data/examples/colours_app.rb +41 -0
  15. data/examples/configuration_app.rb +11 -6
  16. data/examples/cursor_app.rb +60 -61
  17. data/examples/focus_app.rb +72 -34
  18. data/examples/hello_world.rb +13 -8
  19. data/examples/lines_app.rb +37 -28
  20. data/features/start_stop.feature +27 -0
  21. data/features/support/env.rb +14 -0
  22. data/lib/vedeu/all.rb +29 -0
  23. data/lib/vedeu/api.rb +39 -0
  24. data/lib/vedeu/application.rb +15 -7
  25. data/lib/vedeu/bindings.rb +121 -0
  26. data/lib/vedeu/buffers/all.rb +10 -0
  27. data/lib/vedeu/{repositories/models → buffers}/buffer.rb +47 -64
  28. data/lib/vedeu/buffers/display_buffer.rb +118 -0
  29. data/lib/vedeu/configuration/all.rb +6 -0
  30. data/lib/vedeu/configuration/api.rb +3 -1
  31. data/lib/vedeu/configuration/cli.rb +3 -1
  32. data/lib/vedeu/configuration/configuration.rb +23 -2
  33. data/lib/vedeu/cursor/all.rb +23 -0
  34. data/lib/vedeu/cursor/cursor.rb +116 -0
  35. data/lib/vedeu/cursor/move_cursor.rb +137 -0
  36. data/lib/vedeu/cursor/toggle_cursor.rb +53 -0
  37. data/lib/vedeu/dsl/all.rb +28 -0
  38. data/lib/vedeu/dsl/components/all.rb +7 -0
  39. data/lib/vedeu/dsl/components/border.rb +104 -0
  40. data/lib/vedeu/dsl/components/geometry.rb +153 -0
  41. data/lib/vedeu/dsl/components/keymap.rb +93 -0
  42. data/lib/vedeu/dsl/components/menu.rb +82 -0
  43. data/lib/vedeu/dsl/composition.rb +72 -0
  44. data/lib/vedeu/dsl/interface.rb +210 -0
  45. data/lib/vedeu/dsl/line.rb +135 -0
  46. data/lib/vedeu/dsl/shared/all.rb +7 -0
  47. data/lib/vedeu/dsl/shared/colour.rb +85 -0
  48. data/lib/vedeu/dsl/shared/style.rb +38 -0
  49. data/lib/vedeu/dsl/shared/text.rb +102 -0
  50. data/lib/vedeu/dsl/shared/use.rb +47 -0
  51. data/lib/vedeu/dsl/stream.rb +49 -0
  52. data/lib/vedeu/dsl/view.rb +136 -0
  53. data/lib/vedeu/events/all.rb +10 -0
  54. data/lib/vedeu/{repositories/models → events}/event.rb +97 -8
  55. data/lib/vedeu/events/trigger.rb +58 -0
  56. data/lib/vedeu/exceptions.rb +34 -0
  57. data/lib/vedeu/input/all.rb +29 -0
  58. data/lib/vedeu/input/input.rb +26 -0
  59. data/lib/vedeu/{models → input}/key.rb +21 -11
  60. data/lib/vedeu/input/keymap.rb +130 -0
  61. data/lib/vedeu/input/keys.rb +8 -0
  62. data/lib/vedeu/input/mapper.rb +112 -0
  63. data/lib/vedeu/launcher.rb +7 -4
  64. data/lib/vedeu/models/all.rb +12 -0
  65. data/lib/vedeu/models/collection.rb +71 -0
  66. data/lib/vedeu/{repositories → models}/focus.rb +63 -21
  67. data/lib/vedeu/models/geometry.rb +100 -259
  68. data/lib/vedeu/{repositories/models → models}/group.rb +16 -14
  69. data/lib/vedeu/{repositories/models → models}/menu.rb +85 -22
  70. data/lib/vedeu/models/model.rb +51 -0
  71. data/lib/vedeu/models/view/all.rb +12 -0
  72. data/lib/vedeu/models/view/char.rb +84 -0
  73. data/lib/vedeu/models/view/chars.rb +8 -0
  74. data/lib/vedeu/models/view/composition.rb +101 -0
  75. data/lib/vedeu/models/view/interface.rb +215 -0
  76. data/lib/vedeu/models/view/interfaces.rb +8 -0
  77. data/lib/vedeu/models/view/line.rb +134 -0
  78. data/lib/vedeu/models/view/lines.rb +8 -0
  79. data/lib/vedeu/models/view/stream.rb +144 -0
  80. data/lib/vedeu/models/view/streams.rb +8 -0
  81. data/lib/vedeu/output/all.rb +8 -0
  82. data/lib/vedeu/output/border.rb +387 -0
  83. data/lib/vedeu/output/compositor.rb +41 -30
  84. data/lib/vedeu/output/output.rb +6 -13
  85. data/lib/vedeu/output/viewport.rb +78 -94
  86. data/lib/vedeu/output/writer.rb +29 -0
  87. data/lib/vedeu/presentation/all.rb +9 -0
  88. data/lib/vedeu/{colours → presentation}/background.rb +1 -9
  89. data/lib/vedeu/{colours → presentation}/colour.rb +21 -8
  90. data/lib/vedeu/{colours → presentation}/foreground.rb +5 -9
  91. data/lib/vedeu/presentation/presentation.rb +91 -0
  92. data/lib/vedeu/presentation/style.rb +47 -0
  93. data/lib/vedeu/{colours → presentation}/translator.rb +11 -5
  94. data/lib/vedeu/repositories/all.rb +5 -0
  95. data/lib/vedeu/repositories/menus.rb +5 -42
  96. data/lib/vedeu/{support → repositories}/repository.rb +78 -41
  97. data/lib/vedeu/support/all.rb +22 -0
  98. data/lib/vedeu/support/bounding_area.rb +2 -1
  99. data/lib/vedeu/support/coercions.rb +18 -1
  100. data/lib/vedeu/support/console.rb +73 -0
  101. data/lib/vedeu/support/content_geometry.rb +69 -0
  102. data/lib/vedeu/support/coordinate.rb +246 -0
  103. data/lib/vedeu/support/esc.rb +29 -2
  104. data/lib/vedeu/support/log.rb +36 -2
  105. data/lib/vedeu/support/node.rb +61 -0
  106. data/lib/vedeu/support/position.rb +28 -13
  107. data/lib/vedeu/support/position_validator.rb +79 -0
  108. data/lib/vedeu/support/read.rb +65 -0
  109. data/lib/vedeu/support/refresh.rb +8 -32
  110. data/lib/vedeu/support/terminal.rb +34 -4
  111. data/lib/vedeu/support/text.rb +104 -0
  112. data/lib/vedeu/support/trace.rb +11 -23
  113. data/lib/vedeu/support/visible.rb +75 -0
  114. data/lib/vedeu/support/write.rb +85 -0
  115. data/lib/vedeu/traps.rb +18 -0
  116. data/lib/vedeu.rb +41 -101
  117. data/test/integration/dsl/compositions_test.rb +27 -0
  118. data/test/integration/dsl/interfaces_test.rb +261 -0
  119. data/test/integration/dsl/keymaps_test.rb +42 -0
  120. data/test/integration/dsl/lines_test.rb +146 -0
  121. data/test/integration/dsl/menus_test.rb +59 -0
  122. data/test/integration/dsl/streams_test.rb +129 -0
  123. data/test/integration/dsl/views_test.rb +63 -0
  124. data/test/lib/vedeu/api_test.rb +163 -0
  125. data/test/lib/vedeu/application_test.rb +19 -10
  126. data/test/lib/vedeu/bindings_test.rb +54 -0
  127. data/test/lib/vedeu/buffers/all_test.rb +11 -0
  128. data/test/lib/vedeu/buffers/buffer_test.rb +196 -0
  129. data/test/lib/vedeu/buffers/display_buffer_test.rb +58 -0
  130. data/test/lib/vedeu/configuration/api_test.rb +42 -58
  131. data/test/lib/vedeu/configuration/cli_test.rb +4 -4
  132. data/test/lib/vedeu/configuration/configuration_test.rb +11 -29
  133. data/test/lib/vedeu/cursor/all_test.rb +33 -0
  134. data/test/lib/vedeu/cursor/cursor_test.rb +85 -0
  135. data/test/lib/vedeu/cursor/move_cursor_test.rb +212 -0
  136. data/test/lib/vedeu/cursor/toggle_cursor_test.rb +63 -0
  137. data/test/lib/vedeu/dsl/components/border_test.rb +414 -0
  138. data/test/lib/vedeu/dsl/components/geometry_test.rb +231 -0
  139. data/test/lib/vedeu/dsl/components/keymap_test.rb +80 -0
  140. data/test/lib/vedeu/dsl/components/menu_test.rb +115 -0
  141. data/test/lib/vedeu/dsl/composition_test.rb +41 -0
  142. data/test/lib/vedeu/dsl/interface_test.rb +470 -0
  143. data/test/lib/vedeu/dsl/line_test.rb +60 -0
  144. data/test/lib/vedeu/dsl/shared/colour_test.rb +100 -0
  145. data/test/lib/vedeu/dsl/shared/style_test.rb +22 -0
  146. data/test/lib/vedeu/dsl/shared/text_test.rb +15 -0
  147. data/test/lib/vedeu/dsl/shared/use_test.rb +27 -0
  148. data/test/lib/vedeu/dsl/stream_test.rb +26 -0
  149. data/test/lib/vedeu/dsl/view_test.rb +73 -0
  150. data/test/lib/vedeu/events/all_test.rb +11 -0
  151. data/test/lib/vedeu/events/event_test.rb +109 -0
  152. data/test/lib/vedeu/events/trigger_test.rb +60 -0
  153. data/test/lib/vedeu/input/all_test.rb +11 -0
  154. data/test/lib/vedeu/input/input_test.rb +7 -3
  155. data/test/lib/vedeu/input/key_test.rb +72 -0
  156. data/test/lib/vedeu/input/keymap_test.rb +89 -0
  157. data/test/lib/vedeu/input/mapper_test.rb +94 -0
  158. data/test/lib/vedeu/launcher_test.rb +19 -20
  159. data/test/lib/vedeu/models/collection_test.rb +114 -0
  160. data/test/lib/vedeu/{repositories → models}/focus_test.rb +46 -13
  161. data/test/lib/vedeu/models/geometry_test.rb +35 -39
  162. data/test/lib/vedeu/models/group_test.rb +100 -0
  163. data/test/lib/vedeu/models/menu_test.rb +288 -0
  164. data/test/lib/vedeu/models/model_test.rb +31 -0
  165. data/test/lib/vedeu/models/view/char_test.rb +166 -0
  166. data/test/lib/vedeu/models/view/chars_test.rb +18 -0
  167. data/test/lib/vedeu/models/view/composition_test.rb +41 -0
  168. data/test/lib/vedeu/models/view/interface_test.rb +128 -0
  169. data/test/lib/vedeu/models/view/interfaces_test.rb +18 -0
  170. data/test/lib/vedeu/models/view/line_test.rb +214 -0
  171. data/test/lib/vedeu/models/view/lines_test.rb +18 -0
  172. data/test/lib/vedeu/models/view/stream_test.rb +106 -0
  173. data/test/lib/vedeu/models/view/streams_test.rb +18 -0
  174. data/test/lib/vedeu/output/border_test.rb +357 -0
  175. data/test/lib/vedeu/output/compositor_test.rb +61 -15
  176. data/test/lib/vedeu/output/output_test.rb +25 -84
  177. data/test/lib/vedeu/output/viewport_test.rb +171 -45
  178. data/test/lib/vedeu/output/writer_test.rb +45 -0
  179. data/test/lib/vedeu/{colours → presentation}/background_test.rb +0 -0
  180. data/test/lib/vedeu/{colours → presentation}/colour_test.rb +5 -5
  181. data/test/lib/vedeu/{colours → presentation}/foreground_test.rb +0 -0
  182. data/test/lib/vedeu/presentation/presentation_test.rb +56 -0
  183. data/test/lib/vedeu/presentation/style_test.rb +69 -0
  184. data/test/lib/vedeu/presentation/translator_test.rb +63 -0
  185. data/test/lib/vedeu/repositories/all_test.rb +7 -0
  186. data/test/lib/vedeu/repositories/menus_test.rb +3 -156
  187. data/test/lib/vedeu/repositories/repository_test.rb +271 -0
  188. data/test/lib/vedeu/support/bounding_area_test.rb +3 -3
  189. data/test/lib/vedeu/support/coercions_test.rb +39 -0
  190. data/test/lib/vedeu/support/common_test.rb +31 -16
  191. data/test/lib/vedeu/support/console_test.rb +85 -0
  192. data/test/lib/vedeu/support/content_geometry_test.rb +107 -0
  193. data/test/lib/vedeu/support/coordinate_test.rb +190 -0
  194. data/test/lib/vedeu/support/esc_test.rb +18 -0
  195. data/test/lib/vedeu/support/grid_test.rb +15 -10
  196. data/test/lib/vedeu/support/log_test.rb +3 -0
  197. data/test/lib/vedeu/support/position_test.rb +22 -2
  198. data/test/lib/vedeu/support/position_validator_test.rb +11 -0
  199. data/test/lib/vedeu/support/read_test.rb +88 -0
  200. data/test/lib/vedeu/support/refresh_test.rb +44 -12
  201. data/test/lib/vedeu/support/sentence_test.rb +6 -4
  202. data/test/lib/vedeu/support/terminal_test.rb +81 -70
  203. data/test/lib/vedeu/support/text_test.rb +93 -0
  204. data/test/lib/vedeu/support/trace_test.rb +21 -9
  205. data/test/lib/vedeu/support/visible_test.rb +148 -0
  206. data/test/lib/vedeu/support/write_test.rb +136 -0
  207. data/test/lib/vedeu/traps_test.rb +11 -0
  208. data/test/lib/vedeu_test.rb +2 -0
  209. data/test/support/helpers/all.rb +7 -0
  210. data/test/support/helpers/dsl_model_test_class.rb +25 -0
  211. data/test/support/{test_classes → helpers}/helpers.rb +0 -2
  212. data/test/support/helpers/misc.rb +15 -0
  213. data/test/support/helpers/model_test_class.rb +34 -0
  214. data/test/support/{test_classes → helpers}/presentation.rb +0 -0
  215. data/test/support/{test_classes → helpers}/repositories.rb +3 -3
  216. data/test/support/{test_modules/repository.rb → helpers/repository_test_module.rb} +5 -1
  217. data/test/test_helper.rb +19 -22
  218. data/vedeu.gemspec +11 -6
  219. metadata +322 -181
  220. data/lib/vedeu/api/api.rb +0 -239
  221. data/lib/vedeu/api/composition.rb +0 -38
  222. data/lib/vedeu/api/defined.rb +0 -52
  223. data/lib/vedeu/api/helpers.rb +0 -161
  224. data/lib/vedeu/api/interface.rb +0 -287
  225. data/lib/vedeu/api/keymap.rb +0 -75
  226. data/lib/vedeu/api/line.rb +0 -107
  227. data/lib/vedeu/api/menu.rb +0 -111
  228. data/lib/vedeu/api/stream.rb +0 -96
  229. data/lib/vedeu/models/border.rb +0 -238
  230. data/lib/vedeu/models/char.rb +0 -43
  231. data/lib/vedeu/models/composition.rb +0 -72
  232. data/lib/vedeu/models/line.rb +0 -100
  233. data/lib/vedeu/models/stream.rb +0 -130
  234. data/lib/vedeu/models/style.rb +0 -52
  235. data/lib/vedeu/repositories/buffers.rb +0 -52
  236. data/lib/vedeu/repositories/cursors.rb +0 -64
  237. data/lib/vedeu/repositories/events.rb +0 -147
  238. data/lib/vedeu/repositories/groups.rb +0 -47
  239. data/lib/vedeu/repositories/interfaces.rb +0 -78
  240. data/lib/vedeu/repositories/keymaps.rb +0 -196
  241. data/lib/vedeu/repositories/models/cursor.rb +0 -209
  242. data/lib/vedeu/repositories/models/interface.rb +0 -163
  243. data/lib/vedeu/repositories/models/keymap.rb +0 -111
  244. data/lib/vedeu/repositories/models/offset.rb +0 -91
  245. data/lib/vedeu/repositories/offsets.rb +0 -69
  246. data/lib/vedeu/support/exceptions.rb +0 -34
  247. data/lib/vedeu/support/keymap_validator.rb +0 -100
  248. data/lib/vedeu/support/model.rb +0 -14
  249. data/lib/vedeu/support/presentation.rb +0 -86
  250. data/lib/vedeu/support/registrar.rb +0 -53
  251. data/test/integration/api/api_test.rb +0 -97
  252. data/test/integration/api_dsl/dsl_api_test.rb +0 -4
  253. data/test/integration/api_dsl/dsl_composition_test.rb +0 -4
  254. data/test/integration/api_dsl/dsl_defined_test.rb +0 -4
  255. data/test/integration/api_dsl/dsl_helpers_test.rb +0 -4
  256. data/test/integration/api_dsl/dsl_interface_test.rb +0 -4
  257. data/test/integration/api_dsl/dsl_keymap.rb +0 -4
  258. data/test/integration/api_dsl/dsl_line_test.rb +0 -4
  259. data/test/integration/api_dsl/dsl_menu_test.rb +0 -4
  260. data/test/integration/api_dsl/dsl_stream_test.rb +0 -138
  261. data/test/integration/cursors_test.rb +0 -9
  262. data/test/integration/defining_interfaces_test.rb +0 -26
  263. data/test/integration/run_once_test.rb +0 -26
  264. data/test/integration/views/basic_view_test.rb +0 -807
  265. data/test/lib/vedeu/api/api_test.rb +0 -204
  266. data/test/lib/vedeu/api/composition_test.rb +0 -31
  267. data/test/lib/vedeu/api/defined_test.rb +0 -79
  268. data/test/lib/vedeu/api/helpers_test.rb +0 -111
  269. data/test/lib/vedeu/api/interface_test.rb +0 -410
  270. data/test/lib/vedeu/api/keymap_test.rb +0 -65
  271. data/test/lib/vedeu/api/line_test.rb +0 -83
  272. data/test/lib/vedeu/api/menu_test.rb +0 -85
  273. data/test/lib/vedeu/api/stream_test.rb +0 -59
  274. data/test/lib/vedeu/colours/translator_test.rb +0 -22
  275. data/test/lib/vedeu/models/border_test.rb +0 -197
  276. data/test/lib/vedeu/models/char_test.rb +0 -52
  277. data/test/lib/vedeu/models/composition_test.rb +0 -45
  278. data/test/lib/vedeu/models/key_test.rb +0 -43
  279. data/test/lib/vedeu/models/line_test.rb +0 -123
  280. data/test/lib/vedeu/models/stream_test.rb +0 -233
  281. data/test/lib/vedeu/models/style_test.rb +0 -59
  282. data/test/lib/vedeu/repositories/buffers_test.rb +0 -37
  283. data/test/lib/vedeu/repositories/cursors_test.rb +0 -62
  284. data/test/lib/vedeu/repositories/events_test.rb +0 -57
  285. data/test/lib/vedeu/repositories/groups_test.rb +0 -28
  286. data/test/lib/vedeu/repositories/interfaces_test.rb +0 -51
  287. data/test/lib/vedeu/repositories/keymaps_test.rb +0 -223
  288. data/test/lib/vedeu/repositories/models/buffer_test.rb +0 -174
  289. data/test/lib/vedeu/repositories/models/cursor_test.rb +0 -158
  290. data/test/lib/vedeu/repositories/models/event_test.rb +0 -53
  291. data/test/lib/vedeu/repositories/models/group_test.rb +0 -98
  292. data/test/lib/vedeu/repositories/models/interface_test.rb +0 -130
  293. data/test/lib/vedeu/repositories/models/keymap_test.rb +0 -27
  294. data/test/lib/vedeu/repositories/models/menu_test.rb +0 -246
  295. data/test/lib/vedeu/repositories/models/offset_test.rb +0 -128
  296. data/test/lib/vedeu/repositories/offsets_test.rb +0 -39
  297. data/test/lib/vedeu/support/keymap_validator_test.rb +0 -62
  298. data/test/lib/vedeu/support/model_test.rb +0 -23
  299. data/test/lib/vedeu/support/presentation_test.rb +0 -53
  300. data/test/lib/vedeu/support/registrar_test.rb +0 -94
  301. data/test/lib/vedeu/support/repository_test.rb +0 -208
  302. data/test/support/test_classes/all.rb +0 -5
  303. data/test/support/test_classes/coercions.rb +0 -16
  304. data/test/support/test_classes/model.rb +0 -23
  305. data/test/support/test_modules/all.rb +0 -1
@@ -0,0 +1,112 @@
1
+ module Vedeu
2
+
3
+ class Mapper
4
+
5
+ # @param key [NilClass|String|Symbol]
6
+ # @param name [NilClass|String]
7
+ # @return [Boolean]
8
+ def self.keypress(key = nil, name = nil)
9
+ return false unless key
10
+
11
+ new(key, name).keypress
12
+ end
13
+
14
+ # @param key [NilClass|String|Symbol]
15
+ # @param name [NilClass|String]
16
+ # @return [Boolean]
17
+ def self.valid?(key = nil, name = nil)
18
+ return false unless key
19
+
20
+ new(key, name).valid?
21
+ end
22
+
23
+ # @param key [NilClass|String|Symbol]
24
+ # @param name [NilClass|String]
25
+ # @param repository [NilClass|Repository]
26
+ # @return [Mapper]
27
+ def initialize(key = nil, name = nil, repository = nil)
28
+ @key = key
29
+ @name = name
30
+ @repository = repository || Vedeu.keymaps
31
+ end
32
+
33
+ # @return [Boolean]
34
+ def keypress
35
+ return false unless key
36
+
37
+ return true if key_defined? && keymap.use(key)
38
+
39
+ return true if global_key? && keymap(global).use(key)
40
+
41
+ return true if system_key? && keymap(system).use(key)
42
+
43
+ false
44
+ end
45
+
46
+ # @return [Boolean]
47
+ def valid?
48
+ return false unless key
49
+
50
+ return false if key_defined?
51
+
52
+ return false if global_key?
53
+
54
+ return false if system_key?
55
+
56
+ true
57
+ end
58
+
59
+ private
60
+
61
+ attr_reader :key, :repository
62
+
63
+ # @return [Boolean]
64
+ def global_key?
65
+ key_defined?(global)
66
+ end
67
+
68
+ # @return [Boolean]
69
+ def system_key?
70
+ key_defined?(system)
71
+ end
72
+
73
+ # @param named [NilClass|String]
74
+ # @return [Boolean]
75
+ def key_defined?(named = name)
76
+ keymap?(named) && keymap(named).key_defined?(key)
77
+ end
78
+
79
+ # @param named [NilClass|String]
80
+ # @return [Keymap]
81
+ def keymap(named = name)
82
+ repository.find(named)
83
+ end
84
+
85
+ # @param named [NilClass|String]
86
+ # @return [Boolean]
87
+ def keymap?(named = name)
88
+ repository.registered?(named)
89
+ end
90
+
91
+ # With a name, we check the keymap with that name, otherwise we use the
92
+ # name of the interface currently in focus.
93
+ #
94
+ # @return [String|NilClass]
95
+ def name
96
+ @name || Vedeu.focus
97
+ end
98
+ alias_method :interface, :name
99
+
100
+ # @return [String]
101
+ def global
102
+ '_global_'
103
+ end
104
+
105
+ # @return [String]
106
+ def system
107
+ '_system_'
108
+ end
109
+
110
+ end # Mapper
111
+
112
+ end # Vedeu
@@ -46,14 +46,12 @@ module Vedeu
46
46
  def execute!
47
47
  $stdin, $stdout, $stderr = @stdin, @stdout, @stderr
48
48
 
49
- Configuration.configure(argv)
50
-
51
- Application.start
49
+ Application.start(configuration)
52
50
 
53
51
  @exit_code = 0
54
52
  rescue StandardError => uncaught_exception
55
53
  puts uncaught_exception.message
56
- puts uncaught_exception.backtrace.join("\n")
54
+ puts uncaught_exception.backtrace.join("\n") if configuration.debug?
57
55
 
58
56
  ensure
59
57
  Vedeu.log("Exiting gracefully.")
@@ -66,6 +64,11 @@ module Vedeu
66
64
 
67
65
  attr_reader :argv
68
66
 
67
+ # @return []
68
+ def configuration
69
+ Configuration.configure(argv)
70
+ end
71
+
69
72
  end # Launcher
70
73
 
71
74
  end # Vedeu
@@ -0,0 +1,12 @@
1
+ require 'vedeu/models/collection'
2
+
3
+ require 'vedeu/models/view/all'
4
+
5
+ require 'vedeu/models/focus'
6
+ require 'vedeu/models/geometry'
7
+ require 'vedeu/models/group'
8
+ require 'vedeu/models/menu'
9
+ require 'vedeu/models/model'
10
+
11
+ module Vedeu
12
+ end # Vedeu
@@ -0,0 +1,71 @@
1
+ module Vedeu
2
+
3
+ module Model
4
+
5
+ # Convert an Array into an object which has some meaning in the context it
6
+ # is being used.
7
+ #
8
+ # @private
9
+ class Collection
10
+
11
+ include Enumerable
12
+
13
+ attr_accessor :parent, :name
14
+
15
+ def self.coerce(collection = [], parent = nil, name = nil)
16
+ if collection.kind_of?(Vedeu::Model::Collection)
17
+ collection
18
+
19
+ elsif collection.is_a?(Array)
20
+ new(collection, parent, name)
21
+
22
+ else
23
+ new(Array(collection), parent, name)
24
+
25
+ end
26
+ end
27
+
28
+ def initialize(collection = [], parent = nil, name = nil)
29
+ @collection = collection
30
+ @parent = parent
31
+ @name = name
32
+ end
33
+
34
+ def [](value)
35
+ @collection[value]
36
+ end
37
+
38
+ # @return [Vedeu::Model::Collection]
39
+ def add(*other)
40
+ self.class.new(@collection += other, parent, name)
41
+ end
42
+ alias_method :<<, :add
43
+
44
+ def all
45
+ @collection
46
+ end
47
+
48
+ def each(&block)
49
+ @collection.each(&block)
50
+ end
51
+
52
+ # @return [Boolean]
53
+ def empty?
54
+ @collection.empty?
55
+ end
56
+
57
+ # @return [Fixnum]
58
+ def size
59
+ @collection.size
60
+ end
61
+
62
+ # @return [String]
63
+ def to_s
64
+ @collection.map(&:to_s).join
65
+ end
66
+
67
+ end # Collection
68
+
69
+ end # Model
70
+
71
+ end # Vedeu
@@ -7,7 +7,6 @@ module Vedeu
7
7
  # @api private
8
8
  module Focus
9
9
 
10
- include Repository
11
10
  extend self
12
11
 
13
12
  # Add an interface name to the focus list unless it is already registered.
@@ -17,48 +16,48 @@ module Vedeu
17
16
  # collection, making that interface the currently focussed interface.
18
17
  # @return [Array] The collection of interface names.
19
18
  def add(name, focus = false)
20
- return storage if registered?(name)
19
+ if registered?(name)
20
+ return storage unless focus
21
21
 
22
- if focus
23
- storage.unshift(name)
22
+ by_name(name)
23
+ storage
24
24
 
25
25
  else
26
- storage.push(name)
26
+ Vedeu.log("Storing focus entry: '#{name}'")
27
27
 
28
+ if focus
29
+ storage.unshift(name)
30
+
31
+ else
32
+ storage.push(name)
33
+
34
+ end
28
35
  end
29
36
  end
30
37
 
31
- # Focus an interface by name.
38
+ # Focus an interface by name. Used after defining an interface or interfaces
39
+ # to set the initially focussed interface.
32
40
  #
33
- # @param name [String]
41
+ # @param name [String] The interface to focus; must be defined.
34
42
  # @raise [ModelNotFound] When the interface cannot be found.
35
- # @return [String]
43
+ # @return [String] The name of the interface now in focus.
36
44
  def by_name(name)
37
- fail ModelNotFound unless registered?(name)
45
+ fail ModelNotFound, "Cannot focus '#{name}' as this interface has not " \
46
+ "been registered." unless registered?(name)
38
47
 
39
48
  storage.rotate!(storage.index(name))
40
49
 
41
50
  update
42
51
  end
52
+ alias_method :focus_by_name, :by_name
43
53
 
44
54
  # Return the interface currently focussed.
45
55
  #
46
- # @raise [NoInterfacesDefined] When no interfaces are defined, we cannot
47
- # make one focussed.
48
56
  # @return [String]
49
57
  def current
50
- fail NoInterfacesDefined if empty?
51
-
52
58
  storage.first
53
59
  end
54
-
55
- # Return the cursor for the currently focussed interface. May be hidden.
56
- #
57
- # @return [String] The escape sequence to render the cursor as shown or
58
- # hidden.
59
- def cursor
60
- Interface.new(Interfaces.find(current)).cursor.to_s
61
- end
60
+ alias_method :focus, :current
62
61
 
63
62
  # Returns a boolean indicating whether the named interface is focussed.
64
63
  #
@@ -67,6 +66,14 @@ module Vedeu
67
66
  def current?(name)
68
67
  current == name
69
68
  end
69
+ alias_method :focussed?, :current?
70
+
71
+ # Return a boolean indicating whether the storage is empty.
72
+ #
73
+ # @return [Boolean]
74
+ def empty?
75
+ storage.empty?
76
+ end
70
77
 
71
78
  # Put the next interface relative to the current interfaces in focus.
72
79
  #
@@ -77,6 +84,7 @@ module Vedeu
77
84
  update
78
85
  end
79
86
  alias_method :next, :next_item
87
+ alias_method :focus_next, :next_item
80
88
 
81
89
  # Put the previous interface relative to the current interface in focus.
82
90
  #
@@ -88,6 +96,7 @@ module Vedeu
88
96
  end
89
97
  alias_method :prev, :prev_item
90
98
  alias_method :previous, :prev_item
99
+ alias_method :focus_previous, :prev_item
91
100
 
92
101
  # Refresh the interface in focus.
93
102
  #
@@ -96,6 +105,32 @@ module Vedeu
96
105
  Vedeu.trigger("_refresh_#{current}_".to_sym)
97
106
  end
98
107
 
108
+ # Returns a collection of the names of all the registered entities.
109
+ #
110
+ # @return [Array]
111
+ def registered
112
+ return [] if empty?
113
+
114
+ storage
115
+ end
116
+
117
+ # Returns a boolean indicating whether the named model is registered.
118
+ #
119
+ # @param name [String]
120
+ # @return [Boolean]
121
+ def registered?(name)
122
+ return false if empty?
123
+
124
+ storage.include?(name)
125
+ end
126
+
127
+ # Reset the repository.
128
+ #
129
+ # @return [Array|Hash|Set]
130
+ def reset
131
+ @_storage = in_memory
132
+ end
133
+
99
134
  private
100
135
 
101
136
  # Return the name of the interface in focus after triggering the refresh
@@ -112,6 +147,13 @@ module Vedeu
112
147
  current
113
148
  end
114
149
 
150
+ # Access to the storage for this repository.
151
+ #
152
+ # @return [Hash]
153
+ def storage
154
+ @_storage ||= in_memory
155
+ end
156
+
115
157
  # Returns an empty collection ready for the storing of interface names.
116
158
  #
117
159
  # @return [Array]