vedeu 0.0.25 → 0.0.26
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 +10 -9
- data/Rakefile +0 -10
- data/bin/composition +1 -1
- data/examples/single_interface_app.rb +7 -4
- data/lib/vedeu.rb +19 -48
- data/lib/vedeu/application.rb +8 -7
- data/lib/vedeu/configuration.rb +4 -4
- data/lib/vedeu/input/input.rb +3 -0
- data/lib/vedeu/launcher.rb +3 -0
- data/lib/vedeu/models/background.rb +13 -0
- data/lib/vedeu/models/coercions.rb +21 -0
- data/lib/vedeu/models/colour.rb +22 -0
- data/lib/vedeu/{repository → models}/command.rb +2 -0
- data/lib/vedeu/models/composition.rb +30 -0
- data/lib/vedeu/models/foreground.rb +13 -0
- data/lib/vedeu/models/interface.rb +62 -0
- data/lib/vedeu/models/interface_collection.rb +24 -0
- data/lib/vedeu/models/line.rb +22 -0
- data/lib/vedeu/models/line_collection.rb +27 -0
- data/lib/vedeu/models/presentation.rb +13 -0
- data/lib/vedeu/models/stream.rb +21 -0
- data/lib/vedeu/models/stream_collection.rb +27 -0
- data/lib/vedeu/models/style_collection.rb +23 -0
- data/lib/vedeu/output/interface_renderer.rb +62 -0
- data/lib/vedeu/output/output.rb +6 -5
- data/lib/vedeu/process/process.rb +15 -31
- data/lib/vedeu/repository/command_repository.rb +13 -14
- data/lib/vedeu/repository/interface_repository.rb +12 -13
- data/lib/vedeu/repository/repository.rb +2 -0
- data/lib/vedeu/{output → support}/cursor.rb +2 -0
- data/lib/vedeu/support/esc.rb +112 -0
- data/lib/vedeu/support/events.rb +21 -0
- data/lib/vedeu/support/geometry.rb +66 -0
- data/lib/vedeu/support/parser.rb +27 -0
- data/lib/vedeu/support/terminal.rb +31 -134
- data/lib/vedeu/{output → support}/translator.rb +12 -8
- data/lib/vedeu/{output → support}/wordwrap.rb +2 -4
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/application_test.rb +7 -2
- data/test/lib/vedeu/configuration_test.rb +13 -8
- data/test/lib/vedeu/input/input_test.rb +2 -1
- data/test/lib/vedeu/launcher_test.rb +7 -2
- data/test/lib/vedeu/models/background_test.rb +35 -0
- data/test/lib/vedeu/models/colour_test.rb +71 -0
- data/test/lib/vedeu/models/command_test.rb +109 -0
- data/test/lib/vedeu/models/composition_test.rb +187 -0
- data/test/lib/vedeu/models/foreground_test.rb +35 -0
- data/test/lib/vedeu/models/interface_collection_test.rb +57 -0
- data/test/lib/vedeu/models/interface_test.rb +220 -0
- data/test/lib/vedeu/models/line_collection_test.rb +69 -0
- data/test/lib/vedeu/models/line_test.rb +76 -0
- data/test/lib/vedeu/models/presentation_test.rb +8 -0
- data/test/lib/vedeu/models/stream_collection_test.rb +57 -0
- data/test/lib/vedeu/models/stream_test.rb +76 -0
- data/test/lib/vedeu/models/style_collection_test.rb +22 -0
- data/test/lib/vedeu/output/interface_renderer_test.rb +12 -0
- data/test/lib/vedeu/output/output_test.rb +15 -30
- data/test/lib/vedeu/process/process_test.rb +22 -44
- data/test/lib/vedeu/repository/command_repository_test.rb +22 -16
- data/test/lib/vedeu/repository/interface_repository_test.rb +62 -14
- data/test/lib/vedeu/repository/repository_test.rb +1 -0
- data/test/lib/vedeu/repository/storage_test.rb +13 -6
- data/test/lib/vedeu/{output → support}/cursor_test.rb +1 -0
- data/test/lib/vedeu/support/esc_test.rb +348 -0
- data/test/lib/vedeu/support/events_test.rb +37 -0
- data/test/lib/vedeu/support/exit_test.rb +1 -0
- data/test/lib/vedeu/support/geometry_test.rb +131 -0
- data/test/lib/vedeu/support/parser_test.rb +56 -0
- data/test/lib/vedeu/support/queue_test.rb +1 -0
- data/test/lib/vedeu/support/terminal_test.rb +1 -119
- data/test/lib/vedeu/{output → support}/translator_test.rb +17 -12
- data/test/lib/vedeu/{output → support}/wordwrap_test.rb +1 -0
- data/test/lib/vedeu/version_test.rb +1 -0
- data/test/lib/vedeu_test.rb +1 -0
- data/{lib/vedeu/repository → test/support}/dummy_command.rb +0 -0
- data/{lib/vedeu/repository → test/support}/dummy_interface.rb +0 -0
- data/test/support/json/int1_lin1_str1.json +10 -0
- data/test/support/json/int1_lin1_str3.json +18 -0
- data/test/support/json/int1_lin2_str1.json +17 -0
- data/test/support/json/int1_lin2_str3.json +33 -0
- data/test/support/json/int1_lin2_str3_styles.json +43 -0
- data/test/support/json/int2_lin1_str1.json +20 -0
- data/test/support/json/int2_lin1_str3.json +36 -0
- data/test/support/json/int2_lin2_str1.json +34 -0
- data/test/support/json/int2_lin2_str3.json +66 -0
- data/test/support/json/int2_lin2_str3_styles.json +158 -0
- data/test/support/output_1.json +9 -0
- data/test/support/output_1.rb +14 -0
- data/test/support/output_2.json +1 -0
- data/test/support/output_2.rb +19 -0
- data/test/test_helper.rb +0 -2
- data/vedeu.gemspec +0 -3
- metadata +98 -150
- data/config/cucumber.yml +0 -8
- data/documentation/composition.ebnf +0 -7
- data/documentation/diagram/ColourDirective.png +0 -0
- data/documentation/diagram/Directive.png +0 -0
- data/documentation/diagram/Interface.png +0 -0
- data/documentation/diagram/Output.png +0 -0
- data/documentation/diagram/PositionDirective.png +0 -0
- data/documentation/diagram/Stream.png +0 -0
- data/documentation/diagram/StyleDirective.png +0 -0
- data/documentation/diagram/rr-1.35.837.png +0 -0
- data/documentation/index.html +0 -325
- data/features/getting_started.feature +0 -10
- data/features/step_definitions/vedeu_steps.rb +0 -11
- data/features/support/env.rb +0 -12
- data/lib/vedeu/output/background.rb +0 -27
- data/lib/vedeu/output/base.rb +0 -57
- data/lib/vedeu/output/buffer/composition.rb +0 -24
- data/lib/vedeu/output/buffer/formatting.rb +0 -25
- data/lib/vedeu/output/buffer/interface.rb +0 -14
- data/lib/vedeu/output/buffer/line.rb +0 -14
- data/lib/vedeu/output/buffer/stream.rb +0 -14
- data/lib/vedeu/output/buffer/style.rb +0 -11
- data/lib/vedeu/output/colour.rb +0 -39
- data/lib/vedeu/output/compositor.rb +0 -72
- data/lib/vedeu/output/directive.rb +0 -63
- data/lib/vedeu/output/esc.rb +0 -61
- data/lib/vedeu/output/foreground.rb +0 -27
- data/lib/vedeu/output/geometry.rb +0 -71
- data/lib/vedeu/output/layer.rb +0 -9
- data/lib/vedeu/output/menu.rb +0 -26
- data/lib/vedeu/output/position.rb +0 -35
- data/lib/vedeu/output/style.rb +0 -38
- data/lib/vedeu/repository/interface.rb +0 -62
- data/lib/vedeu/support/json_parser.rb +0 -25
- data/lib/vedeu/support/options.rb +0 -4
- data/test/lib/vedeu/output/background_test.rb +0 -67
- data/test/lib/vedeu/output/base_test.rb +0 -8
- data/test/lib/vedeu/output/buffer/composition_test.rb +0 -57
- data/test/lib/vedeu/output/buffer/formatting_test.rb +0 -9
- data/test/lib/vedeu/output/buffer/interface_test.rb +0 -38
- data/test/lib/vedeu/output/buffer/line_test.rb +0 -64
- data/test/lib/vedeu/output/buffer/stream_test.rb +0 -61
- data/test/lib/vedeu/output/buffer/style_test.rb +0 -8
- data/test/lib/vedeu/output/colour_test.rb +0 -104
- data/test/lib/vedeu/output/compositor_test.rb +0 -247
- data/test/lib/vedeu/output/directive_test.rb +0 -82
- data/test/lib/vedeu/output/esc_test.rb +0 -175
- data/test/lib/vedeu/output/foreground_test.rb +0 -67
- data/test/lib/vedeu/output/geometry_test.rb +0 -190
- data/test/lib/vedeu/output/layer_test.rb +0 -35
- data/test/lib/vedeu/output/menu_test.rb +0 -13
- data/test/lib/vedeu/output/position_test.rb +0 -48
- data/test/lib/vedeu/output/style_test.rb +0 -132
- data/test/lib/vedeu/repository/command_test.rb +0 -73
- data/test/lib/vedeu/repository/dummy_command_test.rb +0 -27
- data/test/lib/vedeu/repository/dummy_interface_test.rb +0 -7
- data/test/lib/vedeu/repository/interface_test.rb +0 -79
- data/test/lib/vedeu/support/json_parser_test.rb +0 -45
- data/test/support/composition.json +0 -47
- data/test/support/composition.rb +0 -5
- data/test/support/composition.xml +0 -36
- data/test/support/multi_interface.json +0 -34
- data/test/support/single_interface.json +0 -19
@@ -0,0 +1,21 @@
|
|
1
|
+
module Vedeu
|
2
|
+
class Events
|
3
|
+
def initialize
|
4
|
+
@handlers = Hash.new { |h, k| h[k] = [] }
|
5
|
+
end
|
6
|
+
|
7
|
+
def on(event, &block)
|
8
|
+
handlers[event] << block
|
9
|
+
end
|
10
|
+
|
11
|
+
def trigger(event, *args)
|
12
|
+
handlers[event].each do |handler|
|
13
|
+
handler.call(*args)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_accessor :handlers
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require_relative 'esc'
|
2
|
+
require_relative 'terminal'
|
3
|
+
|
4
|
+
module Vedeu
|
5
|
+
class Geometry
|
6
|
+
def self.origin(interface, index = 0)
|
7
|
+
new(interface, index).origin
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(interface, index = 0)
|
11
|
+
@interface, @index = interface, index
|
12
|
+
end
|
13
|
+
|
14
|
+
def origin
|
15
|
+
Esc.set_position(virtual_y(index), virtual_x)
|
16
|
+
end
|
17
|
+
|
18
|
+
def virtual_x(index = 0)
|
19
|
+
((x..max_x).to_a)[index]
|
20
|
+
end
|
21
|
+
|
22
|
+
def virtual_y(index = 0)
|
23
|
+
((y..max_y).to_a)[index]
|
24
|
+
end
|
25
|
+
|
26
|
+
def max_y
|
27
|
+
if ((y + height) > Terminal.height)
|
28
|
+
Terminal.height
|
29
|
+
|
30
|
+
else
|
31
|
+
(y + height)
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def max_x
|
37
|
+
if ((x + width) > Terminal.width)
|
38
|
+
Terminal.width
|
39
|
+
|
40
|
+
else
|
41
|
+
(x + width)
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
attr_reader :interface, :index
|
49
|
+
|
50
|
+
def height
|
51
|
+
interface.height
|
52
|
+
end
|
53
|
+
|
54
|
+
def width
|
55
|
+
interface.width
|
56
|
+
end
|
57
|
+
|
58
|
+
def x
|
59
|
+
interface.x
|
60
|
+
end
|
61
|
+
|
62
|
+
def y
|
63
|
+
interface.y
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'oj'
|
2
|
+
|
3
|
+
require_relative '../models/composition'
|
4
|
+
|
5
|
+
module Vedeu
|
6
|
+
class Parser
|
7
|
+
def self.parse(output)
|
8
|
+
new(output).parse
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(output)
|
12
|
+
@output = output || ''
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse
|
16
|
+
Composition.new(as_hash)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_reader :output
|
22
|
+
|
23
|
+
def as_hash
|
24
|
+
Oj.load(output, symbol_keys: true)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,154 +1,51 @@
|
|
1
|
-
|
2
|
-
class Terminal
|
3
|
-
class << self
|
4
|
-
def input
|
5
|
-
console.gets.chomp
|
6
|
-
end
|
7
|
-
|
8
|
-
def output(stream = '')
|
9
|
-
console.print(stream)
|
10
|
-
|
11
|
-
stream
|
12
|
-
end
|
13
|
-
|
14
|
-
def width
|
15
|
-
size.last
|
16
|
-
end
|
17
|
-
|
18
|
-
def height
|
19
|
-
size.first
|
20
|
-
end
|
21
|
-
|
22
|
-
def size
|
23
|
-
console.winsize
|
24
|
-
end
|
25
|
-
|
26
|
-
def open(options = {}, &block)
|
27
|
-
new(options).open(&block)
|
28
|
-
end
|
29
|
-
|
30
|
-
def close
|
31
|
-
show_cursor
|
32
|
-
|
33
|
-
reset_colours
|
34
|
-
|
35
|
-
reset_position
|
36
|
-
end
|
37
|
-
|
38
|
-
# :nocov:
|
39
|
-
def cooked(instance, &block)
|
40
|
-
console.cooked do
|
41
|
-
instance.initial_setup!
|
42
|
-
|
43
|
-
yield instance
|
44
|
-
end if block_given?
|
45
|
-
end
|
46
|
-
|
47
|
-
def raw(instance, &block)
|
48
|
-
console.raw do
|
49
|
-
instance.initial_setup!
|
50
|
-
|
51
|
-
yield instance
|
52
|
-
end if block_given?
|
53
|
-
end
|
54
|
-
# :nocov:
|
55
|
-
|
56
|
-
def console
|
57
|
-
IO.console
|
58
|
-
end
|
59
|
-
|
60
|
-
def clear_screen
|
61
|
-
output(Esc.reset)
|
62
|
-
output(Esc.clear)
|
63
|
-
end
|
64
|
-
|
65
|
-
def clear_line(index)
|
66
|
-
output(Position.set(index, 1) + (' ' * width) + Position.set(index, 1))
|
67
|
-
end
|
68
|
-
|
69
|
-
def show_cursor
|
70
|
-
output(Cursor.show)
|
71
|
-
end
|
1
|
+
require 'io/console'
|
72
2
|
|
73
|
-
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
def reset_colours
|
78
|
-
output(Esc.reset)
|
79
|
-
end
|
80
|
-
|
81
|
-
def reset_position
|
82
|
-
puts
|
83
|
-
|
84
|
-
clear_line(height - 1)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def initialize(options = {}, &block)
|
89
|
-
@options = options || {}
|
90
|
-
|
91
|
-
yield self if block_given?
|
92
|
-
end
|
93
|
-
|
94
|
-
def open(&block)
|
95
|
-
terminal_mode(&block).fetch(mode, noop).call
|
96
|
-
end
|
97
|
-
|
98
|
-
def initial_setup!
|
99
|
-
Terminal.clear_screen if clear_screen?
|
100
|
-
set_cursor
|
101
|
-
Terminal.output(Position.reset)
|
102
|
-
end
|
103
|
-
|
104
|
-
private
|
3
|
+
require_relative '../support/cursor'
|
4
|
+
require_relative '../support/esc'
|
105
5
|
|
6
|
+
module Vedeu
|
7
|
+
module Terminal
|
8
|
+
extend self
|
106
9
|
# :nocov:
|
107
|
-
def
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
10
|
+
def open(&block)
|
11
|
+
console.cooked do
|
12
|
+
output Esc.reset
|
13
|
+
output Esc.clear
|
14
|
+
output Cursor.hide
|
15
|
+
|
16
|
+
yield
|
17
|
+
end if block_given?
|
18
|
+
ensure
|
19
|
+
output Cursor.show
|
20
|
+
output Esc.reset
|
21
|
+
output Esc.clear_last_line
|
119
22
|
end
|
120
23
|
# :nocov:
|
121
24
|
|
122
|
-
def
|
123
|
-
|
25
|
+
def input
|
26
|
+
console.gets.chomp
|
124
27
|
end
|
125
28
|
|
126
|
-
def
|
127
|
-
|
128
|
-
end
|
29
|
+
def output(stream = '')
|
30
|
+
console.print(stream)
|
129
31
|
|
130
|
-
|
131
|
-
options.fetch(:mode)
|
32
|
+
stream
|
132
33
|
end
|
133
34
|
|
134
|
-
def
|
135
|
-
|
35
|
+
def width
|
36
|
+
size.last
|
136
37
|
end
|
137
38
|
|
138
|
-
def
|
139
|
-
|
39
|
+
def height
|
40
|
+
size.first
|
140
41
|
end
|
141
42
|
|
142
|
-
def
|
143
|
-
|
43
|
+
def size
|
44
|
+
console.winsize
|
144
45
|
end
|
145
46
|
|
146
|
-
def
|
147
|
-
|
148
|
-
mode: :cooked, # or :raw
|
149
|
-
clear: true, # or false (clears the screen if true)
|
150
|
-
cursor: :show, # or :hide
|
151
|
-
}
|
47
|
+
def console
|
48
|
+
IO.console
|
152
49
|
end
|
153
50
|
end
|
154
51
|
end
|
@@ -1,17 +1,15 @@
|
|
1
1
|
module Vedeu
|
2
2
|
class Translator
|
3
|
-
|
4
|
-
|
5
|
-
new(html_colour).translate
|
6
|
-
end
|
3
|
+
def self.translate(html_colour = '')
|
4
|
+
new(html_colour).translate
|
7
5
|
end
|
8
6
|
|
9
|
-
def initialize(html_colour =
|
10
|
-
@html_colour = html_colour
|
7
|
+
def initialize(html_colour = '')
|
8
|
+
@html_colour = html_colour || ''
|
11
9
|
end
|
12
10
|
|
13
11
|
def translate
|
14
|
-
return unless valid?
|
12
|
+
return '' unless valid?
|
15
13
|
[16, red, green, blue].inject(:+)
|
16
14
|
end
|
17
15
|
|
@@ -32,7 +30,13 @@ module Vedeu
|
|
32
30
|
end
|
33
31
|
|
34
32
|
def valid?
|
35
|
-
|
33
|
+
present? && valid_type? && valid_format?
|
34
|
+
end
|
35
|
+
|
36
|
+
def present?
|
37
|
+
return true unless html_colour.nil? || html_colour.empty?
|
38
|
+
|
39
|
+
false
|
36
40
|
end
|
37
41
|
|
38
42
|
def valid_type?
|
data/lib/vedeu/version.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../../test_helper'
|
2
|
+
require_relative '../../../lib/vedeu/application'
|
2
3
|
|
3
4
|
module Vedeu
|
4
5
|
describe Application do
|
@@ -6,8 +7,12 @@ module Vedeu
|
|
6
7
|
let(:described_instance) { described_class.new(options) }
|
7
8
|
let(:options) { {} }
|
8
9
|
|
9
|
-
|
10
|
-
|
10
|
+
describe '#initialize' do
|
11
|
+
let(:subject) { described_class.new(options) }
|
12
|
+
|
13
|
+
it 'returns an Application instance' do
|
14
|
+
subject.must_be_instance_of(Application)
|
15
|
+
end
|
11
16
|
end
|
12
17
|
|
13
18
|
describe '.start' do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../../test_helper'
|
2
|
+
require_relative '../../../lib/vedeu/configuration'
|
2
3
|
|
3
4
|
module Vedeu
|
4
5
|
describe Configuration do
|
@@ -7,16 +8,20 @@ module Vedeu
|
|
7
8
|
let(:args) { [] }
|
8
9
|
let(:subject) { described_instance }
|
9
10
|
|
10
|
-
|
11
|
-
subject
|
12
|
-
end
|
11
|
+
describe '#initialize' do
|
12
|
+
let(:subject) { described_instance }
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
it 'returns a Configuration instance' do
|
15
|
+
subject.must_be_instance_of(Configuration)
|
16
|
+
end
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
it 'sets an instance variable' do
|
19
|
+
subject.instance_variable_get('@args').must_equal([])
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'sets an instance variable' do
|
23
|
+
subject.instance_variable_get('@options').must_equal({})
|
24
|
+
end
|
20
25
|
end
|
21
26
|
|
22
27
|
describe '#configure' do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../../../test_helper'
|
2
|
+
require_relative '../../../../lib/vedeu/input/input'
|
2
3
|
|
3
4
|
module Vedeu
|
4
5
|
describe Input do
|
@@ -17,7 +18,7 @@ module Vedeu
|
|
17
18
|
subject.must_be_instance_of(Array)
|
18
19
|
end
|
19
20
|
|
20
|
-
it 'returns the
|
21
|
+
it 'returns the enqueued input' do
|
21
22
|
subject.must_equal([input])
|
22
23
|
end
|
23
24
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../../test_helper'
|
2
|
+
require_relative '../../../lib/vedeu/launcher'
|
2
3
|
|
3
4
|
module Vedeu
|
4
5
|
describe Launcher do
|
@@ -8,8 +9,12 @@ module Vedeu
|
|
8
9
|
|
9
10
|
before { Application.stubs(:start) }
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
describe '#initialize' do
|
13
|
+
let(:subject) { described_class.new(argv) }
|
14
|
+
|
15
|
+
it 'returns a Launcher instance' do
|
16
|
+
subject.must_be_instance_of(Launcher)
|
17
|
+
end
|
13
18
|
end
|
14
19
|
|
15
20
|
describe '#execute!' do
|