vedeu 0.4.26 → 0.4.27

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/examples/material_colours_app.rb +5 -3
  3. data/examples/panel_app.rb +61 -0
  4. data/lib/vedeu/bindings.rb +10 -0
  5. data/lib/vedeu/cursor/cursor.rb +6 -0
  6. data/lib/vedeu/cursor/move.rb +20 -14
  7. data/lib/vedeu/dsl/interface.rb +56 -0
  8. data/lib/vedeu/models/escape_char.rb +7 -7
  9. data/lib/vedeu/models/interface.rb +14 -17
  10. data/lib/vedeu/models/panel.rb +17 -0
  11. data/lib/vedeu/models/stream.rb +1 -1
  12. data/lib/vedeu/output/border.rb +17 -37
  13. data/lib/vedeu/output/esc.rb +17 -16
  14. data/lib/vedeu/output/html_char.rb +18 -15
  15. data/lib/vedeu/output/refresh.rb +8 -2
  16. data/lib/vedeu/output/viewport.rb +3 -1
  17. data/lib/vedeu/repositories/repositories/cursors.rb +1 -1
  18. data/lib/vedeu/repositories/repositories/interfaces_repository.rb +8 -0
  19. data/lib/vedeu/repositories/repository.rb +9 -0
  20. data/lib/vedeu/storage/store.rb +1 -0
  21. data/lib/vedeu/support/terminal.rb +7 -0
  22. data/lib/vedeu/support/visibility.rb +15 -4
  23. data/test/lib/vedeu/buffers/buffer_test.rb +1 -0
  24. data/test/lib/vedeu/dsl/components/border_test.rb +1 -0
  25. data/test/lib/vedeu/dsl/interface_test.rb +35 -5
  26. data/test/lib/vedeu/models/escape_char_test.rb +7 -2
  27. data/test/lib/vedeu/models/focus_test.rb +6 -11
  28. data/test/lib/vedeu/models/interface_test.rb +12 -9
  29. data/test/lib/vedeu/output/border_test.rb +3 -0
  30. data/test/lib/vedeu/output/esc_test.rb +4 -0
  31. data/test/lib/vedeu/repositories/repositories/interfaces_repositories_test.rb +19 -0
  32. data/test/lib/vedeu/repositories/repository_test.rb +34 -0
  33. data/test/lib/vedeu/storage/store_test.rb +4 -4
  34. data/test/lib/vedeu/support/terminal_test.rb +22 -13
  35. data/test/test_helper.rb +6 -6
  36. data/vedeu.gemspec +4 -4
  37. metadata +10 -8
@@ -77,22 +77,23 @@ module Vedeu
77
77
  # @return [Hash<Symbol => String>]
78
78
  def actions
79
79
  {
80
- hide_cursor: "\e[?25l",
81
- show_cursor: "\e[?25h",
82
- bg_reset: "\e[49m",
83
- blink: "\e[5m",
84
- blink_off: "\e[25m",
85
- bold: "\e[1m",
86
- bold_off: "\e[22m",
87
- border_on: "\e(0",
88
- border_off: "\e(B",
89
- dim: "\e[2m",
90
- fg_reset: "\e[39m",
91
- negative: "\e[7m",
92
- positive: "\e[27m",
93
- reset: "\e[0m",
94
- underline: "\e[4m",
95
- underline_off: "\e[24m",
80
+ hide_cursor: "\e[?25l",
81
+ show_cursor: "\e[?25h",
82
+ cursor_position: "\e[6n",
83
+ bg_reset: "\e[49m",
84
+ blink: "\e[5m",
85
+ blink_off: "\e[25m",
86
+ bold: "\e[1m",
87
+ bold_off: "\e[22m",
88
+ border_on: "\e(0",
89
+ border_off: "\e(B",
90
+ dim: "\e[2m",
91
+ fg_reset: "\e[39m",
92
+ negative: "\e[7m",
93
+ positive: "\e[27m",
94
+ reset: "\e[0m",
95
+ underline: "\e[4m",
96
+ underline_off: "\e[24m",
96
97
  }
97
98
  end
98
99
 
@@ -85,28 +85,31 @@ module Vedeu
85
85
 
86
86
  # @return [String]
87
87
  def colour_bg
88
- if defined_value?(char.background.to_html)
89
- char.background.to_html
90
-
91
- elsif defined_value?(char.parent_background.to_html)
92
- char.parent_background.to_html
93
-
94
- else
95
- '#000'
96
-
97
- end
88
+ colour(char, 'background', '#000')
98
89
  end
99
90
 
100
91
  # @return [String]
101
92
  def colour_fg
102
- if defined_value?(char.foreground.to_html)
103
- char.foreground.to_html
93
+ colour(char, 'foreground', '#222')
94
+ end
95
+
96
+ # @param char []
97
+ # @param type [String]
98
+ # @param default [String]
99
+ # @return [String]
100
+ def colour(char, type, default)
101
+ parent_type = ('parent_' + type).to_sym
102
+ type_to_html = char.send(type).send(:to_html)
103
+ parent_type_to_html = char.send(parent_type).send(:to_html)
104
+
105
+ if defined_value?(type_to_html)
106
+ type_to_html
104
107
 
105
- elsif defined_value?(char.parent_foreground.to_html)
106
- char.parent_foreground.to_html
108
+ elsif defined_value?(parent_type_to_html)
109
+ parent_type_to_html
107
110
 
108
111
  else
109
- '#222'
112
+ default
110
113
 
111
114
  end
112
115
  end
@@ -13,7 +13,7 @@ module Vedeu
13
13
  message = 'Refreshing all interfaces'
14
14
 
15
15
  Vedeu::Timer.for(:info, message) do
16
- Vedeu.interfaces.registered.each { |name| by_name(name) }
16
+ Vedeu.interfaces.zindexed.each { |model| by_name(model.name) }
17
17
  end
18
18
  end
19
19
 
@@ -33,7 +33,13 @@ module Vedeu
33
33
  message = "Refreshing group: '#{group_name}'"
34
34
 
35
35
  Vedeu::Timer.for(:info, message) do
36
- Vedeu.groups.find!(group_name).members.each { |name| by_name(name) }
36
+ Vedeu.groups.find!(group_name).members.each do |name|
37
+ Vedeu.interfaces.by_name(name)
38
+ end.sort do |a, b|
39
+ a.zindex <=> b.zindex
40
+ end.each do |name|
41
+ by_name(name)
42
+ end
37
43
  end
38
44
  end
39
45
 
@@ -54,12 +54,14 @@ module Vedeu
54
54
 
55
55
  Vedeu::Timer.for(:output, "Rendering: #{name}") do
56
56
  out = []
57
+
57
58
  show[0...height].each_with_index do |line, iy|
58
59
  line[0...width].each_with_index do |column, ix|
59
- column.position = [by + iy, bx + ix]
60
+ column.position = Vedeu::Position[by + iy, bx + ix]
60
61
  out << column
61
62
  end
62
63
  end
64
+
63
65
  out
64
66
  end
65
67
  end
@@ -28,7 +28,7 @@ module Vedeu
28
28
  if registered?(name)
29
29
  find(name)
30
30
 
31
- else
31
+ elsif name
32
32
  Vedeu::Cursor.new(name: name).store
33
33
 
34
34
  end
@@ -20,6 +20,14 @@ module Vedeu
20
20
  null Vedeu::Null::Interface
21
21
  # real Vedeu::Interface
22
22
 
23
+ # Returns the interfaces in zindex order.
24
+ #
25
+ # @return [Array<Vedeu::Interface>]
26
+ # @see Vedeu::DSL::Interface#zindex
27
+ def zindexed
28
+ all.sort { |a, b| a.zindex <=> b.zindex }
29
+ end
30
+
23
31
  end # InterfacesRepository
24
32
 
25
33
  end # Vedeu
@@ -39,6 +39,15 @@ module Vedeu
39
39
  self.class
40
40
  end
41
41
 
42
+ # @return [Array<void>] An array containing each stored model.
43
+ def all
44
+ return [] if empty?
45
+ return storage.values if storage.is_a?(Hash)
46
+ return storage.to_a if storage.is_a?(Set)
47
+
48
+ storage
49
+ end
50
+
42
51
  # @param name [String] The name of the stored model.
43
52
  # @return [void]
44
53
  def by_name(name)
@@ -36,6 +36,7 @@ module Vedeu
36
36
  def reset
37
37
  @storage = in_memory
38
38
  end
39
+ alias_method :reset!, :reset
39
40
 
40
41
  # Return the number of entries stored.
41
42
  #
@@ -175,6 +175,13 @@ module Vedeu
175
175
  @mode ||= Vedeu::Configuration.terminal_mode
176
176
  end
177
177
 
178
+ # Returns the position of the cursor.
179
+ #
180
+ # @return [Vedeu::Position]
181
+ def cursor
182
+ # Vedeu.trigger(:_cursor_position_)
183
+ end
184
+
178
185
  # Returns a coordinate tuple of the format [y, x], where `y` is the row/line
179
186
  # and `x` is the column/character.
180
187
  #
@@ -37,8 +37,13 @@ module Vedeu
37
37
 
38
38
  # @return [void]
39
39
  def show
40
- model.visible = true
41
- model.store
40
+ if model.visible?
41
+ model
42
+
43
+ else
44
+ model.visible = true
45
+ model.store
46
+ end
42
47
  end
43
48
 
44
49
  # @return [Symbol]
@@ -54,8 +59,14 @@ module Vedeu
54
59
 
55
60
  # @return [void]
56
61
  def hide
57
- model.visible = false
58
- model.store
62
+ if model.visible?
63
+ model.visible = false
64
+ model.store
65
+
66
+ else
67
+ model
68
+
69
+ end
59
70
  end
60
71
 
61
72
  # @return [void]
@@ -24,6 +24,7 @@ module Vedeu
24
24
  Vedeu.stubs(:trigger)
25
25
  # Vedeu.interfaces.stubs(:by_name).returns(interface)
26
26
  end
27
+ after { Vedeu.interfaces.reset }
27
28
 
28
29
  describe '#initialize' do
29
30
  it { instance.must_be_instance_of(described) }
@@ -27,6 +27,7 @@ module Vedeu
27
27
  end
28
28
  end
29
29
  end
30
+ after { Vedeu.interfaces.reset }
30
31
 
31
32
  describe 'alias methods' do
32
33
  it { instance.must_respond_to(:show_bottom) }
@@ -16,11 +16,7 @@ module Vedeu
16
16
  let(:client) {}
17
17
 
18
18
  before { Vedeu.interfaces.reset }
19
-
20
- describe 'alias methods' do
21
- it { instance.must_respond_to(:keys) }
22
- it { instance.must_respond_to(:line) }
23
- end
19
+ after { Vedeu.interfaces.reset }
24
20
 
25
21
  describe '#initialize' do
26
22
  it { instance.must_be_instance_of(described) }
@@ -68,6 +64,13 @@ module Vedeu
68
64
  it { subject.must_be_instance_of(Vedeu::Border) }
69
65
  end
70
66
 
67
+ describe '#button' do
68
+ let(:label) { 'No' }
69
+ let(:_value) { false }
70
+
71
+ subject { instance.button(label, _value) }
72
+ end
73
+
71
74
  describe '#cursor' do
72
75
  let(:_value) {}
73
76
 
@@ -244,6 +247,7 @@ module Vedeu
244
247
  }
245
248
 
246
249
  it { subject.must_be_instance_of(Vedeu::Keymap) }
250
+ it { instance.must_respond_to(:keys) }
247
251
  end
248
252
 
249
253
  describe '#lines' do
@@ -260,6 +264,8 @@ module Vedeu
260
264
 
261
265
  it { proc { subject }.must_raise(InvalidSyntax) }
262
266
  end
267
+
268
+ it { instance.must_respond_to(:line) }
263
269
  end
264
270
 
265
271
  describe '#name' do
@@ -268,7 +274,18 @@ module Vedeu
268
274
  it { subject; model.name.must_equal('nickel') }
269
275
  end
270
276
 
277
+ describe '#no_cursor!' do
278
+ subject { instance.no_cursor! }
279
+
280
+ it {
281
+ subject
282
+ Vedeu.cursors.find('actinium').visible?.must_equal(false)
283
+ }
284
+ end
285
+
271
286
  describe '#show!' do
287
+ after { Vedeu.interfaces.reset }
288
+
272
289
  subject {
273
290
  Vedeu.interface 'xenon' do
274
291
  show!
@@ -279,6 +296,8 @@ module Vedeu
279
296
  end
280
297
 
281
298
  describe '#hide!' do
299
+ after { Vedeu.interfaces.reset }
300
+
282
301
  subject {
283
302
  Vedeu.interface 'xenon' do
284
303
  hide!
@@ -295,6 +314,17 @@ module Vedeu
295
314
  it { instance.visible(:show).must_equal(true) }
296
315
  end
297
316
 
317
+ describe '#zindex' do
318
+ let(:_value) { 1 }
319
+
320
+ subject { instance.zindex(_value) }
321
+
322
+ it { subject.must_equal(1) }
323
+
324
+ it { instance.must_respond_to(:z_index) }
325
+ it { instance.must_respond_to(:z) }
326
+ end
327
+
298
328
  end # Interface
299
329
 
300
330
  end # DSL
@@ -29,6 +29,8 @@ module Vedeu
29
29
 
30
30
  it { subject.must_equal(false) }
31
31
  end
32
+
33
+ it { instance.must_respond_to(:==) }
32
34
  end
33
35
 
34
36
  describe '#inspect' do
@@ -47,8 +49,11 @@ module Vedeu
47
49
  it { instance.style.must_equal('') }
48
50
  end
49
51
 
50
- describe '#to_s' do
51
- it { instance.to_s.must_be_instance_of(String) }
52
+ describe '#value' do
53
+ it { instance.value.must_be_instance_of(String) }
54
+
55
+ it { instance.must_respond_to(:to_s) }
56
+ it { instance.must_respond_to(:to_str) }
52
57
  end
53
58
 
54
59
  end # EscapeChar
@@ -13,14 +13,15 @@ module Vedeu
13
13
  Vedeu.interface('lead') {}
14
14
  Vedeu.interface('bismuth') {}
15
15
  end
16
+ after { Vedeu.interfaces.reset }
16
17
 
17
18
  describe '#add' do
18
- context 'adds an interface to storage' do
19
- before do
20
- Focus.reset
21
- Vedeu.interfaces.reset
22
- end
19
+ before do
20
+ Focus.reset
21
+ Vedeu.interfaces.reset
22
+ end
23
23
 
24
+ context 'adds an interface to storage' do
24
25
  it {
25
26
  Focus.add('thallium').must_equal(['thallium'])
26
27
  }
@@ -28,8 +29,6 @@ module Vedeu
28
29
 
29
30
  context 'does not add it again if already exists' do
30
31
  before do
31
- Focus.reset
32
- Vedeu.interfaces.reset
33
32
  Vedeu.interface('thallium') {}
34
33
  end
35
34
 
@@ -49,8 +48,6 @@ module Vedeu
49
48
 
50
49
  context 'adds the interface to storage focussed' do
51
50
  before do
52
- Focus.reset
53
- Vedeu.interfaces.reset
54
51
  Vedeu.interface('thallium') {}
55
52
  end
56
53
 
@@ -63,8 +60,6 @@ module Vedeu
63
60
 
64
61
  context 'adds the interface to storage unfocussed' do
65
62
  before do
66
- Focus.reset
67
- Vedeu.interfaces.reset
68
63
  Vedeu.interface('thallium') {}
69
64
  end
70
65
 
@@ -8,15 +8,16 @@ module Vedeu
8
8
  let(:instance) { described.new(attributes) }
9
9
  let(:attributes) {
10
10
  {
11
- client: client,
12
- colour: colour,
13
- delay: delay,
14
- group: group,
15
- lines: lines,
16
- name: _name,
17
- parent: parent,
18
- style: style,
11
+ client: client,
12
+ colour: colour,
13
+ delay: delay,
14
+ group: group,
15
+ lines: lines,
16
+ name: _name,
17
+ parent: parent,
18
+ style: style,
19
19
  visible: visible,
20
+ zindex: zindex,
20
21
  }
21
22
  }
22
23
  let(:client) {}
@@ -29,6 +30,7 @@ module Vedeu
29
30
  let(:repository) { Vedeu.interfaces }
30
31
  let(:style) {}
31
32
  let(:visible) { true }
33
+ let(:zindex) { 1 }
32
34
 
33
35
  describe '#initialize' do
34
36
  subject { instance }
@@ -42,6 +44,7 @@ module Vedeu
42
44
  it { subject.instance_variable_get('@parent').must_equal(parent) }
43
45
  it { subject.instance_variable_get('@repository').must_equal(repository) }
44
46
  it { subject.instance_variable_get('@visible').must_equal(visible) }
47
+ it { subject.instance_variable_get('@zindex').must_equal(zindex) }
45
48
  end
46
49
 
47
50
  describe '#lines?' do
@@ -91,7 +94,7 @@ module Vedeu
91
94
  it { subject.must_be_instance_of(Array) }
92
95
 
93
96
  context 'when the interface is visible' do
94
- it { subject.must_equal(['', :clear, :border, :view, '']) }
97
+ it { subject.must_equal([:clear, :border, :view]) }
95
98
  end
96
99
 
97
100
  context 'when the interface is not visible' do