vedeu 0.7.4 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (277) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/docs/api.md +5 -1
  4. data/docs/borders.md +2 -26
  5. data/docs/dsl.md +4 -4
  6. data/docs/dsl_elements.md +100 -0
  7. data/docs/events/by_name/action.md +3 -0
  8. data/docs/events/by_name/cursor_hide.md +3 -0
  9. data/docs/events/by_name/cursor_reset.md +3 -0
  10. data/docs/events/by_name/cursor_show.md +3 -0
  11. data/docs/events/by_name/geometry_down.md +3 -0
  12. data/docs/events/by_name/geometry_left.md +3 -0
  13. data/docs/events/by_name/geometry_right.md +3 -0
  14. data/docs/events/by_name/geometry_up.md +3 -0
  15. data/docs/events/by_name/hide_view.md +3 -0
  16. data/docs/events/by_name/set_border_caption.md +13 -0
  17. data/docs/events/by_name/set_border_title.md +13 -0
  18. data/docs/events/by_name/show_view.md +3 -0
  19. data/docs/events/by_name/standalone.md +3 -0
  20. data/docs/events/by_name/toggle_view.md +3 -0
  21. data/docs/events/by_name/view_down.md +4 -0
  22. data/docs/events/by_name/view_left.md +4 -0
  23. data/docs/events/by_name/view_right.md +4 -0
  24. data/docs/events/by_name/view_up.md +4 -0
  25. data/examples/views/empty_template.rb +46 -0
  26. data/examples/views/expected/line.out +1 -0
  27. data/examples/views/expected/lines.out +1 -0
  28. data/examples/views/expected/lines_alignment.out +1 -0
  29. data/examples/views/line.rb +220 -0
  30. data/examples/views/lines.rb +281 -0
  31. data/examples/views/lines_alignment.rb +231 -0
  32. data/examples/views/lines_line_stream.rb +99 -0
  33. data/examples/views/lines_line_streams.rb +73 -0
  34. data/examples/views/lines_line_streams_stream.rb +83 -0
  35. data/examples/views/lines_line_streams_stream_stream.rb +53 -0
  36. data/examples/views/lines_streams.rb +50 -0
  37. data/examples/views/lines_streams_stream.rb +51 -0
  38. data/examples/views/runner.sh +27 -0
  39. data/lib/vedeu/all.rb +6 -2
  40. data/lib/vedeu/application/controller.rb +1 -1
  41. data/lib/vedeu/boolean.rb +35 -0
  42. data/lib/vedeu/borders/border.rb +3 -3
  43. data/lib/vedeu/borders/caption.rb +1 -1
  44. data/lib/vedeu/borders/dsl.rb +1 -20
  45. data/lib/vedeu/borders/title.rb +6 -8
  46. data/lib/vedeu/buffers/buffer.rb +2 -2
  47. data/lib/vedeu/buffers/refresh.rb +1 -1
  48. data/lib/vedeu/cells/border.rb +0 -11
  49. data/lib/vedeu/cells/empty.rb +4 -4
  50. data/lib/vedeu/{geometries/alignment → coercers}/alignment.rb +50 -53
  51. data/lib/vedeu/coercers/all.rb +16 -0
  52. data/lib/vedeu/coercers/colour.rb +78 -0
  53. data/lib/vedeu/coercers/colour_attributes.rb +122 -0
  54. data/lib/vedeu/coercers/horizontal_alignment.rb +28 -0
  55. data/lib/vedeu/coercers/vertical_alignment.rb +27 -0
  56. data/lib/vedeu/colours/all.rb +1 -0
  57. data/lib/vedeu/colours/background.rb +13 -2
  58. data/lib/vedeu/colours/colour.rb +16 -31
  59. data/lib/vedeu/colours/foreground.rb +13 -2
  60. data/lib/vedeu/colours/translator.rb +21 -59
  61. data/lib/vedeu/colours/validator.rb +84 -0
  62. data/lib/vedeu/common.rb +52 -0
  63. data/lib/vedeu/configuration/api.rb +4 -10
  64. data/lib/vedeu/configuration/configuration.rb +4 -4
  65. data/lib/vedeu/cursors/coordinate.rb +1 -1
  66. data/lib/vedeu/cursors/cursor.rb +1 -1
  67. data/lib/vedeu/cursors/dsl.rb +1 -28
  68. data/lib/vedeu/dsl/all.rb +7 -7
  69. data/lib/vedeu/dsl/attributes.rb +224 -0
  70. data/lib/vedeu/dsl/border.rb +127 -0
  71. data/lib/vedeu/dsl/cursors.rb +44 -0
  72. data/lib/vedeu/dsl/dsl.rb +9 -0
  73. data/lib/vedeu/dsl/elements.rb +335 -0
  74. data/lib/vedeu/dsl/geometry.rb +113 -0
  75. data/lib/vedeu/dsl/string/align.rb +127 -0
  76. data/lib/vedeu/dsl/string/all.rb +14 -0
  77. data/lib/vedeu/dsl/string/text.rb +107 -0
  78. data/lib/vedeu/dsl/string/truncate.rb +111 -0
  79. data/lib/vedeu/{output → dsl/string}/wordwrap.rb +10 -6
  80. data/lib/vedeu/dsl/view.rb +124 -248
  81. data/lib/vedeu/dsl/views.rb +244 -0
  82. data/lib/vedeu/editor/cursor.rb +1 -1
  83. data/lib/vedeu/editor/delete.rb +3 -1
  84. data/lib/vedeu/editor/insert.rb +22 -6
  85. data/lib/vedeu/editor/line.rb +15 -9
  86. data/lib/vedeu/editor/lines.rb +27 -18
  87. data/lib/vedeu/esc/actions.rb +73 -26
  88. data/lib/vedeu/esc/all.rb +2 -0
  89. data/lib/vedeu/esc/background.rb +219 -0
  90. data/lib/vedeu/esc/borders.rb +72 -26
  91. data/lib/vedeu/esc/colours.rb +26 -27
  92. data/lib/vedeu/esc/esc.rb +4 -4
  93. data/lib/vedeu/esc/foreground.rb +219 -0
  94. data/lib/vedeu/esc/mouse.rb +16 -13
  95. data/lib/vedeu/events/aliases.rb +2 -2
  96. data/lib/vedeu/events/event.rb +1 -1
  97. data/lib/vedeu/geometries/all.rb +0 -1
  98. data/lib/vedeu/geometries/area/dimension.rb +2 -2
  99. data/lib/vedeu/geometries/dsl/dsl.rb +3 -51
  100. data/lib/vedeu/geometries/dsl/validator.rb +4 -4
  101. data/lib/vedeu/geometries/geometry.rb +10 -10
  102. data/lib/vedeu/geometries/move.rb +4 -4
  103. data/lib/vedeu/groups/dsl.rb +1 -0
  104. data/lib/vedeu/groups/group.rb +1 -1
  105. data/lib/vedeu/input/all.rb +1 -0
  106. data/lib/vedeu/input/capture.rb +14 -10
  107. data/lib/vedeu/input/dsl.rb +20 -26
  108. data/lib/vedeu/input/key.rb +0 -6
  109. data/lib/vedeu/input/keymap.rb +4 -9
  110. data/lib/vedeu/input/keys.rb +13 -0
  111. data/lib/vedeu/input/mapper.rb +29 -14
  112. data/lib/vedeu/input/read.rb +4 -2
  113. data/lib/vedeu/interfaces/dsl.rb +23 -22
  114. data/lib/vedeu/interfaces/interface.rb +2 -2
  115. data/lib/vedeu/logging/debug.rb +33 -0
  116. data/lib/vedeu/logging/log.rb +42 -33
  117. data/lib/vedeu/menus/dsl.rb +7 -18
  118. data/lib/vedeu/menus/menu.rb +1 -1
  119. data/lib/vedeu/models/focus.rb +1 -1
  120. data/lib/vedeu/models/toggleable.rb +4 -4
  121. data/lib/vedeu/null/generic.rb +2 -2
  122. data/lib/vedeu/output/all.rb +0 -2
  123. data/lib/vedeu/output/compressor_cache.rb +1 -1
  124. data/lib/vedeu/output/output.rb +5 -20
  125. data/lib/vedeu/presentation/colour.rb +39 -7
  126. data/lib/vedeu/presentation/style.rb +25 -11
  127. data/lib/vedeu/renderers/html.rb +11 -11
  128. data/lib/vedeu/repositories/assemblage.rb +9 -0
  129. data/lib/vedeu/repositories/collection.rb +1 -0
  130. data/lib/vedeu/repositories/defaults.rb +4 -1
  131. data/lib/vedeu/repositories/model.rb +7 -37
  132. data/lib/vedeu/repositories/parent.rb +6 -6
  133. data/lib/vedeu/repositories/registerable.rb +16 -2
  134. data/lib/vedeu/repositories/repositories.rb +1 -1
  135. data/lib/vedeu/repositories/repository.rb +2 -12
  136. data/lib/vedeu/runtime/flags.rb +1 -1
  137. data/lib/vedeu/terminal/terminal.rb +7 -2
  138. data/lib/vedeu/version.rb +1 -1
  139. data/lib/vedeu/views/all.rb +4 -1
  140. data/lib/vedeu/views/char.rb +5 -4
  141. data/lib/vedeu/views/chars.rb +42 -0
  142. data/lib/vedeu/views/composition.rb +15 -30
  143. data/lib/vedeu/views/default_attributes.rb +74 -0
  144. data/lib/vedeu/views/html_char.rb +2 -2
  145. data/lib/vedeu/views/line.rb +27 -53
  146. data/lib/vedeu/views/lines.rb +31 -0
  147. data/lib/vedeu/views/stream.rb +31 -78
  148. data/lib/vedeu/views/streams.rb +42 -0
  149. data/lib/vedeu/views/value.rb +150 -0
  150. data/lib/vedeu/views/view.rb +32 -36
  151. data/lib/vedeu/views/{view_collection.rb → views.rb} +2 -2
  152. data/test/lib/vedeu/application/application_controller_test.rb +5 -0
  153. data/test/lib/vedeu/application/controller_test.rb +22 -28
  154. data/test/lib/vedeu/boolean_test.rb +57 -0
  155. data/test/lib/vedeu/borders/border_test.rb +130 -36
  156. data/test/lib/vedeu/borders/dsl_test.rb +63 -10
  157. data/test/lib/vedeu/borders/title_test.rb +16 -5
  158. data/test/lib/vedeu/buffers/buffer_test.rb +26 -10
  159. data/test/lib/vedeu/buffers/empty_test.rb +1 -1
  160. data/test/lib/vedeu/cells/border_test.rb +0 -6
  161. data/test/lib/vedeu/cells/clear_test.rb +2 -0
  162. data/test/lib/vedeu/cells/empty_test.rb +12 -2
  163. data/test/lib/vedeu/cells/escape_test.rb +7 -2
  164. data/test/lib/vedeu/{geometries/alignment → coercers}/alignment_test.rb +44 -19
  165. data/test/lib/vedeu/coercers/colour_attributes_test.rb +168 -0
  166. data/test/lib/vedeu/coercers/colour_test.rb +75 -0
  167. data/test/lib/vedeu/{geometries/alignment → coercers}/horizontal_alignment_test.rb +6 -6
  168. data/test/lib/vedeu/{geometries/alignment → coercers}/vertical_alignment_test.rb +6 -6
  169. data/test/lib/vedeu/colours/background_test.rb +17 -1
  170. data/test/lib/vedeu/colours/colour_test.rb +74 -2
  171. data/test/lib/vedeu/colours/foreground_test.rb +17 -1
  172. data/test/lib/vedeu/colours/repository_test.rb +1 -1
  173. data/test/lib/vedeu/colours/translator_test.rb +8 -1
  174. data/test/lib/vedeu/colours/validator_test.rb +60 -0
  175. data/test/lib/vedeu/common_test.rb +138 -0
  176. data/test/lib/vedeu/configuration/api_test.rb +96 -51
  177. data/test/lib/vedeu/cursors/coordinate_test.rb +58 -117
  178. data/test/lib/vedeu/cursors/cursor_test.rb +46 -17
  179. data/test/lib/vedeu/cursors/dsl_test.rb +19 -5
  180. data/test/lib/vedeu/distributed/client_test.rb +8 -3
  181. data/test/lib/vedeu/distributed/server_test.rb +8 -0
  182. data/test/lib/vedeu/distributed/test_application_test.rb +62 -19
  183. data/test/lib/vedeu/distributed/uri_test.rb +4 -2
  184. data/test/lib/vedeu/dsl/attributes_test.rb +212 -0
  185. data/test/lib/vedeu/dsl/border_test.rb +51 -0
  186. data/test/lib/vedeu/dsl/{lines_test.rb → cursors_test.rb} +2 -2
  187. data/test/lib/vedeu/dsl/dsl_test.rb +44 -0
  188. data/test/lib/vedeu/dsl/elements_test.rb +118 -0
  189. data/test/lib/vedeu/dsl/geometry_test.rb +35 -0
  190. data/test/lib/vedeu/dsl/presentation_test.rb +52 -11
  191. data/test/lib/vedeu/dsl/string/align_test.rb +147 -0
  192. data/test/lib/vedeu/dsl/string/text_test.rb +213 -0
  193. data/test/lib/vedeu/dsl/string/truncate_test.rb +97 -0
  194. data/test/lib/vedeu/{output → dsl/string}/wordwrap_test.rb +3 -3
  195. data/test/lib/vedeu/dsl/view_test.rb +30 -42
  196. data/test/lib/vedeu/dsl/views_test.rb +61 -0
  197. data/test/lib/vedeu/editor/cursor_test.rb +30 -12
  198. data/test/lib/vedeu/editor/document_test.rb +18 -10
  199. data/test/lib/vedeu/editor/line_test.rb +4 -1
  200. data/test/lib/vedeu/editor/lines_test.rb +11 -3
  201. data/test/lib/vedeu/esc/actions_test.rb +42 -4
  202. data/test/lib/vedeu/esc/background_test.rb +185 -0
  203. data/test/lib/vedeu/esc/borders_test.rb +37 -9
  204. data/test/lib/vedeu/esc/colours_test.rb +0 -59
  205. data/test/lib/vedeu/esc/foreground_test.rb +185 -0
  206. data/test/lib/vedeu/esc/mouse_test.rb +9 -4
  207. data/test/lib/vedeu/geometries/area/area_test.rb +34 -11
  208. data/test/lib/vedeu/geometries/dsl/dsl_test.rb +52 -61
  209. data/test/lib/vedeu/geometries/geometry_test.rb +62 -18
  210. data/test/lib/vedeu/geometries/position_test.rb +14 -7
  211. data/test/lib/vedeu/groups/dsl_test.rb +24 -15
  212. data/test/lib/vedeu/groups/group_test.rb +18 -8
  213. data/test/lib/vedeu/input/dsl_test.rb +33 -16
  214. data/test/lib/vedeu/input/key_test.rb +8 -1
  215. data/test/lib/vedeu/input/keymap_test.rb +4 -1
  216. data/test/lib/vedeu/input/keys_test.rb +16 -0
  217. data/test/lib/vedeu/interfaces/dsl_test.rb +24 -30
  218. data/test/lib/vedeu/interfaces/interface_test.rb +79 -24
  219. data/test/lib/vedeu/logging/ips_test.rb +10 -1
  220. data/test/lib/vedeu/menus/dsl_test.rb +24 -23
  221. data/test/lib/vedeu/menus/menu_test.rb +18 -8
  222. data/test/lib/vedeu/models/page_test.rb +5 -1
  223. data/test/lib/vedeu/models/row_test.rb +4 -0
  224. data/test/lib/vedeu/models/toggleable_test.rb +10 -6
  225. data/test/lib/vedeu/null/generic_test.rb +90 -1
  226. data/test/lib/vedeu/output/viewport_test.rb +11 -10
  227. data/test/lib/vedeu/plugins/plugin_test.rb +22 -9
  228. data/test/lib/vedeu/presentation/colour_test.rb +2 -1
  229. data/test/lib/vedeu/presentation/presentation_test.rb +13 -8
  230. data/test/lib/vedeu/presentation/style_test.rb +28 -13
  231. data/test/lib/vedeu/renderers/file_test.rb +4 -2
  232. data/test/lib/vedeu/renderers/options_test.rb +1 -1
  233. data/test/lib/vedeu/repositories/assemblage_test.rb +18 -0
  234. data/test/lib/vedeu/repositories/collection_test.rb +34 -10
  235. data/test/lib/vedeu/repositories/defaults_test.rb +6 -0
  236. data/test/lib/vedeu/repositories/model_test.rb +4 -13
  237. data/test/lib/vedeu/repositories/repository_test.rb +12 -5
  238. data/test/lib/vedeu/repositories/store_test.rb +9 -0
  239. data/test/lib/vedeu/runtime/flags_test.rb +6 -4
  240. data/test/lib/vedeu/runtime/launcher_test.rb +1 -1
  241. data/test/lib/vedeu/templating/helpers_test.rb +93 -65
  242. data/test/lib/vedeu/templating/view_template_test.rb +26 -26
  243. data/test/lib/vedeu/views/char_test.rb +36 -11
  244. data/test/lib/vedeu/views/chars_test.rb +71 -0
  245. data/test/lib/vedeu/views/composition_test.rb +17 -16
  246. data/test/lib/vedeu/views/default_attributes_test.rb +97 -0
  247. data/test/lib/vedeu/views/line_test.rb +20 -75
  248. data/test/lib/vedeu/views/lines_test.rb +47 -0
  249. data/test/lib/vedeu/views/stream_test.rb +38 -63
  250. data/test/lib/vedeu/views/streams_test.rb +9 -0
  251. data/test/lib/vedeu/views/value_test.rb +112 -0
  252. data/test/lib/vedeu/views/view_test.rb +67 -45
  253. data/test/lib/vedeu/views/views_test.rb +22 -0
  254. data/test/support/examples/material_colours_app.rb +2 -2
  255. data/test/support/helpers/model_test_class.rb +1 -0
  256. data/test/test_helper.rb +3 -1
  257. data/vedeu.gemspec +2 -2
  258. metadata +124 -58
  259. data/lib/vedeu/dsl/composition.rb +0 -150
  260. data/lib/vedeu/dsl/line.rb +0 -119
  261. data/lib/vedeu/dsl/lines.rb +0 -23
  262. data/lib/vedeu/dsl/shared.rb +0 -85
  263. data/lib/vedeu/dsl/stream.rb +0 -40
  264. data/lib/vedeu/dsl/streams.rb +0 -23
  265. data/lib/vedeu/dsl/text.rb +0 -98
  266. data/lib/vedeu/geometries/alignment/all.rb +0 -11
  267. data/lib/vedeu/geometries/alignment/horizontal_alignment.rb +0 -27
  268. data/lib/vedeu/geometries/alignment/vertical_alignment.rb +0 -27
  269. data/lib/vedeu/output/text.rb +0 -275
  270. data/test/lib/vedeu/dsl/composition_test.rb +0 -67
  271. data/test/lib/vedeu/dsl/line_test.rb +0 -85
  272. data/test/lib/vedeu/dsl/shared_test.rb +0 -66
  273. data/test/lib/vedeu/dsl/stream_test.rb +0 -30
  274. data/test/lib/vedeu/dsl/streams_test.rb +0 -13
  275. data/test/lib/vedeu/dsl/text_test.rb +0 -122
  276. data/test/lib/vedeu/output/text_test.rb +0 -156
  277. data/test/lib/vedeu/views/view_collection_test.rb +0 -13
@@ -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