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
@@ -201,7 +201,7 @@ module Vedeu
201
201
  client: nil,
202
202
  collection: [],
203
203
  current: 0,
204
- name: '',
204
+ name: ''.freeze,
205
205
  repository: Vedeu.menus,
206
206
  selected: nil,
207
207
  }
@@ -216,7 +216,7 @@ module Vedeu
216
216
  # refresh event for that interface. Returns false when the
217
217
  # storage is empty.
218
218
  #
219
- # @return [String|FalseClass]
219
+ # @return [String|Boolean]
220
220
  def update
221
221
  return false if storage.empty?
222
222
 
@@ -15,7 +15,7 @@ module Vedeu
15
15
 
16
16
  # Set the visible state to false and store the model.
17
17
  #
18
- # @return [FalseClass]
18
+ # @return [Boolean]
19
19
  def hide
20
20
  @visible = false
21
21
 
@@ -24,7 +24,7 @@ module Vedeu
24
24
 
25
25
  # Set the visible state to true and store the model.
26
26
  #
27
- # @return [TrueClass]
27
+ # @return [Boolean]
28
28
  def show
29
29
  @visible = true
30
30
 
@@ -34,7 +34,7 @@ module Vedeu
34
34
  # Toggle the visible state and store the model. When the model is
35
35
  # hidden, then it is shown, and vice versa.
36
36
  #
37
- # @return [FalseClass|TrueClass]
37
+ # @return [Boolean]
38
38
  def toggle
39
39
  return hide if visible?
40
40
 
@@ -150,7 +150,7 @@ module Vedeu
150
150
  # @param klass [Class]
151
151
  # @return [void]
152
152
  def self.included(klass)
153
- klass.send(:extend, ClassMethods)
153
+ klass.extend(Vedeu::Toggleable::ClassMethods)
154
154
  end
155
155
 
156
156
  end # Toggleable
@@ -24,7 +24,7 @@ module Vedeu
24
24
  @name = @attributes.fetch(:name, '')
25
25
  end
26
26
 
27
- # @return [FalseClass]
27
+ # @return [Boolean]
28
28
  def falsy
29
29
  false
30
30
  end
@@ -73,7 +73,7 @@ module Vedeu
73
73
  self
74
74
  end
75
75
 
76
- # @return [FalseClass]
76
+ # @return [Boolean]
77
77
  def visible=(*)
78
78
  false
79
79
  end
@@ -8,9 +8,7 @@ end # Vedeu
8
8
 
9
9
  require 'vedeu/output/compressor_cache'
10
10
  require 'vedeu/output/compressor'
11
- require 'vedeu/output/text'
12
11
  require 'vedeu/output/output'
13
12
  require 'vedeu/output/viewport'
14
- require 'vedeu/output/wordwrap'
15
13
  require 'vedeu/output/refresh'
16
14
  require 'vedeu/output/write'
@@ -44,7 +44,7 @@ module Vedeu
44
44
  # @return [Hash<Symbol => Array<void>>]
45
45
  def in_memory
46
46
  {
47
- compressed: '',
47
+ compressed: ''.freeze,
48
48
  original: [],
49
49
  }
50
50
  end
@@ -58,17 +58,17 @@ module Vedeu
58
58
 
59
59
  # @return [Array]
60
60
  def buffer_update
61
- buffer_update!
61
+ Vedeu::Buffers::Terminal.update(output)
62
62
  end
63
63
 
64
64
  # @return [Array]
65
65
  def buffer_write
66
- buffer_write!
66
+ Vedeu::Buffers::Terminal.write(output)
67
67
  end
68
68
 
69
69
  # @return [Array<String>]
70
70
  def direct_write
71
- direct_write!
71
+ Vedeu::Terminal.output(output.to_s)
72
72
  end
73
73
 
74
74
  # Send the view to the renderers. If the output is a
@@ -81,10 +81,10 @@ module Vedeu
81
81
  # @return [Array|String|NilClass]
82
82
  def render_output
83
83
  if escape_sequence?
84
- direct_write!
84
+ direct_write
85
85
 
86
86
  else
87
- buffer_write!
87
+ buffer_write
88
88
 
89
89
  end
90
90
  end
@@ -98,21 +98,6 @@ module Vedeu
98
98
 
99
99
  private
100
100
 
101
- # @return [Array]
102
- def buffer_update!
103
- Vedeu::Buffers::Terminal.update(output)
104
- end
105
-
106
- # @return [Array]
107
- def buffer_write!
108
- Vedeu::Buffers::Terminal.write(output)
109
- end
110
-
111
- # @return [Array<String>]
112
- def direct_write!
113
- Vedeu::Terminal.output(output.to_s)
114
- end
115
-
116
101
  # @return [Boolean]
117
102
  def escape_sequence?
118
103
  output.is_a?(Vedeu::Cells::Escape)
@@ -4,6 +4,8 @@ module Vedeu
4
4
 
5
5
  # Provides colour related presentation behaviour.
6
6
  #
7
+ # @api private
8
+ #
7
9
  module Colour
8
10
 
9
11
  include Vedeu::Repositories::Parent
@@ -12,17 +14,18 @@ module Vedeu
12
14
 
13
15
  # @return [Vedeu::Colours::Colour]
14
16
  def colour
15
- @_colour ||= if @colour
17
+ @_colour ||= if colour?
16
18
  Vedeu::Colours::Colour.coerce(@colour)
17
19
 
18
- elsif self.is_a?(Vedeu::Views::Char) && name
19
- Vedeu::Colours::Colour.coerce(interface.colour)
20
+ elsif parent_colour?
21
+ Vedeu::Colours::Colour.coerce(parent_colour)
20
22
 
21
- elsif self.respond_to?(:named_parent) && name
22
- Vedeu::Colours::Colour.coerce(named_parent.colour)
23
+ elsif named_colour?
24
+ Vedeu::Colours::Colour.coerce(named_colour)
23
25
 
24
- elsif parent && present?(parent.colour)
25
- Vedeu::Colours::Colour.coerce(parent.colour)
26
+ elsif self.is_a?(Vedeu::Views::Char) && name
27
+ # Currently used by Vedeu::Output::Viewport
28
+ Vedeu::Colours::Colour.coerce(interface.colour)
26
29
 
27
30
  else
28
31
  Vedeu::Colours::Colour.new
@@ -38,6 +41,35 @@ module Vedeu
38
41
  @_colour = @colour = Vedeu::Colours::Colour.coerce(value)
39
42
  end
40
43
 
44
+ # @return [Boolean]
45
+ def colour?
46
+ present?(@colour)
47
+ end
48
+
49
+ private
50
+
51
+ # @return [Vedeu::Colours::Colour]
52
+ def named_colour
53
+ Vedeu.interfaces.by_name(name).colour
54
+ end
55
+
56
+ # @return [Boolean]
57
+ def named_colour?
58
+ return false if self.is_a?(Vedeu::Interfaces::Interface)
59
+
60
+ present?(name) && Vedeu.interfaces.registered?(name)
61
+ end
62
+
63
+ # @return [Vedeu::Colours::Colour]
64
+ def parent_colour
65
+ parent.colour
66
+ end
67
+
68
+ # @return [Boolean]
69
+ def parent_colour?
70
+ present?(parent) && parent.respond_to?(:colour?)
71
+ end
72
+
41
73
  end # Colour
42
74
 
43
75
  end # Presentation
@@ -15,23 +15,37 @@ module Vedeu
15
15
  #
16
16
  class Style
17
17
 
18
+ class << self
19
+
20
+ include Vedeu::Common
21
+
22
+ # Produces new objects of the correct class from the value,
23
+ # ignores objects that have already been coerced.
24
+ #
25
+ # @param value [Object|NilClass]
26
+ # @return [Object]
27
+ def coerce(value)
28
+ return value if value.is_a?(Vedeu::Presentation::Style)
29
+ return new(value) unless value.is_a?(Hash)
30
+ return new unless present?(value[:style])
31
+
32
+ if value[:style].is_a?(Vedeu::Presentation::Style)
33
+ value[:style]
34
+
35
+ else
36
+ new(value[:style])
37
+
38
+ end
39
+ end
40
+
41
+ end # Eigenclass
42
+
18
43
  include Vedeu::Common
19
44
 
20
45
  # @!attribute [rw] value
21
46
  # @return [String|Symbol]
22
47
  attr_accessor :value
23
48
 
24
- # Produces new objects of the correct class from the value,
25
- # ignores objects that have already been coerced.
26
- #
27
- # @param value [Object|NilClass]
28
- # @return [Object]
29
- def self.coerce(value)
30
- return value if value.is_a?(self)
31
-
32
- new(value)
33
- end
34
-
35
49
  # Return a new instance of Vedeu::Presentation::Style.
36
50
  #
37
51
  # @param value [Array<String|Symbol>|String|Symbol]
@@ -36,7 +36,7 @@ module Vedeu
36
36
  def clear
37
37
  @output = Vedeu::Cells::Escape.new
38
38
 
39
- ''
39
+ ''.freeze
40
40
  end
41
41
 
42
42
  # @param output [Vedeu::Models::Page]
@@ -49,14 +49,14 @@ module Vedeu
49
49
 
50
50
  # @return [String]
51
51
  def html_body
52
- return '' if output.is_a?(Vedeu::Cells::Escape)
52
+ return ''.freeze if output.is_a?(Vedeu::Cells::Escape)
53
53
 
54
54
  out = ''
55
55
 
56
56
  output.each do |line|
57
- out << "#{start_row_tag}\n"
57
+ out << "#{start_row_tag}\n".freeze
58
58
  line.each { |char| out << char.to_html(options) }
59
- out << "#{end_row_tag}\n"
59
+ out << "#{end_row_tag}\n".freeze
60
60
  end
61
61
 
62
62
  out.freeze
@@ -108,12 +108,12 @@ module Vedeu
108
108
  # @return [Hash<Symbol => void>]
109
109
  def defaults
110
110
  {
111
- content: '',
112
- end_tag: '</td>',
113
- end_row_tag: '</tr>',
114
- filename: 'out',
115
- start_tag: '<td',
116
- start_row_tag: '<tr>',
111
+ content: ''.freeze,
112
+ end_tag: '</td>'.freeze,
113
+ end_row_tag: '</tr>'.freeze,
114
+ filename: 'out'.freeze,
115
+ start_tag: '<td'.freeze,
116
+ start_row_tag: '<tr>'.freeze,
117
117
  template: default_template,
118
118
  timestamp: false,
119
119
  write_file: true,
@@ -122,7 +122,7 @@ module Vedeu
122
122
 
123
123
  # @return [String]
124
124
  def default_template
125
- ::File.dirname(__FILE__) + '/../templates/html_renderer.vedeu'
125
+ ::File.dirname(__FILE__) + '/../templates/html_renderer.vedeu'.freeze
126
126
  end
127
127
 
128
128
  end # HTML
@@ -19,6 +19,15 @@ module Vedeu
19
19
  collection[index]
20
20
  end
21
21
 
22
+ # Returns a boolean indicating whether the collection is not
23
+ # empty.
24
+ #
25
+ # @param block [Proc]
26
+ # @return [Boolean]
27
+ def any?(&block)
28
+ collection.any?(&block)
29
+ end
30
+
22
31
  # Provides iteration over the collection.
23
32
  #
24
33
  # @param block [Proc]
@@ -15,6 +15,7 @@ module Vedeu
15
15
  # @return [Array|Vedeu::Repositories::Collection]
16
16
  attr_reader :collection
17
17
  alias_method :all, :collection
18
+ alias_method :value, :collection
18
19
 
19
20
  # @!attribute [rw] parent
20
21
  # @return [Fixnum]
@@ -21,7 +21,10 @@ module Vedeu
21
21
  # @return [void] A new instance of the class including this
22
22
  # module.
23
23
  def initialize(attributes = {})
24
- attrs = attributes.to_h.keep_if { |key, _| defaults.key?(key) }
24
+ fail Vedeu::Error::InvalidSyntax,
25
+ 'Argument :attributes is not a Hash.' unless attributes.is_a?(Hash)
26
+
27
+ attrs = attributes.keep_if { |key, _| defaults.key?(key) }
25
28
 
26
29
  defaults.merge!(attrs).each do |key, value|
27
30
  instance_variable_set("@#{key}", value || defaults.fetch(key))
@@ -33,28 +33,16 @@ module Vedeu
33
33
  # @param block [Proc] The block passed to the build method.
34
34
  # @return [Object] An instance of the model.
35
35
  def build(attributes = {}, &block)
36
- attributes = defaults.merge!(attributes)
37
-
38
36
  model = new(attributes)
39
37
 
40
- if block_given?
41
- model.deputy(attributes[:client]).instance_eval(&block)
42
- end
38
+ Vedeu.log(type: :debug,
39
+ message: "DSL building: '#{model.class.name}' for " \
40
+ "'#{model.name}'".freeze)
43
41
 
44
- model
45
- end
42
+ model.deputy.instance_eval(&block) if block_given?
46
43
 
47
- # Provide a convenient way to define the child or children of
48
- # a model.
49
- #
50
- # @param klass [Class] The member (singular) or collection
51
- # (multiple) class name for the respective model.
52
- # @return [void]
53
- def child(klass)
54
- send(:define_method, __callee__) { klass }
44
+ model
55
45
  end
56
- alias_method :member, :child
57
- alias_method :collection, :child
58
46
 
59
47
  # Allow models to specify their repository using a class
60
48
  # method.
@@ -73,25 +61,7 @@ module Vedeu
73
61
  # storing.
74
62
  # @return [Object] An instance of the model.
75
63
  def store(attributes = {}, &block)
76
- if block_given?
77
- new(attributes).store(&block)
78
-
79
- else
80
- new(attributes).store
81
-
82
- end
83
- end
84
-
85
- private
86
-
87
- # The default values for a new instance of this class.
88
- #
89
- # @return [Hash<Symbol => NilClass, String>]
90
- def defaults
91
- {
92
- client: nil,
93
- name: '',
94
- }
64
+ new(attributes).store(&block)
95
65
  end
96
66
 
97
67
  end # ClassMethods
@@ -102,7 +72,7 @@ module Vedeu
102
72
  # @param klass [Class]
103
73
  # @return [void]
104
74
  def self.included(klass)
105
- klass.send(:extend, ClassMethods)
75
+ klass.extend(Vedeu::Repositories::Model::ClassMethods)
106
76
  end
107
77
 
108
78
  # @note If a block is given, store the model, return the model
@@ -11,18 +11,18 @@ module Vedeu
11
11
 
12
12
  # @return [NilClass|void]
13
13
  def parent
14
- @_parent ||= present?(@parent) ? @parent : nil
14
+ present?(@parent) ? @parent : nil
15
15
  end
16
16
 
17
17
  # @return [NilClass|String|Symbol]
18
18
  def name
19
- @_name ||= if present?(@name)
20
- @name
19
+ if present?(@name)
20
+ @name
21
21
 
22
- elsif parent && present?(parent.name)
23
- parent.name
22
+ elsif parent && present?(parent.name)
23
+ parent.name
24
24
 
25
- end
25
+ end
26
26
  end
27
27
 
28
28
  end # Parent