vedeu 0.0.8 → 0.0.9
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.
- checksums.yaml +4 -4
- data/examples/3_interfaces +44 -0
- data/examples/3_lines +23 -0
- data/examples/composition +52 -0
- data/lib/vedeu.rb +1 -0
- data/lib/vedeu/application.rb +2 -14
- data/lib/vedeu/interface/dummy.rb +7 -15
- data/lib/vedeu/interface/interface.rb +6 -11
- data/lib/vedeu/interface/interfaces.rb +17 -13
- data/lib/vedeu/output/compositor.rb +8 -8
- data/lib/vedeu/output/directive.rb +5 -0
- data/lib/vedeu/process/commands.rb +1 -1
- data/lib/vedeu/process/event_loop.rb +31 -0
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/application_test.rb +3 -4
- data/test/lib/vedeu/interface/interface_test.rb +0 -6
- data/test/lib/vedeu/interface/interfaces_test.rb +11 -24
- data/test/lib/vedeu/process/commands_test.rb +2 -2
- data/test/lib/vedeu/process/event_loop_test.rb +20 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b55b3f6827a2162d61c3ba3893197cee7990149d
|
4
|
+
data.tar.gz: 98cc092488b3d8b9982168d967339209736de888
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bb473799314f117db0eb91f879954e319497e998dd561e173d53b5831706222eef7f6074543fe7516876bb813bc89e40d6dcc2b5a0624d86f8df497b1e84b91
|
7
|
+
data.tar.gz: 26f9a8f0072eee4c6639243de7eb2c57a8fa1a3807295cda06dc42f7d0338e53cd81bfe444e73dc13706565780990f695a1f842061650a340a310dbaf2c5bd36
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
|
3
|
+
|
4
|
+
-> { its -> { a } }
|
5
|
+
trap('INT') { exit! }
|
6
|
+
|
7
|
+
require 'vedeu'
|
8
|
+
print Vedeu::Esc.clear
|
9
|
+
|
10
|
+
geometry = {
|
11
|
+
geometry: {
|
12
|
+
y: 2,
|
13
|
+
x: 2,
|
14
|
+
width: 20,
|
15
|
+
height: 10
|
16
|
+
}
|
17
|
+
}
|
18
|
+
interface = Vedeu::Interface.new(geometry)
|
19
|
+
Vedeu::Renderer.new(interface).clear_interface_rows
|
20
|
+
|
21
|
+
geometry = {
|
22
|
+
geometry: {
|
23
|
+
y: 2,
|
24
|
+
x: 23,
|
25
|
+
width: 20,
|
26
|
+
height: 10
|
27
|
+
}
|
28
|
+
}
|
29
|
+
interface = Vedeu::Interface.new(geometry)
|
30
|
+
Vedeu::Renderer.new(interface).clear_interface_rows
|
31
|
+
|
32
|
+
geometry = {
|
33
|
+
geometry: {
|
34
|
+
y: 2,
|
35
|
+
x: 44,
|
36
|
+
width: 20,
|
37
|
+
height: 10
|
38
|
+
}
|
39
|
+
}
|
40
|
+
interface = Vedeu::Interface.new(geometry)
|
41
|
+
Vedeu::Renderer.new(interface).clear_interface_rows
|
42
|
+
|
43
|
+
print Vedeu::Esc.reset
|
44
|
+
print Vedeu::Position.reset
|
data/examples/3_lines
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
|
3
|
+
|
4
|
+
-> { its -> { a } }
|
5
|
+
trap('INT') { exit! }
|
6
|
+
|
7
|
+
require 'vedeu'
|
8
|
+
print Vedeu::Esc.clear
|
9
|
+
|
10
|
+
geometry = {
|
11
|
+
geometry: {
|
12
|
+
y: 2,
|
13
|
+
x: 2,
|
14
|
+
width: 20,
|
15
|
+
height: 10
|
16
|
+
}
|
17
|
+
}
|
18
|
+
interface = Vedeu::Interface.new(geometry)
|
19
|
+
|
20
|
+
Vedeu::Renderer.new(interface).write
|
21
|
+
|
22
|
+
print Vedeu::Esc.reset
|
23
|
+
print Vedeu::Position.reset
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
|
3
|
+
|
4
|
+
-> { its -> { a } }
|
5
|
+
trap('INT') { exit! }
|
6
|
+
|
7
|
+
require 'vedeu'
|
8
|
+
|
9
|
+
# stream = [
|
10
|
+
# [
|
11
|
+
# [
|
12
|
+
# [],
|
13
|
+
# 'Lorem ipsum dolor sit amet, consectetur adipiscing'
|
14
|
+
# ],[
|
15
|
+
# [],
|
16
|
+
# 'elit. Cras sed ipsum ut purus imperdiet molestie'
|
17
|
+
# ],[
|
18
|
+
# [],
|
19
|
+
# 'in id neque. Sed auctor venenatis ultrices. Morbi'
|
20
|
+
# ],[
|
21
|
+
# [],
|
22
|
+
# 'ullamcorper libero et euismod malesuada. Aliquam'
|
23
|
+
# ],[
|
24
|
+
# [],
|
25
|
+
# 'dignissim metus eget tellus condimentum, ac dictum'
|
26
|
+
# ],[
|
27
|
+
# [],
|
28
|
+
# 'enim posuere. Curabitur posuere arcu elementum'
|
29
|
+
# ],[
|
30
|
+
# [],
|
31
|
+
# 'rutrum pulvinar. Nullam et dui eu lectus'
|
32
|
+
# ],[
|
33
|
+
# [],
|
34
|
+
# 'sollicitudin hendrerit eu at nibh. Cum sociis.'
|
35
|
+
# ]
|
36
|
+
# ]
|
37
|
+
# ]
|
38
|
+
|
39
|
+
stream = [
|
40
|
+
[
|
41
|
+
[[:underline, "test1"],
|
42
|
+
[[[:red, :black]], "test2"],
|
43
|
+
[[], "test3"]
|
44
|
+
]
|
45
|
+
]
|
46
|
+
|
47
|
+
geometry = { geometry: { y: 0, x: 0, width: 50, height: 15 } }
|
48
|
+
interface = Vedeu::Interface.new(geometry)
|
49
|
+
|
50
|
+
Vedeu::Compositor.write(stream, interface)
|
51
|
+
|
52
|
+
print "\n"
|
data/lib/vedeu.rb
CHANGED
@@ -22,6 +22,7 @@ require_relative 'vedeu/interface/dummy'
|
|
22
22
|
|
23
23
|
require_relative 'vedeu/process/commands'
|
24
24
|
require_relative 'vedeu/process/command'
|
25
|
+
require_relative 'vedeu/process/event_loop'
|
25
26
|
require_relative 'vedeu/process/exit'
|
26
27
|
|
27
28
|
require_relative 'vedeu/application'
|
data/lib/vedeu/application.rb
CHANGED
@@ -12,9 +12,9 @@ module Vedeu
|
|
12
12
|
|
13
13
|
def main_sequence
|
14
14
|
Terminal.open(options) do
|
15
|
-
initial_state
|
15
|
+
Interfaces.initial_state
|
16
16
|
|
17
|
-
|
17
|
+
EventLoop.start
|
18
18
|
end
|
19
19
|
ensure
|
20
20
|
Terminal.close
|
@@ -24,18 +24,6 @@ module Vedeu
|
|
24
24
|
|
25
25
|
attr_reader :options
|
26
26
|
|
27
|
-
def event_loop
|
28
|
-
interfaces.event_loop
|
29
|
-
end
|
30
|
-
|
31
|
-
def initial_state
|
32
|
-
interfaces.initial_state
|
33
|
-
end
|
34
|
-
|
35
|
-
def interfaces
|
36
|
-
@interfaces ||= Interfaces.defined || Interfaces.default
|
37
|
-
end
|
38
|
-
|
39
27
|
def options
|
40
28
|
defaults.merge!(@options)
|
41
29
|
end
|
@@ -1,22 +1,14 @@
|
|
1
1
|
module Vedeu
|
2
2
|
class Dummy < Interface
|
3
|
-
def initial_state
|
4
|
-
|
5
|
-
# def input; end
|
6
|
-
|
7
|
-
# def output; end
|
3
|
+
def initial_state
|
4
|
+
end
|
8
5
|
|
9
|
-
|
6
|
+
def input
|
7
|
+
super
|
8
|
+
end
|
10
9
|
|
11
|
-
def
|
12
|
-
|
13
|
-
geometry: {
|
14
|
-
y: 1,
|
15
|
-
x: 1,
|
16
|
-
width: :auto,
|
17
|
-
height: :auto
|
18
|
-
}
|
19
|
-
}
|
10
|
+
def output
|
11
|
+
super
|
20
12
|
end
|
21
13
|
end
|
22
14
|
end
|
@@ -10,16 +10,6 @@ module Vedeu
|
|
10
10
|
raise NotImplementedError, 'Subclasses implement this method.'
|
11
11
|
end
|
12
12
|
|
13
|
-
def event_loop
|
14
|
-
while true do
|
15
|
-
command = input
|
16
|
-
|
17
|
-
break if command == :stop
|
18
|
-
|
19
|
-
output(command)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
13
|
def input
|
24
14
|
evaluate
|
25
15
|
end
|
@@ -50,7 +40,12 @@ module Vedeu
|
|
50
40
|
|
51
41
|
def defaults
|
52
42
|
{
|
53
|
-
geometry: {
|
43
|
+
geometry: {
|
44
|
+
y: 1,
|
45
|
+
x: 1,
|
46
|
+
width: :auto,
|
47
|
+
height: :auto
|
48
|
+
}
|
54
49
|
}
|
55
50
|
end
|
56
51
|
end
|
@@ -14,30 +14,28 @@ module Vedeu
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def defined
|
17
|
-
interfaces.empty? ?
|
18
|
-
end
|
19
|
-
|
20
|
-
def default
|
21
|
-
add(:dummy, Dummy)
|
17
|
+
interfaces.empty? ? default : self
|
22
18
|
end
|
23
19
|
|
24
20
|
def list
|
25
21
|
interfaces.inspect
|
26
22
|
end
|
27
23
|
|
28
|
-
def add(name,
|
29
|
-
if valid?(klass)
|
30
|
-
|
31
|
-
self
|
32
|
-
end
|
24
|
+
def add(name, options = {}, klass = Dummy)
|
25
|
+
interfaces[name] = klass.new(options) if valid?(klass)
|
26
|
+
self
|
33
27
|
end
|
34
28
|
|
35
29
|
def initial_state
|
36
|
-
interfaces.values.map { |io| io.
|
30
|
+
interfaces.values.map { |io| io.initial_state }
|
37
31
|
end
|
38
32
|
|
39
|
-
def
|
40
|
-
interfaces.values.map { |io| io.
|
33
|
+
def input
|
34
|
+
interfaces.values.map { |io| io.input }
|
35
|
+
end
|
36
|
+
|
37
|
+
def output(stream)
|
38
|
+
interfaces.values.map { |io| io.output(stream) }
|
41
39
|
end
|
42
40
|
|
43
41
|
private
|
@@ -47,6 +45,12 @@ module Vedeu
|
|
47
45
|
true
|
48
46
|
end
|
49
47
|
|
48
|
+
def default
|
49
|
+
add(:dummy)
|
50
|
+
|
51
|
+
self
|
52
|
+
end
|
53
|
+
|
50
54
|
def interfaces
|
51
55
|
@interfaces ||= {}
|
52
56
|
end
|
@@ -18,7 +18,7 @@ module Vedeu
|
|
18
18
|
|
19
19
|
private
|
20
20
|
|
21
|
-
attr_reader :
|
21
|
+
attr_reader :interface
|
22
22
|
|
23
23
|
def composition
|
24
24
|
container = []
|
@@ -26,12 +26,7 @@ module Vedeu
|
|
26
26
|
output.map do |line|
|
27
27
|
line.each_with_index do |stream, index|
|
28
28
|
streams << clear_line(index)
|
29
|
-
|
30
|
-
if stream.is_a?(String)
|
31
|
-
streams << stream
|
32
|
-
else
|
33
|
-
streams << Directive.enact(stream)
|
34
|
-
end
|
29
|
+
streams << Directive.enact(stream)
|
35
30
|
end
|
36
31
|
container << streams.join
|
37
32
|
streams = []
|
@@ -40,7 +35,7 @@ module Vedeu
|
|
40
35
|
end
|
41
36
|
|
42
37
|
def clear_line(index)
|
43
|
-
[position(vy(index), vx), (
|
38
|
+
[position(vy(index), vx), (' ' * width), position(vy(index), vx)].join
|
44
39
|
end
|
45
40
|
|
46
41
|
def vx(index = 0)
|
@@ -62,5 +57,10 @@ module Vedeu
|
|
62
57
|
def position(y, x)
|
63
58
|
Position.set(y, x)
|
64
59
|
end
|
60
|
+
|
61
|
+
def output
|
62
|
+
return @output.split if @output.is_a?(String)
|
63
|
+
@output
|
64
|
+
end
|
65
65
|
end
|
66
66
|
end
|
@@ -13,6 +13,7 @@ module Vedeu
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def enact
|
16
|
+
return directives if string?
|
16
17
|
[set_position, set_colour, set_style].join
|
17
18
|
end
|
18
19
|
|
@@ -20,6 +21,10 @@ module Vedeu
|
|
20
21
|
|
21
22
|
attr_reader :directives
|
22
23
|
|
24
|
+
def string?
|
25
|
+
directives.is_a?(String)
|
26
|
+
end
|
27
|
+
|
23
28
|
def set_position
|
24
29
|
Position.set(*position)
|
25
30
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Vedeu
|
2
|
+
class EventLoop
|
3
|
+
class << self
|
4
|
+
def start
|
5
|
+
new.start
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@running = true
|
11
|
+
end
|
12
|
+
|
13
|
+
def start
|
14
|
+
tick
|
15
|
+
end
|
16
|
+
|
17
|
+
def stop
|
18
|
+
@running = false
|
19
|
+
end
|
20
|
+
|
21
|
+
def tick
|
22
|
+
while @running do
|
23
|
+
command = Interfaces.defined.input
|
24
|
+
|
25
|
+
stop if command == "stop"
|
26
|
+
|
27
|
+
Interfaces.defined.output(command)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/vedeu/version.rb
CHANGED
@@ -9,14 +9,13 @@ module Vedeu
|
|
9
9
|
it { described_instance.must_be_instance_of(Application) }
|
10
10
|
|
11
11
|
describe '.start' do
|
12
|
-
let(:subject)
|
13
|
-
let(:interfaces) { mock("Interfaces", event_loop: nil,
|
14
|
-
initial_state: nil) }
|
12
|
+
let(:subject) { described_class.start(options) }
|
15
13
|
|
16
14
|
before do
|
17
15
|
Terminal.stubs(:open).yields(self)
|
16
|
+
Interfaces.stubs(:initial_state)
|
17
|
+
EventLoop.stubs(:start)
|
18
18
|
Terminal.stubs(:close)
|
19
|
-
Interfaces.stubs(:defined).returns(interfaces)
|
20
19
|
end
|
21
20
|
|
22
21
|
it { subject.must_be_instance_of(NilClass) }
|
@@ -14,12 +14,6 @@ module Vedeu
|
|
14
14
|
it { proc { subject }.must_raise(NotImplementedError) }
|
15
15
|
end
|
16
16
|
|
17
|
-
describe '#event_loop' do
|
18
|
-
let(:subject) { described_instance.event_loop }
|
19
|
-
|
20
|
-
it { skip }
|
21
|
-
end
|
22
|
-
|
23
17
|
describe '#input' do
|
24
18
|
let(:subject) { described_instance.input }
|
25
19
|
|
@@ -14,6 +14,12 @@ module Vedeu
|
|
14
14
|
let(:subject) { described_class.define }
|
15
15
|
|
16
16
|
it { subject.must_be_instance_of(Module) }
|
17
|
+
|
18
|
+
context 'when a block is given' do
|
19
|
+
let(:subject) { described_class.define { :some_block } }
|
20
|
+
|
21
|
+
it { subject.must_be_instance_of(Symbol) }
|
22
|
+
end
|
17
23
|
end
|
18
24
|
|
19
25
|
describe '.defined' do
|
@@ -24,28 +30,20 @@ module Vedeu
|
|
24
30
|
context 'when interfaces are not defined' do
|
25
31
|
before { described_class.interfaces = {} }
|
26
32
|
|
27
|
-
it
|
33
|
+
it 'adds the default interface and returns all interfaces' do
|
34
|
+
subject.must_be_instance_of(Module)
|
35
|
+
end
|
28
36
|
end
|
29
37
|
|
30
|
-
context 'when
|
38
|
+
context 'when interfaces are defined' do
|
31
39
|
before { described_class.interfaces = { mock: :interface } }
|
32
40
|
|
33
41
|
it { subject.must_be_instance_of(Module) }
|
34
42
|
end
|
35
43
|
end
|
36
44
|
|
37
|
-
describe '.default' do
|
38
|
-
let(:subject) { described_class.default }
|
39
|
-
|
40
|
-
it { subject.must_be_instance_of(Module) }
|
41
|
-
|
42
|
-
it 'adds the dummy interface to the interface list' do
|
43
|
-
described_class.list.wont_be_empty
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
45
|
describe '.add' do
|
48
|
-
let(:subject)
|
46
|
+
let(:subject) { described_class.add(interface, options, klass) }
|
49
47
|
let(:interface) {}
|
50
48
|
let(:klass) { DummyInterface }
|
51
49
|
let(:options) { {} }
|
@@ -70,16 +68,5 @@ module Vedeu
|
|
70
68
|
|
71
69
|
it { subject.must_be_instance_of(Array) }
|
72
70
|
end
|
73
|
-
|
74
|
-
describe '.event_loop' do
|
75
|
-
let(:subject) { described_class.event_loop }
|
76
|
-
|
77
|
-
before do
|
78
|
-
Terminal.stubs(:input)
|
79
|
-
Commands.stubs(:execute).returns(:stop)
|
80
|
-
end
|
81
|
-
|
82
|
-
it { subject.must_be_instance_of(Array) }
|
83
|
-
end
|
84
71
|
end
|
85
72
|
end
|
@@ -35,7 +35,7 @@ module Vedeu
|
|
35
35
|
end
|
36
36
|
|
37
37
|
context 'when the command exists' do
|
38
|
-
let(:command) {
|
38
|
+
let(:command) { :exit }
|
39
39
|
|
40
40
|
before { Exit.stubs(:dispatch).returns(true) }
|
41
41
|
|
@@ -51,7 +51,7 @@ module Vedeu
|
|
51
51
|
|
52
52
|
describe '.add' do
|
53
53
|
let(:subject) { described_class.add(command_name, command_klass, args, options) }
|
54
|
-
let(:command_name) {
|
54
|
+
let(:command_name) { :some_name }
|
55
55
|
let(:command_klass) { DummyCommand }
|
56
56
|
let(:args) { [] }
|
57
57
|
let(:options) { {} }
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
describe EventLoop do
|
5
|
+
let(:described_class) { EventLoop }
|
6
|
+
let(:defined) { mock }
|
7
|
+
|
8
|
+
before do
|
9
|
+
Interfaces.stubs(:defined).returns(defined)
|
10
|
+
defined.stubs(:input).returns("stop")
|
11
|
+
defined.stubs(:output).returns(NilClass)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '.start' do
|
15
|
+
let(:subject) { described_class.start }
|
16
|
+
|
17
|
+
it { subject.must_be_instance_of(NilClass) }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vedeu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Laking
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -152,6 +152,9 @@ files:
|
|
152
152
|
- README.md
|
153
153
|
- Rakefile
|
154
154
|
- bin/vedeu
|
155
|
+
- examples/3_interfaces
|
156
|
+
- examples/3_lines
|
157
|
+
- examples/composition
|
155
158
|
- lib/vedeu.rb
|
156
159
|
- lib/vedeu/application.rb
|
157
160
|
- lib/vedeu/interface/dummy.rb
|
@@ -172,6 +175,7 @@ files:
|
|
172
175
|
- lib/vedeu/output/wordwrap.rb
|
173
176
|
- lib/vedeu/process/command.rb
|
174
177
|
- lib/vedeu/process/commands.rb
|
178
|
+
- lib/vedeu/process/event_loop.rb
|
175
179
|
- lib/vedeu/process/exit.rb
|
176
180
|
- lib/vedeu/support/terminal.rb
|
177
181
|
- lib/vedeu/version.rb
|
@@ -194,6 +198,7 @@ files:
|
|
194
198
|
- test/lib/vedeu/output/wordwrap_test.rb
|
195
199
|
- test/lib/vedeu/process/command_test.rb
|
196
200
|
- test/lib/vedeu/process/commands_test.rb
|
201
|
+
- test/lib/vedeu/process/event_loop_test.rb
|
197
202
|
- test/lib/vedeu/process/exit_test.rb
|
198
203
|
- test/lib/vedeu/support/terminal_test.rb
|
199
204
|
- test/lib/vedeu/version_test.rb
|
@@ -243,7 +248,9 @@ test_files:
|
|
243
248
|
- test/lib/vedeu/output/wordwrap_test.rb
|
244
249
|
- test/lib/vedeu/process/command_test.rb
|
245
250
|
- test/lib/vedeu/process/commands_test.rb
|
251
|
+
- test/lib/vedeu/process/event_loop_test.rb
|
246
252
|
- test/lib/vedeu/process/exit_test.rb
|
247
253
|
- test/lib/vedeu/support/terminal_test.rb
|
248
254
|
- test/lib/vedeu/version_test.rb
|
249
255
|
- test/test_helper.rb
|
256
|
+
has_rdoc:
|