vedeu 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/examples/borders_app.rb +15 -14
  3. data/examples/colours_app.rb +1 -2
  4. data/examples/cursor_app.rb +2 -5
  5. data/examples/geometry_app.rb +141 -0
  6. data/lib/vedeu.rb +0 -17
  7. data/lib/vedeu/api.rb +18 -3
  8. data/lib/vedeu/buffers/all.rb +0 -6
  9. data/lib/vedeu/buffers/buffer.rb +5 -2
  10. data/lib/vedeu/cursor/all.rb +0 -13
  11. data/lib/vedeu/cursor/cursor.rb +1 -1
  12. data/lib/vedeu/dsl/components/border.rb +94 -12
  13. data/lib/vedeu/dsl/components/geometry.rb +40 -48
  14. data/lib/vedeu/dsl/components/keymap.rb +36 -0
  15. data/lib/vedeu/dsl/interface.rb +20 -5
  16. data/lib/vedeu/dsl/stream.rb +2 -0
  17. data/lib/vedeu/events/all.rb +0 -5
  18. data/lib/vedeu/events/event.rb +2 -1
  19. data/lib/vedeu/events/trigger.rb +1 -3
  20. data/lib/vedeu/input/all.rb +7 -12
  21. data/lib/vedeu/input/keymap.rb +10 -34
  22. data/lib/vedeu/input/keys.rb +1 -0
  23. data/lib/vedeu/input/mapper.rb +1 -5
  24. data/lib/vedeu/models/collection.rb +4 -0
  25. data/lib/vedeu/models/geometry.rb +2 -1
  26. data/lib/vedeu/models/model.rb +4 -0
  27. data/lib/vedeu/models/view/char.rb +10 -0
  28. data/lib/vedeu/models/view/chars.rb +3 -2
  29. data/lib/vedeu/models/view/interface.rb +18 -28
  30. data/lib/vedeu/models/view/interfaces.rb +3 -2
  31. data/lib/vedeu/models/view/lines.rb +3 -2
  32. data/lib/vedeu/models/view/stream.rb +1 -1
  33. data/lib/vedeu/models/view/streams.rb +3 -2
  34. data/lib/vedeu/output/border.rb +29 -21
  35. data/lib/vedeu/output/compositor.rb +2 -3
  36. data/lib/vedeu/output/output.rb +5 -1
  37. data/lib/vedeu/output/viewport.rb +45 -24
  38. data/lib/vedeu/output/wordwrap.rb +7 -1
  39. data/lib/vedeu/output/writer.rb +3 -0
  40. data/lib/vedeu/presentation/presentation.rb +2 -0
  41. data/lib/vedeu/repositories/all.rb +107 -1
  42. data/lib/vedeu/repositories/repository.rb +4 -0
  43. data/lib/vedeu/support/bounding_area.rb +1 -1
  44. data/lib/vedeu/support/position_validator.rb +18 -0
  45. data/test/lib/vedeu/buffers/buffer_test.rb +8 -8
  46. data/test/lib/vedeu/cursor/move_cursor_test.rb +3 -6
  47. data/test/lib/vedeu/dsl/components/border_test.rb +53 -4
  48. data/test/lib/vedeu/dsl/components/geometry_test.rb +0 -24
  49. data/test/lib/vedeu/dsl/interface_test.rb +11 -3
  50. data/test/lib/vedeu/events/event_test.rb +2 -2
  51. data/test/lib/vedeu/models/view/interface_test.rb +1 -25
  52. data/test/lib/vedeu/models/view/stream_test.rb +8 -0
  53. data/test/lib/vedeu/output/border_test.rb +159 -81
  54. data/test/lib/vedeu/output/output_test.rb +1 -2
  55. data/test/lib/vedeu/output/viewport_test.rb +3 -10
  56. data/test/lib/vedeu/repositories/all_test.rb +128 -0
  57. data/test/lib/vedeu/support/content_geometry_test.rb +1 -2
  58. data/vedeu.gemspec +1 -1
  59. metadata +3 -13
  60. data/lib/vedeu/repositories/menus.rb +0 -13
  61. data/test/lib/vedeu/buffers/all_test.rb +0 -11
  62. data/test/lib/vedeu/cursor/all_test.rb +0 -33
  63. data/test/lib/vedeu/events/all_test.rb +0 -11
  64. data/test/lib/vedeu/input/all_test.rb +0 -11
  65. data/test/lib/vedeu/repositories/menus_test.rb +0 -15
@@ -1,5 +1,7 @@
1
1
  module Vedeu
2
2
 
3
+ # Wrap or prune text.
4
+ #
3
5
  class Wordwrap
4
6
 
5
7
  # @param text [String]
@@ -58,6 +60,7 @@ module Vedeu
58
60
  end
59
61
  end
60
62
 
63
+ # @return [Vedeu::Lines]
61
64
  def as_lines
62
65
  if __callee__ == :prune_as_lines
63
66
  to_line_objects(prune)
@@ -75,7 +78,8 @@ module Vedeu
75
78
 
76
79
  private
77
80
 
78
- attr_reader :text, :options
81
+ attr_reader :text,
82
+ :options
79
83
 
80
84
  # @param text_as_lines [Array<String>]
81
85
  # @return [Vedeu::Lines]
@@ -102,6 +106,7 @@ module Vedeu
102
106
  end.join("\n")
103
107
  end
104
108
 
109
+ # @param string [String]
105
110
  # @return [String]
106
111
  def ellipsis_string(string)
107
112
  if string.size < ellipsis.size
@@ -113,6 +118,7 @@ module Vedeu
113
118
  end
114
119
  end
115
120
 
121
+ # @param string [String]
116
122
  # @return [String]
117
123
  def prune_string(string)
118
124
  string.chomp.slice(0..pruned_width)
@@ -4,10 +4,12 @@ module Vedeu
4
4
 
5
5
  attr_reader :writers
6
6
 
7
+ # @return [Vedeu::Writer]
7
8
  def self.[](*args)
8
9
  new(args)
9
10
  end
10
11
 
12
+ # @return [Vedeu::Writer]
11
13
  def initialize(writers)
12
14
  @writers = writers
13
15
  end
@@ -16,6 +18,7 @@ module Vedeu
16
18
  writers == other.writers
17
19
  end
18
20
 
21
+ # @return [Vedeu::Writer]
19
22
  def +(other)
20
23
  Writer[*(writers + other.writers)]
21
24
  end
@@ -37,12 +37,14 @@ module Vedeu
37
37
 
38
38
  private
39
39
 
40
+ # @return [String]
40
41
  def parent_colour
41
42
  return '' unless parent
42
43
 
43
44
  parent.colour
44
45
  end
45
46
 
47
+ # @return [String]
46
48
  def parent_style
47
49
  return '' unless parent
48
50
 
@@ -1,5 +1,111 @@
1
1
  require 'vedeu/repositories/repository'
2
- require 'vedeu/repositories/menus'
3
2
 
4
3
  module Vedeu
4
+
5
+ # Allows the storing of interface/view borders independent of the interface
6
+ # instance.
7
+ #
8
+ class Borders < Repository
9
+
10
+ # @return [Vedeu::Borders]
11
+ def self.borders
12
+ @_borders ||= Vedeu::Borders.new(Vedeu::Border)
13
+ end
14
+
15
+ end # Borders
16
+
17
+ # Allows the storing of view buffers.
18
+ #
19
+ class Buffers < Repository
20
+
21
+ # @return [Vedeu::Buffers]
22
+ def self.buffers
23
+ @_buffers ||= Vedeu::Buffers.new(Vedeu::Buffer)
24
+ end
25
+
26
+ end # Buffers
27
+
28
+ # Allows the storing of each interface's cursor.
29
+ #
30
+ class Cursors < Repository
31
+
32
+ # @return [Vedeu::Cursors]
33
+ def self.cursors
34
+ @_cursors ||= Vedeu::Cursors.new(Vedeu::Cursor)
35
+ end
36
+
37
+ # @return [Vedeu::Cursor]
38
+ def self.cursor
39
+ cursors.current
40
+ end
41
+
42
+ end # Cursors
43
+
44
+ # Allows the storing of events.
45
+ #
46
+ class Events < Repository
47
+
48
+ # @return [Vedeu::Events]
49
+ def self.events
50
+ @_events ||= Vedeu::Events.new(Vedeu::Model::Collection)
51
+ end
52
+
53
+ end # Events
54
+
55
+ # Allows the storing of interface/view geometry independent of the interface
56
+ # instance.
57
+ #
58
+ class Geometries < Repository
59
+
60
+ # @return [Vedeu::Geometries]
61
+ def self.geometries
62
+ @_geometries ||= Vedeu::Geometries.new(Vedeu::Geometry)
63
+ end
64
+
65
+ end # Geometries
66
+
67
+ # Allows the storing of view groups.
68
+ #
69
+ class Groups < Repository
70
+
71
+ # @return [Vedeu::Groups]
72
+ def self.groups
73
+ @_groups ||= Vedeu::Groups.new(Vedeu::Group)
74
+ end
75
+
76
+ end # Groups
77
+
78
+ # Allows the storing of interfaces and views.
79
+ #
80
+ class InterfacesRepository < Repository
81
+
82
+ # @return [Vedeu::InterfacesRepository]
83
+ def self.interfaces
84
+ @_interfaces ||= Vedeu::InterfacesRepository.new(Vedeu::Interface)
85
+ end
86
+
87
+ end # InterfacesRepository
88
+
89
+ # Allows the storing of keymaps.
90
+ #
91
+ class Keymaps < Repository
92
+
93
+ # @return [Vedeu::Keymaps]
94
+ def self.keymaps
95
+ @_keymaps ||= Vedeu::Keymaps.new(Vedeu::Keymap)
96
+ end
97
+
98
+ end # Keymaps
99
+
100
+ # Allows the storing of menus by name.
101
+ #
102
+ class Menus < Repository
103
+
104
+ # @return [Vedeu::Menus]
105
+ def self.menus
106
+ @_menus ||= Vedeu::Menus.new(Vedeu::Menu)
107
+ end
108
+
109
+ end # Menus
110
+
5
111
  end # Vedeu
@@ -19,6 +19,9 @@ module Vedeu
19
19
 
20
20
  attr_reader :model, :storage
21
21
 
22
+ # @param model [Class]
23
+ # @param storage [Class|Hash]
24
+ # @return [Vedeu::Repository]
22
25
  def initialize(model = nil, storage = {})
23
26
  @model = model
24
27
  @storage = storage
@@ -45,6 +48,7 @@ module Vedeu
45
48
  find_or_create(Vedeu.focus) if Vedeu.focus
46
49
  end
47
50
 
51
+ # @return [Enumerator]
48
52
  def each(&block)
49
53
  storage.each(&block)
50
54
  end
@@ -9,7 +9,7 @@ module Vedeu
9
9
  #
10
10
  # @param height [Fixnum]
11
11
  # @param width [Fixnum]
12
- # @return [ConsoleGeometry]
12
+ # @return [Vedeu::BoundingArea]
13
13
  def initialize(height, width)
14
14
  @height = height
15
15
  @width = width
@@ -60,25 +60,43 @@ module Vedeu
60
60
 
61
61
  attr_reader :interface
62
62
 
63
+ # Validate the x and y coordinates are within the dimensions of the
64
+ # terminal.
65
+ #
66
+ # @return [PositionValidator]
63
67
  def terminal_validation
64
68
  @x = tx if x < tx
65
69
  @x = txn if x > txn
66
70
  @y = ty if y < ty
67
71
  @y = tyn if y > tyn
72
+
73
+ self
68
74
  end
69
75
 
76
+ # Validate the x and y coordinates are within the dimensions of the
77
+ # interface.
78
+ #
79
+ # @return [PositionValidator]
70
80
  def interface_validation
71
81
  @x = left if x < left
72
82
  @x = right if x > right
73
83
  @y = top if y < top
74
84
  @y = bottom if y > bottom
85
+
86
+ self
75
87
  end
76
88
 
89
+ # Validate the x and y coordinates are within the dimensions of an interface
90
+ # with a border.
91
+ #
92
+ # @return [PositionValidator]
77
93
  def border_validation
78
94
  @x = left + 1 if left? && x < (left + 1)
79
95
  @x = right - 2 if right? && x > (right - 1)
80
96
  @y = top + 1 if top? && y < (top + 1)
81
97
  @y = bottom - 2 if bottom? && y > (bottom - 1)
98
+
99
+ self
82
100
  end
83
101
 
84
102
  # def x
@@ -33,14 +33,14 @@ module Vedeu
33
33
 
34
34
  describe '#add' do
35
35
  let(:back) {
36
- Vedeu::Interface.build do
36
+ Vedeu.interface 'buffer' do
37
37
  lines do
38
38
  line 'old_back'
39
39
  end
40
40
  end
41
41
  }
42
42
  let(:content) {
43
- Vedeu::Interface.build do
43
+ Vedeu.interface 'buffer' do
44
44
  lines do
45
45
  line 'new_back'
46
46
  end
@@ -67,7 +67,7 @@ module Vedeu
67
67
 
68
68
  context 'when there is content on the back buffer' do
69
69
  let(:back) {
70
- Vedeu::Interface.build do
70
+ Vedeu.interface 'buffer' do
71
71
  lines do
72
72
  line 'old_back'
73
73
  end
@@ -94,7 +94,7 @@ module Vedeu
94
94
  context 'when there is content on the front buffer' do
95
95
  let(:buffer) { :front }
96
96
  let(:front) {
97
- Vedeu::Interface.build do
97
+ Vedeu.interface 'buffer' do
98
98
  lines do
99
99
  line 'front'
100
100
  end
@@ -120,7 +120,7 @@ module Vedeu
120
120
  context 'when there is content on the previous buffer' do
121
121
  let(:buffer) { :previous }
122
122
  let(:previous) {
123
- Vedeu::Interface.build do
123
+ Vedeu.interface 'buffer' do
124
124
  lines do
125
125
  line 'old_back'
126
126
  end
@@ -149,21 +149,21 @@ module Vedeu
149
149
 
150
150
  context 'when there is new content on the back buffer' do
151
151
  let(:back) {
152
- Vedeu::Interface.build do
152
+ Vedeu.interface 'buffer' do
153
153
  lines do
154
154
  line 'back'
155
155
  end
156
156
  end
157
157
  }
158
158
  let(:front) {
159
- Vedeu::Interface.build do
159
+ Vedeu.interface 'buffer' do
160
160
  lines do
161
161
  line 'front'
162
162
  end
163
163
  end
164
164
  }
165
165
  let(:previous) {
166
- Vedeu::Interface.build do
166
+ Vedeu.interface 'buffer' do
167
167
  lines do
168
168
  line 'previous'
169
169
  end
@@ -13,16 +13,14 @@ module Vedeu
13
13
  let(:y) { 1 }
14
14
 
15
15
  let(:interface) {
16
- Vedeu::Interface.build do
17
- name 'magnesium'
16
+ Vedeu.interface 'magnesium' do
18
17
  geometry do
19
18
 
20
19
  end
21
20
  end
22
21
  }
23
22
  let(:interface_with_border) {
24
- Vedeu::Interface.build do
25
- name 'manganese'
23
+ Vedeu.interface 'manganese' do
26
24
  border do
27
25
  # ...
28
26
  end
@@ -35,8 +33,7 @@ module Vedeu
35
33
  end
36
34
  }
37
35
  let(:interface_without_border) {
38
- Vedeu::Interface.build do
39
- name 'meitnerium'
36
+ Vedeu.interface 'meitnerium' do
40
37
  geometry do
41
38
  height 5
42
39
  width 5
@@ -7,14 +7,15 @@ module Vedeu
7
7
  describe Border do
8
8
 
9
9
  let(:described) { Vedeu::DSL::Border }
10
- let(:instance) { described.new(model) }
11
- let(:model) { Vedeu::Border.new(interface, attributes) }
10
+ let(:instance) { described.new(model, client) }
11
+ let(:model) { Vedeu::Border.new(attributes) }
12
12
  let(:client) {}
13
- let(:interface) { mock('Interface') }
14
- let(:attributes) { {} }
13
+ let(:attributes) { { name: 'borders' } }
15
14
  let(:boolean) { true }
16
15
 
17
16
  before do
17
+ Vedeu.borders.reset
18
+ Vedeu.buffers.reset
18
19
  Vedeu.interfaces.reset
19
20
  Vedeu.interface 'borders' do
20
21
  geometry do
@@ -182,6 +183,18 @@ module Vedeu
182
183
  end
183
184
  end
184
185
 
186
+ describe '#hide_bottom!' do
187
+ subject { instance.hide_bottom! }
188
+
189
+ it { subject.must_be_instance_of(FalseClass) }
190
+ end
191
+
192
+ describe '#show_bottom!' do
193
+ subject { instance.show_bottom! }
194
+
195
+ it { subject.must_be_instance_of(TrueClass) }
196
+ end
197
+
185
198
  describe '#show_left' do
186
199
  subject { instance.show_left(boolean) }
187
200
 
@@ -221,6 +234,18 @@ module Vedeu
221
234
  end
222
235
  end
223
236
 
237
+ describe '#hide_left!' do
238
+ subject { instance.hide_left! }
239
+
240
+ it { subject.must_be_instance_of(FalseClass) }
241
+ end
242
+
243
+ describe '#show_left!' do
244
+ subject { instance.show_left! }
245
+
246
+ it { subject.must_be_instance_of(TrueClass) }
247
+ end
248
+
224
249
  describe '#show_right' do
225
250
  subject { instance.show_right(boolean) }
226
251
 
@@ -260,6 +285,18 @@ module Vedeu
260
285
  end
261
286
  end
262
287
 
288
+ describe '#hide_right!' do
289
+ subject { instance.hide_right! }
290
+
291
+ it { subject.must_be_instance_of(FalseClass) }
292
+ end
293
+
294
+ describe '#show_right!' do
295
+ subject { instance.show_right! }
296
+
297
+ it { subject.must_be_instance_of(TrueClass) }
298
+ end
299
+
263
300
  describe '#show_top' do
264
301
  subject { instance.show_top(boolean) }
265
302
 
@@ -299,6 +336,18 @@ module Vedeu
299
336
  end
300
337
  end
301
338
 
339
+ describe '#hide_top!' do
340
+ subject { instance.hide_top! }
341
+
342
+ it { subject.must_be_instance_of(FalseClass) }
343
+ end
344
+
345
+ describe '#show_top!' do
346
+ subject { instance.show_top! }
347
+
348
+ it { subject.must_be_instance_of(TrueClass) }
349
+ end
350
+
302
351
  describe '#top_left' do
303
352
  let(:char) { 'A' }
304
353