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
@@ -79,7 +79,7 @@ module Vedeu
79
79
  # @param klass [Class]
80
80
  # @return [void]
81
81
  def self.included(klass)
82
- klass.send(:extend, ClassMethods)
82
+ klass.extend(Vedeu::Controller::ClassMethods)
83
83
  end
84
84
 
85
85
  end # Controller
@@ -0,0 +1,35 @@
1
+ module Vedeu
2
+
3
+ # Represent a boolean object.
4
+ #
5
+ # @api private
6
+ #
7
+ class Boolean
8
+
9
+ # @param value [void]
10
+ # @return [Vedeu::Boolean]
11
+ def initialize(value = nil)
12
+ @value = value
13
+ end
14
+
15
+ # @return [Boolean]
16
+ def false?
17
+ value.nil? || value == false
18
+ end
19
+
20
+ # @return [Boolean]
21
+ def true?
22
+ return false if false?
23
+
24
+ true
25
+ end
26
+
27
+ private
28
+
29
+ # @!attribute [r] value
30
+ # @return [void]
31
+ attr_reader :value
32
+
33
+ end # Boolean
34
+
35
+ end # Vedeu
@@ -296,13 +296,13 @@ module Vedeu
296
296
  bottom_horizontal: nil,
297
297
  bottom_left: nil,
298
298
  bottom_right: nil,
299
- caption: '',
299
+ caption: ''.freeze,
300
300
  client: nil,
301
301
  colour: nil,
302
302
  enabled: false,
303
303
  horizontal: Vedeu::EscapeSequences::Borders.horizontal,
304
304
  left_vertical: nil,
305
- name: '',
305
+ name: ''.freeze,
306
306
  parent: nil,
307
307
  repository: Vedeu.borders,
308
308
  right_vertical: nil,
@@ -311,7 +311,7 @@ module Vedeu
311
311
  show_right: true,
312
312
  show_top: true,
313
313
  style: nil,
314
- title: '',
314
+ title: ''.freeze,
315
315
  top_horizontal: nil,
316
316
  top_left: nil,
317
317
  top_right: nil,
@@ -22,7 +22,7 @@ module Vedeu
22
22
 
23
23
  # @return [Fixnum]
24
24
  def y
25
- @_y ||= geometry.yn
25
+ geometry.yn
26
26
  end
27
27
 
28
28
  end # Caption
@@ -7,29 +7,10 @@ module Vedeu
7
7
  class DSL
8
8
 
9
9
  include Vedeu::DSL
10
+ include Vedeu::DSL::Border
10
11
  include Vedeu::DSL::Presentation
11
12
  include Vedeu::DSL::Use
12
13
 
13
- # Specify the border of an interface or view with a simple DSL.
14
- #
15
- # Vedeu.border :some_interface do
16
- # # ...
17
- # end
18
- #
19
- # @param name [String|Symbol] The name of the interface or view
20
- # to which this border belongs.
21
- # @param block [Proc]
22
- # @raise [Vedeu::Error::MissingRequired|
23
- # Vedeu::Error::RequiresBlock] When a name or block
24
- # respectively are not given.
25
- # @return [Vedeu::Borders::Border]
26
- def self.border(name, &block)
27
- fail Vedeu::Error::MissingRequired unless name
28
- fail Vedeu::Error::RequiresBlock unless block_given?
29
-
30
- Vedeu::Borders::Border.build(enabled: true, name: name, &block).store
31
- end
32
-
33
14
  # Set the character to be used to draw the bottom left corner of
34
15
  # the border.
35
16
  #
@@ -67,7 +67,7 @@ module Vedeu
67
67
  #
68
68
  # @return [String]
69
69
  def value
70
- @value || ''
70
+ @value || ''.freeze
71
71
  end
72
72
  alias_method :title, :value
73
73
  alias_method :caption, :value
@@ -89,10 +89,8 @@ module Vedeu
89
89
  # @param x [Fixnum]
90
90
  # @return [Hash<Symbol => void>]
91
91
  def attributes(char, x)
92
- @_attributes ||= border.attributes
93
-
94
- @_attributes.merge!(position: Vedeu::Geometries::Position.new(y, x),
95
- value: char)
92
+ border.attributes.merge(position: Vedeu::Geometries::Position.new(y, x),
93
+ value: char)
96
94
  end
97
95
 
98
96
  # @return [Vedeu::Borders::Border]
@@ -169,7 +167,7 @@ module Vedeu
169
167
  #
170
168
  # @return [String]
171
169
  def truncate
172
- @_truncate ||= value.chomp.slice(0...(width - 4))
170
+ value.chomp.slice(0...(width - 4))
173
171
  end
174
172
 
175
173
  # Return the size of the horizontal border given.
@@ -181,12 +179,12 @@ module Vedeu
181
179
 
182
180
  # @return [Fixnum]
183
181
  def x
184
- @_x ||= geometry.bx + start_index
182
+ geometry.bx + start_index
185
183
  end
186
184
 
187
185
  # @return [Fixnum]
188
186
  def y
189
- @_y ||= geometry.y
187
+ geometry.y
190
188
  end
191
189
 
192
190
  end # Title
@@ -176,7 +176,7 @@ module Vedeu
176
176
  {
177
177
  back: nil,
178
178
  front: nil,
179
- name: '',
179
+ name: ''.freeze,
180
180
  previous: nil,
181
181
  repository: Vedeu.buffers,
182
182
  }
@@ -192,7 +192,7 @@ module Vedeu
192
192
  #
193
193
  # @return [Boolean]
194
194
  def swap
195
- Vedeu.log(type: :output, message: "Buffer swapping: '#{name}'".freeze)
195
+ Vedeu.log(type: :buffer, message: "Buffer swapping: '#{name}'".freeze)
196
196
 
197
197
  @previous = front
198
198
  @front = back
@@ -64,7 +64,7 @@ module Vedeu
64
64
 
65
65
  # @return [Boolean]
66
66
  def content_only?
67
- options[:content_only] == true
67
+ truthy?(options[:content_only])
68
68
  end
69
69
 
70
70
  # @return [Hash<Symbol => Boolean>]
@@ -40,17 +40,6 @@ module Vedeu
40
40
  self
41
41
  end
42
42
 
43
- # @return [Vedeu::Borders::Border|Vedeu::Interfaces::Interface]
44
- def named_parent
45
- if border
46
- border
47
-
48
- elsif interface
49
- interface
50
-
51
- end
52
- end
53
-
54
43
  # @return [String]
55
44
  def value
56
45
  return '' unless present?(@value)
@@ -60,7 +60,7 @@ module Vedeu
60
60
  # @param _options [Hash] Ignored.
61
61
  # @return [String]
62
62
  def to_html(_options = {})
63
- ''
63
+ ''.freeze
64
64
  end
65
65
 
66
66
  # @return [String]
@@ -75,10 +75,10 @@ module Vedeu
75
75
  def defaults
76
76
  {
77
77
  colour: {},
78
- name: '',
78
+ name: ''.freeze,
79
79
  position: nil,
80
- style: '',
81
- value: '',
80
+ style: ''.freeze,
81
+ value: ''.freeze,
82
82
  }
83
83
  end
84
84
 
@@ -1,52 +1,51 @@
1
1
  module Vedeu
2
2
 
3
- module Geometries
3
+ module Coercers
4
4
 
5
5
  # The subclasses of this class, HorizontalAlignment and
6
- # VerticalAlignment provide the mechanism to align an interface or
7
- # view horizontally or vertically within the available terminal
8
- # space.
6
+ # VerticalAlignment provide the mechanism to validate a horizontal
7
+ # or vertical alignment value.
9
8
  #
10
- # @see Vedeu::Geometries::HorizontalAlignment
11
- # @see Vedeu::Geometries::VerticalAlignment
9
+ # @see Vedeu::Coercers::HorizontalAlignment
10
+ # @see Vedeu::Coercers::VerticalAlignment
12
11
  #
13
12
  # @api private
14
13
  #
15
14
  class Alignment
16
15
 
17
- # @param (see #initialize)
18
- # @return (see #align)
19
- def self.align(value = nil)
20
- new(value).align
21
- end
22
-
23
- # @param value [NilClass|Symbol|Vedeu::Geometries::Alignment]
24
- # @return [Vedeu::Geometries::Alignment]
25
- def self.coerce(value = nil)
26
- if value.is_a?(self)
27
- value
16
+ include Vedeu::Common
28
17
 
29
- elsif value.is_a?(Symbol)
30
- new(value)
18
+ # @!attribute [r] value
19
+ # @return [Symbol]
20
+ attr_reader :value
31
21
 
32
- else
33
- new(:none)
22
+ # @param value [Symbol|Vedeu::Coercers::Alignment]
23
+ # @return [Vedeu::Coercers::Alignment]
24
+ def self.coerce(value = :none)
25
+ return value if value.is_a?(self)
34
26
 
35
- end
27
+ new(value).coerce
36
28
  end
37
29
 
38
- # Returns a new instance of Vedeu::Geometries::Alignment.
30
+ # Returns a new instance of Vedeu::Coercers::Alignment.
39
31
  #
40
- # @param value [NilClass|Symbol]
41
- # @return [Vedeu::Geometries::Alignment]
42
- def initialize(value = nil)
43
- @value = value
32
+ # @param value [Symbol]
33
+ # @return [Vedeu::Coercers::Alignment]
34
+ def initialize(value = :none)
35
+ @value = value || :none
44
36
  end
45
37
 
46
- # @raise [Vedeu::Error::NotImplemented] Subclasses of this class
47
- # must implement this method.
48
- def align
49
- fail Vedeu::Error::NotImplemented, 'Subclasses implement this.'.freeze
38
+ # @return [Symbol]
39
+ def coerce
40
+ if value == :center
41
+ @value = :centre
42
+
43
+ elsif invalid?
44
+ @value = :none
45
+
46
+ end
47
+
48
+ self
50
49
  end
51
50
 
52
51
  # Return a boolean indicating alignment was set to :bottom.
@@ -63,6 +62,20 @@ module Vedeu
63
62
  value == :centre
64
63
  end
65
64
 
65
+ # An object is equal when its values are the same.
66
+ #
67
+ # @param other [void]
68
+ # @return [Boolean]
69
+ def eql?(other)
70
+ self.class == other.class && value == other.value
71
+ end
72
+ alias_method :==, :eql?
73
+
74
+ # @return [Boolean]
75
+ def invalid?
76
+ !valid?
77
+ end
78
+
66
79
  # Return a boolean indicating alignment was set to :left.
67
80
  #
68
81
  # @return [Boolean]
@@ -98,37 +111,21 @@ module Vedeu
98
111
  value == :none
99
112
  end
100
113
 
101
- private
102
-
103
- # @return [Boolean]
104
- def none?
105
- @value == :none || @value.nil? || !(@value.is_a?(Symbol))
106
- end
107
-
114
+ # Return a boolean indicating the value is a valid alignment.
115
+ #
108
116
  # @return [Boolean]
109
117
  def valid?
110
- values.include?(value)
118
+ present?(value) && value.is_a?(Symbol) && values.include?(value)
111
119
  end
112
120
 
113
- # @return [Symbol]
114
- def value
115
- @_value ||= if none?
116
- :none
117
-
118
- elsif @value == :center
119
- :centre
120
-
121
- else
122
- @value.to_sym
123
-
124
- end
125
- end
121
+ private
126
122
 
127
123
  # @return [Array<Symbol>]
128
124
  def values
129
125
  [
130
126
  :bottom,
131
127
  :centre,
128
+ :center,
132
129
  :left,
133
130
  :middle,
134
131
  :none,
@@ -139,6 +136,6 @@ module Vedeu
139
136
 
140
137
  end # Alignment
141
138
 
142
- end # Geometries
139
+ end # Coercers
143
140
 
144
141
  end # Vedeu
@@ -0,0 +1,16 @@
1
+ module Vedeu
2
+
3
+ # Provides a mechanism to coerce values within Vedeu.
4
+ #
5
+ module Coercers
6
+
7
+ end # Coercers
8
+
9
+ end # Vedeu
10
+
11
+ require 'vedeu/coercers/alignment'
12
+ require 'vedeu/coercers/horizontal_alignment'
13
+ require 'vedeu/coercers/vertical_alignment'
14
+
15
+ require 'vedeu/coercers/colour'
16
+ require 'vedeu/coercers/colour_attributes'
@@ -0,0 +1,78 @@
1
+ module Vedeu
2
+
3
+ module Coercers
4
+
5
+ # Converts a given value into a {Vedeu::Colours::Colour} if
6
+ # possible.
7
+ #
8
+ # @api private
9
+ #
10
+ class Colour
11
+
12
+ include Vedeu::Common
13
+
14
+ # @param (see #initialize)
15
+ # @return (see #coerce)
16
+ def self.coerce(value)
17
+ new(value).coerce
18
+ end
19
+
20
+ # @param value [void]
21
+ # @return [Vedeu::Coercers::Colour]
22
+ def initialize(value)
23
+ @value = value
24
+ end
25
+
26
+ # @raise [Vedeu::Error::Fatal] When the value cannot be coerced.
27
+ # @return [void]
28
+ def coerce
29
+ if absent?(value)
30
+ Vedeu::Colours::Colour.new
31
+
32
+ elsif background?
33
+ Vedeu::Colours::Colour.new(background: value)
34
+
35
+ elsif colour?
36
+ value
37
+
38
+ elsif foreground?
39
+ Vedeu::Colours::Colour.new(foreground: value)
40
+
41
+ elsif hash?(value)
42
+ attributes = Vedeu::Coercers::ColourAttributes.coerce(value)
43
+ Vedeu::Colours::Colour.new(attributes)
44
+
45
+ else
46
+ fail Vedeu::Error::Fatal, 'Vedeu cannot coerce this colour.'.freeze
47
+
48
+ end
49
+ end
50
+
51
+ protected
52
+
53
+ # @!attribute [r] value
54
+ # @return [void]
55
+ attr_reader :value
56
+
57
+ private
58
+
59
+ # @return [Boolean]
60
+ def background?
61
+ value.is_a?(Vedeu::Colours::Background)
62
+ end
63
+
64
+ # @return [Boolean]
65
+ def colour?
66
+ value.is_a?(Vedeu::Colours::Colour)
67
+ end
68
+
69
+ # @return [Boolean]
70
+ def foreground?
71
+ value.is_a?(Vedeu::Colours::Foreground)
72
+ end
73
+
74
+ end # Colour
75
+
76
+ end # Coercers
77
+
78
+ end # Vedeu