vedeu 0.7.4 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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