vedeu 0.0.39 → 0.0.40
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/README.md +0 -30
- data/Rakefile +8 -9
- data/bin/log +13 -0
- data/deps.md +11 -95
- data/lib/vedeu.rb +14 -46
- data/lib/vedeu/application.rb +4 -8
- data/lib/vedeu/instrumentation.rb +111 -0
- data/lib/vedeu/launcher.rb +2 -2
- data/lib/vedeu/models/attributes/interface_collection.rb +2 -2
- data/lib/vedeu/models/attributes/line_collection.rb +2 -2
- data/lib/vedeu/models/attributes/stream_collection.rb +2 -2
- data/lib/vedeu/models/colour.rb +1 -1
- data/lib/vedeu/models/composition.rb +1 -1
- data/lib/vedeu/models/interface.rb +18 -10
- data/lib/vedeu/models/line.rb +3 -3
- data/lib/vedeu/models/presentation.rb +1 -1
- data/lib/vedeu/models/stream.rb +2 -2
- data/lib/vedeu/models/style.rb +1 -1
- data/lib/vedeu/output/render_interface.rb +1 -1
- data/lib/vedeu/{support → parsing}/compositor.rb +1 -1
- data/lib/vedeu/parsing/hash_parser.rb +1 -1
- data/lib/vedeu/parsing/parser.rb +6 -10
- data/lib/vedeu/{models/builders → support}/builder.rb +19 -9
- data/lib/vedeu/support/esc.rb +1 -1
- data/lib/vedeu/support/events.rb +15 -19
- data/lib/vedeu/support/geometry.rb +3 -3
- data/lib/vedeu/{input → support}/input.rb +6 -9
- data/lib/vedeu/support/menu.rb +3 -3
- data/lib/vedeu/support/persistence.rb +41 -0
- data/lib/vedeu/support/terminal.rb +1 -1
- data/test/example_app/lib/app.rb +85 -5
- data/test/lib/vedeu/application_test.rb +2 -2
- data/test/lib/vedeu/configuration_test.rb +2 -2
- data/test/lib/vedeu/launcher_test.rb +2 -2
- data/test/lib/vedeu/models/attributes/collection_test.rb +2 -2
- data/test/lib/vedeu/models/attributes/interface_collection_test.rb +4 -4
- data/test/lib/vedeu/models/attributes/line_collection_test.rb +3 -3
- data/test/lib/vedeu/models/attributes/stream_collection_test.rb +3 -3
- data/test/lib/vedeu/models/colour_test.rb +2 -2
- data/test/lib/vedeu/models/composition_test.rb +19 -19
- data/test/lib/vedeu/models/interface_test.rb +46 -34
- data/test/lib/vedeu/models/line_test.rb +2 -2
- data/test/lib/vedeu/models/presentation_test.rb +2 -2
- data/test/lib/vedeu/models/stream_test.rb +2 -2
- data/test/lib/vedeu/models/style_test.rb +31 -31
- data/test/lib/vedeu/output/clear_interface_test.rb +5 -5
- data/test/lib/vedeu/output/render_interface_test.rb +5 -6
- data/test/lib/vedeu/output/template.rb +2 -1
- data/test/lib/vedeu/{support → parsing}/compositor_test.rb +6 -4
- data/test/lib/vedeu/parsing/hash_parser_test.rb +2 -2
- data/test/lib/vedeu/parsing/json_parser_test.rb +2 -2
- data/test/lib/vedeu/parsing/parser_test.rb +6 -5
- data/test/lib/vedeu/parsing/text_adaptor_test.rb +2 -2
- data/test/lib/vedeu/{models/builders/interface_builder_test.rb → support/builder_test.rb} +10 -10
- data/test/lib/vedeu/support/esc_test.rb +2 -2
- data/test/lib/vedeu/support/events_test.rb +2 -2
- data/test/lib/vedeu/support/geometry_test.rb +2 -2
- data/test/lib/vedeu/{input → support}/input_test.rb +6 -7
- data/test/lib/vedeu/support/menu_test.rb +2 -2
- data/test/lib/vedeu/support/persistence_test.rb +55 -0
- data/test/lib/vedeu/support/queue_test.rb +2 -2
- data/test/lib/vedeu/support/terminal_test.rb +2 -2
- data/test/lib/vedeu/support/translator_test.rb +2 -2
- data/test/lib/vedeu/support/wordwrap_test.rb +2 -2
- data/test/lib/vedeu_test.rb +17 -2
- data/test/support/bench.rb +34 -0
- data/test/test_helper.rb +3 -11
- data/vedeu.gemspec +2 -2
- metadata +20 -44
- data/lib/vedeu/models/builders/command_builder.rb +0 -10
- data/lib/vedeu/models/builders/interface_builder.rb +0 -32
- data/lib/vedeu/models/command.rb +0 -23
- data/lib/vedeu/output/output.rb +0 -14
- data/lib/vedeu/process/process.rb +0 -51
- data/lib/vedeu/repository/command_repository.rb +0 -31
- data/lib/vedeu/repository/interface_repository.rb +0 -31
- data/lib/vedeu/repository/repository.rb +0 -41
- data/lib/vedeu/repository/storage.rb +0 -40
- data/lib/vedeu/support/exit.rb +0 -9
- data/test/lib/vedeu/models/builders/builder_test.rb +0 -11
- data/test/lib/vedeu/models/builders/command_builder_test.rb +0 -16
- data/test/lib/vedeu/models/command_test.rb +0 -40
- data/test/lib/vedeu/output/output_test.rb +0 -19
- data/test/lib/vedeu/process/process_test.rb +0 -71
- data/test/lib/vedeu/repository/command_repository_test.rb +0 -55
- data/test/lib/vedeu/repository/interface_repository_test.rb +0 -67
- data/test/lib/vedeu/repository/repository_test.rb +0 -81
- data/test/lib/vedeu/repository/storage_test.rb +0 -70
- data/test/lib/vedeu/support/exit_test.rb +0 -12
- data/test/support/dummy_command.rb +0 -9
@@ -1,31 +0,0 @@
|
|
1
|
-
require_relative '../models/command'
|
2
|
-
require_relative 'repository'
|
3
|
-
|
4
|
-
module Vedeu
|
5
|
-
module CommandRepository
|
6
|
-
extend Repository
|
7
|
-
extend self
|
8
|
-
|
9
|
-
def by_input(input)
|
10
|
-
by_keypress(input) || by_keyword(input)
|
11
|
-
end
|
12
|
-
|
13
|
-
def entity
|
14
|
-
Command
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def by_keypress(input)
|
20
|
-
query(:keypress, input)
|
21
|
-
rescue EntityNotFound
|
22
|
-
false
|
23
|
-
end
|
24
|
-
|
25
|
-
def by_keyword(input)
|
26
|
-
query(:keyword, input)
|
27
|
-
rescue EntityNotFound
|
28
|
-
false
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require_relative '../models/interface'
|
2
|
-
require_relative 'repository'
|
3
|
-
|
4
|
-
module Vedeu
|
5
|
-
module InterfaceRepository
|
6
|
-
extend Repository
|
7
|
-
extend self
|
8
|
-
|
9
|
-
def update(name, attributes = {})
|
10
|
-
interface = query(:name, name)
|
11
|
-
interface.attributes = attributes
|
12
|
-
interface
|
13
|
-
rescue EntityNotFound
|
14
|
-
create(attributes)
|
15
|
-
end
|
16
|
-
|
17
|
-
def refresh
|
18
|
-
by_layer.map { |interface| interface.refresh }.compact
|
19
|
-
end
|
20
|
-
|
21
|
-
def entity
|
22
|
-
Interface
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def by_layer
|
28
|
-
all.sort_by { |interface| interface.z }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require_relative 'storage'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
EntityNotFound = Class.new(StandardError)
|
5
|
-
|
6
|
-
module Repository
|
7
|
-
extend self
|
8
|
-
|
9
|
-
def create(attributes)
|
10
|
-
storage.create(entity, attributes)
|
11
|
-
end
|
12
|
-
|
13
|
-
def all
|
14
|
-
storage.all(entity)
|
15
|
-
end
|
16
|
-
|
17
|
-
def query(attribute, value)
|
18
|
-
if result = storage.query(entity, attribute, value)
|
19
|
-
result
|
20
|
-
|
21
|
-
else
|
22
|
-
fail EntityNotFound, "#{entity.to_s} could not be found."
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def reset
|
28
|
-
storage.reset(entity)
|
29
|
-
end
|
30
|
-
|
31
|
-
def entity
|
32
|
-
fail StandardError, 'The extending module implements this.'
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def storage
|
38
|
-
@storage ||= Storage.new
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
class Storage
|
3
|
-
def initialize
|
4
|
-
@store = {}
|
5
|
-
end
|
6
|
-
|
7
|
-
def create(entity, attributes)
|
8
|
-
entities(entity)
|
9
|
-
.store(attributes[:name], entity.new(attributes))
|
10
|
-
end
|
11
|
-
|
12
|
-
def all(entity = nil)
|
13
|
-
return entities unless entity
|
14
|
-
|
15
|
-
entities(entity).values
|
16
|
-
end
|
17
|
-
|
18
|
-
def query(entity, attribute, value)
|
19
|
-
return false if value.nil? || value.empty?
|
20
|
-
|
21
|
-
entities(entity).select do |name, result|
|
22
|
-
return result if result.send(attribute) == value
|
23
|
-
end
|
24
|
-
|
25
|
-
false
|
26
|
-
end
|
27
|
-
|
28
|
-
def reset(entity)
|
29
|
-
store[entity.to_s] = {}
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
attr_reader :store
|
35
|
-
|
36
|
-
def entities(entity)
|
37
|
-
store[entity.to_s] ||= {}
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
data/lib/vedeu/support/exit.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
require_relative '../../../../test_helper'
|
2
|
-
require_relative '../../../../../lib/vedeu/models/builders/builder'
|
3
|
-
|
4
|
-
module Vedeu
|
5
|
-
describe Builder do
|
6
|
-
it 'raises an exception if not subclassed' do
|
7
|
-
builder = Builder.new('builder_test')
|
8
|
-
proc { builder.repository }.must_raise(StandardError)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require_relative '../../../../test_helper'
|
2
|
-
require_relative '../../../../../lib/vedeu/models/builders/command_builder'
|
3
|
-
require_relative '../../../../support/dummy_command'
|
4
|
-
|
5
|
-
module Vedeu
|
6
|
-
describe CommandBuilder do
|
7
|
-
it 'creates and stores a new command' do
|
8
|
-
command = CommandBuilder.build('dummy') do
|
9
|
-
entity DummyCommand
|
10
|
-
keyword 'dummy'
|
11
|
-
keypress 'd'
|
12
|
-
end
|
13
|
-
command.must_be_instance_of(Command)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
require_relative '../../../support/dummy_command'
|
3
|
-
require_relative '../../../../lib/vedeu/models/command'
|
4
|
-
|
5
|
-
module Vedeu
|
6
|
-
describe Command do
|
7
|
-
it 'has a name attribute' do
|
8
|
-
Command.new({ name: 'dummy' }).name.must_equal('dummy')
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'has an entity attribute' do
|
12
|
-
Command.new({ entity: DummyCommand }).entity
|
13
|
-
.must_equal(DummyCommand)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'has a keypress attribute' do
|
17
|
-
Command.new({ keypress: 'd' }).keypress.must_equal('d')
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'has an keyword attribute' do
|
21
|
-
Command.new({ keyword: 'dummy' }).keyword.must_equal('dummy')
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'has an arguments attribute' do
|
25
|
-
Command.new({ arguments: [] }).arguments.must_equal([])
|
26
|
-
end
|
27
|
-
|
28
|
-
describe '#execute' do
|
29
|
-
it 'returns the result of execution' do
|
30
|
-
Command.new({
|
31
|
-
name: 'dummy',
|
32
|
-
entity: DummyCommand,
|
33
|
-
keyword: 'dummy',
|
34
|
-
keypress: 'd',
|
35
|
-
arguments: []
|
36
|
-
}).execute(:dummy).must_equal(:dummy)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
require_relative '../../../../lib/vedeu/output/output'
|
3
|
-
require_relative '../../../../lib/vedeu/support/terminal'
|
4
|
-
|
5
|
-
module Vedeu
|
6
|
-
describe Output do
|
7
|
-
describe '.render' do
|
8
|
-
it 'returns an Array' do
|
9
|
-
output = "\e[3;3H \e[3;3H" \
|
10
|
-
"\e[3;3HSome text...\e[3;3H"
|
11
|
-
InterfaceRepository.stub(:refresh, [output]) do
|
12
|
-
Terminal.stub(:output, output) do
|
13
|
-
Output.render.first.must_equal(output)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
require_relative '../../../../lib/vedeu/process/process'
|
3
|
-
require_relative '../../../support/dummy_command'
|
4
|
-
require_relative '../../../../lib/vedeu/repository/command_repository'
|
5
|
-
|
6
|
-
module Vedeu
|
7
|
-
class QuitCommand
|
8
|
-
def self.dispatch
|
9
|
-
:stop
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
class TestCommand
|
14
|
-
def self.dispatch
|
15
|
-
{
|
16
|
-
'Process#evaluate' => 'TestCommand.dispatch'
|
17
|
-
}
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class NoResultCommand
|
22
|
-
def self.dispatch
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe Process do
|
27
|
-
describe '.evaluate' do
|
28
|
-
before do
|
29
|
-
CommandRepository.reset
|
30
|
-
Queue.reset
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'returns false when there is no input' do
|
34
|
-
Process.evaluate.must_be_instance_of(FalseClass)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'raises an exception when the result is :stop' do
|
38
|
-
CommandRepository.create({
|
39
|
-
name: 'quit',
|
40
|
-
entity: QuitCommand,
|
41
|
-
keypress: 'q'
|
42
|
-
})
|
43
|
-
Queue.enqueue('q')
|
44
|
-
proc { Process.evaluate }.must_raise(StopIteration)
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'returns a collection of interfaces when there is a result' do
|
48
|
-
CommandRepository.create({
|
49
|
-
name: 'test',
|
50
|
-
entity: TestCommand,
|
51
|
-
keypress: 't'
|
52
|
-
})
|
53
|
-
Queue.enqueue('t')
|
54
|
-
evaluation = Process.evaluate
|
55
|
-
|
56
|
-
evaluation.must_be_instance_of(Array)
|
57
|
-
evaluation.size.must_equal(1)
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'returns a NilClass when there is no result' do
|
61
|
-
CommandRepository.create({
|
62
|
-
name: 'no_result',
|
63
|
-
entity: NoResultCommand,
|
64
|
-
keypress: 'n'
|
65
|
-
})
|
66
|
-
Queue.enqueue('n')
|
67
|
-
Process.evaluate.must_be_instance_of(NilClass)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
require_relative '../../../support/dummy_command'
|
3
|
-
require_relative '../../../../lib/vedeu/repository/command_repository'
|
4
|
-
|
5
|
-
module Vedeu
|
6
|
-
describe CommandRepository do
|
7
|
-
before do
|
8
|
-
CommandRepository.create({
|
9
|
-
name: 'apple',
|
10
|
-
entity: DummyCommand,
|
11
|
-
keypress: 'a',
|
12
|
-
keyword: 'apple'
|
13
|
-
})
|
14
|
-
CommandRepository.create({
|
15
|
-
name: 'banana',
|
16
|
-
entity: DummyCommand,
|
17
|
-
keypress: 'b',
|
18
|
-
keyword: 'banana'
|
19
|
-
})
|
20
|
-
end
|
21
|
-
after { CommandRepository.reset }
|
22
|
-
|
23
|
-
describe '.by_input' do
|
24
|
-
it 'returns the correct command when the command was found by keypress' do
|
25
|
-
command = CommandRepository.by_input('b')
|
26
|
-
|
27
|
-
command.name.must_equal('banana')
|
28
|
-
command.name.wont_equal('apple')
|
29
|
-
command.keypress.must_equal('b')
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'returns the correct command when the command was found by keyword' do
|
33
|
-
command = CommandRepository.by_input('apple')
|
34
|
-
|
35
|
-
command.keypress.must_equal('a')
|
36
|
-
command.keypress.wont_equal('b')
|
37
|
-
command.name.wont_equal('banana')
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'returns false when no command was found' do
|
41
|
-
CommandRepository.by_input('not_found').must_be_instance_of(FalseClass)
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'returns false when there is no input' do
|
45
|
-
CommandRepository.by_input('').must_be_instance_of(FalseClass)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe '.entity' do
|
50
|
-
it 'returns Command' do
|
51
|
-
CommandRepository.entity.must_equal(Command)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
require_relative '../../../../lib/vedeu/repository/interface_repository'
|
3
|
-
|
4
|
-
module Vedeu
|
5
|
-
describe InterfaceRepository do
|
6
|
-
before { InterfaceRepository.reset }
|
7
|
-
|
8
|
-
describe '.update' do
|
9
|
-
it 'returns an Interface' do
|
10
|
-
InterfaceRepository.update('dummy', { name: 'dumber' })
|
11
|
-
.must_be_instance_of(Interface)
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'updates and returns the existing interface when the interface exists' do
|
15
|
-
InterfaceRepository.update('dummy', { name: 'dumber' }).name
|
16
|
-
.must_equal('dumber')
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'returns a new interface when the interface does not exist' do
|
20
|
-
InterfaceRepository.update('dummy', { name: 'dumber' }).name
|
21
|
-
.must_equal('dumber')
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '.refresh' do
|
26
|
-
it 'returns an Array' do
|
27
|
-
InterfaceRepository.refresh.must_be_instance_of(Array)
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'returns the collection in order they should be drawn' do
|
31
|
-
InterfaceRepository.create({
|
32
|
-
name: '.refresh_1',
|
33
|
-
width: 1,
|
34
|
-
height: 1,
|
35
|
-
z: 3,
|
36
|
-
lines: 'alpha'
|
37
|
-
}).enqueue
|
38
|
-
InterfaceRepository.create({
|
39
|
-
name: '.refresh_2',
|
40
|
-
width: 1,
|
41
|
-
height: 1,
|
42
|
-
z: 1,
|
43
|
-
lines: 'beta'
|
44
|
-
}).enqueue
|
45
|
-
InterfaceRepository.create({
|
46
|
-
name: '.refresh_3',
|
47
|
-
width: 1,
|
48
|
-
height: 1,
|
49
|
-
z: 2,
|
50
|
-
lines: 'gamma'
|
51
|
-
}).enqueue
|
52
|
-
|
53
|
-
InterfaceRepository.refresh.must_equal([
|
54
|
-
"\e[1;1H \e[1;1H\e[1;1Hbeta",
|
55
|
-
"\e[1;1H \e[1;1H\e[1;1Hgamma",
|
56
|
-
"\e[1;1H \e[1;1H\e[1;1Halpha"
|
57
|
-
])
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe '.entity' do
|
62
|
-
it 'returns Interface' do
|
63
|
-
InterfaceRepository.entity.must_equal(Interface)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|