vedeu 0.0.29 → 0.0.30
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 +27 -2
- data/lib/vedeu/application.rb +2 -0
- data/lib/vedeu/models/composition.rb +11 -1
- data/lib/vedeu/models/interface.rb +16 -2
- data/lib/vedeu/models/interface_collection.rb +3 -12
- data/lib/vedeu/models/line.rb +12 -1
- data/lib/vedeu/models/line_collection.rb +5 -13
- data/lib/vedeu/models/stream.rb +11 -1
- data/lib/vedeu/models/stream_collection.rb +5 -13
- data/lib/vedeu/models/style_collection.rb +5 -9
- data/lib/vedeu/output/output.rb +2 -6
- data/lib/vedeu/repository/repository.rb +0 -4
- data/lib/vedeu/support/esc.rb +23 -77
- data/lib/vedeu/support/parser.rb +1 -1
- data/lib/vedeu/support/terminal.rb +5 -6
- data/lib/vedeu/support/wordwrap.rb +3 -0
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/models/composition_test.rb +4 -4
- data/test/lib/vedeu/models/interface_collection_test.rb +5 -1
- data/test/lib/vedeu/models/interface_test.rb +1 -1
- data/test/lib/vedeu/models/line_test.rb +10 -1
- data/test/lib/vedeu/models/presentation_test.rb +32 -1
- data/test/lib/vedeu/output/output_test.rb +3 -11
- data/test/lib/vedeu/repository/repository_test.rb +0 -9
- data/test/lib/vedeu/support/esc_test.rb +2 -158
- data/vedeu.gemspec +3 -3
- metadata +14 -25
- data/bin/composition +0 -14
- data/examples/single_interface_app.rb +0 -49
- data/lib/vedeu/models/coercions.rb +0 -21
- data/lib/vedeu/support/cursor.rb +0 -51
- data/test/lib/vedeu/support/cursor_test.rb +0 -176
- data/test/support/output_2.json +0 -1
- data/test/support/output_2.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fad9751a79b86fc406d103fe1882055758c9ca52
|
4
|
+
data.tar.gz: 92d0385d33aee322dd606720acf85e2e892058e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1aa0f28cd2622a96f9bd39b0dfda454efc73e5fc330d6b7387cb74f041bc4b6725ccdd717166311dd4b9c8071b70de6cb50cc40bf6f429bd62a1d797496b9368
|
7
|
+
data.tar.gz: 08607e602dfb5d7a89688069dee68e3a34acf8b3a2f8b725f6c3ecbbaddf8fd65004d1c44dae8a088531c08f108973c95c1288cd22d622a3fca5ba57c84b9991
|
data/README.md
CHANGED
@@ -34,6 +34,20 @@ Expect proper documentation soon!
|
|
34
34
|
keyword: 'quit' }
|
35
35
|
end
|
36
36
|
|
37
|
+
|
38
|
+
### Some Terms
|
39
|
+
|
40
|
+
To understand how Vedeu works, you need to familiarise yourself with some terms.
|
41
|
+
|
42
|
+
- Interface: This is an area on the screen where you can take input or direct output. You will define it's colour and style, its dimensions, including position and give it a name. You can then direct the output of a command to this interface and Vedeu will ensure the content is placed there. Interfaces can be layered, allowing pseudo 3D effects (if that floats your boat), or to provide a richer application experience.
|
43
|
+
|
44
|
+
- Line: An interface is composed of many lines. Their length being the width of the interface and their number being the height of the interface.
|
45
|
+
|
46
|
+
An interface with `width: 12, height: 5` will have five lines, each made of 12 characters.
|
47
|
+
|
48
|
+
- Stream: A stream is a subset of a line. Having streams basically allow us to apply styles and colours to part of a line; their not necessary, but provide you with greater flexibility for your output.
|
49
|
+
|
50
|
+
|
37
51
|
### On Defining Interfaces
|
38
52
|
|
39
53
|
interface :main, {
|
@@ -83,7 +97,18 @@ Geometry for Vedeu, as the same for ANSI terminals, is set top-left, which is po
|
|
83
97
|
|
84
98
|
### Colours
|
85
99
|
|
86
|
-
Vedeu uses HTML/CSS style notation (i.e. '#aadd00').
|
100
|
+
Vedeu uses HTML/CSS style notation (i.e. '#aadd00'), they can be used at the stream level, the line level or for the whole interface.
|
101
|
+
|
102
|
+
"colour": { "foreground": "#ff0000", "background": "#ffffff" }
|
103
|
+
|
104
|
+
|
105
|
+
### Styles
|
106
|
+
|
107
|
+
Vedeu has a range of symbol styles which are compatible with most terminals which are ANSI compatible.
|
108
|
+
|
109
|
+
"style": []
|
110
|
+
|
111
|
+
Like colours, they can be defined in either interfaces, for specific lines or within streams. Styles are applied as encountered.
|
87
112
|
|
88
113
|
|
89
114
|
### Layers
|
@@ -97,7 +122,7 @@ Vedeu uses two rules.
|
|
97
122
|
|
98
123
|
## Contributing
|
99
124
|
|
100
|
-
1. Fork it ( http://github.com
|
125
|
+
1. Fork it ( http://github.com/gavinlaking/vedeu/fork )
|
101
126
|
2. Clone it
|
102
127
|
3. `bundle`
|
103
128
|
4. `rake` or `bundle exec guard`
|
data/lib/vedeu/application.rb
CHANGED
@@ -18,14 +18,24 @@ module Vedeu
|
|
18
18
|
interface.enqueue(interface.to_s)
|
19
19
|
interface
|
20
20
|
end
|
21
|
+
|
22
|
+
self
|
21
23
|
end
|
22
24
|
|
23
25
|
def to_json
|
24
|
-
Oj.dump(
|
26
|
+
Oj.dump(json_attributes, mode: :compat)
|
25
27
|
end
|
26
28
|
|
27
29
|
def to_s
|
28
30
|
interfaces.map(&:to_s).join
|
29
31
|
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def json_attributes
|
36
|
+
{
|
37
|
+
interfaces: interfaces
|
38
|
+
}
|
39
|
+
end
|
30
40
|
end
|
31
41
|
end
|
@@ -4,7 +4,6 @@ require_relative 'presentation'
|
|
4
4
|
require_relative 'line_collection'
|
5
5
|
require_relative '../output/interface_renderer'
|
6
6
|
require_relative '../support/esc'
|
7
|
-
require_relative '../support/cursor'
|
8
7
|
require_relative '../support/queue'
|
9
8
|
require_relative '../support/terminal'
|
10
9
|
|
@@ -38,7 +37,7 @@ module Vedeu
|
|
38
37
|
end
|
39
38
|
|
40
39
|
def to_json
|
41
|
-
Oj.dump(
|
40
|
+
Oj.dump(json_attributes, mode: :compat)
|
42
41
|
end
|
43
42
|
|
44
43
|
def to_s
|
@@ -58,5 +57,20 @@ module Vedeu
|
|
58
57
|
def clear_interface
|
59
58
|
InterfaceRenderer.clear(self)
|
60
59
|
end
|
60
|
+
|
61
|
+
def json_attributes
|
62
|
+
{
|
63
|
+
colour: colour, # TODO: translate back?
|
64
|
+
style: style,
|
65
|
+
name: name,
|
66
|
+
lines: lines,
|
67
|
+
y: y,
|
68
|
+
x: x,
|
69
|
+
z: z,
|
70
|
+
width: width,
|
71
|
+
height: height,
|
72
|
+
cursor: cursor
|
73
|
+
}
|
74
|
+
end
|
61
75
|
end
|
62
76
|
end
|
@@ -1,23 +1,14 @@
|
|
1
1
|
require 'virtus'
|
2
2
|
|
3
3
|
require_relative '../repository/interface_repository'
|
4
|
-
require_relative 'coercions'
|
5
4
|
|
6
5
|
module Vedeu
|
7
6
|
class InterfaceCollection < Virtus::Attribute
|
8
|
-
include Coercions
|
9
|
-
|
10
7
|
def coerce(values)
|
11
|
-
return [] if empty?
|
12
|
-
|
13
|
-
if multiple?(values)
|
14
|
-
values.map do |value|
|
15
|
-
InterfaceRepository.update(value[:name], value)
|
16
|
-
end
|
17
|
-
|
18
|
-
elsif single?(values)
|
19
|
-
[InterfaceRepository.update(values[:name], values)]
|
8
|
+
return [] if values.nil? || values.empty?
|
20
9
|
|
10
|
+
[values].flatten.map do |value|
|
11
|
+
InterfaceRepository.update(value.fetch(:name, nil), value)
|
21
12
|
end
|
22
13
|
end
|
23
14
|
end
|
data/lib/vedeu/models/line.rb
CHANGED
@@ -9,14 +9,25 @@ module Vedeu
|
|
9
9
|
include Virtus.model
|
10
10
|
include Presentation
|
11
11
|
|
12
|
+
attribute :model, Hash
|
12
13
|
attribute :streams, StreamCollection
|
13
14
|
|
14
15
|
def to_json
|
15
|
-
Oj.dump(
|
16
|
+
Oj.dump(json_attributes, mode: :compat)
|
16
17
|
end
|
17
18
|
|
18
19
|
def to_s
|
19
20
|
[colour, style, streams].join
|
20
21
|
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def json_attributes
|
26
|
+
{
|
27
|
+
colour: colour,
|
28
|
+
style: style,
|
29
|
+
streams: streams
|
30
|
+
}
|
31
|
+
end
|
21
32
|
end
|
22
33
|
end
|
@@ -1,26 +1,18 @@
|
|
1
1
|
require 'virtus'
|
2
2
|
|
3
3
|
require_relative 'line'
|
4
|
-
require_relative 'coercions'
|
5
4
|
|
6
5
|
module Vedeu
|
7
|
-
class InvalidLine < StandardError; end
|
8
|
-
|
9
6
|
class LineCollection < Virtus::Attribute
|
10
|
-
include Coercions
|
11
|
-
|
12
7
|
def coerce(values)
|
13
|
-
return [] if empty?
|
14
|
-
|
15
|
-
if multiple?(values)
|
16
|
-
values.map { |v| Line.new(v) }
|
8
|
+
return [] if values.nil? || values.empty?
|
17
9
|
|
18
|
-
|
19
|
-
[Line.new(values)]
|
20
|
-
|
21
|
-
elsif just_text?(values)
|
10
|
+
if values.is_a?(::String)
|
22
11
|
[Line.new({ streams: values })]
|
23
12
|
|
13
|
+
else
|
14
|
+
[values].flatten.map { |value| Line.new(value) }
|
15
|
+
|
24
16
|
end
|
25
17
|
end
|
26
18
|
end
|
data/lib/vedeu/models/stream.rb
CHANGED
@@ -11,11 +11,21 @@ module Vedeu
|
|
11
11
|
attribute :text, String, default: ''
|
12
12
|
|
13
13
|
def to_json
|
14
|
-
Oj.dump(
|
14
|
+
Oj.dump(json_attributes, mode: :compat)
|
15
15
|
end
|
16
16
|
|
17
17
|
def to_s(options = {})
|
18
18
|
[colour, style, text].join
|
19
19
|
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def json_attributes
|
24
|
+
{
|
25
|
+
colour: colour,
|
26
|
+
style: style,
|
27
|
+
text: text
|
28
|
+
}
|
29
|
+
end
|
20
30
|
end
|
21
31
|
end
|
@@ -1,26 +1,18 @@
|
|
1
1
|
require 'virtus'
|
2
2
|
|
3
3
|
require_relative 'stream'
|
4
|
-
require_relative 'coercions'
|
5
4
|
|
6
5
|
module Vedeu
|
7
|
-
class InvalidStream < StandardError; end
|
8
|
-
|
9
6
|
class StreamCollection < Virtus::Attribute
|
10
|
-
include Coercions
|
11
|
-
|
12
7
|
def coerce(values)
|
13
|
-
return [] if empty?
|
14
|
-
|
15
|
-
if multiple?(values)
|
16
|
-
values.map { |v| Stream.new(v) }
|
8
|
+
return [] if values.nil? || values.empty?
|
17
9
|
|
18
|
-
|
19
|
-
[Stream.new(values)]
|
20
|
-
|
21
|
-
elsif values.is_a?(String)
|
10
|
+
if values.is_a?(::String)
|
22
11
|
[Stream.new({ text: values })]
|
23
12
|
|
13
|
+
else
|
14
|
+
[values].flatten.map { |value| Stream.new(value) }
|
15
|
+
|
24
16
|
end
|
25
17
|
end
|
26
18
|
end
|
@@ -1,21 +1,17 @@
|
|
1
1
|
require 'virtus'
|
2
2
|
|
3
|
-
require_relative '../support/cursor'
|
4
3
|
require_relative '../support/esc'
|
5
|
-
require_relative 'coercions'
|
6
4
|
|
7
5
|
module Vedeu
|
8
6
|
class StyleCollection < Virtus::Attribute
|
9
|
-
include Coercions
|
10
|
-
|
11
7
|
def coerce(values)
|
12
|
-
return '' if empty?
|
8
|
+
return '' if values.nil? || values.empty?
|
13
9
|
|
14
|
-
if
|
15
|
-
values.map { |value| Esc.
|
10
|
+
if values.is_a?(::Array)
|
11
|
+
values.map { |value| Esc.string(value) }.join
|
16
12
|
|
17
|
-
elsif
|
18
|
-
Esc.
|
13
|
+
elsif values.is_a?(::String)
|
14
|
+
Esc.string(values)
|
19
15
|
|
20
16
|
end
|
21
17
|
end
|
data/lib/vedeu/output/output.rb
CHANGED
@@ -2,12 +2,8 @@ require_relative '../repository/interface_repository'
|
|
2
2
|
require_relative '../support/terminal'
|
3
3
|
|
4
4
|
module Vedeu
|
5
|
-
|
6
|
-
|
7
|
-
new.render
|
8
|
-
end
|
9
|
-
|
10
|
-
def initialize; end
|
5
|
+
module Output
|
6
|
+
extend self
|
11
7
|
|
12
8
|
def render
|
13
9
|
InterfaceRepository.refresh.each do |interface|
|
data/lib/vedeu/support/esc.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require_relative 'cursor'
|
2
1
|
require_relative 'terminal'
|
3
2
|
require_relative 'translator'
|
4
3
|
|
@@ -7,102 +6,49 @@ module Vedeu
|
|
7
6
|
extend self
|
8
7
|
|
9
8
|
def background_colour(value = '#000000')
|
10
|
-
[
|
11
|
-
end
|
12
|
-
|
13
|
-
def blink
|
14
|
-
[esc, '5m'].join
|
15
|
-
end
|
16
|
-
|
17
|
-
def blink_off
|
18
|
-
[esc, '25m'].join
|
19
|
-
end
|
20
|
-
|
21
|
-
def bold
|
22
|
-
[esc, '1m'].join
|
23
|
-
end
|
24
|
-
|
25
|
-
def bold_off
|
26
|
-
[esc, '21m'].join
|
27
|
-
end
|
28
|
-
|
29
|
-
def clear
|
30
|
-
[esc, '2J'].join
|
9
|
+
["\e[48;5;", colour_translator(value), 'm'].join
|
31
10
|
end
|
32
11
|
|
33
12
|
def clear_line
|
34
|
-
[
|
13
|
+
"\e[2K"
|
35
14
|
end
|
36
15
|
|
37
|
-
def clear_last_line
|
16
|
+
def clear_last_line
|
38
17
|
set_position((Terminal.height - 1), 1) + clear_line
|
39
18
|
end
|
40
19
|
|
41
|
-
# def cursor(value)
|
42
|
-
# Cursor.
|
43
|
-
# end
|
44
|
-
|
45
|
-
def esc
|
46
|
-
[27.chr, '['].join
|
47
|
-
end
|
48
|
-
|
49
20
|
def foreground_colour(value = '#ffffff')
|
50
|
-
[
|
51
|
-
end
|
52
|
-
#
|
53
|
-
def negative
|
54
|
-
[esc, '7m'].join
|
55
|
-
end
|
56
|
-
|
57
|
-
def positive
|
58
|
-
[esc, '27m'].join
|
59
|
-
end
|
60
|
-
|
61
|
-
def normal
|
62
|
-
[underline_off, bold_off, positive].join
|
63
|
-
end
|
64
|
-
|
65
|
-
def dim
|
66
|
-
[esc, '2m'].join
|
67
|
-
end
|
68
|
-
|
69
|
-
def reset
|
70
|
-
[esc, '0m'].join
|
21
|
+
["\e[38;5;", colour_translator(value), 'm'].join
|
71
22
|
end
|
72
23
|
|
73
24
|
def set_position(y = 1, x = 1)
|
74
|
-
|
25
|
+
row = (y == 0 || y == nil) ? 1 : y
|
26
|
+
column = (x == 0 || x == nil) ? 1 : x
|
27
|
+
|
28
|
+
["\e[", row, ';', column, 'H'].join
|
75
29
|
end
|
76
30
|
|
77
|
-
def
|
31
|
+
def string(value = 'normal')
|
78
32
|
case value
|
79
|
-
when 'blink' then
|
80
|
-
when 'blink_off' then
|
81
|
-
when 'bold' then
|
82
|
-
when 'bold_off' then
|
83
|
-
when 'clear' then
|
84
|
-
when 'hide_cursor' then
|
85
|
-
when 'negative' then
|
86
|
-
when 'positive' then
|
87
|
-
when 'reset' then
|
88
|
-
when 'normal' then
|
89
|
-
when 'dim' then
|
90
|
-
when 'show_cursor' then
|
91
|
-
when 'underline' then
|
92
|
-
when 'underline_off' then
|
33
|
+
when 'blink' then "\e[5m"
|
34
|
+
when 'blink_off' then "\e[25m"
|
35
|
+
when 'bold' then "\e[1m"
|
36
|
+
when 'bold_off' then "\e[21m"
|
37
|
+
when 'clear' then "\e[2J"
|
38
|
+
when 'hide_cursor' then "\e[?25l"
|
39
|
+
when 'negative' then "\e[7m"
|
40
|
+
when 'positive' then "\e[27m"
|
41
|
+
when 'reset' then "\e[0m"
|
42
|
+
when 'normal' then "\e[24m\e[21m\e[27m"
|
43
|
+
when 'dim' then "\e[2m"
|
44
|
+
when 'show_cursor' then "\e[?25h"
|
45
|
+
when 'underline' then "\e[4m"
|
46
|
+
when 'underline_off' then "\e[24m"
|
93
47
|
else
|
94
48
|
''
|
95
49
|
end
|
96
50
|
end
|
97
51
|
|
98
|
-
def underline
|
99
|
-
[esc, '4m'].join
|
100
|
-
end
|
101
|
-
|
102
|
-
def underline_off
|
103
|
-
[esc, '24m'].join
|
104
|
-
end
|
105
|
-
|
106
52
|
private
|
107
53
|
|
108
54
|
def colour_translator(value)
|