vedeu 0.7.4 → 0.8.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 (277) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/docs/api.md +5 -1
  4. data/docs/borders.md +2 -26
  5. data/docs/dsl.md +4 -4
  6. data/docs/dsl_elements.md +100 -0
  7. data/docs/events/by_name/action.md +3 -0
  8. data/docs/events/by_name/cursor_hide.md +3 -0
  9. data/docs/events/by_name/cursor_reset.md +3 -0
  10. data/docs/events/by_name/cursor_show.md +3 -0
  11. data/docs/events/by_name/geometry_down.md +3 -0
  12. data/docs/events/by_name/geometry_left.md +3 -0
  13. data/docs/events/by_name/geometry_right.md +3 -0
  14. data/docs/events/by_name/geometry_up.md +3 -0
  15. data/docs/events/by_name/hide_view.md +3 -0
  16. data/docs/events/by_name/set_border_caption.md +13 -0
  17. data/docs/events/by_name/set_border_title.md +13 -0
  18. data/docs/events/by_name/show_view.md +3 -0
  19. data/docs/events/by_name/standalone.md +3 -0
  20. data/docs/events/by_name/toggle_view.md +3 -0
  21. data/docs/events/by_name/view_down.md +4 -0
  22. data/docs/events/by_name/view_left.md +4 -0
  23. data/docs/events/by_name/view_right.md +4 -0
  24. data/docs/events/by_name/view_up.md +4 -0
  25. data/examples/views/empty_template.rb +46 -0
  26. data/examples/views/expected/line.out +1 -0
  27. data/examples/views/expected/lines.out +1 -0
  28. data/examples/views/expected/lines_alignment.out +1 -0
  29. data/examples/views/line.rb +220 -0
  30. data/examples/views/lines.rb +281 -0
  31. data/examples/views/lines_alignment.rb +231 -0
  32. data/examples/views/lines_line_stream.rb +99 -0
  33. data/examples/views/lines_line_streams.rb +73 -0
  34. data/examples/views/lines_line_streams_stream.rb +83 -0
  35. data/examples/views/lines_line_streams_stream_stream.rb +53 -0
  36. data/examples/views/lines_streams.rb +50 -0
  37. data/examples/views/lines_streams_stream.rb +51 -0
  38. data/examples/views/runner.sh +27 -0
  39. data/lib/vedeu/all.rb +6 -2
  40. data/lib/vedeu/application/controller.rb +1 -1
  41. data/lib/vedeu/boolean.rb +35 -0
  42. data/lib/vedeu/borders/border.rb +3 -3
  43. data/lib/vedeu/borders/caption.rb +1 -1
  44. data/lib/vedeu/borders/dsl.rb +1 -20
  45. data/lib/vedeu/borders/title.rb +6 -8
  46. data/lib/vedeu/buffers/buffer.rb +2 -2
  47. data/lib/vedeu/buffers/refresh.rb +1 -1
  48. data/lib/vedeu/cells/border.rb +0 -11
  49. data/lib/vedeu/cells/empty.rb +4 -4
  50. data/lib/vedeu/{geometries/alignment → coercers}/alignment.rb +50 -53
  51. data/lib/vedeu/coercers/all.rb +16 -0
  52. data/lib/vedeu/coercers/colour.rb +78 -0
  53. data/lib/vedeu/coercers/colour_attributes.rb +122 -0
  54. data/lib/vedeu/coercers/horizontal_alignment.rb +28 -0
  55. data/lib/vedeu/coercers/vertical_alignment.rb +27 -0
  56. data/lib/vedeu/colours/all.rb +1 -0
  57. data/lib/vedeu/colours/background.rb +13 -2
  58. data/lib/vedeu/colours/colour.rb +16 -31
  59. data/lib/vedeu/colours/foreground.rb +13 -2
  60. data/lib/vedeu/colours/translator.rb +21 -59
  61. data/lib/vedeu/colours/validator.rb +84 -0
  62. data/lib/vedeu/common.rb +52 -0
  63. data/lib/vedeu/configuration/api.rb +4 -10
  64. data/lib/vedeu/configuration/configuration.rb +4 -4
  65. data/lib/vedeu/cursors/coordinate.rb +1 -1
  66. data/lib/vedeu/cursors/cursor.rb +1 -1
  67. data/lib/vedeu/cursors/dsl.rb +1 -28
  68. data/lib/vedeu/dsl/all.rb +7 -7
  69. data/lib/vedeu/dsl/attributes.rb +224 -0
  70. data/lib/vedeu/dsl/border.rb +127 -0
  71. data/lib/vedeu/dsl/cursors.rb +44 -0
  72. data/lib/vedeu/dsl/dsl.rb +9 -0
  73. data/lib/vedeu/dsl/elements.rb +335 -0
  74. data/lib/vedeu/dsl/geometry.rb +113 -0
  75. data/lib/vedeu/dsl/string/align.rb +127 -0
  76. data/lib/vedeu/dsl/string/all.rb +14 -0
  77. data/lib/vedeu/dsl/string/text.rb +107 -0
  78. data/lib/vedeu/dsl/string/truncate.rb +111 -0
  79. data/lib/vedeu/{output → dsl/string}/wordwrap.rb +10 -6
  80. data/lib/vedeu/dsl/view.rb +124 -248
  81. data/lib/vedeu/dsl/views.rb +244 -0
  82. data/lib/vedeu/editor/cursor.rb +1 -1
  83. data/lib/vedeu/editor/delete.rb +3 -1
  84. data/lib/vedeu/editor/insert.rb +22 -6
  85. data/lib/vedeu/editor/line.rb +15 -9
  86. data/lib/vedeu/editor/lines.rb +27 -18
  87. data/lib/vedeu/esc/actions.rb +73 -26
  88. data/lib/vedeu/esc/all.rb +2 -0
  89. data/lib/vedeu/esc/background.rb +219 -0
  90. data/lib/vedeu/esc/borders.rb +72 -26
  91. data/lib/vedeu/esc/colours.rb +26 -27
  92. data/lib/vedeu/esc/esc.rb +4 -4
  93. data/lib/vedeu/esc/foreground.rb +219 -0
  94. data/lib/vedeu/esc/mouse.rb +16 -13
  95. data/lib/vedeu/events/aliases.rb +2 -2
  96. data/lib/vedeu/events/event.rb +1 -1
  97. data/lib/vedeu/geometries/all.rb +0 -1
  98. data/lib/vedeu/geometries/area/dimension.rb +2 -2
  99. data/lib/vedeu/geometries/dsl/dsl.rb +3 -51
  100. data/lib/vedeu/geometries/dsl/validator.rb +4 -4
  101. data/lib/vedeu/geometries/geometry.rb +10 -10
  102. data/lib/vedeu/geometries/move.rb +4 -4
  103. data/lib/vedeu/groups/dsl.rb +1 -0
  104. data/lib/vedeu/groups/group.rb +1 -1
  105. data/lib/vedeu/input/all.rb +1 -0
  106. data/lib/vedeu/input/capture.rb +14 -10
  107. data/lib/vedeu/input/dsl.rb +20 -26
  108. data/lib/vedeu/input/key.rb +0 -6
  109. data/lib/vedeu/input/keymap.rb +4 -9
  110. data/lib/vedeu/input/keys.rb +13 -0
  111. data/lib/vedeu/input/mapper.rb +29 -14
  112. data/lib/vedeu/input/read.rb +4 -2
  113. data/lib/vedeu/interfaces/dsl.rb +23 -22
  114. data/lib/vedeu/interfaces/interface.rb +2 -2
  115. data/lib/vedeu/logging/debug.rb +33 -0
  116. data/lib/vedeu/logging/log.rb +42 -33
  117. data/lib/vedeu/menus/dsl.rb +7 -18
  118. data/lib/vedeu/menus/menu.rb +1 -1
  119. data/lib/vedeu/models/focus.rb +1 -1
  120. data/lib/vedeu/models/toggleable.rb +4 -4
  121. data/lib/vedeu/null/generic.rb +2 -2
  122. data/lib/vedeu/output/all.rb +0 -2
  123. data/lib/vedeu/output/compressor_cache.rb +1 -1
  124. data/lib/vedeu/output/output.rb +5 -20
  125. data/lib/vedeu/presentation/colour.rb +39 -7
  126. data/lib/vedeu/presentation/style.rb +25 -11
  127. data/lib/vedeu/renderers/html.rb +11 -11
  128. data/lib/vedeu/repositories/assemblage.rb +9 -0
  129. data/lib/vedeu/repositories/collection.rb +1 -0
  130. data/lib/vedeu/repositories/defaults.rb +4 -1
  131. data/lib/vedeu/repositories/model.rb +7 -37
  132. data/lib/vedeu/repositories/parent.rb +6 -6
  133. data/lib/vedeu/repositories/registerable.rb +16 -2
  134. data/lib/vedeu/repositories/repositories.rb +1 -1
  135. data/lib/vedeu/repositories/repository.rb +2 -12
  136. data/lib/vedeu/runtime/flags.rb +1 -1
  137. data/lib/vedeu/terminal/terminal.rb +7 -2
  138. data/lib/vedeu/version.rb +1 -1
  139. data/lib/vedeu/views/all.rb +4 -1
  140. data/lib/vedeu/views/char.rb +5 -4
  141. data/lib/vedeu/views/chars.rb +42 -0
  142. data/lib/vedeu/views/composition.rb +15 -30
  143. data/lib/vedeu/views/default_attributes.rb +74 -0
  144. data/lib/vedeu/views/html_char.rb +2 -2
  145. data/lib/vedeu/views/line.rb +27 -53
  146. data/lib/vedeu/views/lines.rb +31 -0
  147. data/lib/vedeu/views/stream.rb +31 -78
  148. data/lib/vedeu/views/streams.rb +42 -0
  149. data/lib/vedeu/views/value.rb +150 -0
  150. data/lib/vedeu/views/view.rb +32 -36
  151. data/lib/vedeu/views/{view_collection.rb → views.rb} +2 -2
  152. data/test/lib/vedeu/application/application_controller_test.rb +5 -0
  153. data/test/lib/vedeu/application/controller_test.rb +22 -28
  154. data/test/lib/vedeu/boolean_test.rb +57 -0
  155. data/test/lib/vedeu/borders/border_test.rb +130 -36
  156. data/test/lib/vedeu/borders/dsl_test.rb +63 -10
  157. data/test/lib/vedeu/borders/title_test.rb +16 -5
  158. data/test/lib/vedeu/buffers/buffer_test.rb +26 -10
  159. data/test/lib/vedeu/buffers/empty_test.rb +1 -1
  160. data/test/lib/vedeu/cells/border_test.rb +0 -6
  161. data/test/lib/vedeu/cells/clear_test.rb +2 -0
  162. data/test/lib/vedeu/cells/empty_test.rb +12 -2
  163. data/test/lib/vedeu/cells/escape_test.rb +7 -2
  164. data/test/lib/vedeu/{geometries/alignment → coercers}/alignment_test.rb +44 -19
  165. data/test/lib/vedeu/coercers/colour_attributes_test.rb +168 -0
  166. data/test/lib/vedeu/coercers/colour_test.rb +75 -0
  167. data/test/lib/vedeu/{geometries/alignment → coercers}/horizontal_alignment_test.rb +6 -6
  168. data/test/lib/vedeu/{geometries/alignment → coercers}/vertical_alignment_test.rb +6 -6
  169. data/test/lib/vedeu/colours/background_test.rb +17 -1
  170. data/test/lib/vedeu/colours/colour_test.rb +74 -2
  171. data/test/lib/vedeu/colours/foreground_test.rb +17 -1
  172. data/test/lib/vedeu/colours/repository_test.rb +1 -1
  173. data/test/lib/vedeu/colours/translator_test.rb +8 -1
  174. data/test/lib/vedeu/colours/validator_test.rb +60 -0
  175. data/test/lib/vedeu/common_test.rb +138 -0
  176. data/test/lib/vedeu/configuration/api_test.rb +96 -51
  177. data/test/lib/vedeu/cursors/coordinate_test.rb +58 -117
  178. data/test/lib/vedeu/cursors/cursor_test.rb +46 -17
  179. data/test/lib/vedeu/cursors/dsl_test.rb +19 -5
  180. data/test/lib/vedeu/distributed/client_test.rb +8 -3
  181. data/test/lib/vedeu/distributed/server_test.rb +8 -0
  182. data/test/lib/vedeu/distributed/test_application_test.rb +62 -19
  183. data/test/lib/vedeu/distributed/uri_test.rb +4 -2
  184. data/test/lib/vedeu/dsl/attributes_test.rb +212 -0
  185. data/test/lib/vedeu/dsl/border_test.rb +51 -0
  186. data/test/lib/vedeu/dsl/{lines_test.rb → cursors_test.rb} +2 -2
  187. data/test/lib/vedeu/dsl/dsl_test.rb +44 -0
  188. data/test/lib/vedeu/dsl/elements_test.rb +118 -0
  189. data/test/lib/vedeu/dsl/geometry_test.rb +35 -0
  190. data/test/lib/vedeu/dsl/presentation_test.rb +52 -11
  191. data/test/lib/vedeu/dsl/string/align_test.rb +147 -0
  192. data/test/lib/vedeu/dsl/string/text_test.rb +213 -0
  193. data/test/lib/vedeu/dsl/string/truncate_test.rb +97 -0
  194. data/test/lib/vedeu/{output → dsl/string}/wordwrap_test.rb +3 -3
  195. data/test/lib/vedeu/dsl/view_test.rb +30 -42
  196. data/test/lib/vedeu/dsl/views_test.rb +61 -0
  197. data/test/lib/vedeu/editor/cursor_test.rb +30 -12
  198. data/test/lib/vedeu/editor/document_test.rb +18 -10
  199. data/test/lib/vedeu/editor/line_test.rb +4 -1
  200. data/test/lib/vedeu/editor/lines_test.rb +11 -3
  201. data/test/lib/vedeu/esc/actions_test.rb +42 -4
  202. data/test/lib/vedeu/esc/background_test.rb +185 -0
  203. data/test/lib/vedeu/esc/borders_test.rb +37 -9
  204. data/test/lib/vedeu/esc/colours_test.rb +0 -59
  205. data/test/lib/vedeu/esc/foreground_test.rb +185 -0
  206. data/test/lib/vedeu/esc/mouse_test.rb +9 -4
  207. data/test/lib/vedeu/geometries/area/area_test.rb +34 -11
  208. data/test/lib/vedeu/geometries/dsl/dsl_test.rb +52 -61
  209. data/test/lib/vedeu/geometries/geometry_test.rb +62 -18
  210. data/test/lib/vedeu/geometries/position_test.rb +14 -7
  211. data/test/lib/vedeu/groups/dsl_test.rb +24 -15
  212. data/test/lib/vedeu/groups/group_test.rb +18 -8
  213. data/test/lib/vedeu/input/dsl_test.rb +33 -16
  214. data/test/lib/vedeu/input/key_test.rb +8 -1
  215. data/test/lib/vedeu/input/keymap_test.rb +4 -1
  216. data/test/lib/vedeu/input/keys_test.rb +16 -0
  217. data/test/lib/vedeu/interfaces/dsl_test.rb +24 -30
  218. data/test/lib/vedeu/interfaces/interface_test.rb +79 -24
  219. data/test/lib/vedeu/logging/ips_test.rb +10 -1
  220. data/test/lib/vedeu/menus/dsl_test.rb +24 -23
  221. data/test/lib/vedeu/menus/menu_test.rb +18 -8
  222. data/test/lib/vedeu/models/page_test.rb +5 -1
  223. data/test/lib/vedeu/models/row_test.rb +4 -0
  224. data/test/lib/vedeu/models/toggleable_test.rb +10 -6
  225. data/test/lib/vedeu/null/generic_test.rb +90 -1
  226. data/test/lib/vedeu/output/viewport_test.rb +11 -10
  227. data/test/lib/vedeu/plugins/plugin_test.rb +22 -9
  228. data/test/lib/vedeu/presentation/colour_test.rb +2 -1
  229. data/test/lib/vedeu/presentation/presentation_test.rb +13 -8
  230. data/test/lib/vedeu/presentation/style_test.rb +28 -13
  231. data/test/lib/vedeu/renderers/file_test.rb +4 -2
  232. data/test/lib/vedeu/renderers/options_test.rb +1 -1
  233. data/test/lib/vedeu/repositories/assemblage_test.rb +18 -0
  234. data/test/lib/vedeu/repositories/collection_test.rb +34 -10
  235. data/test/lib/vedeu/repositories/defaults_test.rb +6 -0
  236. data/test/lib/vedeu/repositories/model_test.rb +4 -13
  237. data/test/lib/vedeu/repositories/repository_test.rb +12 -5
  238. data/test/lib/vedeu/repositories/store_test.rb +9 -0
  239. data/test/lib/vedeu/runtime/flags_test.rb +6 -4
  240. data/test/lib/vedeu/runtime/launcher_test.rb +1 -1
  241. data/test/lib/vedeu/templating/helpers_test.rb +93 -65
  242. data/test/lib/vedeu/templating/view_template_test.rb +26 -26
  243. data/test/lib/vedeu/views/char_test.rb +36 -11
  244. data/test/lib/vedeu/views/chars_test.rb +71 -0
  245. data/test/lib/vedeu/views/composition_test.rb +17 -16
  246. data/test/lib/vedeu/views/default_attributes_test.rb +97 -0
  247. data/test/lib/vedeu/views/line_test.rb +20 -75
  248. data/test/lib/vedeu/views/lines_test.rb +47 -0
  249. data/test/lib/vedeu/views/stream_test.rb +38 -63
  250. data/test/lib/vedeu/views/streams_test.rb +9 -0
  251. data/test/lib/vedeu/views/value_test.rb +112 -0
  252. data/test/lib/vedeu/views/view_test.rb +67 -45
  253. data/test/lib/vedeu/views/views_test.rb +22 -0
  254. data/test/support/examples/material_colours_app.rb +2 -2
  255. data/test/support/helpers/model_test_class.rb +1 -0
  256. data/test/test_helper.rb +3 -1
  257. data/vedeu.gemspec +2 -2
  258. metadata +124 -58
  259. data/lib/vedeu/dsl/composition.rb +0 -150
  260. data/lib/vedeu/dsl/line.rb +0 -119
  261. data/lib/vedeu/dsl/lines.rb +0 -23
  262. data/lib/vedeu/dsl/shared.rb +0 -85
  263. data/lib/vedeu/dsl/stream.rb +0 -40
  264. data/lib/vedeu/dsl/streams.rb +0 -23
  265. data/lib/vedeu/dsl/text.rb +0 -98
  266. data/lib/vedeu/geometries/alignment/all.rb +0 -11
  267. data/lib/vedeu/geometries/alignment/horizontal_alignment.rb +0 -27
  268. data/lib/vedeu/geometries/alignment/vertical_alignment.rb +0 -27
  269. data/lib/vedeu/output/text.rb +0 -275
  270. data/test/lib/vedeu/dsl/composition_test.rb +0 -67
  271. data/test/lib/vedeu/dsl/line_test.rb +0 -85
  272. data/test/lib/vedeu/dsl/shared_test.rb +0 -66
  273. data/test/lib/vedeu/dsl/stream_test.rb +0 -30
  274. data/test/lib/vedeu/dsl/streams_test.rb +0 -13
  275. data/test/lib/vedeu/dsl/text_test.rb +0 -122
  276. data/test/lib/vedeu/output/text_test.rb +0 -156
  277. data/test/lib/vedeu/views/view_collection_test.rb +0 -13
@@ -0,0 +1,13 @@
1
+ module Vedeu
2
+
3
+ module Input
4
+
5
+ # A collection of {Vedeu::Input::Key} instances.
6
+ #
7
+ class Keys < Vedeu::Repositories::Collection
8
+
9
+ end # Keys
10
+
11
+ end # Input
12
+
13
+ end # Vedeu
@@ -20,20 +20,21 @@ module Vedeu
20
20
  # @param (see #initialize)
21
21
  # @return [Boolean]
22
22
  def keypress(key = nil, name = nil)
23
- Vedeu.trigger(:key, key)
24
-
25
- return false unless key
26
-
27
23
  new(key, name).keypress
28
24
  end
29
25
 
26
+ # @param key [String|Symbol] The keypress.
27
+ # @param name [String|Symbol] The keymap name.
28
+ # @raise [Vedeu::Error::MissingRequired] When the key or name
29
+ # params are missing.
30
+ # @return [Boolean]
30
31
  def registered?(key = nil, name = nil)
31
32
  fail Vedeu::Error::MissingRequired,
32
33
  'Cannot check whether a key is registered to a keymap without ' \
33
- 'the key.' if absent?(key)
34
+ 'the key.'.freeze if absent?(key)
34
35
  fail Vedeu::Error::MissingRequired,
35
36
  'Cannot check whether a key is registered to a keymap without ' \
36
- 'the keymap name.' if absent?(name)
37
+ 'the keymap name.'.freeze if absent?(name)
37
38
 
38
39
  new(key, name).registered?
39
40
  end
@@ -69,13 +70,15 @@ module Vedeu
69
70
  #
70
71
  # @return [Boolean]
71
72
  def keypress
73
+ Vedeu.trigger(:key, key)
74
+
72
75
  return false unless key
73
76
 
74
77
  return true if key_defined? && keymap.use(key)
75
78
 
76
79
  return true if global_key? && keymap('_global_').use(key)
77
80
 
78
- Vedeu.log(type: :input, message: "Key detected: #{key.inspect}".freeze)
81
+ Vedeu.log(type: :input, message: log_message(key))
79
82
 
80
83
  false
81
84
  end
@@ -102,7 +105,7 @@ module Vedeu
102
105
  protected
103
106
 
104
107
  # @!attribute [r] key
105
- # @return [String|Symbol]
108
+ # @return [NilClass|String|Symbol|Vedeu::Cursors::Cursor]
106
109
  attr_reader :key
107
110
 
108
111
  # @!attribute [r] repository
@@ -135,6 +138,18 @@ module Vedeu
135
138
  repository.registered?(named)
136
139
  end
137
140
 
141
+ # @param key [NilClass|String|Symbol|Vedeu::Cursors::Cursor]
142
+ # @return [String]
143
+ def log_message(key)
144
+ if key.is_a?(Vedeu::Cursors::Cursor)
145
+ "Click detected: x: #{key.x} y: #{key.y}".freeze
146
+
147
+ else
148
+ "Key detected: #{key.inspect}".freeze
149
+
150
+ end
151
+ end
152
+
138
153
  # With a name, we check the keymap with that name, otherwise we
139
154
  # use the name of the interface currently in focus.
140
155
  #
@@ -158,8 +173,6 @@ module Vedeu
158
173
  # See {file:docs/events/system.md#\_keypress_}
159
174
  Vedeu.bind(:_keypress_) do |key, name|
160
175
  Vedeu.timer('Executing keypress') do
161
- Vedeu.trigger(:key, key)
162
-
163
176
  Vedeu.add_keypress(key)
164
177
 
165
178
  Vedeu.keypress(key, name)
@@ -170,10 +183,12 @@ module Vedeu
170
183
  Vedeu.bind(:_drb_input_) do |data, type|
171
184
  Vedeu.log(type: :drb, message: "Sending input (#{type})".freeze)
172
185
 
173
- case type
174
- when :command then Vedeu.trigger(:_command_, data)
175
- when :keypress then Vedeu.trigger(:_keypress_, data)
176
- else Vedeu.trigger(:_keypress_, data)
186
+ if type == :command
187
+ Vedeu.trigger(:_command_, data)
188
+
189
+ else
190
+ Vedeu.trigger(:_keypress_, data)
191
+
177
192
  end
178
193
  end
179
194
 
@@ -116,8 +116,10 @@ module Vedeu
116
116
 
117
117
  # @return [Symbol]
118
118
  def mode
119
- fail Vedeu::Error::InvalidSyntax,
120
- ':mode must be `:raw`, `:fake` or `:cooked`.' unless valid_mode?
119
+ unless valid_mode?
120
+ fail Vedeu::Error::InvalidSyntax,
121
+ ':mode must be `:raw`, `:fake` or `:cooked`.'.freeze
122
+ end
121
123
 
122
124
  options[:mode]
123
125
  end
@@ -8,10 +8,10 @@ module Vedeu
8
8
 
9
9
  include Vedeu::Common
10
10
  include Vedeu::DSL
11
- include Vedeu::Cursors::DSL
11
+ include Vedeu::DSL::Cursors
12
+ include Vedeu::DSL::Border
13
+ include Vedeu::DSL::Geometry
12
14
  include Vedeu::DSL::Presentation
13
- include Vedeu::DSL::Shared
14
- include Vedeu::DSL::Text
15
15
  include Vedeu::DSL::Use
16
16
 
17
17
  class << self
@@ -36,9 +36,8 @@ module Vedeu
36
36
  # @return [Vedeu::Interfaces::Interface]
37
37
  # @todo More documentation required.
38
38
  def interface(name, &block)
39
+ fail Vedeu::Error::MissingRequired unless name
39
40
  fail Vedeu::Error::RequiresBlock unless block_given?
40
- fail Vedeu::Error::MissingRequired,
41
- 'name not given'.freeze unless present?(name)
42
41
 
43
42
  attributes = { client: client(&block), name: name }
44
43
 
@@ -50,6 +49,7 @@ module Vedeu
50
49
  add_cursor!(name)
51
50
  add_editor!(name) if interface.editable?
52
51
  add_focusable!(name)
52
+ add_keymap!(name)
53
53
 
54
54
  interface
55
55
  end
@@ -87,11 +87,20 @@ module Vedeu
87
87
  # registered.
88
88
  #
89
89
  # @param name [String|Symbol]
90
- # @return [void]
90
+ # @return [Array<String|Symbol>]
91
91
  def add_focusable!(name)
92
92
  Vedeu::Models::Focus.add(name)
93
93
  end
94
94
 
95
+ # Registers a new keymap for the interface unless already
96
+ # registered.
97
+ #
98
+ # @param name [String|Symbol]
99
+ # @return [NilClass|Vedeu::Input::Keymap]
100
+ def add_keymap!(name)
101
+ Vedeu::Input::Keymap.store(name: name) unless keymap?(name)
102
+ end
103
+
95
104
  # Returns the client object which called the DSL method.
96
105
  #
97
106
  # @param block [Proc]
@@ -100,6 +109,14 @@ module Vedeu
100
109
  eval('self', block.binding)
101
110
  end
102
111
 
112
+ private
113
+
114
+ # @param name [String|Symbol]
115
+ # @return [Boolean]
116
+ def keymap?(name)
117
+ Vedeu.keymaps.registered?(name)
118
+ end
119
+
103
120
  end # Eigenclass
104
121
 
105
122
  # To maintain performance interfaces can be delayed from
@@ -213,22 +230,6 @@ module Vedeu
213
230
  end
214
231
  alias_method :keys, :keymap
215
232
 
216
- # The name of the interface. Used to reference the interface
217
- # throughout your application's execution lifetime.
218
- #
219
- # @param value [String|Symbol]
220
- #
221
- # @example
222
- # Vedeu.interface do
223
- # name :my_interface
224
- # # ...
225
- # end
226
- #
227
- # @return [String|Symbol]
228
- def name(value)
229
- model.name = value
230
- end
231
-
232
233
  # Set the interface to visible.
233
234
  #
234
235
  # @example
@@ -148,8 +148,8 @@ module Vedeu
148
148
  cursor_visible: true,
149
149
  delay: 0.0,
150
150
  editable: false,
151
- group: '',
152
- name: '',
151
+ group: ''.freeze,
152
+ name: ''.freeze,
153
153
  parent: nil,
154
154
  repository: Vedeu.interfaces,
155
155
  style: :normal,
@@ -9,6 +9,28 @@ module Vedeu
9
9
 
10
10
  extend self
11
11
 
12
+ # @param binding [Binding]
13
+ # @param obj [Object]
14
+ # @return [void]
15
+ def debug(binding = nil, obj = nil)
16
+ require 'pry'
17
+
18
+ if obj
19
+ message = ::Pry::ColorPrinter.pp(obj, '')
20
+
21
+ Vedeu.log(type: :debug, message: "#{message}")
22
+
23
+ elsif binding
24
+ Vedeu::Terminal.cooked_mode!
25
+ Vedeu::Terminal.open do
26
+ Vedeu::Terminal.debugging!
27
+
28
+ binding.pry
29
+ end
30
+ Vedeu::Terminal.raw_mode!
31
+ end
32
+ end
33
+
12
34
  # :nocov:
13
35
  # Helps to profile a running application by providing a stack
14
36
  # trace of its execution upon exiting.
@@ -99,4 +121,15 @@ module Vedeu
99
121
  def_delegators Vedeu::Logging::Debug,
100
122
  :profile
101
123
 
124
+ # Drop into a debugging session within a running client application,
125
+ # courtesy of pry.
126
+ #
127
+ # @example
128
+ # Vedeu.debug
129
+ #
130
+ # @!method debug
131
+ # @return [void]
132
+ def_delegators Vedeu::Logging::Debug,
133
+ :debug
134
+
102
135
  end # Vedeu
@@ -22,7 +22,7 @@ module Vedeu
22
22
  # @param type [Symbol] Colour code messages in the log file
23
23
  # depending on their source. See {message_types}
24
24
  #
25
- # @return [TrueClass]
25
+ # @return [String]
26
26
  def log(message:, force: false, type: :info)
27
27
  output = log_entry(type, message)
28
28
 
@@ -38,7 +38,7 @@ module Vedeu
38
38
  # @example
39
39
  # Vedeu.log_stdout
40
40
  #
41
- # @return [TrueClass]
41
+ # @return [String]
42
42
  def log_stdout(type: :info, message:)
43
43
  $stdout.puts log_entry(type, message)
44
44
  end
@@ -48,7 +48,7 @@ module Vedeu
48
48
  # @example
49
49
  # Vedeu.log_stderr
50
50
  #
51
- # @return [TrueClass]
51
+ # @return [String]
52
52
  def log_stderr(type: :info, message:)
53
53
  $stderr.puts log_entry(type, message)
54
54
  end
@@ -73,7 +73,7 @@ module Vedeu
73
73
 
74
74
  private
75
75
 
76
- # @return [TrueClass]
76
+ # @return [Boolean]
77
77
  def logger
78
78
  MonoLogger.new(log_file).tap do |log|
79
79
  log.formatter = proc do |_, _, _, message|
@@ -120,9 +120,17 @@ module Vedeu
120
120
  # @param body [String] The log message itself.
121
121
  # @return [String]
122
122
  def message_body(type, body)
123
- Vedeu::EscapeSequences::Esc
124
- .send(message_types.fetch(type, :default)[-1]) do
125
- body
123
+ message_colour(type, -1) { body }
124
+ end
125
+
126
+ # @param type [Symbol] The type of log message.
127
+ # @param index [Fixnum] Either 0 or -1.
128
+ # @param block [Proc]
129
+ # @return [String]
130
+ def message_colour(type, index, &block)
131
+ Vedeu::EscapeSequences::Esc.send(
132
+ message_types.fetch(type, :default)[index]) do
133
+ yield if block_given?
126
134
  end
127
135
  end
128
136
 
@@ -132,10 +140,7 @@ module Vedeu
132
140
  # @param type [Symbol] The type of log message.
133
141
  # @return [String]
134
142
  def message_type(type)
135
- Vedeu::EscapeSequences::Esc
136
- .send(message_types.fetch(type, :default)[0]) do
137
- "[#{type}]".ljust(11)
138
- end
143
+ message_colour(type, 0) { "[#{type}]".ljust(11) }
139
144
  end
140
145
 
141
146
  # The defined message types for Vedeu with their respective
@@ -147,40 +152,44 @@ module Vedeu
147
152
  # value array, whilst the 'message' will be shown using the
148
153
  # last colour.
149
154
  #
150
- # Valid types available:
151
- #
152
- # :config, :create, :debug, :error, :drb, :event, :info,
153
- # :input, :output, :reset, :store, :test, :timer, :update
154
- #
155
155
  # @return [Hash<Symbol => Array<Symbol>>]
156
156
  def message_types
157
157
  {
158
- create: [:light_cyan, :cyan],
159
- store: [:light_cyan, :cyan],
160
- update: [:light_cyan, :cyan],
161
- reset: [:light_cyan, :cyan],
158
+ create: [:light_cyan, :cyan],
159
+ store: [:light_cyan, :cyan],
160
+ update: [:light_cyan, :cyan],
161
+ reset: [:light_cyan, :cyan],
162
162
 
163
- event: [:light_magenta, :magenta],
163
+ event: [:light_magenta, :magenta],
164
164
 
165
- timer: [:light_blue, :blue],
165
+ timer: [:light_blue, :blue],
166
166
 
167
- info: [:white, :light_grey],
168
- test: [:white, :light_grey],
169
- debug: [:white, :light_grey],
167
+ info: [:white, :light_grey],
168
+ test: [:white, :light_grey],
169
+ debug: [:white, :light_grey],
170
+ compress: [:white, :light_grey],
170
171
 
171
- input: [:light_yellow, :yellow],
172
+ input: [:light_yellow, :yellow],
173
+ output: [:light_yellow, :yellow],
172
174
 
173
- compress: [:white, :light_grey],
174
175
  cursor: [:light_green, :green],
175
- output: [:light_green, :green],
176
+ buffer: [:light_green, :green],
176
177
  render: [:light_green, :green],
177
178
 
178
- error: [:light_red, :red],
179
+ error: [:light_red, :red],
180
+
181
+ config: [:light_blue, :blue],
182
+ dsl: [:light_blue, :blue],
183
+ editor: [:light_blue, :blue],
184
+ drb: [:light_blue, :blue],
179
185
 
180
- config: [:light_blue, :blue],
181
- dsl: [:light_blue, :blue],
182
- editor: [:light_blue, :blue],
183
- drb: [:light_blue, :blue],
186
+ blue: [:light_blue, :blue],
187
+ cyan: [:light_cyan, :cyan],
188
+ green: [:light_green, :green],
189
+ magenta: [:light_magenta, :magenta],
190
+ red: [:light_red, :red],
191
+ white: [:white, :light_grey],
192
+ yellow: [:light_yellow, :yellow],
184
193
  }
185
194
  end
186
195
 
@@ -15,7 +15,8 @@ module Vedeu
15
15
  # items for your users to select; and provide interactivity
16
16
  # within your application.
17
17
  #
18
- # @param name [String|Symbol]
18
+ # @param name [String|Symbol] The name of the interface or
19
+ # view to which this menu belongs.
19
20
  # @param block [Proc] A set of attributes which define the
20
21
  # features of the menu. See {Vedeu::Menus::DSL#items} and
21
22
  # {Vedeu::Menus::DSL#name}.
@@ -32,9 +33,12 @@ module Vedeu
32
33
  # # ...
33
34
  # end
34
35
  #
35
- # @raise [Vedeu::Error::RequiresBlock]
36
+ # @raise [Vedeu::Error::MissingRequired|
37
+ # Vedeu::Error::RequiresBlock] When a name or block
38
+ # respectively are not given.
36
39
  # @return [API::Menu]
37
- def menu(name = '', &block)
40
+ def menu(name, &block)
41
+ fail Vedeu::Error::MissingRequired unless name
38
42
  fail Vedeu::Error::RequiresBlock unless block_given?
39
43
 
40
44
  attributes = { client: client(&block), name: name }
@@ -92,21 +96,6 @@ module Vedeu
92
96
  end
93
97
  alias_method :items=, :items
94
98
 
95
- # The name of the menu. Used to reference the menu throughout
96
- # your application's execution lifetime.
97
- #
98
- # Vedeu.menu do
99
- # name :my_menu
100
- # # ...
101
- # end
102
- #
103
- # @param name [String|Symbol]
104
- # @return [String]
105
- def name(name)
106
- model.name = name
107
- end
108
- alias_method :name=, :name
109
-
110
99
  end # DSL
111
100
 
112
101
  end # Menus