vedeu 0.8.16 → 0.8.17

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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/TODO.md +8 -0
  3. data/examples/dsl_alignment.rb +5 -2
  4. data/examples/dsl_horizontal_alignment.rb +5 -2
  5. data/examples/dsl_vertical_alignment.rb +5 -2
  6. data/integrations/test_runner.sh +2 -3
  7. data/lib/vedeu.rb +31 -1
  8. data/lib/vedeu/borders/all.rb +19 -0
  9. data/lib/vedeu/borders/border.rb +1 -2
  10. data/lib/vedeu/borders/caption.rb +2 -0
  11. data/lib/vedeu/borders/refresh.rb +4 -17
  12. data/lib/vedeu/borders/repository.rb +0 -14
  13. data/lib/vedeu/borders/title.rb +9 -3
  14. data/lib/vedeu/buffers/all.rb +25 -0
  15. data/lib/vedeu/buffers/buffer.rb +2 -2
  16. data/lib/vedeu/buffers/refresh.rb +1 -15
  17. data/lib/vedeu/buffers/terminal.rb +0 -15
  18. data/lib/vedeu/buffers/view.rb +2 -2
  19. data/lib/vedeu/cells/empty.rb +4 -5
  20. data/lib/vedeu/coercers/all.rb +0 -5
  21. data/lib/vedeu/cursors/all.rb +88 -0
  22. data/lib/vedeu/cursors/cursor.rb +7 -92
  23. data/lib/vedeu/cursors/move.rb +44 -14
  24. data/lib/vedeu/cursors/refresh.rb +5 -17
  25. data/lib/vedeu/cursors/reposition.rb +2 -2
  26. data/lib/vedeu/distributed/all.rb +16 -0
  27. data/lib/vedeu/distributed/server.rb +0 -16
  28. data/lib/vedeu/dsl/dsl.rb +2 -2
  29. data/lib/vedeu/dsl/helpers/align.rb +1 -1
  30. data/lib/vedeu/dsl/helpers/attributes.rb +1 -1
  31. data/lib/vedeu/dsl/helpers/truncate.rb +1 -1
  32. data/lib/vedeu/dsl/helpers/wordwrap.rb +1 -1
  33. data/lib/vedeu/dsl/view.rb +1 -1
  34. data/lib/vedeu/dsl/views.rb +22 -6
  35. data/lib/vedeu/editor/all.rb +54 -0
  36. data/lib/vedeu/editor/cropper.rb +3 -5
  37. data/lib/vedeu/editor/cursor.rb +2 -4
  38. data/lib/vedeu/editor/document.rb +1 -1
  39. data/lib/vedeu/editor/editor.rb +2 -17
  40. data/lib/vedeu/editor/repository.rb +0 -45
  41. data/lib/vedeu/events/event.rb +1 -1
  42. data/lib/vedeu/geometries/all.rb +46 -1
  43. data/lib/vedeu/geometries/area/area.rb +2 -2
  44. data/lib/vedeu/geometries/dsl/grid.rb +16 -20
  45. data/lib/vedeu/geometries/geometry.rb +1 -1
  46. data/lib/vedeu/geometries/move.rb +2 -38
  47. data/lib/vedeu/geometries/repository.rb +0 -14
  48. data/lib/vedeu/groups/all.rb +23 -0
  49. data/lib/vedeu/groups/clear.rb +1 -10
  50. data/lib/vedeu/groups/group.rb +0 -12
  51. data/lib/vedeu/groups/refresh.rb +2 -11
  52. data/lib/vedeu/input/all.rb +35 -0
  53. data/lib/vedeu/input/capture.rb +2 -2
  54. data/lib/vedeu/input/mapper.rb +0 -35
  55. data/lib/vedeu/input/raw.rb +1 -1
  56. data/lib/vedeu/input/read.rb +1 -1
  57. data/lib/vedeu/interfaces/all.rb +24 -0
  58. data/lib/vedeu/interfaces/clear.rb +32 -46
  59. data/lib/vedeu/interfaces/interface.rb +0 -16
  60. data/lib/vedeu/menus/all.rb +44 -0
  61. data/lib/vedeu/menus/menu.rb +13 -8
  62. data/lib/vedeu/menus/repository.rb +0 -44
  63. data/lib/vedeu/models/all.rb +13 -0
  64. data/lib/vedeu/models/focus.rb +0 -13
  65. data/lib/vedeu/models/toggleable.rb +1 -1
  66. data/lib/vedeu/null/generic.rb +1 -1
  67. data/lib/vedeu/output/all.rb +7 -0
  68. data/lib/vedeu/output/compressor.rb +11 -6
  69. data/lib/vedeu/output/compressors/character.rb +2 -0
  70. data/lib/vedeu/output/refresh.rb +0 -7
  71. data/lib/vedeu/output/viewport.rb +2 -5
  72. data/lib/vedeu/plugins/plugin.rb +1 -1
  73. data/lib/vedeu/presentation/colour.rb +6 -1
  74. data/lib/vedeu/renderers/all.rb +1 -1
  75. data/lib/vedeu/repositories/repositories.rb +1 -1
  76. data/lib/vedeu/runtime/all.rb +28 -0
  77. data/lib/vedeu/runtime/application.rb +0 -18
  78. data/lib/vedeu/runtime/flags.rb +0 -7
  79. data/lib/vedeu/runtime/router.rb +0 -11
  80. data/lib/vedeu/runtime/traps.rb +2 -0
  81. data/lib/vedeu/templating/view_template.rb +2 -4
  82. data/lib/vedeu/terminal/all.rb +7 -0
  83. data/lib/vedeu/terminal/terminal.rb +0 -7
  84. data/lib/vedeu/version.rb +1 -1
  85. data/lib/vedeu/views/view.rb +3 -3
  86. data/test/lib/vedeu/cursors/cursor_test.rb +4 -4
  87. data/test/lib/vedeu/cursors/move_test.rb +2 -2
  88. data/test/lib/vedeu/presentation/colour_test.rb +26 -0
  89. data/test/support/colour_support.sh +3 -1
  90. data/test/support/examples/material_colours_app.rb +2 -28
  91. data/test/support/stats.sh +1 -1
  92. data/test/test_helper.rb +0 -1
  93. data/vedeu.gemspec +1 -1
  94. metadata +4 -6
  95. data/test/support/helpers/presentation_colour_test_class.rb +0 -31
@@ -86,7 +86,7 @@ module Vedeu
86
86
  }
87
87
  end
88
88
 
89
- # @return [NilClass|Vedeu::Geometries::Geometry]
89
+ # @macro geometry_by_name
90
90
  def geometry
91
91
  @_geometry ||= Vedeu.geometries.by_name(options[:name])
92
92
  end
@@ -132,7 +132,7 @@ module Vedeu
132
132
  }
133
133
  end
134
134
 
135
- # @return [NilClass|Vedeu::Geometries::Geometry]
135
+ # @macro geometry_by_name
136
136
  def geometry
137
137
  @_geometry ||= Vedeu.geometries.by_name(name)
138
138
  end
@@ -59,7 +59,7 @@ module Vedeu
59
59
  }
60
60
  end
61
61
 
62
- # @return [Vedeu::Geometries::Geometry]
62
+ # @macro geometry_by_name
63
63
  def geometry
64
64
  @_geometry ||= Vedeu.geometries.by_name(options[:name])
65
65
  end
@@ -166,7 +166,7 @@ module Vedeu
166
166
  # geometry is registered with this name, the width of the
167
167
  # geometry is used if the :width option was not given.
168
168
  #
169
- # @return [String|Symbol]
169
+ # @macro return_name
170
170
  def name
171
171
  options[:name]
172
172
  end
@@ -131,7 +131,7 @@ module Vedeu
131
131
  interface(name).attributes
132
132
  end
133
133
 
134
- # @return [Vedeu::Interfaces::Interface]
134
+ # @macro interface_by_name
135
135
  def interface(name)
136
136
  Vedeu.interfaces.by_name(name)
137
137
  end
@@ -102,7 +102,7 @@ module Vedeu
102
102
  def renders(&block)
103
103
  raise Vedeu::Error::RequiresBlock unless block_given?
104
104
 
105
- composition(eval('self', block.binding), true, &block)
105
+ composition(true, &block)
106
106
  end
107
107
  alias render renders
108
108
 
@@ -115,23 +115,39 @@ module Vedeu
115
115
  def views(&block)
116
116
  raise Vedeu::Error::RequiresBlock unless block_given?
117
117
 
118
- composition(eval('self', block.binding), false, &block)
118
+ composition(false, &block)
119
119
  end
120
120
 
121
121
  private
122
122
 
123
+ # @param block [Proc] The directives you wish to send to
124
+ # render. Typically includes `view` with associated
125
+ # sub-directives. The binding of the block is also accessed
126
+ # so that we can ascertain the calling client application
127
+ # class, this is so that if there methods being called
128
+ # inside your views, Vedeu will redirect that call to the
129
+ # client class instance instead. (This actually occurs
130
+ # when Vedeu rescues from method_missing. See {Vedeu::DSL}.)
131
+ def client_binding(&block)
132
+ eval('self', block.binding).tap do |client|
133
+ Vedeu.log(type: :debug,
134
+ message: "Client binding: #{client.class.name}")
135
+ end
136
+ end
137
+
123
138
  # Creates a new Vedeu::Views::Composition which may contain
124
139
  # one or more view {Vedeu::Views::View} objects.
125
140
  #
126
- # @param client [Object] The client class which called the DSL
127
- # object.
128
141
  # @param refresh [Boolean]
129
142
  # @param block [Proc] The directives you wish to send to
130
143
  # render. Typically includes `view` with associated
131
144
  # sub-directives.
132
145
  # # @return [Vedeu::Views::Composition]
133
- def composition(client, refresh = false, &block)
134
- attrs = { client: client, colour: Vedeu.config.colour }
146
+ def composition(refresh = false, &block)
147
+ attrs = {
148
+ client: client_binding(&block),
149
+ colour: Vedeu.config.colour,
150
+ }
135
151
 
136
152
  Vedeu::Views::Composition.build(attrs, &block).update_buffers(refresh)
137
153
  end
@@ -8,6 +8,60 @@ module Vedeu
8
8
 
9
9
  end # Editor
10
10
 
11
+ # :nocov:
12
+
13
+ # See {file:docs/events/system.md#\_editor_}
14
+ Vedeu.bind(:_editor_) do |key|
15
+ Vedeu.timer('Executing editor keypress') do
16
+ Vedeu.trigger(:key, key)
17
+
18
+ Vedeu::Editor::Editor.keypress(name: Vedeu.focus, input: key)
19
+ end
20
+ end
21
+
22
+ # See {file:docs/events/document.md#\_editor_execute_}
23
+ Vedeu.bind(:_editor_execute_) do |name|
24
+ Vedeu.documents.by_name(name).execute
25
+ end
26
+
27
+ # See {file:docs/events/document.md#\_editor_delete_character_}
28
+ Vedeu.bind(:_editor_delete_character_) do |name|
29
+ Vedeu.documents.by_name(name).delete_character
30
+ end
31
+
32
+ # See {file:docs/events/document.md#\_editor_delete_line_}
33
+ Vedeu.bind(:_editor_delete_line_) do |name|
34
+ Vedeu.documents.by_name(name).delete_line
35
+ end
36
+
37
+ # See {file:docs/events/document.md#\_editor_down_}
38
+ Vedeu.bind(:_editor_down_) do |name|
39
+ Vedeu.documents.by_name(name).down
40
+ end
41
+
42
+ # See {file:docs/events/document.md#\_editor_insert_character_}
43
+ Vedeu.bind(:_editor_insert_character_) do |name, character|
44
+ Vedeu.documents.by_name(name).insert_character(character)
45
+ end
46
+
47
+ # See {file:docs/events/document.md#\_editor_insert_line_}
48
+ Vedeu.bind(:_editor_insert_line_) do |name|
49
+ Vedeu.documents.by_name(name).insert_line
50
+ end
51
+
52
+ # See {file:docs/events/document.md#\_editor_left_}
53
+ Vedeu.bind(:_editor_left_) { |name| Vedeu.documents.by_name(name).left }
54
+
55
+ # See {file:docs/events/document.md#\_editor_right_}
56
+ Vedeu.bind(:_editor_right_) do |name|
57
+ Vedeu.documents.by_name(name).right
58
+ end
59
+
60
+ # See {file:docs/events/document.md#\_editor_up_}
61
+ Vedeu.bind(:_editor_up_) { |name| Vedeu.documents.by_name(name).up }
62
+
63
+ # :nocov:
64
+
11
65
  end # Vedeu
12
66
 
13
67
  require 'vedeu/editor/collection'
@@ -63,7 +63,7 @@ module Vedeu
63
63
  protected
64
64
 
65
65
  # @!attribute [r] name
66
- # @return [String|Symbol]
66
+ # @macro return_name
67
67
  attr_reader :name
68
68
 
69
69
  # @!attribute [r] ox
@@ -100,11 +100,9 @@ module Vedeu
100
100
  line[ox...(ox + bordered_width)] || ''
101
101
  end
102
102
 
103
- # Returns the border for the interface.
104
- #
105
- # @return (see Vedeu::Geometries::Repository#by_name)
103
+ # @macro geometry_by_name
106
104
  def geometry
107
- @geometry ||= Vedeu.geometries.by_name(name)
105
+ @_geometry ||= Vedeu.geometries.by_name(name)
108
106
  end
109
107
 
110
108
  end # Editor
@@ -20,7 +20,7 @@ module Vedeu
20
20
  :byn
21
21
 
22
22
  # @!attribute [r] name
23
- # @return [String|Symbol]
23
+ # @macro return_name
24
24
  attr_reader :name
25
25
 
26
26
  # @!attribute [rw] ox
@@ -165,9 +165,7 @@ module Vedeu
165
165
 
166
166
  private
167
167
 
168
- # Returns the geometry for the interface.
169
- #
170
- # @return (see Vedeu::Geometries::Repository#by_name)
168
+ # @macro geometry_by_name
171
169
  def geometry
172
170
  @geometry ||= Vedeu.geometries.by_name(name)
173
171
  end
@@ -30,7 +30,7 @@ module Vedeu
30
30
  attr_accessor :data
31
31
 
32
32
  # @!attribute [rw] name
33
- # @return [String|Symbol]
33
+ # @macro return_name
34
34
  attr_accessor :name
35
35
 
36
36
  # Returns the document as a string with line breaks if there is
@@ -72,14 +72,12 @@ module Vedeu
72
72
  attr_reader :input
73
73
 
74
74
  # @!attribute [r] name
75
- # @return [String|Symbol]
75
+ # @macro return_name
76
76
  attr_reader :name
77
77
 
78
78
  private
79
79
 
80
- # Return the document by name from the documents repository.
81
- #
82
- # @return [Vedeu::Editor::Document]
80
+ # @macro document_by_name
83
81
  def document
84
82
  @document ||= Vedeu.documents.by_name(name)
85
83
  end
@@ -88,17 +86,4 @@ module Vedeu
88
86
 
89
87
  end # Editor
90
88
 
91
- # :nocov:
92
-
93
- # See {file:docs/events/system.md#\_editor_}
94
- Vedeu.bind(:_editor_) do |key|
95
- Vedeu.timer('Executing editor keypress') do
96
- Vedeu.trigger(:key, key)
97
-
98
- Vedeu::Editor::Editor.keypress(name: Vedeu.focus, input: key)
99
- end
100
- end
101
-
102
- # :nocov:
103
-
104
89
  end # Vedeu
@@ -28,49 +28,4 @@ module Vedeu
28
28
  def_delegators Vedeu::Editor::Repository,
29
29
  :documents
30
30
 
31
- # :nocov:
32
-
33
- # See {file:docs/events/document.md#\_editor_execute_}
34
- Vedeu.bind(:_editor_execute_) do |name|
35
- Vedeu.documents.by_name(name).execute
36
- end
37
-
38
- # See {file:docs/events/document.md#\_editor_delete_character_}
39
- Vedeu.bind(:_editor_delete_character_) do |name|
40
- Vedeu.documents.by_name(name).delete_character
41
- end
42
-
43
- # See {file:docs/events/document.md#\_editor_delete_line_}
44
- Vedeu.bind(:_editor_delete_line_) do |name|
45
- Vedeu.documents.by_name(name).delete_line
46
- end
47
-
48
- # See {file:docs/events/document.md#\_editor_down_}
49
- Vedeu.bind(:_editor_down_) do |name|
50
- Vedeu.documents.by_name(name).down
51
- end
52
-
53
- # See {file:docs/events/document.md#\_editor_insert_character_}
54
- Vedeu.bind(:_editor_insert_character_) do |name, character|
55
- Vedeu.documents.by_name(name).insert_character(character)
56
- end
57
-
58
- # See {file:docs/events/document.md#\_editor_insert_line_}
59
- Vedeu.bind(:_editor_insert_line_) do |name|
60
- Vedeu.documents.by_name(name).insert_line
61
- end
62
-
63
- # See {file:docs/events/document.md#\_editor_left_}
64
- Vedeu.bind(:_editor_left_) { |name| Vedeu.documents.by_name(name).left }
65
-
66
- # See {file:docs/events/document.md#\_editor_right_}
67
- Vedeu.bind(:_editor_right_) do |name|
68
- Vedeu.documents.by_name(name).right
69
- end
70
-
71
- # See {file:docs/events/document.md#\_editor_up_}
72
- Vedeu.bind(:_editor_up_) { |name| Vedeu.documents.by_name(name).up }
73
-
74
- # :nocov:
75
-
76
31
  end # Vedeu
@@ -170,7 +170,7 @@ module Vedeu
170
170
  attr_reader :closure
171
171
 
172
172
  # @!attribute [r] name
173
- # @return [String|Symbol]
173
+ # @macro return_name
174
174
  attr_reader :name
175
175
 
176
176
  private
@@ -13,11 +13,56 @@ module Vedeu
13
13
 
14
14
  end # Geometries
15
15
 
16
+ # :nocov:
17
+
18
+ # See {file:docs/events/view.md#\_maximise_}
19
+ Vedeu.bind(:_maximise_) do |name|
20
+ Vedeu.geometries.by_name(name).maximise
21
+ end
22
+
23
+ # {include:file:docs/events/by_name/movement_refresh.md}
24
+ Vedeu.bind(:_movement_refresh_) do |name|
25
+ Vedeu.trigger(:_clear_)
26
+ Vedeu.trigger(:_refresh_)
27
+ Vedeu.trigger(:_clear_view_, name)
28
+ Vedeu.trigger(:_refresh_view_, name)
29
+ end
30
+
31
+ # See {file:docs/events/view.md#\_unmaximise_}
32
+ Vedeu.bind(:_unmaximise_) do |name|
33
+ Vedeu.geometries.by_name(name).unmaximise
34
+ end
35
+
36
+ # {include:file:docs/events/by_name/view_down.md}
37
+ Vedeu.bind(:_view_down_) do |name, offset|
38
+ Vedeu::Geometries::Move.move(name: name, offset: offset, direction: :down)
39
+ end
40
+
41
+ # {include:file:docs/events/by_name/view_left.md}
42
+ Vedeu.bind(:_view_left_) do |name, offset|
43
+ Vedeu::Geometries::Move.move(name: name, offset: offset, direction: :left)
44
+ end
45
+
46
+ # {include:file:docs/events/by_name/view_right.md}
47
+ Vedeu.bind(:_view_right_) do |name, offset|
48
+ Vedeu::Geometries::Move.move(name: name, offset: offset, direction: :right)
49
+ end
50
+
51
+ # {include:file:docs/events/by_name/view_up.md}
52
+ Vedeu.bind(:_view_up_) do |name, offset|
53
+ Vedeu::Geometries::Move.move(name: name, offset: offset, direction: :up)
54
+ end
55
+
56
+ [:down, :left, :right, :up].each do |direction|
57
+ Vedeu.bind_alias(:"_geometry_#{direction}_", :"_view_#{direction}_")
58
+ end
59
+
60
+ # :nocov:
61
+
16
62
  end # Vedeu
17
63
 
18
64
  require 'vedeu/geometries/area/all'
19
65
  require 'vedeu/geometries/dsl/all'
20
-
21
66
  require 'vedeu/geometries/geometry'
22
67
  require 'vedeu/geometries/move'
23
68
  require 'vedeu/geometries/position'
@@ -281,12 +281,12 @@ module Vedeu
281
281
  protected
282
282
 
283
283
  # @!attribute [r] name
284
- # @return [String|Symbol]
284
+ # @macro return_name
285
285
  attr_reader :name
286
286
 
287
287
  private
288
288
 
289
- # @return [Vedeu::Borders::Border]
289
+ # @macro border_by_name
290
290
  def border
291
291
  @_border ||= Vedeu.borders.by_name(name)
292
292
  end
@@ -33,50 +33,46 @@ module Vedeu
33
33
  @value = value
34
34
  end
35
35
 
36
- # @macro raise_out_of_range
37
36
  # @see Vedeu::Geometries::DSL#columns
38
37
  def columns
39
- raise Vedeu::Error::OutOfRange if out_of_range?
40
-
41
38
  column * value
42
39
  end
43
40
 
44
- # @macro raise_out_of_range
45
41
  # @see Vedeu::Geometries::DSL#rows
46
42
  def rows
47
- raise Vedeu::Error::OutOfRange if out_of_range?
48
-
49
43
  row * value
50
44
  end
51
45
 
52
- protected
53
-
54
- # @!attribute [r] value
55
- # @return [Fixnum]
56
- attr_reader :value
57
-
58
46
  private
59
47
 
60
- # Returns the height of a single row in characters.
48
+ # Returns the width of a single column in characters.
61
49
  #
62
50
  # @return [Fixnum]
63
- def row
64
- Vedeu.height / 12
51
+ def column
52
+ Vedeu.width / 12
65
53
  end
66
54
 
67
55
  # Returns a boolean indicating whether the value is out of
68
56
  # range.
69
57
  #
70
58
  # @return [Boolean]
71
- def out_of_range?
72
- value < 1 || value > 12
59
+ def out_of_range?(v)
60
+ v < 1 || v > 12
73
61
  end
74
62
 
75
- # Returns the width of a single column in characters.
63
+ # Returns the height of a single row in characters.
76
64
  #
77
65
  # @return [Fixnum]
78
- def column
79
- Vedeu.width / 12
66
+ def row
67
+ Vedeu.height / 12
68
+ end
69
+
70
+ # @macro raise_out_of_range
71
+ # @return [Fixnum]
72
+ def value
73
+ raise Vedeu::Error::OutOfRange if out_of_range?(@value)
74
+
75
+ @value
80
76
  end
81
77
 
82
78
  end # Grid