vedeu 0.6.56 → 0.6.57

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/Guardfile +1 -1
  4. data/Rakefile +3 -3
  5. data/lib/vedeu/borders/all.rb +1 -0
  6. data/lib/vedeu/borders/border.rb +14 -80
  7. data/lib/vedeu/borders/caption.rb +17 -0
  8. data/lib/vedeu/borders/dsl.rb +2 -2
  9. data/lib/vedeu/borders/null.rb +14 -34
  10. data/lib/vedeu/borders/refresh.rb +28 -14
  11. data/lib/vedeu/borders/title.rb +0 -10
  12. data/lib/vedeu/buffers/buffer.rb +1 -1
  13. data/lib/vedeu/buffers/view.rb +7 -6
  14. data/lib/vedeu/colours/repository.rb +0 -15
  15. data/lib/vedeu/cursors/cursor.rb +6 -6
  16. data/lib/vedeu/cursors/refresh.rb +11 -19
  17. data/lib/vedeu/cursors/reposition.rb +3 -5
  18. data/lib/vedeu/editor/cropper.rb +9 -9
  19. data/lib/vedeu/editor/cursor.rb +5 -5
  20. data/lib/vedeu/editor/editor.rb +1 -1
  21. data/lib/vedeu/events/event.rb +1 -1
  22. data/lib/vedeu/events/trigger.rb +1 -1
  23. data/lib/vedeu/geometry/area.rb +94 -17
  24. data/lib/vedeu/geometry/coordinate.rb +15 -15
  25. data/lib/vedeu/geometry/dimension.rb +2 -2
  26. data/lib/vedeu/geometry/geometry.rb +30 -27
  27. data/lib/vedeu/geometry/null.rb +17 -11
  28. data/lib/vedeu/interfaces/clear.rb +5 -12
  29. data/lib/vedeu/output/viewport.rb +13 -13
  30. data/lib/vedeu/plugins/plugin.rb +1 -1
  31. data/lib/vedeu/repositories/repository.rb +1 -3
  32. data/lib/vedeu/version.rb +1 -1
  33. data/test/lib/vedeu/borders/border_test.rb +4 -230
  34. data/test/lib/vedeu/borders/caption_test.rb +15 -0
  35. data/test/lib/vedeu/borders/dsl_test.rb +4 -4
  36. data/test/lib/vedeu/borders/null_test.rb +3 -39
  37. data/test/lib/vedeu/buffers/view_test.rb +2 -0
  38. data/test/lib/vedeu/colours/repository_test.rb +0 -19
  39. data/test/lib/vedeu/cursors/reposition_test.rb +17 -4
  40. data/test/lib/vedeu/dsl/shared_test.rb +34 -0
  41. data/test/lib/vedeu/geometry/area_test.rb +196 -3
  42. data/test/lib/vedeu/geometry/dimension_test.rb +79 -79
  43. data/test/lib/vedeu/geometry/geometry_test.rb +4 -0
  44. data/test/lib/vedeu/groups/refresh_test.rb +1 -1
  45. data/test/lib/vedeu/logging/clock_time_test.rb +14 -0
  46. data/test/lib/vedeu/logging/ips_test.rb +43 -0
  47. data/test/lib/vedeu/output/presentation/colour_test.rb +4 -0
  48. data/test/lib/vedeu/repositories/repositories_test.rb +7 -1
  49. data/test/lib/vedeu/terminal/buffer_test.rb +10 -0
  50. data/test/support/examples/material_colours_app.rb +306 -47
  51. data/test/test_helper.rb +5 -5
  52. metadata +7 -4
  53. data/test/support/examples/borders_app.rb +0 -330
@@ -50,21 +50,6 @@ module Vedeu
50
50
  storage.fetch(colour, '')
51
51
  end
52
52
 
53
- # Retrieves the escape sequence of a registered colour, or
54
- # registers the colour with its respective escape sequence.
55
- #
56
- # @return [String]
57
- # @todo Unused - GL 2015-09-26
58
- def retrieve_or_register(colour, escape_sequence)
59
- if registered?(colour)
60
- retrieve(colour)
61
-
62
- else
63
- register(colour, escape_sequence)
64
-
65
- end
66
- end
67
-
68
53
  end # Repository
69
54
 
70
55
  end # Colours
@@ -13,7 +13,7 @@ module Vedeu
13
13
  include Vedeu::Toggleable
14
14
  extend Forwardable
15
15
 
16
- def_delegators :border,
16
+ def_delegators :geometry,
17
17
  :bx,
18
18
  :bxn,
19
19
  :by,
@@ -47,7 +47,7 @@ module Vedeu
47
47
 
48
48
  # Returns a new instance of Vedeu::Cursors::Cursor.
49
49
  #
50
- # @params attributes [Hash<Symbol => Boolean|Fixnum|String|
50
+ # @param attributes [Hash<Symbol => Boolean|Fixnum|String|
51
51
  # Vedeu::Cursors::Repository>]
52
52
  # @option attributes name [String|Symbol] The name of the
53
53
  # interface this cursor belongs to.
@@ -253,11 +253,11 @@ module Vedeu
253
253
 
254
254
  private
255
255
 
256
- # Returns the border for the interface.
256
+ # Returns the geometry for the interface.
257
257
  #
258
- # @return (see Vedeu::Borders::Repository#by_name)
259
- def border
260
- @border ||= Vedeu.borders.by_name(name)
258
+ # @return (see Vedeu::Geometry::Repository#by_name)
259
+ def geometry
260
+ @geometry ||= Vedeu.geometries.by_name(name)
261
261
  end
262
262
 
263
263
  # Determine correct x and y related coordinates.
@@ -13,9 +13,9 @@ module Vedeu
13
13
  extend Forwardable
14
14
  include Vedeu::Common
15
15
 
16
- def_delegators :border,
17
- :height,
18
- :width
16
+ def_delegators :geometry,
17
+ :bordered_height,
18
+ :bordered_width
19
19
 
20
20
  # @example
21
21
  # Vedeu.trigger(:_refresh_cursor_, name)
@@ -61,11 +61,13 @@ module Vedeu
61
61
 
62
62
  # Returns true when the view should be refreshed. This is
63
63
  # determined by checking that the offsets for x and y are
64
- # outside the width and height of the named interface.
64
+ # outside the (bordered) width and (bordered) height of the
65
+ # named interface.
65
66
  #
66
67
  # @return [Boolean]
67
68
  def refresh_view?
68
- cursor.visible? && cursor.ox >= width || cursor.oy >= height
69
+ cursor.visible? && (cursor.ox >= bordered_width ||
70
+ cursor.oy >= bordered_height)
69
71
  end
70
72
 
71
73
  # @return [Vedeu::Cursors::Cursor]
@@ -74,21 +76,11 @@ module Vedeu
74
76
  @cursor ||= Vedeu.cursors.by_name(name)
75
77
  end
76
78
 
77
- # Fetch the border by name.
79
+ # Fetch the geometry by name.
78
80
  #
79
- # @note
80
- # {Vedeu::Borders::Border} is used in this way because when
81
- # there is not a border defined, it will fallback to a
82
- # {Vedeu::Borders::Null} which uses
83
- # {Vedeu::Geometry::Geometry} to determine it's dimensions
84
- # based on the name also. When a {Vedeu::Geometry::Geometry}
85
- # cannot be found, this falls back to a
86
- # {Vedeu::Geometry::Null} which uses the dimensions of the
87
- # current terminal.
88
- #
89
- # @return (see Vedeu::Borders::Repository#by_name)
90
- def border
91
- @border ||= Vedeu.borders.by_name(name)
81
+ # @return (see Vedeu::Geometry::Repository#by_name)
82
+ def geometry
83
+ @geometry ||= Vedeu.geometries.by_name(name)
92
84
  end
93
85
 
94
86
  end # Refresh
@@ -27,11 +27,9 @@ module Vedeu
27
27
 
28
28
  # @return [Vedeu::Cursors::Cursor]
29
29
  def reposition
30
- cursor = Vedeu::Cursors::Cursor.store(new_attributes)
31
-
32
- Vedeu.trigger(:_refresh_cursor_, name)
33
-
34
- cursor
30
+ Vedeu::Cursors::Cursor.store(new_attributes) do
31
+ Vedeu.trigger(:_refresh_cursor_, name)
32
+ end
35
33
  end
36
34
 
37
35
  protected
@@ -12,13 +12,13 @@ module Vedeu
12
12
  extend Forwardable
13
13
  include Vedeu::Common
14
14
 
15
- def_delegators :border,
15
+ def_delegators :geometry,
16
+ :bordered_height,
17
+ :bordered_width,
16
18
  :bx,
17
19
  :bxn,
18
20
  :by,
19
- :byn,
20
- :height,
21
- :width
21
+ :byn
22
22
 
23
23
  # Returns a new instance of Vedeu::Editor::Cropper.
24
24
  #
@@ -87,7 +87,7 @@ module Vedeu
87
87
  #
88
88
  # @return [Vedeu::Editor::Lines]
89
89
  def lines
90
- @lines[oy...(oy + height)] || []
90
+ @lines[oy...(oy + bordered_height)] || []
91
91
  end
92
92
 
93
93
  # Returns the interface by name.
@@ -101,14 +101,14 @@ module Vedeu
101
101
  #
102
102
  # @return [String]
103
103
  def columns(line)
104
- line[ox...(ox + width)] || ''
104
+ line[ox...(ox + bordered_width)] || ''
105
105
  end
106
106
 
107
107
  # Returns the border for the interface.
108
108
  #
109
- # @return (see Vedeu::Borders::Repository#by_name)
110
- def border
111
- @border ||= Vedeu.borders.by_name(name)
109
+ # @return (see Vedeu::Geometry::Repository#by_name)
110
+ def geometry
111
+ @geometry ||= Vedeu.geometries.by_name(name)
112
112
  end
113
113
 
114
114
  end # Editor
@@ -11,7 +11,7 @@ module Vedeu
11
11
 
12
12
  extend Forwardable
13
13
 
14
- def_delegators :border,
14
+ def_delegators :geometry,
15
15
  :bx,
16
16
  :bxn,
17
17
  :by,
@@ -162,11 +162,11 @@ module Vedeu
162
162
 
163
163
  private
164
164
 
165
- # Returns the border for the interface.
165
+ # Returns the geometry for the interface.
166
166
  #
167
- # @return (see Vedeu::Borders::Repository#by_name)
168
- def border
169
- @border ||= Vedeu.borders.by_name(name)
167
+ # @return (see Vedeu::Geometry::Repository#by_name)
168
+ def geometry
169
+ @border ||= Vedeu.geometries.by_name(name)
170
170
  end
171
171
 
172
172
  # Returns the default options/attributes for this class.
@@ -71,7 +71,7 @@ module Vedeu
71
71
  attr_reader :input
72
72
 
73
73
  # @!attribute [r] name
74
- # @return [String]
74
+ # @return [String|Symbol]
75
75
  attr_reader :name
76
76
 
77
77
  private
@@ -180,7 +180,7 @@ module Vedeu
180
180
  attr_reader :closure
181
181
 
182
182
  # @!attribute [r] name
183
- # @return [String]
183
+ # @return [String|Symbol]
184
184
  attr_reader :name
185
185
 
186
186
  private
@@ -49,7 +49,7 @@ module Vedeu
49
49
  protected
50
50
 
51
51
  # @!attribute [r] name
52
- # @return [Symbol]
52
+ # @return [Symbol|String]
53
53
  attr_reader :name
54
54
 
55
55
  # @!attribute [r] args
@@ -8,6 +8,15 @@ module Vedeu
8
8
  #
9
9
  class Area
10
10
 
11
+ extend Forwardable
12
+
13
+ def_delegators :border,
14
+ :bottom?,
15
+ :enabled?,
16
+ :left?,
17
+ :right?,
18
+ :top?
19
+
11
20
  # @!attribute [r] y
12
21
  # @return [Fixnum] Returns the top coordinate (row/line start
13
22
  # position) of the interface.
@@ -33,51 +42,58 @@ module Vedeu
33
42
  alias_method :right, :xn
34
43
 
35
44
  # @param attributes [Hash<Symbol => Boolean|Fixnum|Symbol>]
36
- # @option attributes y [Fixnum]
37
- # @option attributes yn [Fixnum]
38
- # @option attributes y_yn [Fixnum]
39
- # @option attributes y_default [Fixnum]
45
+ # @option attributes horizontal_alignment [Symbol]
46
+ # @option attributes maximised [Boolean]
47
+ # @option attributes name [String|Symbol]
48
+ # @option attributes vertical_alignment [Symbol]
40
49
  # @option attributes x [Fixnum]
41
50
  # @option attributes xn [Fixnum]
42
51
  # @option attributes x_xn [Fixnum]
43
52
  # @option attributes x_default [Fixnum]
44
- # @option attributes maximised [Boolean]
45
- # @option attributes horizontal_alignment [Symbol]
46
- # @option attributes vertical_alignment [Symbol]
53
+ # @option attributes y [Fixnum]
54
+ # @option attributes yn [Fixnum]
55
+ # @option attributes y_yn [Fixnum]
56
+ # @option attributes y_default [Fixnum]
47
57
  # @return [Vedeu::Geometry::Area]
48
58
  def self.from_attributes(attributes = {})
49
59
  y_attributes = {
60
+ alignment: attributes[:vertical_alignment],
50
61
  d: attributes[:y],
51
62
  dn: attributes[:yn],
52
63
  d_dn: attributes[:y_yn],
53
64
  maximised: attributes[:maximised],
54
- alignment: attributes[:vertical_alignment],
55
65
  }
56
66
  x_attributes = {
67
+ alignment: attributes[:horizontal_alignment],
57
68
  d: attributes[:x],
58
69
  dn: attributes[:xn],
59
70
  d_dn: attributes[:x_xn],
60
71
  maximised: attributes[:maximised],
61
- alignment: attributes[:horizontal_alignment],
62
72
  }
63
73
  y_yn = Vedeu::Geometry::YDimension.pair(y_attributes)
64
74
  x_xn = Vedeu::Geometry::XDimension.pair(x_attributes)
65
75
 
66
- new(y: y_yn[0], yn: y_yn[-1], x: x_xn[0], xn: x_xn[-1])
76
+ new(name: attributes[:name],
77
+ y: y_yn[0],
78
+ yn: y_yn[-1],
79
+ x: x_xn[0],
80
+ xn: x_xn[-1])
67
81
  end
68
82
 
69
83
  # Returns a new instance of Vedeu::Area.
70
84
  #
85
+ # @param name [Symbol|String]
71
86
  # @param y [Fixnum] The starting row/line position.
72
87
  # @param yn [Fixnum] The ending row/line position.
73
88
  # @param x [Fixnum] The starting column/character position.
74
89
  # @param xn [Fixnum] The ending column/character position.
75
90
  # @return [Vedeu::Geometry::Area]
76
- def initialize(y:, yn:, x:, xn:)
77
- @y = y
78
- @yn = yn
79
- @x = x
80
- @xn = xn
91
+ def initialize(name:, y:, yn:, x:, xn:)
92
+ @name = name
93
+ @y = y
94
+ @yn = yn
95
+ @x = x
96
+ @xn = xn
81
97
  end
82
98
 
83
99
  # An object is equal when its values are the same.
@@ -90,6 +106,54 @@ module Vedeu
90
106
  end
91
107
  alias_method :==, :eql?
92
108
 
109
+ # Returns the width of the interface determined by whether a
110
+ # left, right, both or neither borders are shown.
111
+ #
112
+ # @return [Fixnum]
113
+ def bordered_width
114
+ (bxn - bx) + 1
115
+ end
116
+
117
+ # Returns the height of the interface determined by whether a
118
+ # top, bottom, both or neither borders are shown.
119
+ #
120
+ # @return [Fixnum]
121
+ def bordered_height
122
+ (byn - by) + 1
123
+ end
124
+
125
+ # Return the column position for 1 character right of the left
126
+ # border.
127
+ #
128
+ # @return [Fixnum]
129
+ def bx
130
+ (enabled? && left?) ? x + 1 : x
131
+ end
132
+
133
+ # Return the column position for 1 character left of the right
134
+ # border.
135
+ #
136
+ # @return [Fixnum]
137
+ def bxn
138
+ (enabled? && right?) ? xn - 1 : xn
139
+ end
140
+
141
+ # Return the row position for 1 character under of the top
142
+ # border.
143
+ #
144
+ # @return [Fixnum]
145
+ def by
146
+ (enabled? && top?) ? y + 1 : y
147
+ end
148
+
149
+ # Return the column position for 1 character above of the bottom
150
+ # border.
151
+ #
152
+ # @return [Fixnum]
153
+ def byn
154
+ (enabled? && bottom?) ? yn - 1 : yn
155
+ end
156
+
93
157
  # Returns an array containing the centred y and x coordinates of
94
158
  # the interface.
95
159
  #
@@ -118,14 +182,14 @@ module Vedeu
118
182
  #
119
183
  # @return [Fixnum]
120
184
  def height
121
- (y..yn).size
185
+ (yn - y) + 1
122
186
  end
123
187
 
124
188
  # Returns the width of the interface.
125
189
  #
126
190
  # @return [Fixnum]
127
191
  def width
128
- (x..xn).size
192
+ (xn - x) + 1
129
193
  end
130
194
 
131
195
  # Returns the row above the top by default.
@@ -188,6 +252,19 @@ module Vedeu
188
252
  x - offset
189
253
  end
190
254
 
255
+ protected
256
+
257
+ # @!attribute [r] name
258
+ # @return [String|Symbol]
259
+ attr_reader :name
260
+
261
+ private
262
+
263
+ # @return [Vedeu::Borders::Border]
264
+ def border
265
+ @border = Vedeu.borders.by_name(name)
266
+ end
267
+
191
268
  end # Area
192
269
 
193
270
  end # Geometry
@@ -69,7 +69,7 @@ module Vedeu
69
69
  protected
70
70
 
71
71
  # @!attribute [r] name
72
- # @return [String]
72
+ # @return [String|Symbol]
73
73
  attr_reader :name
74
74
 
75
75
  # @!attribute [r] offset
@@ -82,39 +82,39 @@ module Vedeu
82
82
 
83
83
  private
84
84
 
85
- # Returns the border for the interface.
85
+ # Returns the geometry for the interface.
86
86
  #
87
- # @return (see Vedeu::Borders::Repository#by_name)
88
- def border
89
- @border ||= Vedeu.borders.by_name(name)
87
+ # @return (see Vedeu::Geometry::Repository#by_name)
88
+ def geometry
89
+ @geometry ||= Vedeu.geometries.by_name(name)
90
90
  end
91
91
 
92
- # Return the :x or :y value from the border.
92
+ # Return the :x or :y value from the geometry.
93
93
  #
94
94
  # @return [Fixnum]
95
95
  def d
96
- border.send(coordinate_type[0])
96
+ geometry.send(coordinate_type[0])
97
97
  end
98
98
 
99
- # Return the :bx or :by value from the border.
99
+ # Return the :bx or :by value from the geometry.
100
100
  #
101
101
  # @return [Fixnum]
102
102
  def bd
103
- border.send(coordinate_type[1])
103
+ geometry.send(coordinate_type[1])
104
104
  end
105
105
 
106
- # Return the :bxn or :byn value from the border.
106
+ # Return the :bxn or :byn value from the geometry.
107
107
  #
108
108
  # @return [Fixnum]
109
109
  def bdn
110
- border.send(coordinate_type[2])
110
+ geometry.send(coordinate_type[2])
111
111
  end
112
112
 
113
- # Return the :width or :height value from the border.
113
+ # Return the :width or :height value from the geometry.
114
114
  #
115
115
  # @return [Fixnum]
116
116
  def d_dn
117
- border.send(coordinate_type[3])
117
+ geometry.send(coordinate_type[3])
118
118
  end
119
119
 
120
120
  # Ascertain the correct methods to use for determining the
@@ -125,8 +125,8 @@ module Vedeu
125
125
  # @return [Fixnum]
126
126
  def coordinate_type
127
127
  @_type ||= case type
128
- when :x then [:x, :bx, :bxn, :width]
129
- when :y then [:y, :by, :byn, :height]
128
+ when :x then [:x, :bx, :bxn, :bordered_width]
129
+ when :y then [:y, :by, :byn, :bordered_height]
130
130
  else
131
131
  fail Vedeu::Error::InvalidSyntax,
132
132
  'Coordinate type not given, cannot continue.'.freeze