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
@@ -1,238 +0,0 @@
1
- module Vedeu
2
-
3
- #
4
- #
5
- # @note Refer to UTF-8 U+2500 to U+257F for border characters. More details
6
- # can be found at: http://en.wikipedia.org/wiki/Box-drawing_character
7
- #
8
- class Border
9
-
10
- # Returns a new instance of Border.
11
- #
12
- # @param interface [Interface]
13
- # @param attributes [Hash]
14
- # @return [Border]
15
- def initialize(interface, attributes = {})
16
- @interface = interface
17
- @attributes = defaults.merge(attributes)
18
- end
19
-
20
- def enabled?
21
- attributes[:enabled]
22
- end
23
-
24
- def bottom?
25
- attributes[:show_bottom]
26
- end
27
-
28
- def left?
29
- attributes[:show_left]
30
- end
31
-
32
- def right?
33
- attributes[:show_right]
34
- end
35
-
36
- def top?
37
- attributes[:show_top]
38
- end
39
-
40
- def to_s
41
- to_viewport.map { |line| line.flatten.join }.join("\n")
42
- end
43
-
44
- def to_viewport
45
- return viewport unless enabled?
46
-
47
- out = []
48
-
49
- out << top if top?
50
-
51
- viewport[0...height].each do |line|
52
- out << [left, line[0...width], right].flatten
53
- end
54
-
55
- out << bottom if bottom?
56
-
57
- out
58
- end
59
-
60
- private
61
-
62
- attr_reader :attributes, :interface, :attributes
63
-
64
- def bottom
65
- return [] unless bottom?
66
-
67
- out = []
68
-
69
- out << bottom_left if left?
70
- horizontal_border.each do |border|
71
- out << border
72
- end
73
- out << bottom_right if right?
74
-
75
- out
76
- end
77
-
78
- def left
79
- return '' unless left?
80
-
81
- vertical_border
82
- end
83
-
84
- def right
85
- return '' unless right?
86
-
87
- vertical_border
88
- end
89
-
90
- def top
91
- return [] unless top?
92
-
93
- out = []
94
- out << top_left if left?
95
- horizontal_border.each do |border|
96
- out << border
97
- end
98
- out << top_right if right?
99
-
100
- out
101
- end
102
-
103
- def bottom_left
104
- [*presentation, on, bl, off, *reset].join
105
- end
106
-
107
- def bottom_right
108
- [*presentation, on, br, off, *reset].join
109
- end
110
-
111
- def top_left
112
- [*presentation, on, tl, off, *reset].join
113
- end
114
-
115
- def top_right
116
- [*presentation, on, tr, off, *reset].join
117
- end
118
-
119
- def width
120
- if left? && right?
121
- interface.width - 2
122
-
123
- elsif left? || right?
124
- interface.width - 1
125
-
126
- else
127
- interface.width
128
-
129
- end
130
- end
131
-
132
- def height
133
- if top? && bottom?
134
- interface.height - 2
135
-
136
- elsif top? || bottom?
137
- interface.height - 1
138
-
139
- else
140
- interface.height
141
-
142
- end
143
- end
144
-
145
- def horizontal_border
146
- [[*presentation, on, h, off, *reset].join] * width
147
- end
148
-
149
- def horizontal_space
150
- [' '] * width
151
- end
152
-
153
- def vertical_border
154
- [*presentation, on, v, off, *reset].join
155
- end
156
-
157
- def h
158
- attributes[:horizontal]
159
- end
160
-
161
- def v
162
- attributes[:vertical]
163
- end
164
-
165
- def tr
166
- attributes[:top_right]
167
- end
168
-
169
- def tl
170
- attributes[:top_left]
171
- end
172
-
173
- def br
174
- attributes[:bottom_right]
175
- end
176
-
177
- def bl
178
- attributes[:bottom_left]
179
- end
180
-
181
- def on
182
- "\e(0"
183
- end
184
-
185
- def off
186
- "\e(B"
187
- end
188
-
189
- def viewport
190
- interface.viewport
191
- end
192
-
193
- def presentation
194
- [colour.to_s, style.to_s]
195
- end
196
-
197
- def reset
198
- [interface.colour.to_s, interface.style.to_s]
199
- end
200
-
201
- # Returns a new Colour instance.
202
- #
203
- # @return [Colour]
204
- def colour
205
- @colour ||= Colour.new(attributes[:colour])
206
- end
207
-
208
- # Returns a new Style instance.
209
- #
210
- # @return [Style]
211
- def style
212
- @style ||= Style.new(attributes[:style])
213
- end
214
-
215
- # The default values for a new instance of Border.
216
- #
217
- # @return [Hash]
218
- def defaults
219
- {
220
- enabled: false,
221
- show_bottom: true,
222
- show_left: true,
223
- show_right: true,
224
- show_top: true,
225
- bottom_right: "\x6A", # ┘
226
- top_right: "\x6B", # ┐
227
- top_left: "\x6C", # ┌
228
- bottom_left: "\x6D", # └
229
- horizontal: "\x71", # ─
230
- colour: {},
231
- style: [],
232
- vertical: "\x78", # │
233
- }
234
- end
235
-
236
- end # Border
237
-
238
- end # Vedeu
@@ -1,43 +0,0 @@
1
- module Vedeu
2
-
3
- # A Char represents a single character of the terminal. It is a container for
4
- # the a single character in a {Vedeu::Stream}.
5
- #
6
- # @note The parent of a Char is a Line.
7
- # @todo Colour and style is not being correctly reset. (GL 2014-10-19)
8
- #
9
- # @api private
10
- class Char
11
-
12
- include Presentation
13
-
14
- attr_reader :attributes, :parent, :value
15
- alias_method :data, :value
16
-
17
- # Returns a new instance of Char.
18
- #
19
- # @param attributes [Hash]
20
- # @return [Char]
21
- def initialize(attributes = {})
22
- @attributes = defaults.merge(attributes)
23
- @parent = @attributes[:parent]
24
- @value = @attributes[:value]
25
- end
26
-
27
- private
28
-
29
- # The default values for a new instance of Char.
30
- #
31
- # @return [Hash]
32
- def defaults
33
- {
34
- colour: {},
35
- parent: nil,
36
- style: [],
37
- value: '',
38
- }
39
- end
40
-
41
- end # Char
42
-
43
- end # Vedeu
@@ -1,72 +0,0 @@
1
- module Vedeu
2
-
3
- # A composition is a collection of interfaces.
4
- #
5
- # @api private
6
- class Composition
7
-
8
- attr_reader :attributes
9
-
10
- # Builds a new composition, ready to be rendered to the screen.
11
- #
12
- # @param attributes [Hash]
13
- # @param block [Proc]
14
- # @return [Hash]
15
- def self.build(attributes = {}, &block)
16
- new(attributes, &block).attributes
17
- end
18
-
19
- # Returns a new instance of Composition.
20
- #
21
- # @param attributes [Hash]
22
- # @param block [Proc]
23
- # @return [Composition]
24
- def initialize(attributes = {}, &block)
25
- @attributes = defaults.merge(attributes)
26
-
27
- if block_given?
28
- @self_before_instance_eval = eval('self', block.binding)
29
-
30
- instance_eval(&block)
31
- end
32
- end
33
-
34
- # Returns a collection of interfaces associated with this composition.
35
- #
36
- # @return [Array]
37
- def interfaces
38
- @interfaces ||= Interface.coercer(attributes[:interfaces])
39
- end
40
-
41
- # Returns the view attributes for a Composition, which will always be none,
42
- # as a composition is a merely a collection of interfaces.
43
- #
44
- # @return [Hash]
45
- def view_attributes
46
- {}
47
- end
48
-
49
- private
50
-
51
- # The default values for a new instance of Composition.
52
- #
53
- # @return [Hash]
54
- def defaults
55
- {
56
- interfaces: []
57
- }
58
- end
59
-
60
- # @param method [Symbol] The name of the method sought.
61
- # @param args [Array] The arguments which the method was to be invoked with.
62
- # @param block [Proc] The optional block provided to the method.
63
- # @return []
64
- def method_missing(method, *args, &block)
65
- Vedeu.log("Composition#method_missing '#{method}' (args: #{args.inspect})")
66
-
67
- @self_before_instance_eval.send(method, *args, &block) if @self_before_instance_eval
68
- end
69
-
70
- end # Composition
71
-
72
- end # Vedeu
@@ -1,100 +0,0 @@
1
- module Vedeu
2
-
3
- # A Line represents a single row of the terminal. It is a container for
4
- # {Vedeu::Stream} objects. A line's width is determined by the
5
- # {Vedeu::Interface} it belongs to.
6
- #
7
- # @api private
8
- class Line
9
-
10
- include Coercions
11
- include Presentation
12
-
13
- attr_reader :attributes, :parent
14
-
15
- # Builds up a new Line object and returns the attributes.
16
- #
17
- # @param attributes [Hash]
18
- # @param block [Proc]
19
- # @return [Hash]
20
- def self.build(attributes = {}, &block)
21
- new(attributes, &block).attributes
22
- end
23
-
24
- # Returns a new instance of Line.
25
- #
26
- # @param attributes [Hash]
27
- # @param block [Proc]
28
- # @return [Line]
29
- def initialize(attributes = {}, &block)
30
- @attributes = defaults.merge(attributes)
31
- @parent = @attributes[:parent]
32
-
33
- if block_given?
34
- @self_before_instance_eval = eval('self', block.binding)
35
-
36
- instance_eval(&block)
37
- end
38
- end
39
-
40
- # Returns an array of all the characters with formatting for this line.
41
- #
42
- # @return [Array]
43
- # @see Vedeu::Stream
44
- def chars
45
- return [] if empty?
46
-
47
- @_chars ||= streams.map(&:chars).flatten
48
- end
49
-
50
- # Returns a boolean indicating whether the line has content.
51
- #
52
- # @return [Boolean]
53
- def empty?
54
- size == 0
55
- end
56
-
57
- # Returns the size of the content in characters without formatting.
58
- #
59
- # @return [Fixnum]
60
- def size
61
- streams.map(&:size).inject(0, :+) { |sum, x| sum += x }
62
- end
63
-
64
- # Returns a collection of streams associated with this line. This method
65
- # also has the alias_method :data, a convenience method to provide
66
- # Presentation with a consistent interface.
67
- #
68
- # @return [Array]
69
- def streams
70
- @streams ||= Stream.coercer(attributes[:streams])
71
- end
72
- alias_method :data, :streams
73
-
74
- private
75
-
76
- # The default values for a new instance of Line.
77
- #
78
- # @return [Hash]
79
- def defaults
80
- {
81
- colour: {},
82
- streams: [],
83
- style: [],
84
- parent: nil,
85
- }
86
- end
87
-
88
- # @param method [Symbol] The name of the method sought.
89
- # @param args [Array] The arguments which the method was to be invoked with.
90
- # @param block [Proc] The optional block provided to the method.
91
- # @return []
92
- def method_missing(method, *args, &block)
93
- Vedeu.log("Line#method_missing '#{method}' (args: #{args.inspect})")
94
-
95
- @self_before_instance_eval.send(method, *args, &block) if @self_before_instance_eval
96
- end
97
-
98
- end # Line
99
-
100
- end # Vedeu
@@ -1,130 +0,0 @@
1
- module Vedeu
2
-
3
- # A Stream can represent a character or collection of characters as part of a
4
- # {Vedeu::Line} which you wish to colour and style independently of the other
5
- # characters in that line.
6
- #
7
- # @api private
8
- class Stream
9
-
10
- include Coercions
11
- include Presentation
12
-
13
- attr_reader :attributes, :align, :text, :width, :parent
14
-
15
- # Builds up a new Stream object and returns the attributes.
16
- #
17
- # @param attributes [Hash]
18
- # @param block [Proc]
19
- # @return [Hash]
20
- def self.build(attributes = {}, &block)
21
- new(attributes, &block).attributes
22
- end
23
-
24
- # Returns a new instance of Stream.
25
- #
26
- # @param attributes [Hash]
27
- # @param block [Proc]
28
- # @return [Stream]
29
- def initialize(attributes = {}, &block)
30
- @attributes = defaults.merge(attributes)
31
- @align = @attributes[:align]
32
- @text = @attributes[:text]
33
- @width = @attributes[:width]
34
- @parent = @attributes[:parent]
35
-
36
- if block_given?
37
- @self_before_instance_eval = eval('self', block.binding)
38
-
39
- instance_eval(&block)
40
- end
41
- end
42
-
43
- # Returns an array of characters, each element is the escape sequences of
44
- # colours and styles for this stream, the character itself, and the escape
45
- # sequences of colours and styles for the parent of the stream
46
- # ({Vedeu::Line}).
47
- #
48
- # @return [Array]
49
- def chars
50
- return [] if empty?
51
-
52
- char_attrs = view_attributes.merge!({ parent: parent })
53
-
54
- @_chars ||= content.chars.map do |c|
55
- Char.new(char_attrs.merge!({ value: c })).to_s
56
- end
57
- end
58
-
59
- # Returns the text aligned if a width was set, otherwise just the text. This
60
- # method also has the alias_method :data, a convenience method to provide
61
- # Presentation with a consistent interface.
62
- #
63
- # @return [String]
64
- def content
65
- width? ? aligned : text
66
- end
67
- alias_method :data, :content
68
-
69
- # Returns a boolean indicating whether the stream has content.
70
- #
71
- # @return [Boolean]
72
- def empty?
73
- size == 0
74
- end
75
-
76
- # Returns the size of the content in characters without formatting.
77
- #
78
- # @return [Fixnum]
79
- def size
80
- content.size
81
- end
82
-
83
- private
84
-
85
- # Returns an aligned string if the string is shorter than the specified
86
- # width; the excess area being padded by spaces.
87
- #
88
- # @return [String]
89
- def aligned
90
- case align
91
- when :right then text.rjust(width, ' ')
92
- when :centre then text.center(width, ' ')
93
- else text.ljust(width, ' ')
94
- end
95
- end
96
-
97
- # Returns a boolean to indicate whether this stream has a width set.
98
- #
99
- # @return [Boolean]
100
- def width?
101
- !!width
102
- end
103
-
104
- # The default values for a new instance of Stream.
105
- #
106
- # @return [Hash]
107
- def defaults
108
- {
109
- colour: {},
110
- style: [],
111
- text: '',
112
- width: nil,
113
- align: :left,
114
- parent: nil,
115
- }
116
- end
117
-
118
- # @param method [Symbol] The name of the method sought.
119
- # @param args [Array] The arguments which the method was to be invoked with.
120
- # @param block [Proc] The optional block provided to the method.
121
- # @return []
122
- def method_missing(method, *args, &block)
123
- Vedeu.log("Stream#method_missing '#{method}' (args: #{args.inspect})")
124
-
125
- @self_before_instance_eval.send(method, *args, &block) if @self_before_instance_eval
126
- end
127
-
128
- end # Stream
129
-
130
- end # Vedeu
@@ -1,52 +0,0 @@
1
- module Vedeu
2
-
3
- # Converts the style value or value collection into a terminal escape
4
- # sequence. Unrecognised values are discarded- an empty string is returned.
5
- #
6
- # @api private
7
- class Style
8
-
9
- include Vedeu::Common
10
-
11
- attr_reader :attributes, :values
12
-
13
- # Return a new instance of Style.
14
- #
15
- # @param values [String|Array] The style value or values collection.
16
- # @return [Style]
17
- def initialize(values)
18
- @values = values
19
- end
20
-
21
- # Return an attributes hash for this class.
22
- #
23
- # @return [Hash]
24
- def attributes
25
- {
26
- style: values
27
- }
28
- end
29
-
30
- # Return the terminal escape sequences for the values provided.
31
- #
32
- # @return [String]
33
- def to_s
34
- escape_sequences
35
- end
36
-
37
- private
38
-
39
- # Converts the style or styles into terminal escape sequences.
40
- #
41
- # @return [String]
42
- def escape_sequences
43
- return '' unless defined_value?(values)
44
-
45
- @_sequences ||= Array(values).flatten.map do |value|
46
- Esc.string(value)
47
- end.join
48
- end
49
-
50
- end # Style
51
-
52
- end # Vedeu
@@ -1,52 +0,0 @@
1
- module Vedeu
2
-
3
- # Stores interface views to be later combined with interface geometry to be
4
- # displayed.
5
- #
6
- # @api private
7
- module Buffers
8
-
9
- include Repository
10
- extend self
11
-
12
- # Add an interface view into the back buffer. If the buffer is already
13
- # registered, then we preserve its front buffer. Returns the name of the
14
- # buffer added to storage.
15
- #
16
- # @param attributes [Hash]
17
- # @return [String] The name of the buffer that has been added.
18
- def add(attributes)
19
- validate_attributes!(attributes)
20
-
21
- name = attributes[:name]
22
-
23
- if registered?(name)
24
- Vedeu.log("Adding new content to existing buffer: '#{name}'")
25
-
26
- find(name).add(attributes)
27
-
28
- else
29
- Vedeu.log("Adding new buffer: '#{name}'")
30
-
31
- model.new({ name: name }).add(attributes)
32
-
33
- end
34
-
35
- name
36
- end
37
-
38
- private
39
-
40
- # @return [Class] The model class for this repository.
41
- def model
42
- Vedeu::Buffer
43
- end
44
-
45
- # @return [Hash]
46
- def in_memory
47
- {}
48
- end
49
-
50
- end # Buffers
51
-
52
- end # Vedeu