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
@@ -30,25 +30,28 @@ module Vedeu
30
30
 
31
31
  extend self
32
32
 
33
- # @return [Hash<Symbol => String>]
34
- def mouse_codes
35
- {
36
- mouse_x10_on: "\e[?9h".freeze,
37
- mouse_x10_off: "\e[?9l".freeze,
38
- mouse_on: "\e[?1000h".freeze,
39
- mouse_off: "\e[?1000l".freeze,
40
- }
33
+ # @return [String]
34
+ def mouse_x10_on
35
+ "\e[?9h".freeze
41
36
  end
42
37
 
43
- # @return [void]
44
- def setup!
45
- mouse_codes.each { |key, code| define_method(key) { code } }
38
+ # @return [String]
39
+ def mouse_x10_off
40
+ "\e[?9l".freeze
41
+ end
42
+
43
+ # @return [String]
44
+ def mouse_on
45
+ "\e[?1000h".freeze
46
+ end
47
+
48
+ # @return [String]
49
+ def mouse_off
50
+ "\e[?1000l".freeze
46
51
  end
47
52
 
48
53
  end # Mouse
49
54
 
50
55
  end # EscapeSequences
51
56
 
52
- Vedeu::EscapeSequences::Mouse.setup!
53
-
54
57
  end # Vedeu
@@ -58,7 +58,7 @@ module Vedeu
58
58
  # Vedeu.unbind_alias(alias_name)
59
59
  #
60
60
  # @param alias_name [Symbol] The name of the alias.
61
- # @return [FalseClass|Hash<Symbol => Array<Symbol>>]
61
+ # @return [Boolean|Hash<Symbol => Array<Symbol>>]
62
62
  def unbind_alias(alias_name)
63
63
  return false if empty?
64
64
  return false unless registered?(alias_name)
@@ -83,7 +83,7 @@ module Vedeu
83
83
 
84
84
  # @param alias_name [Symbol]
85
85
  # @param args [void]
86
- # @return [FalseClass|Array<void>|void]
86
+ # @return [Boolean|Array<void>|void]
87
87
  def trigger(alias_name, *args)
88
88
  return [] unless registered?(alias_name)
89
89
 
@@ -82,7 +82,7 @@ module Vedeu
82
82
  # # ... some code here ...
83
83
  # end
84
84
  #
85
- # @return [TrueClass]
85
+ # @return [Boolean]
86
86
  def bind(name, options = {}, &block)
87
87
  Vedeu.log(type: :event, message: "Binding: '#{name.inspect}'".freeze)
88
88
 
@@ -13,7 +13,6 @@ module Vedeu
13
13
 
14
14
  end # Vedeu
15
15
 
16
- require 'vedeu/geometries/alignment/all'
17
16
  require 'vedeu/geometries/area/all'
18
17
  require 'vedeu/geometries/dsl/all'
19
18
 
@@ -76,9 +76,9 @@ module Vedeu
76
76
 
77
77
  private
78
78
 
79
- # @return [Vedeu::Geometries::Alignment]
79
+ # @return [Vedeu::Coercers::Alignment]
80
80
  def alignment
81
- Vedeu::Geometries::Alignment.coerce(@alignment)
81
+ @_alignment ||= Vedeu::Coercers::Alignment.coerce(@alignment)
82
82
  end
83
83
 
84
84
  # Return the dimension.
@@ -74,58 +74,10 @@ module Vedeu
74
74
  class DSL
75
75
 
76
76
  include Vedeu::DSL
77
+ include Vedeu::DSL::Geometry
77
78
  include Vedeu::DSL::Use
78
79
  include Vedeu::Geometries::Validator
79
80
 
80
- # Specify the geometry of an interface or view with a simple
81
- # DSL.
82
- #
83
- # Vedeu.geometry :some_interface do
84
- # # ...
85
- # end
86
- #
87
- # @param name [String|Symbol] The name of the interface or view
88
- # to which this geometry belongs.
89
- # @param block [Proc]
90
- # @raise [Vedeu::Error::RequiresBlock]
91
- # @return [Vedeu::Geometries::Geometry]
92
- def self.geometry(name, &block)
93
- fail Vedeu::Error::RequiresBlock unless block_given?
94
-
95
- Vedeu::Geometries::Geometry.build(name: name, &block).store
96
- end
97
-
98
- # Instructs Vedeu to align the interface/view either left,
99
- # centre or right. A width is also required so that required
100
- # coordinates are calculated correctly.
101
- #
102
- # Vedeu.geometry :some_interface do
103
- # # :some_value must be one of: :left, :none, :center,
104
- # # :centre, or :right
105
- # # `width` is a positive integer, e.g. 30
106
- # alignment(:some_value, width)
107
- #
108
- # # ... some code
109
- # end
110
- #
111
- # @param value [Symbol] One of :center, :centre, :left, :none,
112
- # :right.
113
- # @param width [Fixnum] The width of the aligned interface/view.
114
- # @raise [Vedeu::Error::InvalidSyntax] When the value or width
115
- # is not given.
116
- # @return [Vedeu::Geometries::Geometry]
117
- # def alignment(value, width)
118
- # fail Vedeu::Error::InvalidSyntax,
119
- # 'No alignment given. Valid values are :center, :centre, ' \
120
- # ':left, :none, :right.'.freeze unless present?(value)
121
- # fail Vedeu::Error::InvalidSyntax,
122
- # 'No width given.'.freeze unless present?(width)
123
-
124
- # model.alignment = Vedeu::Geometries::Alignment.align(value)
125
- # model.width = width
126
- # model
127
- # end
128
-
129
81
  # Align the interface/view horizontally or vertically within
130
82
  # the terminal.
131
83
  #
@@ -164,7 +116,7 @@ module Vedeu
164
116
  validate_horizontal_alignment!(value)
165
117
  validate_width!(width)
166
118
 
167
- model.horizontal_alignment = Vedeu::Geometries::HorizontalAlignment
119
+ model.horizontal_alignment = Vedeu::Coercers::HorizontalAlignment
168
120
  .coerce(value)
169
121
  model.width = width
170
122
  model
@@ -177,7 +129,7 @@ module Vedeu
177
129
  validate_vertical_alignment!(value)
178
130
  validate_height!(height)
179
131
 
180
- model.vertical_alignment = Vedeu::Geometries::VerticalAlignment
132
+ model.vertical_alignment = Vedeu::Coercers::VerticalAlignment
181
133
  .coerce(value)
182
134
  model.height = height
183
135
  model
@@ -12,7 +12,7 @@ module Vedeu
12
12
 
13
13
  # @param value [Fixnum] The number of lines/rows.
14
14
  # @raise [Vedeu::Error::InvalidSyntax] When the value is nil.
15
- # @return [TrueClass]
15
+ # @return [Boolean]
16
16
  def validate_height!(value)
17
17
  fail Vedeu::Error::InvalidSyntax,
18
18
  'No height given.'.freeze if absent?(value)
@@ -23,7 +23,7 @@ module Vedeu
23
23
  # @param value [Symbol] One of :center, :centre, :left,
24
24
  # :none, :right.
25
25
  # @raise [Vedeu::Error::InvalidSyntax] When the value is nil.
26
- # @return [TrueClass]
26
+ # @return [Boolean]
27
27
  def validate_horizontal_alignment!(value)
28
28
  fail Vedeu::Error::InvalidSyntax,
29
29
  'No horizontal alignment given. Valid values are :center, ' \
@@ -34,7 +34,7 @@ module Vedeu
34
34
 
35
35
  # @param value [Symbol] One of :bottom, :middle, :none, :top.
36
36
  # @raise [Vedeu::Error::InvalidSyntax] When the value is nil.
37
- # @return [TrueClass]
37
+ # @return [Boolean]
38
38
  def validate_vertical_alignment!(value)
39
39
  fail Vedeu::Error::InvalidSyntax,
40
40
  'No vertical alignment given. Valid values are :bottom, ' \
@@ -45,7 +45,7 @@ module Vedeu
45
45
 
46
46
  # @param value [Fixnum] The number of characters/columns.
47
47
  # @raise [Vedeu::Error::InvalidSyntax] When the value is nil.
48
- # @return [TrueClass]
48
+ # @return [Boolean]
49
49
  def validate_width!(value)
50
50
  fail Vedeu::Error::InvalidSyntax,
51
51
  'No width given.'.freeze if absent?(value)
@@ -108,13 +108,13 @@ module Vedeu
108
108
  # Vedeu::Geometries::Repository]
109
109
  def attributes
110
110
  {
111
- client: @client,
111
+ client: client,
112
112
  height: height,
113
- horizontal_alignment: @horizontal_alignment,
114
- maximised: @maximised,
115
- name: @name,
116
- repository: @repository,
117
- vertical_alignment: @vertical_alignment,
113
+ horizontal_alignment: horizontal_alignment,
114
+ maximised: maximised,
115
+ name: name,
116
+ repository: repository,
117
+ vertical_alignment: vertical_alignment,
118
118
  width: width,
119
119
  x: x,
120
120
  xn: xn,
@@ -189,16 +189,16 @@ module Vedeu
189
189
 
190
190
  # @return [Vedeu::Geometries::Area]
191
191
  def area
192
- @area = Vedeu::Geometries::Area.from_attributes(area_attributes)
192
+ Vedeu::Geometries::Area.from_attributes(area_attributes)
193
193
  end
194
194
 
195
195
  # @return [Hash<Symbol => Boolean|Fixnum>]
196
196
  def area_attributes
197
197
  {
198
- horizontal_alignment: @horizontal_alignment,
199
- maximised: @maximised,
198
+ horizontal_alignment: horizontal_alignment,
199
+ maximised: maximised,
200
200
  name: name,
201
- vertical_alignment: @vertical_alignment,
201
+ vertical_alignment: vertical_alignment,
202
202
  x: @x.is_a?(Proc) ? @x.call : @x,
203
203
  xn: @xn.is_a?(Proc) ? @xn.call : @xn,
204
204
  x_xn: @width.is_a?(Proc) ? @width.call : @width,
@@ -27,13 +27,13 @@ module Vedeu
27
27
  :y,
28
28
  :yn
29
29
 
30
- # @param attributes See #initialize
31
- # @return See #move
30
+ # @param (see #initialize)
31
+ # @return (see #move)
32
32
  def self.move(attributes = {})
33
33
  new(attributes).move
34
34
  end
35
35
 
36
- # @return [FalseClass|Vedeu::Geometries::Geometry]
36
+ # @return [Boolean|Vedeu::Geometries::Geometry]
37
37
  def move
38
38
  return false unless valid?
39
39
 
@@ -64,7 +64,7 @@ module Vedeu
64
64
  def defaults
65
65
  {
66
66
  direction: :none,
67
- name: '',
67
+ name: ''.freeze,
68
68
  offset: 1,
69
69
  }
70
70
  end
@@ -57,6 +57,7 @@ module Vedeu
57
57
  # @raise [Vedeu::Error::RequiresBlock]
58
58
  # @return [Vedeu::Groups::Group]
59
59
  def self.group(name, &block)
60
+ fail Vedeu::Error::MissingRequired unless name
60
61
  fail Vedeu::Error::RequiresBlock unless block_given?
61
62
 
62
63
  Vedeu::Groups::Group.build(name: name, &block).store
@@ -163,7 +163,7 @@ module Vedeu
163
163
  def defaults
164
164
  {
165
165
  members: Set.new,
166
- name: '',
166
+ name: ''.freeze,
167
167
  repository: Vedeu.groups,
168
168
  visible: true,
169
169
  }
@@ -12,6 +12,7 @@ end # Vedeu
12
12
  require 'vedeu/input/raw'
13
13
  require 'vedeu/input/capture'
14
14
  require 'vedeu/input/dsl'
15
+ require 'vedeu/input/keys'
15
16
  require 'vedeu/input/key'
16
17
  require 'vedeu/input/keymap'
17
18
  require 'vedeu/input/mapper'
@@ -54,7 +54,10 @@ module Vedeu
54
54
  elsif fake_mode?
55
55
  @key ||= keypress
56
56
 
57
- if click?(@key)
57
+ if @key.nil?
58
+ nil
59
+
60
+ elsif click?(@key)
58
61
  Vedeu.trigger(:_mouse_event_, @key)
59
62
 
60
63
  elsif Vedeu::Input::Mapper.registered?(@key, name)
@@ -63,9 +66,6 @@ module Vedeu
63
66
  elsif interface.editable?
64
67
  Vedeu.trigger(:_editor_, @key)
65
68
 
66
- elsif @key.nil?
67
- nil
68
-
69
69
  else
70
70
  Vedeu.trigger(:key, @key)
71
71
 
@@ -93,9 +93,13 @@ module Vedeu
93
93
  def input
94
94
  keys = Vedeu::Input::Raw.read
95
95
 
96
- return Vedeu::Input::Mouse.click(keys) if click?(keys)
96
+ if click?(keys)
97
+ Vedeu::Input::Mouse.click(keys)
98
+
99
+ else
100
+ keys
97
101
 
98
- keys
102
+ end
99
103
  end
100
104
 
101
105
  # @return [Vedeu::Interfaces::Interface]
@@ -106,12 +110,12 @@ module Vedeu
106
110
  # Returns a boolean indicating whether a mouse click was
107
111
  # received.
108
112
  #
109
- # @param input [NilClass|String|Symbol|Vedeu::Cursors::Cursor]
113
+ # @param keys [NilClass|String|Symbol|Vedeu::Cursors::Cursor]
110
114
  # @return [Boolean]
111
- def click?(input)
112
- return false if input.nil? || input.is_a?(Symbol)
115
+ def click?(keys)
116
+ return false if keys.nil? || keys.is_a?(Symbol)
113
117
 
114
- input.is_a?(Vedeu::Cursors::Cursor) || input.start_with?("\e[M".freeze)
118
+ keys.is_a?(Vedeu::Cursors::Cursor) || keys.start_with?("\e[M".freeze)
115
119
  end
116
120
 
117
121
  # @return [IO]
@@ -45,15 +45,30 @@ module Vedeu
45
45
  # end
46
46
  # end
47
47
  #
48
+ # @note
49
+ # If a keymap with this name does not already exist,
50
+ # pre-register it, otherwise we have no way of knowing if a
51
+ # key defined in the DSL for this keymap has already been
52
+ # registered. This protects the client application from
53
+ # attempting to define the same key more than once for the
54
+ # same keymap.
55
+ #
56
+ # This is also used when defining the '_global_' keymap.
57
+ #
48
58
  # @param name [String|Symbol] The name of the interface which
49
59
  # this keymap relates to.
50
60
  # @param block [Proc]
51
- # @raise [Vedeu::Error::RequiresBlock]
61
+ # @raise [Vedeu::Error::MissingRequired|
62
+ # Vedeu::Error::RequiresBlock] When a name or block
63
+ # respectively are not given.
52
64
  # @return [Vedeu::Input::Keymap]
53
- # @todo Try to remember why we need to pre-create the keymap in
54
- # the repository.
55
65
  def self.keymap(name, &block)
56
- Vedeu::Input::Keymap.new(name: name).store
66
+ fail Vedeu::Error::MissingRequired unless name
67
+ fail Vedeu::Error::RequiresBlock unless block_given?
68
+
69
+ unless Vedeu.keymaps.registered?(name)
70
+ Vedeu::Input::Keymap.new(name: name).store
71
+ end
57
72
 
58
73
  Vedeu::Input::Keymap.build(name: name, &block).store
59
74
  end
@@ -84,32 +99,11 @@ module Vedeu
84
99
  'An invalid value for `key` was encountered.'.freeze
85
100
  end
86
101
 
87
- model.add(model.member.new(value, &block))
102
+ model.add(Vedeu::Input::Key.new(value, &block))
88
103
  end
89
104
  end
90
105
  alias_method :key=, :key
91
106
 
92
- # Define the name of the keymap.
93
- #
94
- # To only allow certain keys to work with specific interfaces,
95
- # use the same name as the interface.
96
- #
97
- # When the name :_global_ is used, all keys in the keymap block
98
- # will be available to all interfaces. Once a key has been
99
- # defined in the :_global_ keymap, it cannot be used for a
100
- # specific interface.
101
- #
102
- # Vedeu.keymap do
103
- # name :some_interface
104
- # end
105
- #
106
- # @param value [String|Symbol]
107
- # @return [String]
108
- def name(value)
109
- model.name = value
110
- end
111
- alias_method :name=, :name
112
-
113
107
  end # DSL
114
108
 
115
109
  end # Input
@@ -2,12 +2,6 @@ module Vedeu
2
2
 
3
3
  module Input
4
4
 
5
- # A collection of {Vedeu::Input::Key} instances.
6
- #
7
- class Keys < Vedeu::Repositories::Collection
8
-
9
- end # Keys
10
-
11
5
  # A single keypress or combination of keypresses bound to a
12
6
  # specific action.
13
7
  #
@@ -9,9 +9,6 @@ module Vedeu
9
9
 
10
10
  include Vedeu::Repositories::Model
11
11
 
12
- collection Vedeu::Input::Keys
13
- member Vedeu::Input::Key
14
-
15
12
  # @!attribute [rw] name
16
13
  # @return [String]
17
14
  attr_accessor :name
@@ -59,7 +56,7 @@ module Vedeu
59
56
  #
60
57
  # @return [Vedeu::Input::Keys]
61
58
  def keys
62
- collection.coerce(@keys, self)
59
+ Vedeu::Input::Keys.coerce(@keys, self)
63
60
  end
64
61
 
65
62
  # Check whether the key is already defined for this keymap.
@@ -75,14 +72,12 @@ module Vedeu
75
72
  # method triggers the action associated with the key.
76
73
  #
77
74
  # @param input [String|Symbol]
78
- # @return [Array|FalseClass]
75
+ # @return [Array|Boolean]
79
76
  def use(input)
80
77
  return false unless key_defined?(input)
81
78
 
82
79
  Vedeu.log(type: :input, message: "Key pressed: '#{input}'".freeze)
83
80
 
84
- Vedeu.trigger(:key, input)
85
-
86
81
  keys.select { |key| key.input == input }.map(&:press)
87
82
  end
88
83
 
@@ -93,9 +88,9 @@ module Vedeu
93
88
  # @return [Hash<Symbol => Array|String|Vedeu::Input::Repository]
94
89
  def defaults
95
90
  {
96
- name: '',
91
+ name: ''.freeze,
97
92
  keys: [],
98
- repository: Vedeu::Input::Repository.keymaps,
93
+ repository: Vedeu.keymaps,
99
94
  }
100
95
  end
101
96