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
@@ -17,7 +17,7 @@ module Vedeu
17
17
  # @return [Symbol]
18
18
  def null(klass, attributes = {})
19
19
  define_method(:null_model) { klass }
20
- define_method(:null_attributes) { attributes }
20
+ define_method(:null_attributes) { attributes || {} }
21
21
  end
22
22
 
23
23
  # The real model is the usual model to use for a given
@@ -62,13 +62,27 @@ module Vedeu
62
62
 
63
63
  end # ClassMethods
64
64
 
65
+ # When {Vedeu::Repositories::Registerable} is included in a
66
+ # class, the methods within this module are included as instance
67
+ # methods on that class.
68
+ #
69
+ module InstanceMethods
70
+
71
+ # @return [Boolean]
72
+ def null_model?
73
+ self.respond_to?(:null_model) && present?(:null_model)
74
+ end
75
+
76
+ end # InstanceMethods
77
+
65
78
  # When this module is included in a class, provide ClassMethods
66
79
  # as class methods for the class.
67
80
  #
68
81
  # @param klass [Class]
69
82
  # @return [void]
70
83
  def self.included(klass)
71
- klass.send(:extend, ClassMethods)
84
+ klass.extend(Vedeu::Repositories::Registerable::ClassMethods)
85
+ klass.include(Vedeu::Repositories::Registerable::InstanceMethods)
72
86
  end
73
87
 
74
88
  end # Registerable
@@ -38,7 +38,7 @@ module Vedeu
38
38
 
39
39
  # Remove all stored models from the repository.
40
40
  #
41
- # @return [TrueClass]
41
+ # @return [Boolean]
42
42
  def reset!
43
43
  all.map { |repository| repository.send(:reset) }
44
44
 
@@ -67,17 +67,7 @@ module Vedeu
67
67
 
68
68
  return find(name) if registered?(name)
69
69
 
70
- attrs = if null_attributes.any?
71
- null_attributes.merge!(name: name)
72
-
73
- else
74
- {
75
- name: name
76
- }
77
-
78
- end
79
-
80
- null_model.new(attrs)
70
+ null_model.new(null_attributes.merge(name: name)) if null_model?
81
71
  end
82
72
 
83
73
  # Return the model for the interface currently in focus.
@@ -143,7 +133,7 @@ module Vedeu
143
133
  # when the model does not exist.
144
134
  #
145
135
  # @param name [String|Symbol]
146
- # @return [Hash|FalseClass]
136
+ # @return [Hash|Boolean]
147
137
  def remove(name)
148
138
  return false if empty?
149
139
  return false unless registered?(name)
@@ -12,7 +12,7 @@ module Vedeu
12
12
 
13
13
  # @return [Boolean]
14
14
  def ready!
15
- Vedeu.log(type: :info, message: 'Vedeu ready!')
15
+ Vedeu.log(message: 'Vedeu ready!')
16
16
 
17
17
  instance.options[:ready] = true
18
18
  end
@@ -35,7 +35,12 @@ module Vedeu
35
35
  # @param streams [String|Array]
36
36
  # @return [Array]
37
37
  def output(*streams)
38
- streams.each { |stream| console.print(stream) }
38
+ streams.each do |stream|
39
+ Vedeu.log(type: :output,
40
+ message: "Writing to terminal #{stream.size} bytes".freeze)
41
+
42
+ console.print(stream)
43
+ end
39
44
  end
40
45
  alias_method :write, :output
41
46
 
@@ -47,7 +52,7 @@ module Vedeu
47
52
  # @example
48
53
  # Vedeu.resize
49
54
  #
50
- # @return [TrueClass]
55
+ # @return [Boolean]
51
56
  def resize
52
57
  Vedeu.trigger(:_clear_)
53
58
 
data/lib/vedeu/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Vedeu
2
2
 
3
3
  # The current version of Vedeu.
4
- VERSION = '0.7.4'.freeze
4
+ VERSION = '0.8.0'.freeze
5
5
 
6
6
  end
@@ -8,6 +8,9 @@ module Vedeu
8
8
 
9
9
  end # Vedeu
10
10
 
11
+ require 'vedeu/views/default_attributes'
12
+ require 'vedeu/views/value'
13
+
11
14
  require 'vedeu/views/chars'
12
15
  require 'vedeu/views/char'
13
16
  require 'vedeu/views/html_char'
@@ -15,6 +18,6 @@ require 'vedeu/views/streams'
15
18
  require 'vedeu/views/stream'
16
19
  require 'vedeu/views/lines'
17
20
  require 'vedeu/views/line'
18
- require 'vedeu/views/view_collection'
21
+ require 'vedeu/views/views'
19
22
  require 'vedeu/views/view'
20
23
  require 'vedeu/views/composition'
@@ -14,7 +14,6 @@ module Vedeu
14
14
  class Char
15
15
 
16
16
  include Comparable
17
- include Vedeu::Geometries::Positionable
18
17
  include Vedeu::Repositories::Parent
19
18
  include Vedeu::Presentation
20
19
 
@@ -57,7 +56,7 @@ module Vedeu
57
56
  def attributes
58
57
  {
59
58
  border: @border,
60
- # colour: colour,
59
+ colour: colour,
61
60
  name: @name,
62
61
  parent: @parent,
63
62
  position: position,
@@ -107,9 +106,11 @@ module Vedeu
107
106
  # @return [String]
108
107
  def text
109
108
  if border
110
- ' '
109
+ ' '.freeze
110
+
111
111
  else
112
112
  @value
113
+
113
114
  end
114
115
  end
115
116
 
@@ -159,7 +160,7 @@ module Vedeu
159
160
  parent: nil,
160
161
  position: nil,
161
162
  style: nil,
162
- value: '',
163
+ value: ''.freeze,
163
164
  }
164
165
  end
165
166
 
@@ -8,6 +8,48 @@ module Vedeu
8
8
  #
9
9
  class Chars < Vedeu::Repositories::Collection
10
10
 
11
+ # @param collection [void]
12
+ # @param parent [Vedeu::Views::Stream]
13
+ # @param name [NilClass|Symbol|String]
14
+ # @raise [Vedeu::Error::InvalidSyntax] When the collection
15
+ # cannot be coerced since it is unrecognised or unsupported.
16
+ # @return [Vedeu::Views::Chars]
17
+ def self.coerce(collection = [], parent = nil, name = nil)
18
+ if collection.is_a?(Vedeu::Views::Chars)
19
+ collection
20
+
21
+ elsif collection.is_a?(Array)
22
+ return new(collection, parent, name) if collection.empty?
23
+
24
+ coerced_collection = []
25
+ collection.each do |element|
26
+ coerced_collection << element if element.is_a?(Vedeu::Views::Char)
27
+ end
28
+
29
+ new(coerced_collection, parent, name)
30
+
31
+ elsif collection.is_a?(Vedeu::Views::Stream)
32
+
33
+ elsif collection.is_a?(String)
34
+ return new([], parent, name) if collection.empty?
35
+
36
+ if parent && parent.attributes
37
+ new_collection = Vedeu::DSL::Text.new(collection,
38
+ parent.attributes).chars
39
+
40
+ new(new_collection, parent, name)
41
+ end
42
+
43
+ else
44
+ fail Vedeu::Error::InvalidSyntax,
45
+ 'Cannot coerce for Vedeu::View::Streams, as collection ' \
46
+ 'unrecognised.'.freeze
47
+
48
+ end
49
+ end
50
+
51
+ alias_method :chars, :value
52
+
11
53
  end # Chars
12
54
 
13
55
  end # Views
@@ -1,3 +1,5 @@
1
+ require 'vedeu/dsl/all'
2
+
1
3
  module Vedeu
2
4
 
3
5
  module Views
@@ -8,13 +10,15 @@ module Vedeu
8
10
 
9
11
  include Vedeu::Repositories::Model
10
12
  include Vedeu::Presentation
13
+ include Vedeu::Views::Value
11
14
 
12
- collection Vedeu::Views::ViewCollection
13
- member Vedeu::Views::View
15
+ collection Vedeu::Views::Views
16
+ deputy Vedeu::DSL::View
17
+ entity Vedeu::Views::View
14
18
 
15
- # @!attribute [r] parent
16
- # @return [NilClass] Composition objects do not have a parent.
17
- attr_reader :parent
19
+ alias_method :views, :value
20
+ alias_method :views=, :value=
21
+ alias_method :views?, :value?
18
22
 
19
23
  # Returns a new instance of Vedeu::Views::Composition.
20
24
  #
@@ -22,7 +26,7 @@ module Vedeu
22
26
  # @option attributes client [void]
23
27
  # @option attributes colour [Vedeu::Colours::Colour]
24
28
  # @option attributes style [Vedeu::Presentation::Style]
25
- # @option attributes value [Vedeu::Views::ViewCollection]
29
+ # @option attributes value [Vedeu::Views::Views]
26
30
  # @return [Vedeu::Views::Composition]
27
31
  def initialize(attributes = {})
28
32
  defaults.merge!(attributes).each do |key, value|
@@ -31,7 +35,7 @@ module Vedeu
31
35
  end
32
36
 
33
37
  # @param child [Vedeu::Views::View]
34
- # @return [Vedeu::Views::ViewCollection]
38
+ # @return [Vedeu::Views::Views]
35
39
  def add(child)
36
40
  @value = value.add(child)
37
41
  end
@@ -40,33 +44,14 @@ module Vedeu
40
44
  # @return [Hash]
41
45
  def attributes
42
46
  {
43
- client: @client,
44
- colour: @colour,
45
- parent: @parent,
46
- style: @style,
47
+ client: client,
48
+ colour: colour,
49
+ parent: parent,
50
+ style: style,
47
51
  value: value,
48
52
  }
49
53
  end
50
54
 
51
- # Returns a DSL instance responsible for defining the DSL
52
- # methods of this model.
53
- #
54
- # @param client [Object|NilClass] The client binding represents
55
- # the client application object that is currently invoking a
56
- # DSL method. It is required so that we can send messages to
57
- # the client application object should we need to.
58
- # @return [Vedeu::DSL::Composition] The DSL instance for this
59
- # model.
60
- def deputy(client = nil)
61
- Vedeu::DSL::Composition.new(self, client)
62
- end
63
-
64
- # @return [Vedeu::Views::ViewCollection]
65
- def value
66
- collection.coerce(@value, self)
67
- end
68
- alias_method :views, :value
69
-
70
55
  private
71
56
 
72
57
  # The default values for a new instance of this class.
@@ -0,0 +1,74 @@
1
+ module Vedeu
2
+
3
+ module Views
4
+
5
+ # Provides the default attributes for variaus Vedeu::Views models.
6
+ #
7
+ # @api private
8
+ #
9
+ module DefaultAttributes
10
+
11
+ include Vedeu::Repositories::Defaults
12
+
13
+ # @!attribute [r] align
14
+ # @return [Vedeu::Coercers::Alignment]
15
+ attr_reader :align
16
+
17
+ # @!attribute [r] pad
18
+ # @return [String]
19
+ attr_reader :pad
20
+
21
+ # @!attribute [r] truncate
22
+ # @return [Boolean]
23
+ attr_reader :truncate
24
+
25
+ # @!attribute [r] width
26
+ # @return [Fixnum|NilClass]
27
+ attr_reader :width
28
+
29
+ # @!attribute [r] wordwrap
30
+ # @return [Boolean]
31
+ attr_reader :wordwrap
32
+
33
+ # @return [Hash<Symbol => void>]
34
+ def attributes
35
+ {
36
+ align: align,
37
+ client: client,
38
+ colour: colour,
39
+ name: name,
40
+ pad: pad,
41
+ parent: parent,
42
+ style: style,
43
+ truncate: truncate,
44
+ width: width,
45
+ wordwrap: wordwrap,
46
+ }
47
+ end
48
+
49
+ private
50
+
51
+ # The default values for a new instance of this class.
52
+ #
53
+ # @return [Hash<Symbol => Array<void>|NilClass>]
54
+ def defaults
55
+ {
56
+ align: nil,
57
+ client: nil,
58
+ colour: nil,
59
+ name: nil,
60
+ pad: ' '.freeze,
61
+ parent: nil,
62
+ style: nil,
63
+ truncate: false,
64
+ value: ''.freeze,
65
+ width: nil,
66
+ wordwrap: false,
67
+ }
68
+ end
69
+
70
+ end # DefaultAttributes
71
+
72
+ end # Views
73
+
74
+ end # Vedeu
@@ -118,8 +118,8 @@ module Vedeu
118
118
  # @return [Hash<Symbol => String>]
119
119
  def defaults
120
120
  {
121
- start_tag: '<td',
122
- end_tag: '</td>',
121
+ start_tag: '<td'.freeze,
122
+ end_tag: '</td>'.freeze,
123
123
  }
124
124
  end
125
125
 
@@ -1,3 +1,5 @@
1
+ require 'vedeu/dsl/all'
2
+
1
3
  module Vedeu
2
4
 
3
5
  module Views
@@ -8,16 +10,34 @@ module Vedeu
8
10
  #
9
11
  class Line
10
12
 
13
+ # Provides DSL methods for Vedeu::Views::Line objects.
14
+ #
15
+ # @api public
16
+ #
17
+ class DSL
18
+
19
+ include Vedeu::DSL
20
+ include Vedeu::DSL::Elements
21
+
22
+ end # DSL
23
+
24
+ extend Forwardable
25
+ include Vedeu::Views::DefaultAttributes
11
26
  include Vedeu::Repositories::Model
12
27
  include Vedeu::Repositories::Parent
13
28
  include Vedeu::Presentation
29
+ include Vedeu::Views::Value
14
30
 
15
31
  collection Vedeu::Views::Streams
16
- member Vedeu::Views::Stream
32
+ deputy Vedeu::Views::Line::DSL
33
+ entity Vedeu::Views::Stream
34
+ parent Vedeu::Views::Lines
35
+
36
+ def_delegators :value,
37
+ :streams
17
38
 
18
- # @!attribute [rw] parent
19
- # @return [Vedeu::Views::View]
20
- attr_accessor :parent
39
+ alias_method :streams=, :value=
40
+ alias_method :streams?, :value?
21
41
 
22
42
  # Returns a new instance of Vedeu::Views::Line.
23
43
  #
@@ -42,42 +62,18 @@ module Vedeu
42
62
  end
43
63
  alias_method :<<, :add
44
64
 
45
- # @return [Hash<Symbol => void>]
46
- def attributes
47
- {
48
- client: @client,
49
- colour: @colour,
50
- name: name,
51
- parent: parent,
52
- style: @style,
53
- value: value,
54
- }
55
- end
56
-
57
65
  # Returns an array of all the characters with formatting for
58
66
  # this line.
59
67
  #
60
68
  # @return [Array]
61
69
  # @see Vedeu::Views::Stream
62
70
  def chars
63
- return [] if value.empty?
71
+ return [] unless value?
64
72
 
65
- @chars ||= value.flat_map(&:chars)
73
+ @chars ||= streams.flat_map(&:chars)
66
74
  end
67
75
 
68
- # Returns a DSL instance responsible for defining the DSL
69
- # methods of this model.
70
- #
71
- # @param client [Object|NilClass] The client binding represents
72
- # the client application object that is currently invoking a
73
- # DSL method. It is required so that we can send messages to
74
- # the client application object should we need to.
75
- # @return [Vedeu::DSL::Line] The DSL instance for this model.
76
- def deputy(client = nil)
77
- Vedeu::DSL::Line.new(self, client)
78
- end
79
-
80
- # An object is equal when its values are the same./
76
+ # An object is equal when its values are the same.
81
77
  #
82
78
  # @param other [Vedeu::Repositories::Collection]
83
79
  # @return [Boolean]
@@ -94,28 +90,6 @@ module Vedeu
94
90
  value.map(&:size).inject(0, :+)
95
91
  end
96
92
 
97
- # @return [Vedeu::Views::Streams]
98
- def value
99
- collection.coerce(@value, self)
100
- end
101
- alias_method :streams, :value
102
-
103
- private
104
-
105
- # The default values for a new instance of this class.
106
- #
107
- # @return [Hash<Symbol => Array<void>|NilClass>]
108
- def defaults
109
- {
110
- client: nil,
111
- colour: nil,
112
- name: nil,
113
- parent: nil,
114
- style: nil,
115
- value: [],
116
- }
117
- end
118
-
119
93
  end # Line
120
94
 
121
95
  end # Views