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
@@ -28,6 +28,7 @@ module Vedeu
28
28
  # Returns a new instance of Vedeu::Geometry::Dimension.
29
29
  #
30
30
  # @param attributes [Hash<Symbol => Fixnum, NilClass>]
31
+ # @option attributes alignment [Symbol]
31
32
  # @option attributes d [Fixnum|NilClass]
32
33
  # The starting value (y or x).
33
34
  # @option attributes dn [Fixnum|NilClass]
@@ -36,7 +37,6 @@ module Vedeu
36
37
  # @option attributes default [Fixnum|NilClass]
37
38
  # The terminal width or height.
38
39
  # @option attributes maximised [Boolean]
39
- # @option attributes alignment [Symbol]
40
40
  # @return [Vedeu::Geometry::Dimension]
41
41
  def initialize(attributes = {})
42
42
  defaults.merge!(attributes).each do |key, value|
@@ -127,7 +127,7 @@ module Vedeu
127
127
  # @return [Fixnum|NilClass]
128
128
  def length
129
129
  if d && dn
130
- (d..dn).size
130
+ (dn - d) + 1
131
131
 
132
132
  elsif d_dn
133
133
  d_dn
@@ -16,20 +16,26 @@ module Vedeu
16
16
  include Vedeu::Repositories::Model
17
17
 
18
18
  def_delegators :area,
19
- :north,
19
+ :bordered_height,
20
+ :bordered_width,
21
+ :bottom,
22
+ :bx,
23
+ :bxn,
24
+ :by,
25
+ :byn,
20
26
  :east,
27
+ :height,
28
+ :left,
29
+ :north,
30
+ :right,
21
31
  :south,
22
- :west,
23
32
  :top,
24
- :right,
25
- :bottom,
26
- :left,
27
- :y,
28
- :xn,
29
- :yn,
33
+ :west,
34
+ :width,
30
35
  :x,
31
- :height,
32
- :width
36
+ :xn,
37
+ :y,
38
+ :yn
33
39
 
34
40
  # @!attribute [rw] horizontal_alignment
35
41
  # @return [Symbol]
@@ -40,7 +46,7 @@ module Vedeu
40
46
  attr_accessor :vertical_alignment
41
47
 
42
48
  # @!attribute [rw] name
43
- # @return [String]
49
+ # @return [String|Symbol]
44
50
  attr_accessor :name
45
51
 
46
52
  # @!attribute [w] height
@@ -165,50 +171,47 @@ module Vedeu
165
171
 
166
172
  # Moves the geometry down by one row.
167
173
  #
168
- # @todo Move cursor also.
169
174
  # @return [Vedeu::Geometry::Geometry]
170
175
  def move_down
171
176
  return self if yn + 1 > Vedeu.height
172
177
 
173
- move(y: y + 1, yn: yn + 1)
178
+ move(y: y + 1, yn: yn + 1) { Vedeu.trigger(:_cursor_down_, name) }
174
179
  end
175
180
 
176
181
  # Moves the geometry left by one column.
177
182
  #
178
- # @todo Move cursor also.
179
183
  # @return [Vedeu::Geometry::Geometry]
180
184
  def move_left
181
185
  return self if x - 1 < 1
182
186
 
183
- move(x: x - 1, xn: xn - 1)
187
+ move(x: x - 1, xn: xn - 1) { Vedeu.trigger(:_cursor_left_, name) }
184
188
  end
185
189
 
186
190
  # Moves the geometry to the top left of the terminal.
187
191
  #
188
- # @todo Move cursor also.
189
192
  # @return [Vedeu::Geometry::Geometry]
190
193
  def move_origin
191
- move(x: 1, xn: (xn - x + 1), y: 1, yn: (yn - y + 1))
194
+ move(x: 1, xn: (xn - x + 1), y: 1, yn: (yn - y + 1)) do
195
+ Vedeu.trigger(:_cursor_origin_, name)
196
+ end
192
197
  end
193
198
 
194
199
  # Moves the geometry right by one column.
195
200
  #
196
- # @todo Move cursor also.
197
201
  # @return [Vedeu::Geometry::Geometry]
198
202
  def move_right
199
203
  return self if xn + 1 > Vedeu.width
200
204
 
201
- move(x: x + 1, xn: xn + 1)
205
+ move(x: x + 1, xn: xn + 1) { Vedeu.trigger(:_cursor_right_, name) }
202
206
  end
203
207
 
204
208
  # Moves the geometry up by one column.
205
209
  #
206
- # @todo Move cursor also.
207
210
  # @return [Vedeu::Geometry::Geometry]
208
211
  def move_up
209
212
  return self if y - 1 < 1
210
213
 
211
- move(y: y - 1, yn: yn - 1)
214
+ move(y: y - 1, yn: yn - 1) { Vedeu.trigger(:_cursor_up_, name) }
212
215
  end
213
216
 
214
217
  # Will unmaximise the named interface geometry. Previously, when
@@ -245,6 +248,7 @@ module Vedeu
245
248
  {
246
249
  horizontal_alignment: @horizontal_alignment,
247
250
  maximised: @maximised,
251
+ name: name,
248
252
  vertical_alignment: @vertical_alignment,
249
253
  x: @x.is_a?(Proc) ? @x.call : @x,
250
254
  xn: @xn.is_a?(Proc) ? @xn.call : @xn,
@@ -255,11 +259,6 @@ module Vedeu
255
259
  }
256
260
  end
257
261
 
258
- # @return [Vedeu::Borders::Border]
259
- def border
260
- @border = Vedeu.borders.by_name(name)
261
- end
262
-
263
262
  # When moving an interface;
264
263
  # 1) Reset the alignment and maximised states to false;
265
264
  # it wont be aligned to a side if moved, and cannot be moved
@@ -283,7 +282,11 @@ module Vedeu
283
282
  vertical_alignment: :none)
284
283
  .merge!(coordinates)
285
284
 
286
- Vedeu::Geometry::Geometry.store(attrs)
285
+ geometry = Vedeu::Geometry::Geometry.store(attrs)
286
+
287
+ yield if block_given?
288
+
289
+ geometry
287
290
  end
288
291
 
289
292
  # Returns the default options/attributes for this class.
@@ -11,27 +11,33 @@ module Vedeu
11
11
  extend Forwardable
12
12
 
13
13
  def_delegators :area,
14
- :north,
14
+ :bordered_height,
15
+ :bordered_width,
16
+ :bottom,
17
+ :bx,
18
+ :bxn,
19
+ :by,
20
+ :byn,
15
21
  :east,
22
+ :height,
23
+ :left,
24
+ :north,
25
+ :right,
16
26
  :south,
17
- :west,
18
27
  :top,
19
- :right,
20
- :bottom,
21
- :left,
22
- :y,
23
- :xn,
24
- :yn,
28
+ :west,
29
+ :width,
25
30
  :x,
26
- :height,
27
- :width
31
+ :xn,
32
+ :y,
33
+ :yn
28
34
 
29
35
  # @!attribute [rw] maximised
30
36
  # @return [Boolean]
31
37
  attr_accessor :maximised
32
38
 
33
39
  # @!attribute [r] name
34
- # @return [String|NilClass]
40
+ # @return [NilClass|String|Symbol]
35
41
  attr_reader :name
36
42
 
37
43
  # Returns a new instance of Vedeu::Geometry::Null.
@@ -76,18 +76,11 @@ module Vedeu
76
76
  protected
77
77
 
78
78
  # @!attribute [r] name
79
- # @return [String]
79
+ # @return [String|Symbol]
80
80
  attr_reader :name
81
81
 
82
82
  private
83
83
 
84
- # Returns the border for the interface.
85
- #
86
- # @return (see Vedeu::Borders::Repository#by_name)
87
- def border
88
- @border ||= Vedeu.borders.by_name(name)
89
- end
90
-
91
84
  # @return [String] A string of blank characters.
92
85
  def chars
93
86
  @chars ||= (' ' * width).freeze
@@ -126,7 +119,7 @@ module Vedeu
126
119
  # @return [Fixnum]
127
120
  def height
128
121
  @height ||= if content_only?
129
- border.height
122
+ geometry.bordered_height
130
123
 
131
124
  else
132
125
  geometry.height
@@ -188,7 +181,7 @@ module Vedeu
188
181
  # @return [Fixnum]
189
182
  def width
190
183
  @width ||= if content_only?
191
- border.width
184
+ geometry.bordered_width
192
185
 
193
186
  else
194
187
  geometry.width
@@ -199,7 +192,7 @@ module Vedeu
199
192
  # @return [Fixnum]
200
193
  def y
201
194
  @y ||= if content_only?
202
- border.by
195
+ geometry.by
203
196
 
204
197
  else
205
198
  geometry.y
@@ -210,7 +203,7 @@ module Vedeu
210
203
  # @return [Fixnum]
211
204
  def x
212
205
  @x ||= if content_only?
213
- border.bx
206
+ geometry.bx
214
207
 
215
208
  else
216
209
  geometry.x
@@ -20,9 +20,9 @@ module Vedeu
20
20
  :name,
21
21
  :visible?
22
22
 
23
- def_delegators :border,
24
- :height,
25
- :width
23
+ def_delegators :geometry,
24
+ :bordered_height,
25
+ :bordered_width
26
26
 
27
27
  def_delegators :cursor,
28
28
  :ox,
@@ -106,7 +106,7 @@ module Vedeu
106
106
  #
107
107
  # @return [Range]
108
108
  def rows
109
- top...(top + height)
109
+ top...(top + bordered_height)
110
110
  end
111
111
 
112
112
  # Using the current cursor's x position, return a range of
@@ -121,17 +121,17 @@ module Vedeu
121
121
  #
122
122
  # @return [Range]
123
123
  def columns
124
- left...(left + width)
124
+ left...(left + bordered_width)
125
125
  end
126
126
 
127
127
  # @return [Fixnum]
128
128
  def left
129
- @left ||= content_offset(ox, width)
129
+ @left ||= content_offset(ox, bordered_width)
130
130
  end
131
131
 
132
132
  # @return [Fixnum]
133
133
  def top
134
- @top ||= content_offset(oy, height)
134
+ @top ||= content_offset(oy, bordered_height)
135
135
  end
136
136
 
137
137
  # Returns the offset for the content (the number of rows or
@@ -147,21 +147,21 @@ module Vedeu
147
147
  offset - dimension
148
148
  end
149
149
 
150
- # Returns the border for the interface.
150
+ # Returns the geometry for the interface.
151
151
  #
152
- # @return (see Vedeu::Borders::Repository#by_name)
153
- def border
154
- @border ||= Vedeu.borders.by_name(name)
152
+ # @return (see Vedeu::Geometry::Repository#by_name)
153
+ def geometry
154
+ @geometry ||= Vedeu.geometries.by_name(name)
155
155
  end
156
156
 
157
157
  # @return [Fixnum]
158
158
  def bx
159
- @bx ||= border.bx
159
+ @bx ||= geometry.bx
160
160
  end
161
161
 
162
162
  # @return [Fixnum]
163
163
  def by
164
- @by ||= border.by
164
+ @by ||= geometry.by
165
165
  end
166
166
 
167
167
  # @return [Vedeu::Cursors::Cursor]
@@ -5,7 +5,7 @@ module Vedeu
5
5
  class Plugin
6
6
 
7
7
  # @!attribute [r] name
8
- # @return [String]
8
+ # @return [String|Symbol]
9
9
  attr_reader :name
10
10
 
11
11
  # @!attribute [r] gem
@@ -63,9 +63,7 @@ module Vedeu
63
63
  # @param name [String|Symbol] The name of the stored model.
64
64
  # @return [void]
65
65
  def by_name(name = Vedeu.focus)
66
- name = present?(name) ? name : Vedeu.focus
67
-
68
- return find(name) if registered?(name)
66
+ return find(name) if present?(name) && registered?(name)
69
67
 
70
68
  null_model.new(name: name)
71
69
  end
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.6.56'.freeze
4
+ VERSION = '0.6.57'.freeze
5
5
 
6
6
  end
@@ -55,6 +55,8 @@ module Vedeu
55
55
  instance.must_respond_to(:bottom_left=)
56
56
  instance.must_respond_to(:bottom_right)
57
57
  instance.must_respond_to(:bottom_right=)
58
+ instance.must_respond_to(:caption)
59
+ instance.must_respond_to(:caption=)
58
60
  instance.must_respond_to(:horizontal)
59
61
  instance.must_respond_to(:horizontal=)
60
62
  instance.must_respond_to(:show_bottom)
@@ -69,6 +71,8 @@ module Vedeu
69
71
  instance.must_respond_to(:show_top)
70
72
  instance.must_respond_to(:top?)
71
73
  instance.must_respond_to(:show_top=)
74
+ instance.must_respond_to(:title)
75
+ instance.must_respond_to(:title=)
72
76
  instance.must_respond_to(:top_left)
73
77
  instance.must_respond_to(:top_left=)
74
78
  instance.must_respond_to(:top_right)
@@ -82,128 +86,6 @@ module Vedeu
82
86
  }
83
87
  end
84
88
 
85
- describe 'border offset methods; bx, bxn, by, byn' do
86
- let(:attributes) {
87
- {
88
- bottom_left: 'C',
89
- bottom_right: 'D',
90
- enabled: enabled,
91
- horizontal: 'H',
92
- name: _name,
93
- show_top: top,
94
- show_bottom: bottom,
95
- show_left: left,
96
- show_right: right,
97
- top_left: 'A',
98
- top_right: 'B',
99
- vertical: 'V'
100
- }
101
- }
102
- let(:_name) { 'Border#bxbxnbybyn' }
103
- let(:enabled) { false }
104
- let(:top) { false }
105
- let(:bottom) { false }
106
- let(:left) { false }
107
- let(:right) { false }
108
- let(:geometry) {
109
- Vedeu::Geometry::Geometry.new(name: _name,
110
- x: 2,
111
- xn: 6,
112
- y: 2,
113
- yn: 6)
114
- }
115
-
116
- before { Vedeu.geometries.stubs(:by_name).returns(geometry) }
117
-
118
- describe '#bx' do
119
- subject { instance.bx }
120
-
121
- context 'when enabled' do
122
- let(:enabled) { true }
123
-
124
- context 'with left' do
125
- let(:left) { true }
126
-
127
- it { subject.must_equal(3) }
128
- end
129
-
130
- context 'without left' do
131
- it { subject.must_equal(2) }
132
- end
133
- end
134
-
135
- context 'when not enabled' do
136
- it { subject.must_equal(2) }
137
- end
138
- end
139
-
140
- describe '#bxn' do
141
- subject { instance.bxn }
142
-
143
- context 'when enabled' do
144
- let(:enabled) { true }
145
-
146
- context 'with right' do
147
- let(:right) { true }
148
-
149
- it { subject.must_equal(5) }
150
- end
151
-
152
- context 'without right' do
153
- it { subject.must_equal(6) }
154
- end
155
- end
156
-
157
- context 'when not enabled' do
158
- it { subject.must_equal(6) }
159
- end
160
- end
161
-
162
- describe '#by' do
163
- subject { instance.by }
164
-
165
- context 'when enabled' do
166
- let(:enabled) { true }
167
-
168
- context 'with top' do
169
- let(:top) { true }
170
-
171
- it { subject.must_equal(3) }
172
- end
173
-
174
- context 'without top' do
175
- it { subject.must_equal(2) }
176
- end
177
- end
178
-
179
- context 'when not enabled' do
180
- it { subject.must_equal(2) }
181
- end
182
- end
183
-
184
- describe '#byn' do
185
- subject { instance.byn }
186
-
187
- context 'when enabled' do
188
- let(:enabled) { true }
189
-
190
- context 'with bottom' do
191
- let(:bottom) { true }
192
-
193
- it { subject.must_equal(5) }
194
- end
195
-
196
- context 'without bottom' do
197
- it { subject.must_equal(6) }
198
- end
199
- end
200
-
201
- context 'when not enabled' do
202
- it { subject.must_equal(6) }
203
- end
204
- end
205
- end
206
-
207
89
  describe '#deputy' do
208
90
  subject { instance.deputy }
209
91
 
@@ -212,114 +94,6 @@ module Vedeu
212
94
  end
213
95
  end
214
96
 
215
- describe '#width' do
216
- let(:geometry) {
217
- Vedeu::Geometry::Geometry.new(name: _name, width: 8)
218
- }
219
-
220
- before { Vedeu.geometries.stubs(:by_name).returns(geometry) }
221
-
222
- subject { instance.width }
223
-
224
- context 'when the border is not enabled' do
225
- it 'returns the interface width' do
226
- subject.must_equal(8)
227
- end
228
- end
229
-
230
- context 'when the border is enabled' do
231
- context 'when both left and right borders are shown' do
232
- let(:attributes) {
233
- {
234
- enabled: true,
235
- name: _name,
236
- }
237
- }
238
-
239
- it { subject.must_equal(6) }
240
- end
241
-
242
- context 'when either the left or right border is shown' do
243
- let(:attributes) {
244
- {
245
- enabled: true,
246
- name: _name,
247
- show_left: false
248
- }
249
- }
250
-
251
- it { subject.must_equal(7) }
252
- end
253
-
254
- context 'when neither left nor right borders are shown' do
255
- let(:attributes) {
256
- {
257
- enabled: true,
258
- name: _name,
259
- show_left: false,
260
- show_right: false
261
- }
262
- }
263
-
264
- it { subject.must_equal(8) }
265
- end
266
- end
267
- end
268
-
269
- describe '#height' do
270
- let(:geometry) {
271
- Vedeu::Geometry::Geometry.new(name: _name, height: 5)
272
- }
273
-
274
- before { Vedeu.geometries.stubs(:by_name).returns(geometry) }
275
-
276
- subject { instance.height }
277
-
278
- context 'when the border is not enabled' do
279
- it 'returns the interface height' do
280
- subject.must_equal(5)
281
- end
282
- end
283
-
284
- context 'when the border is enabled' do
285
- context 'when both top and bottom borders are shown' do
286
- let(:attributes) {
287
- {
288
- enabled: true,
289
- name: _name,
290
- }
291
- }
292
-
293
- it { subject.must_equal(3) }
294
- end
295
-
296
- context 'when either the top or bottom border is shown' do
297
- let(:attributes) {
298
- {
299
- enabled: true,
300
- name: _name,
301
- show_top: false
302
- }
303
- }
304
-
305
- it { subject.must_equal(4) }
306
- end
307
-
308
- context 'when neither top nor bottom borders are shown' do
309
- let(:attributes) {
310
- {
311
- enabled: true,
312
- name: _name,
313
- show_top: false,
314
- show_bottom: false
315
- }
316
- }
317
-
318
- it { subject.must_equal(5) }
319
- end
320
- end
321
- end
322
-
323
97
  describe '#enabled?' do
324
98
  subject { instance.enabled? }
325
99