vedeu 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vedeu/api.rb +3 -1
- data/lib/vedeu/application.rb +1 -1
- data/lib/vedeu/bindings.rb +68 -101
- data/lib/vedeu/cursor/cursor.rb +1 -1
- data/lib/vedeu/cursor/move_cursor.rb +77 -1
- data/lib/vedeu/cursor/toggle_cursor.rb +2 -0
- data/lib/vedeu/distributed/all.rb +7 -0
- data/lib/vedeu/distributed/client.rb +23 -11
- data/lib/vedeu/distributed/server.rb +8 -0
- data/lib/vedeu/distributed/subprocess.rb +0 -24
- data/lib/vedeu/distributed/uri.rb +1 -8
- data/lib/vedeu/dsl/all.rb +3 -0
- data/lib/vedeu/dsl/components/all.rb +4 -4
- data/lib/vedeu/dsl/components/geometry.rb +2 -0
- data/lib/vedeu/dsl/components/keymap.rb +14 -3
- data/lib/vedeu/dsl/group.rb +69 -0
- data/lib/vedeu/dsl/interface.rb +9 -8
- data/lib/vedeu/dsl/shared/text.rb +3 -1
- data/lib/vedeu/events/event.rb +2 -2
- data/lib/vedeu/input/keymap.rb +1 -1
- data/lib/vedeu/models/geometry.rb +1 -1
- data/lib/vedeu/models/group.rb +24 -10
- data/lib/vedeu/models/view/lines.rb +1 -0
- data/lib/vedeu/output/all.rb +6 -1
- data/lib/vedeu/output/border.rb +1 -1
- data/lib/vedeu/{support → output}/esc.rb +0 -0
- data/lib/vedeu/output/foreground.rb +1 -1
- data/lib/vedeu/output/html_char.rb +2 -0
- data/lib/vedeu/output/html_renderer.rb +6 -0
- data/lib/vedeu/output/output.rb +21 -0
- data/lib/vedeu/{support → output}/refresh.rb +1 -1
- data/lib/vedeu/output/renderer.rb +3 -0
- data/lib/vedeu/{support → output}/text.rb +0 -0
- data/lib/vedeu/output/virtual_terminal.rb +2 -0
- data/lib/vedeu/support/all.rb +0 -7
- data/lib/vedeu/support/coercions.rb +7 -4
- data/lib/vedeu/support/terminal.rb +1 -1
- data/lib/vedeu/support/trace.rb +1 -1
- data/lib/vedeu/support/visible.rb +1 -1
- data/test/lib/vedeu/cursor/move_cursor_test.rb +60 -1
- data/test/lib/vedeu/distributed/client_test.rb +21 -2
- data/test/lib/vedeu/dsl/group_test.rb +52 -0
- data/test/lib/vedeu/models/group_test.rb +11 -4
- data/test/lib/vedeu/{support → output}/esc_test.rb +0 -0
- data/test/lib/vedeu/{support → output}/refresh_test.rb +0 -0
- data/test/lib/vedeu/{support → output}/text_test.rb +0 -0
- data/test/test_helper.rb +2 -0
- data/vedeu.gemspec +2 -1
- metadata +28 -24
- data/lib/vedeu/output/writer.rb +0 -44
- data/lib/vedeu/support/console.rb +0 -90
- data/lib/vedeu/support/node.rb +0 -51
- data/lib/vedeu/support/read.rb +0 -66
- data/lib/vedeu/support/write.rb +0 -86
- data/test/lib/vedeu/output/writer_test.rb +0 -32
- data/test/lib/vedeu/support/console_test.rb +0 -138
- data/test/lib/vedeu/support/read_test.rb +0 -86
- data/test/lib/vedeu/support/write_test.rb +0 -158
data/lib/vedeu/support/write.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# The basis of a fake output device.
|
4
|
-
#
|
5
|
-
class Write
|
6
|
-
|
7
|
-
# @see Vedeu::Write#write
|
8
|
-
def self.to(console, data = nil)
|
9
|
-
new(console, data).write
|
10
|
-
end
|
11
|
-
|
12
|
-
# @return [Vedeu::Write]
|
13
|
-
def initialize(console, data = nil)
|
14
|
-
@console = console
|
15
|
-
@data = data
|
16
|
-
end
|
17
|
-
|
18
|
-
# Provides IO.console emulation of #print.
|
19
|
-
#
|
20
|
-
# @return [Array]
|
21
|
-
def print(string = nil)
|
22
|
-
@data = string unless string.nil?
|
23
|
-
|
24
|
-
write
|
25
|
-
end
|
26
|
-
|
27
|
-
# @return [Array<Array>|Array<String>]
|
28
|
-
def write
|
29
|
-
streams
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
attr_reader :console, :data
|
35
|
-
|
36
|
-
# @return [Array<Char>|Array<String>]
|
37
|
-
def streams
|
38
|
-
lines.map do |line|
|
39
|
-
if line.size > visible_columns
|
40
|
-
line[0, visible_columns]
|
41
|
-
|
42
|
-
else
|
43
|
-
line
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# @return [Array<Array>|Array<String>]
|
50
|
-
def lines
|
51
|
-
if content.size > visible_lines
|
52
|
-
content[0, visible_lines]
|
53
|
-
|
54
|
-
else
|
55
|
-
content
|
56
|
-
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# @return [Array|Array<String>|Array<Array>]
|
61
|
-
def content
|
62
|
-
if data.nil? || data.empty?
|
63
|
-
[]
|
64
|
-
|
65
|
-
elsif data.is_a?(String)
|
66
|
-
data.split(/\n/)
|
67
|
-
|
68
|
-
else
|
69
|
-
data
|
70
|
-
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
# @return [Fixnum]
|
75
|
-
def visible_columns
|
76
|
-
console.width #- 1
|
77
|
-
end
|
78
|
-
|
79
|
-
# @return [Fixnum]
|
80
|
-
def visible_lines
|
81
|
-
console.height #- 1
|
82
|
-
end
|
83
|
-
|
84
|
-
end # Write
|
85
|
-
|
86
|
-
end # Vedeu
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
|
5
|
-
describe Writer do
|
6
|
-
|
7
|
-
describe '.[]' do
|
8
|
-
it 'returns a new instance of Writer' do
|
9
|
-
Writer[:null, :file, :screen].must_be_instance_of(Writer)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe '#initialize' do
|
14
|
-
it 'returns an instance of itself' do
|
15
|
-
writers = :null
|
16
|
-
|
17
|
-
Writer.new(writers).must_be_instance_of(Writer)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe '#==' do
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '#+' do
|
25
|
-
end
|
26
|
-
|
27
|
-
describe '.write' do
|
28
|
-
end
|
29
|
-
|
30
|
-
end # Writer
|
31
|
-
|
32
|
-
end # Vedeu
|
@@ -1,138 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
|
5
|
-
describe Console do
|
6
|
-
|
7
|
-
let(:described) { Vedeu::Console }
|
8
|
-
let(:instance) { described.new(height, width) }
|
9
|
-
let(:height) { 24 }
|
10
|
-
let(:width) { 32 }
|
11
|
-
|
12
|
-
describe 'alias methods' do
|
13
|
-
it { instance.must_respond_to(:tyn) }
|
14
|
-
it { instance.must_respond_to(:yn) }
|
15
|
-
it { instance.must_respond_to(:x) }
|
16
|
-
it { instance.must_respond_to(:y) }
|
17
|
-
it { instance.must_respond_to(:tx) }
|
18
|
-
it { instance.must_respond_to(:ty) }
|
19
|
-
it { instance.must_respond_to(:txn) }
|
20
|
-
it { instance.must_respond_to(:xn) }
|
21
|
-
it { instance.must_respond_to(:read) }
|
22
|
-
it { instance.must_respond_to(:write) }
|
23
|
-
it { instance.must_respond_to(:winsize) }
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '#initialize' do
|
27
|
-
it { instance.must_be_instance_of(described) }
|
28
|
-
it { instance.instance_variable_get('@height').must_equal(height) }
|
29
|
-
it { instance.instance_variable_get('@width').must_equal(width) }
|
30
|
-
|
31
|
-
context 'when the height is not given' do
|
32
|
-
let(:height) {}
|
33
|
-
|
34
|
-
it { instance.instance_variable_get('@height').must_equal(25) }
|
35
|
-
end
|
36
|
-
|
37
|
-
context 'when the width is not given' do
|
38
|
-
let(:width) {}
|
39
|
-
|
40
|
-
it { instance.instance_variable_get('@width').must_equal(80) }
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe '#input' do
|
45
|
-
let(:data) {}
|
46
|
-
|
47
|
-
subject { instance.input(data) }
|
48
|
-
|
49
|
-
it { subject.must_be_instance_of(String) }
|
50
|
-
end
|
51
|
-
|
52
|
-
describe '#output' do
|
53
|
-
let(:data) {}
|
54
|
-
|
55
|
-
subject { instance.output(data) }
|
56
|
-
|
57
|
-
it { subject.must_be_instance_of(Array) }
|
58
|
-
end
|
59
|
-
|
60
|
-
describe '#centre' do
|
61
|
-
subject { instance.centre }
|
62
|
-
|
63
|
-
it { subject.must_be_instance_of(Array) }
|
64
|
-
it { subject.must_equal([12, 16]) }
|
65
|
-
end
|
66
|
-
|
67
|
-
describe '#centre_y' do
|
68
|
-
subject { instance.centre_y }
|
69
|
-
|
70
|
-
it { subject.must_be_instance_of(Fixnum) }
|
71
|
-
it { subject.must_equal(12) }
|
72
|
-
end
|
73
|
-
|
74
|
-
describe '#centre_x' do
|
75
|
-
subject { instance.centre_x }
|
76
|
-
|
77
|
-
it { subject.must_be_instance_of(Fixnum) }
|
78
|
-
it { subject.must_equal(16) }
|
79
|
-
end
|
80
|
-
|
81
|
-
describe '#cooked' do
|
82
|
-
subject { instance.cooked }
|
83
|
-
|
84
|
-
context 'when the block is not given' do
|
85
|
-
it { proc { subject }.must_raise(LocalJumpError) }
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
describe '#height' do
|
90
|
-
subject { instance.height }
|
91
|
-
|
92
|
-
it { subject.must_be_instance_of(Fixnum) }
|
93
|
-
|
94
|
-
it { instance.must_respond_to(:tyn) }
|
95
|
-
it { instance.must_respond_to(:yn) }
|
96
|
-
end
|
97
|
-
|
98
|
-
describe '#origin' do
|
99
|
-
subject { instance.origin }
|
100
|
-
|
101
|
-
it { subject.must_be_instance_of(Fixnum) }
|
102
|
-
it { subject.must_equal(1) }
|
103
|
-
|
104
|
-
it { instance.must_respond_to(:x) }
|
105
|
-
it { instance.must_respond_to(:y) }
|
106
|
-
it { instance.must_respond_to(:tx) }
|
107
|
-
it { instance.must_respond_to(:ty) }
|
108
|
-
end
|
109
|
-
|
110
|
-
describe '#raw' do
|
111
|
-
subject { instance.raw }
|
112
|
-
|
113
|
-
context 'when the block is not given' do
|
114
|
-
it { proc { subject }.must_raise(LocalJumpError) }
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
describe '#size' do
|
119
|
-
subject { instance.size }
|
120
|
-
|
121
|
-
it { subject.must_be_instance_of(Array) }
|
122
|
-
it { subject.must_equal([24, 32]) }
|
123
|
-
|
124
|
-
it { instance.must_respond_to(:winsize) }
|
125
|
-
end
|
126
|
-
|
127
|
-
describe '#width' do
|
128
|
-
subject { instance.width }
|
129
|
-
|
130
|
-
it { subject.must_be_instance_of(Fixnum) }
|
131
|
-
|
132
|
-
it { instance.must_respond_to(:txn) }
|
133
|
-
it { instance.must_respond_to(:xn) }
|
134
|
-
end
|
135
|
-
|
136
|
-
end # Console
|
137
|
-
|
138
|
-
end # Vedeu
|
@@ -1,86 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
|
5
|
-
describe Read do
|
6
|
-
|
7
|
-
let(:described) { Vedeu::Read }
|
8
|
-
let(:instance) { described.new(console, data) }
|
9
|
-
let(:console) { Vedeu::Console.new(height, width) }
|
10
|
-
let(:data) {}
|
11
|
-
let(:height) { 4 }
|
12
|
-
let(:width) { 30 }
|
13
|
-
|
14
|
-
describe '#initialize' do
|
15
|
-
it { instance.must_be_instance_of(described) }
|
16
|
-
it { instance.instance_variable_get('@console').must_equal(console) }
|
17
|
-
it { instance.instance_variable_get('@data').must_equal(data) }
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '.from' do
|
21
|
-
subject { described.from(console, data) }
|
22
|
-
|
23
|
-
it { subject.must_be_instance_of(String) }
|
24
|
-
|
25
|
-
context 'when no data is given' do
|
26
|
-
it { subject.must_equal('') }
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'when data is given' do
|
30
|
-
let(:data) { 'a' }
|
31
|
-
|
32
|
-
it { subject.must_equal('a') }
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe '#getch' do
|
37
|
-
let(:string) {}
|
38
|
-
|
39
|
-
subject { instance.getch(string) }
|
40
|
-
|
41
|
-
it { subject.must_be_instance_of(String) }
|
42
|
-
|
43
|
-
context 'when no string is given' do
|
44
|
-
it { subject.must_equal('') }
|
45
|
-
end
|
46
|
-
|
47
|
-
context 'when a multi-character string is given' do
|
48
|
-
let(:string) { 'Some text...' }
|
49
|
-
|
50
|
-
it { subject.must_equal('S') }
|
51
|
-
end
|
52
|
-
|
53
|
-
context 'when a single character string is given' do
|
54
|
-
let(:string) { 'a' }
|
55
|
-
|
56
|
-
it { subject.must_equal('a') }
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe '#gets' do
|
61
|
-
let(:string) {}
|
62
|
-
|
63
|
-
subject { instance.gets(string) }
|
64
|
-
|
65
|
-
it { subject.must_be_instance_of(String) }
|
66
|
-
|
67
|
-
context 'when no string is given' do
|
68
|
-
it { subject.must_equal('') }
|
69
|
-
end
|
70
|
-
|
71
|
-
context 'when a string with line feed is given' do
|
72
|
-
let(:string) { "Some text...\n" }
|
73
|
-
|
74
|
-
it { subject.must_equal('Some text...') }
|
75
|
-
end
|
76
|
-
|
77
|
-
context 'when a string without line feed is given' do
|
78
|
-
let(:string) { 'Some text...' }
|
79
|
-
|
80
|
-
it { subject.must_equal('Some text...') }
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
end # Read
|
85
|
-
|
86
|
-
end # Vedeu
|
@@ -1,158 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
|
5
|
-
describe Write do
|
6
|
-
|
7
|
-
let(:described) { Vedeu::Write }
|
8
|
-
let(:instance) { described.new(console, data) }
|
9
|
-
let(:console) { Vedeu::Console.new(height, width) }
|
10
|
-
let(:data) {}
|
11
|
-
let(:height) { 3 }
|
12
|
-
let(:width) { 40 }
|
13
|
-
|
14
|
-
describe '#initialize' do
|
15
|
-
it { instance.must_be_instance_of(described) }
|
16
|
-
it { instance.instance_variable_get('@console').must_equal(console) }
|
17
|
-
it { instance.instance_variable_get('@data').must_equal(data) }
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '.to' do
|
21
|
-
subject { described.to(console, data) }
|
22
|
-
|
23
|
-
it { subject.must_be_instance_of(Array) }
|
24
|
-
|
25
|
-
context 'when the data is larger than the visible area' do
|
26
|
-
context 'when the data is a String' do
|
27
|
-
let(:data) {
|
28
|
-
"Zinc, in commerce also spelter, is a chemical\n" \
|
29
|
-
"element with symbol Zn and atomic number 30.\n" \
|
30
|
-
"It is the first element of group 12 of the\n" \
|
31
|
-
"periodic table."
|
32
|
-
}
|
33
|
-
|
34
|
-
it { subject.must_equal(
|
35
|
-
[
|
36
|
-
"Zinc, in commerce also spelter, is a che",
|
37
|
-
"element with symbol Zn and atomic number",
|
38
|
-
"It is the first element of group 12 of t"
|
39
|
-
])
|
40
|
-
}
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'when the data is an Array' do
|
44
|
-
# Zinc...
|
45
|
-
# -.Zn.12
|
46
|
-
# Spelter
|
47
|
-
# ..Metal
|
48
|
-
let(:data) {
|
49
|
-
[
|
50
|
-
[
|
51
|
-
Vedeu::Char.new({ value: 'Z' }),
|
52
|
-
Vedeu::Char.new({ value: 'i' }),
|
53
|
-
Vedeu::Char.new({ value: 'n' }),
|
54
|
-
Vedeu::Char.new({ value: 'c' }),
|
55
|
-
Vedeu::Char.new({ value: '.' }),
|
56
|
-
Vedeu::Char.new({ value: '.' }),
|
57
|
-
Vedeu::Char.new({ value: '.' })
|
58
|
-
],[
|
59
|
-
Vedeu::Char.new({ value: '-' }),
|
60
|
-
Vedeu::Char.new({ value: '.' }),
|
61
|
-
Vedeu::Char.new({ value: 'Z' }),
|
62
|
-
Vedeu::Char.new({ value: 'n' }),
|
63
|
-
Vedeu::Char.new({ value: '.' }),
|
64
|
-
Vedeu::Char.new({ value: '1' }),
|
65
|
-
Vedeu::Char.new({ value: '2' })
|
66
|
-
],[
|
67
|
-
Vedeu::Char.new({ value: 'S' }),
|
68
|
-
Vedeu::Char.new({ value: 'p' }),
|
69
|
-
Vedeu::Char.new({ value: 'e' }),
|
70
|
-
Vedeu::Char.new({ value: 'l' }),
|
71
|
-
Vedeu::Char.new({ value: 't' }),
|
72
|
-
Vedeu::Char.new({ value: 'e' }),
|
73
|
-
Vedeu::Char.new({ value: 'r' })
|
74
|
-
],[
|
75
|
-
Vedeu::Char.new({ value: '.' }),
|
76
|
-
Vedeu::Char.new({ value: '.' }),
|
77
|
-
Vedeu::Char.new({ value: 'M' }),
|
78
|
-
Vedeu::Char.new({ value: 'e' }),
|
79
|
-
Vedeu::Char.new({ value: 't' }),
|
80
|
-
Vedeu::Char.new({ value: 'a' }),
|
81
|
-
Vedeu::Char.new({ value: 'l' })
|
82
|
-
],
|
83
|
-
]
|
84
|
-
}
|
85
|
-
let(:height) { 3 }
|
86
|
-
let(:width) { 5 }
|
87
|
-
let(:expected) {
|
88
|
-
data[0, height].map { |line| line[0, width] }
|
89
|
-
}
|
90
|
-
|
91
|
-
it { subject.must_equal(expected) }
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
context 'when the data is not larger than the visible area' do
|
96
|
-
context 'when the data is a String' do
|
97
|
-
let(:data) {
|
98
|
-
"Gallium is a chemical element with\n" \
|
99
|
-
"symbol Ga and atomic number 31.\n"
|
100
|
-
}
|
101
|
-
|
102
|
-
it { subject.must_equal(
|
103
|
-
[
|
104
|
-
"Gallium is a chemical element with",
|
105
|
-
"symbol Ga and atomic number 31."
|
106
|
-
])
|
107
|
-
}
|
108
|
-
end
|
109
|
-
|
110
|
-
context 'when the data is an Array' do
|
111
|
-
# Gallium
|
112
|
-
# -.Ga.31
|
113
|
-
let(:data) {
|
114
|
-
[
|
115
|
-
[
|
116
|
-
Vedeu::Char.new({ value: 'G' }),
|
117
|
-
Vedeu::Char.new({ value: 'a' }),
|
118
|
-
Vedeu::Char.new({ value: 'l' }),
|
119
|
-
Vedeu::Char.new({ value: 'l' }),
|
120
|
-
Vedeu::Char.new({ value: 'i' }),
|
121
|
-
Vedeu::Char.new({ value: 'u' }),
|
122
|
-
Vedeu::Char.new({ value: 'm' })
|
123
|
-
], [
|
124
|
-
Vedeu::Char.new({ value: '-' }),
|
125
|
-
Vedeu::Char.new({ value: '.' }),
|
126
|
-
Vedeu::Char.new({ value: 'G' }),
|
127
|
-
Vedeu::Char.new({ value: 'a' }),
|
128
|
-
Vedeu::Char.new({ value: '.' }),
|
129
|
-
Vedeu::Char.new({ value: '3' }),
|
130
|
-
Vedeu::Char.new({ value: '1' })
|
131
|
-
]
|
132
|
-
]
|
133
|
-
}
|
134
|
-
let(:height) { 3 }
|
135
|
-
let(:width) { 10 }
|
136
|
-
|
137
|
-
it { subject.must_equal(data) }
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
context 'when there is no data' do
|
142
|
-
let(:data) {}
|
143
|
-
|
144
|
-
it { subject.must_equal([]) }
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
describe '#print' do
|
149
|
-
let(:string) {}
|
150
|
-
|
151
|
-
subject { instance.print(string) }
|
152
|
-
|
153
|
-
it { subject.must_be_instance_of(Array) }
|
154
|
-
end
|
155
|
-
|
156
|
-
end # Write
|
157
|
-
|
158
|
-
end # Vedeu
|