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,84 @@
1
+ module Vedeu
2
+
3
+ module Colours
4
+
5
+ # Validates the value as a valid colour string in HTML/CSS format,
6
+ # e.g. '#123456'.
7
+ #
8
+ # @api private
9
+ #
10
+ class Validator
11
+
12
+ include Vedeu::Common
13
+
14
+ # @param value [String]
15
+ # @return [Boolean]
16
+ def self.valid?(value)
17
+ new(value).valid?
18
+ end
19
+
20
+ # @param value [String]
21
+ # @return [Vedeu::Colours::Validator]
22
+ def initialize(value)
23
+ @value = value
24
+ end
25
+
26
+ # Returns a boolean indicating whether the value is within the
27
+ # range of valid terminal numbered colours.
28
+ #
29
+ # @return [Boolean]
30
+ def within_range?
31
+ numeric?(value) && value >= 0 && value <= 255
32
+ end
33
+
34
+ # Returns a boolean indicating whether the colour provided is a
35
+ # valid named colour.
36
+ #
37
+ # @return [Boolean]
38
+ def named?
39
+ Vedeu::EscapeSequences::Esc.valid_name?(value)
40
+ end
41
+
42
+ # Returns a boolean indicated whether the colour is a valid
43
+ # HTML/CSS colour.
44
+ #
45
+ # @return [Boolean]
46
+ def rgb?
47
+ return true if value =~ /^#([A-Fa-f0-9]{6})$/.freeze
48
+
49
+ false
50
+ end
51
+
52
+ # @return [Boolean]
53
+ def valid?
54
+ background? || colour? || foreground? || rgb? || named? || within_range?
55
+ end
56
+
57
+ protected
58
+
59
+ # @!attribute [r] value
60
+ # @return [String]
61
+ attr_reader :value
62
+
63
+ private
64
+
65
+ # @return [Boolean]
66
+ def background?
67
+ value.is_a?(Vedeu::Colours::Background)
68
+ end
69
+
70
+ # @return [Boolean]
71
+ def colour?
72
+ value.is_a?(Vedeu::Colours::Colour)
73
+ end
74
+
75
+ # @return [Boolean]
76
+ def foreground?
77
+ value.is_a?(Vedeu::Colours::Foreground)
78
+ end
79
+
80
+ end # Validator
81
+
82
+ end # Colours
83
+
84
+ end # Vedeu
data/lib/vedeu/common.rb CHANGED
@@ -24,6 +24,41 @@ module Vedeu
24
24
  klass.new(attributes)
25
25
  end
26
26
 
27
+ # Returns a boolean indicating the value was a boolean.
28
+ #
29
+ # @param value [void]
30
+ # @return [Boolean]
31
+ def boolean(value)
32
+ return value if boolean?(value)
33
+ return false if falsy?(value)
34
+ return true if truthy?(value)
35
+ end
36
+
37
+ # Returns a boolean indicating whether the value is a Boolean.
38
+ #
39
+ # @param value [Boolean]
40
+ # @return [Boolean]
41
+ def boolean?(value)
42
+ value.is_a?(TrueClass) || value.is_a?(FalseClass)
43
+ end
44
+
45
+ # Returns a boolean indicating whether the value should be
46
+ # considered false.
47
+ #
48
+ # @param value [void]
49
+ # @return [Boolean]
50
+ def falsy?(value)
51
+ value.nil? || value.is_a?(FalseClass)
52
+ end
53
+
54
+ # Returns a boolean indicating whether the value is a Hash.
55
+ #
56
+ # @param value [Hash|void]
57
+ # @return [Boolean]
58
+ def hash?(value)
59
+ value.is_a?(Hash)
60
+ end
61
+
27
62
  # Returns a boolean indicating whether the value is a Fixnum.
28
63
  #
29
64
  # @param value [Fixnum|void]
@@ -64,6 +99,23 @@ module Vedeu
64
99
  name
65
100
  end
66
101
 
102
+ # Returns a boolean indicating whether the value is a Fixnum.
103
+ #
104
+ # @param value [String|void]
105
+ # @return [Boolean]
106
+ def string?(value)
107
+ value.is_a?(String)
108
+ end
109
+
110
+ # Returns a boolean indicating whether the value should be
111
+ # considered true.
112
+ #
113
+ # @param value [void]
114
+ # @return [Boolean]
115
+ def truthy?(value)
116
+ !falsy?(value)
117
+ end
118
+
67
119
  end # Common
68
120
 
69
121
  end # Vedeu
@@ -556,10 +556,7 @@ module Vedeu
556
556
  def background(value = nil)
557
557
  return options[:background] unless value
558
558
 
559
- bg = Vedeu::Colours::Background.coerce(value)
560
-
561
- options[:background] = colour_attributes(background: bg)
562
- .fetch(:background)
559
+ options[:background] = value
563
560
  end
564
561
 
565
562
  # Sets the foreground of the terminal.
@@ -574,10 +571,7 @@ module Vedeu
574
571
  def foreground(value = nil)
575
572
  return options[:foreground] unless value
576
573
 
577
- fg = Vedeu::Colours::Foreground.coerce(value)
578
-
579
- options[:foreground] = colour_attributes(foreground: fg)
580
- .fetch(:foreground)
574
+ options[:foreground] = value
581
575
  end
582
576
 
583
577
  # Sets the background and foreground of the terminal.
@@ -590,8 +584,8 @@ module Vedeu
590
584
  # @param attrs [Hash<Symbol => String>]
591
585
  # @return [Hash<Symbol => void>]
592
586
  def colour(attrs = {})
593
- options[:background] = background(attrs[:background])
594
- options[:foreground] = foreground(attrs[:foreground])
587
+ options[:background] = attrs[:background]
588
+ options[:foreground] = attrs[:foreground]
595
589
  options
596
590
  end
597
591
 
@@ -19,7 +19,7 @@ module Vedeu
19
19
  #
20
20
  # @return [Vedeu::Colours::Background]
21
21
  def background
22
- instance.options[:background]
22
+ Vedeu::Colours::Background.coerce(instance.options[:background])
23
23
  end
24
24
 
25
25
  # Returns the base_path value.
@@ -134,7 +134,7 @@ module Vedeu
134
134
  #
135
135
  # @return [Vedeu::Colours::Foreground]
136
136
  def foreground
137
- instance.options[:foreground]
137
+ Vedeu::Colours::Foreground.coerce(instance.options[:foreground])
138
138
  end
139
139
 
140
140
  # Returns the client defined height for the terminal.
@@ -325,7 +325,7 @@ module Vedeu
325
325
  # @return [Hash<Symbol => void>]
326
326
  def defaults
327
327
  {
328
- background: Vedeu::Colours::Background.coerce(:default),
328
+ background: :default,
329
329
  base_path: base_path,
330
330
  colour_mode: detect_colour_mode,
331
331
  compression: true,
@@ -335,7 +335,7 @@ module Vedeu
335
335
  drb_port: nil,
336
336
  drb_height: 25,
337
337
  drb_width: 80,
338
- foreground: Vedeu::Colours::Foreground.coerce(:default),
338
+ foreground: :default,
339
339
  height: nil,
340
340
  interactive: true,
341
341
  log: nil,
@@ -164,7 +164,7 @@ module Vedeu
164
164
  # @return [Hash<Symbol => Fixnum|String|Symbol>]
165
165
  def defaults
166
166
  {
167
- name: '',
167
+ name: ''.freeze,
168
168
  offset: nil,
169
169
  type: :x,
170
170
  }
@@ -278,7 +278,7 @@ module Vedeu
278
278
  # Vedeu::Cursors::Repository>]
279
279
  def defaults
280
280
  {
281
- name: '',
281
+ name: ''.freeze,
282
282
  ox: 0,
283
283
  oy: 0,
284
284
  repository: Vedeu.cursors,
@@ -8,34 +8,7 @@ module Vedeu
8
8
  # See {file:docs/cursors.md#view_cursors}
9
9
  module DSL
10
10
 
11
- # Set the cursor visibility on an interface.
12
- #
13
- # @param value [Boolean] Any value other than nil or false will
14
- # evaluate to true.
15
- # @return [Vedeu::Cursors::Cursor]
16
- def cursor(value = true)
17
- boolean = value ? true : false
18
-
19
- model.cursor_visible = boolean
20
-
21
- Vedeu::Cursors::Cursor.store(name: model.name, visible: boolean)
22
- end
23
-
24
- # Set the cursor to visible for the interface or view.
25
- #
26
- # @return [Vedeu::Cursors::Cursor]
27
- def cursor!
28
- cursor(true)
29
- end
30
- alias_method :show_cursor!, :cursor!
31
-
32
- # Set the cursor to invisible for the interface or view.
33
- #
34
- # @return [Vedeu::Cursors::Cursor]
35
- def no_cursor!
36
- cursor(false)
37
- end
38
- alias_method :hide_cursor!, :no_cursor!
11
+ include Vedeu::DSL::Cursors
39
12
 
40
13
  end # DSL
41
14
 
data/lib/vedeu/dsl/all.rb CHANGED
@@ -8,14 +8,14 @@ module Vedeu
8
8
 
9
9
  end # Vedeu
10
10
 
11
+ require 'vedeu/dsl/string/all'
12
+ require 'vedeu/dsl/border'
13
+ require 'vedeu/dsl/cursors'
11
14
  require 'vedeu/dsl/dsl'
12
- require 'vedeu/dsl/shared'
15
+ require 'vedeu/dsl/attributes'
16
+ require 'vedeu/dsl/geometry'
13
17
  require 'vedeu/dsl/use'
14
18
  require 'vedeu/dsl/presentation'
15
- require 'vedeu/dsl/composition'
16
- require 'vedeu/dsl/text'
17
- require 'vedeu/dsl/lines'
18
- require 'vedeu/dsl/line'
19
- require 'vedeu/dsl/streams'
20
- require 'vedeu/dsl/stream'
21
19
  require 'vedeu/dsl/view'
20
+ require 'vedeu/dsl/elements'
21
+ require 'vedeu/dsl/views'
@@ -0,0 +1,224 @@
1
+ module Vedeu
2
+
3
+ module DSL
4
+
5
+ # Creates attributes for DSL objects.
6
+ #
7
+ # @api private
8
+ #
9
+ class Attributes
10
+
11
+ include Vedeu::Common
12
+
13
+ # @param (see #initialize)
14
+ # @return (see #attributes)
15
+ def self.build(context = nil,
16
+ model = nil,
17
+ value = ''.freeze,
18
+ options = {},
19
+ &block)
20
+ new(context, model, value, options, &block).attributes
21
+ end
22
+
23
+ # @param options [Hash]
24
+ # @option options align [Symbol] One of :center, :centre, :left,
25
+ # :none (default) or :right.
26
+ # @option options background [String] The background colour.
27
+ # @option options colour [Hash] The colour.
28
+ # @option colour background [String] The background colour.
29
+ # @option colour foreground [String] The foreground colour.
30
+ # @option options foreground [String] The foreground colour.
31
+ # @option options name [NilClass|String|Symbol]
32
+ # @option options pad [String] The character to use to pad the
33
+ # value.
34
+ # @option options style [Array<Symbol>|
35
+ # Hash<Symbol => Array<Symbol>|Symbol>|Symbol] The style.
36
+ # @option options truncate [Boolean] Whether the value should be
37
+ # truncated.
38
+ # @option options width [Fixnum] The desired width for the
39
+ # value.
40
+ # @option options wordwrap [Boolean] Whether the value should be
41
+ # wordwrapped.
42
+ # @return [Vedeu::DSL::Attributes]
43
+ def initialize(context = nil,
44
+ model = nil,
45
+ value = ''.freeze,
46
+ options = {},
47
+ &block)
48
+ @context = context
49
+ @model = model
50
+ @value = value || ''.freeze
51
+ @options = options || {}
52
+ @block = block
53
+ end
54
+
55
+ # @return [Hash]
56
+ def attributes
57
+ {
58
+ align: align,
59
+ client: client,
60
+ colour: colour,
61
+ name: name,
62
+ pad: pad,
63
+ style: style,
64
+ truncate: truncate,
65
+ width: width,
66
+ wordwrap: wordwrap,
67
+ }.merge!(value)
68
+ end
69
+
70
+ protected
71
+
72
+ # @!attribute [r] context
73
+ # @return [NilClass|Vedeu::DSL::Elements]
74
+ attr_reader :context
75
+
76
+ # @!attribute [r] model
77
+ # @return [NilClass|Vedeu::Views::*]
78
+ attr_reader :model
79
+
80
+ # @!attribute [r] block
81
+ # @return [NilClass|Proc]
82
+ attr_reader :block
83
+
84
+ private
85
+
86
+ # @return [Vedeu::Coercers::Alignment]
87
+ def align
88
+ Vedeu::Coercers::Alignment.coerce(options[:align])
89
+ end
90
+
91
+ # Returns the client object which called the DSL method.
92
+ #
93
+ # @return [Object]
94
+ def client
95
+ if block
96
+ if eval('client', block.binding).nil?
97
+ eval(context.class.name, block.binding)
98
+
99
+ else
100
+ eval('client', block.binding)
101
+
102
+ end
103
+ elsif present?(model)
104
+ model.client
105
+
106
+ end
107
+ end
108
+
109
+ # @return [Vedeu::Colours::Colour]
110
+ def colour
111
+ Vedeu::Colours::Colour.coerce(new_colour_options)
112
+ end
113
+
114
+ # @return [Hash]
115
+ def defaults
116
+ {
117
+ align: :none,
118
+ client: nil,
119
+ colour: nil,
120
+ name: nil,
121
+ pad: ' '.freeze,
122
+ style: nil,
123
+ truncate: false,
124
+ width: nil,
125
+ wordwrap: false,
126
+ }
127
+ end
128
+
129
+ # @return [NilClass|Vedeu::Geometries::Geometry]
130
+ def geometry
131
+ @_geometry ||= Vedeu.geometries.by_name(name)
132
+ end
133
+
134
+ # @return [NilClass|String|Symbol]
135
+ def name
136
+ return model.name if present?(model) && present?(model.name)
137
+
138
+ nil
139
+ end
140
+
141
+ # @return [Hash]
142
+ def options
143
+ defaults.merge!(@options)
144
+ end
145
+
146
+ # @return [String]
147
+ def pad
148
+ options[:pad].to_s[0] || ' '.freeze
149
+ end
150
+
151
+ # @return [NilClass|Vedeu::Presentation::Style]
152
+ def style
153
+ Vedeu::Presentation::Style.coerce(options[:style])
154
+ end
155
+
156
+ # @return [Boolean]
157
+ def truncate
158
+ truthy?(options[:truncate])
159
+ end
160
+
161
+ # @return [Hash<Symbol => String>]
162
+ def value
163
+ if block
164
+ {}
165
+
166
+ elsif absent?(@value)
167
+ {}
168
+
169
+ else
170
+ {
171
+ value: @value
172
+ }
173
+
174
+ end
175
+ end
176
+
177
+ # @return [Fixnum|NilClass]
178
+ def width
179
+ if numeric?(options[:width])
180
+ options[:width]
181
+
182
+ elsif name
183
+ geometry.bordered_width
184
+
185
+ end
186
+ end
187
+
188
+ # @return [Boolean]
189
+ def wordwrap
190
+ truthy?(options[:wordwrap])
191
+ end
192
+
193
+ # @return [Array<Symbol>]
194
+ def colour_attributes
195
+ [:background, :colour, :foreground]
196
+ end
197
+
198
+ # @return [Hash]
199
+ def colour_options
200
+ options.select { |k, _| colour_attributes.include?(k) }
201
+ end
202
+
203
+ # @return [Hash]
204
+ def coerce_colour_options
205
+ Vedeu::Coercers::ColourAttributes.coerce(colour_options)
206
+ end
207
+
208
+ # @return [Hash]
209
+ def model_colour
210
+ return {} unless present?(model) && model.colour
211
+
212
+ model.colour.attributes
213
+ end
214
+
215
+ # @return [Hash]
216
+ def new_colour_options
217
+ model_colour.merge(coerce_colour_options)
218
+ end
219
+
220
+ end # Attributes
221
+
222
+ end # DSL
223
+
224
+ end # Vedeu