vedeu 0.4.51 → 0.4.52
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/colour_support.sh +7 -2
- data/lib/vedeu/bootstrap.rb +2 -0
- data/lib/vedeu/cli/generator/application.rb +6 -0
- data/lib/vedeu/cli/generator/templates/application/.gitignore +1 -0
- data/lib/vedeu/cli/generator/templates/application/app/views/interfaces/name.erb +7 -0
- data/lib/vedeu/cli/generator/templates/application/config/configuration.erb +2 -0
- data/lib/vedeu/configuration/api.rb +31 -0
- data/lib/vedeu/configuration/configuration.rb +10 -1
- data/lib/vedeu/distributed/templates/default_configuration.vedeu +1 -0
- data/lib/vedeu/dsl/composition.rb +3 -9
- data/lib/vedeu/dsl/interface.rb +1 -1
- data/lib/vedeu/geometry/grid.rb +27 -38
- data/lib/vedeu/models/interface.rb +12 -0
- data/lib/vedeu/null/interface.rb +4 -6
- data/lib/vedeu/output/all.rb +1 -0
- data/lib/vedeu/output/clear/named_interface.rb +1 -1
- data/lib/vedeu/output/compressor.rb +28 -7
- data/lib/vedeu/output/refresh.rb +6 -7
- data/lib/vedeu/output/refresh_group.rb +52 -0
- data/lib/vedeu/output/render_border.rb +1 -1
- data/lib/vedeu/output/renderers/all.rb +2 -1
- data/lib/vedeu/output/viewport.rb +1 -1
- data/lib/vedeu/support/terminal.rb +20 -1
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/configuration/api_test.rb +19 -0
- data/test/lib/vedeu/configuration/configuration_test.rb +8 -0
- data/test/lib/vedeu/geometry/grid_test.rb +0 -12
- data/test/lib/vedeu/models/interface_test.rb +18 -0
- data/test/lib/vedeu/null/interface_test.rb +4 -0
- data/test/lib/vedeu/output/compressor_test.rb +40 -33
- data/test/lib/vedeu/output/refresh_group_test.rb +29 -0
- data/test/lib/vedeu/output/renderers/file_test.rb +6 -2
- data/test/lib/vedeu/output/renderers/html_test.rb +4 -0
- data/test/lib/vedeu/output/renderers/json_test.rb +4 -0
- data/test/lib/vedeu/support/terminal_test.rb +3 -3
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2cd921c8f76dab6e9fb3b972420e1bc86dcfb33c
|
4
|
+
data.tar.gz: f01800caf43bfcc0a9a50ae8825f3c96acd257ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33e373ad6fddc14a6ecbdf27645890dc4598b542b258b6a0f1d623fdf129c1afb10e1ba8056ba7aed4fb2d734687b8ab2539c5dd588f3e78e7a18779d1f9d708
|
7
|
+
data.tar.gz: 647940089d7ade5c1ef030898561eb542e08265b8d4c7975712780fcdc4fe7a44afa954f5a5d8830fb02db9bf57a134c02857f50847f7d121b215ac13f9a653b
|
data/examples/colour_support.sh
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
#
|
3
|
+
# Vedeu can use 24-bit color codes. To test whether your terminal supports
|
4
|
+
# this colour mode, running this file should output lots of beautiful colours.
|
5
|
+
# If the output is 'patchy' and not many colours show, then it is unlikely
|
6
|
+
# your terminal supports 24-bit colour mode, which is disappointing.
|
7
|
+
#
|
3
8
|
# This file echoes a bunch of 24-bit color codes
|
4
9
|
# to the terminal to demonstrate its functionality.
|
5
10
|
# The foreground escape sequence is ^[38;2;<r>;<g>;<b>m
|
@@ -9,12 +14,12 @@
|
|
9
14
|
|
10
15
|
setBackgroundColor()
|
11
16
|
{
|
12
|
-
echo -en "\
|
17
|
+
echo -en "\e[48;2;$1;$2;$3""m"
|
13
18
|
}
|
14
19
|
|
15
20
|
resetOutput()
|
16
21
|
{
|
17
|
-
echo -en "\
|
22
|
+
echo -en "\e[0m\n"
|
18
23
|
}
|
19
24
|
|
20
25
|
# Gives a color $1/255 % along HSV
|
data/lib/vedeu/bootstrap.rb
CHANGED
@@ -34,6 +34,7 @@ module Vedeu
|
|
34
34
|
make_directory_structure
|
35
35
|
|
36
36
|
copy_gemfile
|
37
|
+
copy_gitignore
|
37
38
|
copy_license
|
38
39
|
copy_readme
|
39
40
|
copy_application_bootstrapper
|
@@ -92,6 +93,11 @@ module Vedeu
|
|
92
93
|
copy_file(source + '/Gemfile', "#{name}/Gemfile")
|
93
94
|
end
|
94
95
|
|
96
|
+
# @return [void]
|
97
|
+
def copy_gitignore
|
98
|
+
copy_file(source + '/.gitignore', "#{name}/.gitignore")
|
99
|
+
end
|
100
|
+
|
95
101
|
# @return [void]
|
96
102
|
def copy_license
|
97
103
|
copy_file(source + '/LICENSE.txt', "#{name}/LICENSE.txt")
|
@@ -0,0 +1 @@
|
|
1
|
+
log/**/*
|
@@ -11,6 +11,10 @@ Vedeu.interface '<%= object.name %>' do
|
|
11
11
|
# disable!
|
12
12
|
#
|
13
13
|
# Individually control each border:
|
14
|
+
# hide_bottom!
|
15
|
+
# hide_left!
|
16
|
+
# hide_right!
|
17
|
+
# hide_top!
|
14
18
|
# show_bottom!
|
15
19
|
# show_left!
|
16
20
|
# show_right!
|
@@ -34,6 +38,9 @@ Vedeu.interface '<%= object.name %>' do
|
|
34
38
|
|
35
39
|
# cursor!
|
36
40
|
|
41
|
+
# See Vedeu::DSL::Interface#delay
|
42
|
+
# delay 1.0
|
43
|
+
|
37
44
|
# focus!
|
38
45
|
|
39
46
|
# foreground
|
@@ -4,6 +4,8 @@ Vedeu.configure do
|
|
4
4
|
# colour_mode 16_777_216 # Some terminals don't render colour at all if this
|
5
5
|
# value is not one of 8, 16, 256 or 16777216.
|
6
6
|
|
7
|
+
# compression false
|
8
|
+
|
7
9
|
# debug! # Add "gem 'ruby-prof'" to your Gemfile if uncommenting this line.
|
8
10
|
# drb!
|
9
11
|
# drb_host 'localhost'
|
@@ -329,6 +329,37 @@ module Vedeu
|
|
329
329
|
options[:stderr] = io
|
330
330
|
end
|
331
331
|
|
332
|
+
# Compression reduces the number of escape sequences being sent to the
|
333
|
+
# terminal which improves redraw/render/refresh rate. By default it is
|
334
|
+
# enabled.
|
335
|
+
#
|
336
|
+
# Sets boolean to enable/disable compression. Vedeu's default setting is
|
337
|
+
# for compression to be enabled. Setting `compression` to false will
|
338
|
+
# disable compression.
|
339
|
+
#
|
340
|
+
# @note
|
341
|
+
# - Be aware that running an application without compression will
|
342
|
+
# affect performance.
|
343
|
+
# - Compression cannot yet be configured using a CLI option flag.
|
344
|
+
#
|
345
|
+
# @example
|
346
|
+
# Vedeu.configure do
|
347
|
+
# compression! # enabled (default)
|
348
|
+
# # ...
|
349
|
+
# end
|
350
|
+
#
|
351
|
+
# Vedeu.configure do
|
352
|
+
# compression false
|
353
|
+
# # ...
|
354
|
+
# end
|
355
|
+
#
|
356
|
+
# @param value [Boolean]
|
357
|
+
# @return [Boolean]
|
358
|
+
def compression(value = true)
|
359
|
+
options[:compression] = value
|
360
|
+
end
|
361
|
+
alias_method :compression!, :compression
|
362
|
+
|
332
363
|
private
|
333
364
|
|
334
365
|
# Returns the options set via the configuration API DSL or an empty Hash
|
@@ -34,13 +34,21 @@ module Vedeu
|
|
34
34
|
|
35
35
|
class << self
|
36
36
|
|
37
|
-
# Returns the base_path value
|
37
|
+
# Returns the base_path value.
|
38
38
|
#
|
39
39
|
# @return [String]
|
40
40
|
def base_path
|
41
41
|
instance.options[:base_path]
|
42
42
|
end
|
43
43
|
|
44
|
+
# Returns the compression value.
|
45
|
+
#
|
46
|
+
# @return [Boolean]
|
47
|
+
def compression
|
48
|
+
instance.options[:compression]
|
49
|
+
end
|
50
|
+
alias_method :compression?, :compression
|
51
|
+
|
44
52
|
# Configure Vedeu with sensible defaults. If the client application sets
|
45
53
|
# options, override the defaults with those, and if command-line arguments
|
46
54
|
# are provided at application invocation, override any options with the
|
@@ -257,6 +265,7 @@ module Vedeu
|
|
257
265
|
{
|
258
266
|
base_path: base_path,
|
259
267
|
colour_mode: detect_colour_mode,
|
268
|
+
compression: true,
|
260
269
|
debug: false,
|
261
270
|
drb: false,
|
262
271
|
drb_host: nil,
|
@@ -113,15 +113,6 @@ module Vedeu
|
|
113
113
|
model.add(new_model)
|
114
114
|
end
|
115
115
|
|
116
|
-
# def content_for(name, filename, object = nil, options = {})
|
117
|
-
# lines = Vedeu::Template.parse(object, filename)
|
118
|
-
|
119
|
-
# _model = model.member.build(new_attributes(name).
|
120
|
-
# merge!({ lines: lines }))
|
121
|
-
|
122
|
-
# model.add(_model)
|
123
|
-
# end
|
124
|
-
|
125
116
|
protected
|
126
117
|
|
127
118
|
# @!attribute [r] client
|
@@ -141,6 +132,9 @@ module Vedeu
|
|
141
132
|
new_attributes(name).merge!(lines: lines)
|
142
133
|
end
|
143
134
|
|
135
|
+
# Return the current attributes combined with the existing interface
|
136
|
+
# attributes defined by the interface.
|
137
|
+
#
|
144
138
|
# @param name [String] The name of the interface.
|
145
139
|
# @return [Hash]
|
146
140
|
def new_attributes(name)
|
data/lib/vedeu/dsl/interface.rb
CHANGED
@@ -101,7 +101,7 @@ module Vedeu
|
|
101
101
|
# often, the reduces artefacts particularly when resizing the terminal
|
102
102
|
# screen.
|
103
103
|
#
|
104
|
-
# @param value [Fixnum|Float]
|
104
|
+
# @param value [Fixnum|Float] Time in seconds. (0.5 = 500ms).
|
105
105
|
#
|
106
106
|
# @example
|
107
107
|
# interface 'my_interface' do
|
data/lib/vedeu/geometry/grid.rb
CHANGED
@@ -1,25 +1,10 @@
|
|
1
1
|
module Vedeu
|
2
2
|
|
3
|
-
# Augment Fixnum to calculate column width or row height in a grid-based
|
4
|
-
# layout.
|
5
|
-
#
|
6
3
|
# The grid system splits the terminal height and width into 12 equal parts, by
|
7
4
|
# dividing the available height and width by 12. If the terminal height or
|
8
5
|
# width is not a multiple of 12, then Grid chooses the maximum value which
|
9
6
|
# will fit.
|
10
7
|
#
|
11
|
-
# Used primarily whilst defining geometry:
|
12
|
-
#
|
13
|
-
# width: columns(9) # (Terminal width / 12) * 9 characters wide; e.g.
|
14
|
-
# # Terminal is 92 characters wide, maximum value is
|
15
|
-
# # therefore 84, meaning a column is 7 characters wide.
|
16
|
-
# # (And width is therefore 63 characters wide.)
|
17
|
-
#
|
18
|
-
# height: rows(3) # (Terminal height / 12) * 3 rows high; e.g.
|
19
|
-
# # Terminal is 38 characters wide, maximum value is
|
20
|
-
# # therefore 36, meaning a row is 3 characters tall.
|
21
|
-
# # (And height is therefore 9 characters tall.)
|
22
|
-
#
|
23
8
|
# @api public
|
24
9
|
class Grid
|
25
10
|
|
@@ -45,6 +30,13 @@ module Vedeu
|
|
45
30
|
|
46
31
|
# Returns the width in characters for the number of columns specified.
|
47
32
|
#
|
33
|
+
# @example
|
34
|
+
# Vedeu.geometry 'main_interface' do
|
35
|
+
# width: columns(9) # Vedeu.width # => 92 (for example)
|
36
|
+
# # 92 / 12 = 7
|
37
|
+
# # 7 * 9 = 63
|
38
|
+
# # Therefore, width is 63 characters.
|
39
|
+
#
|
48
40
|
# @raise [OutOfRange] When the value parameter is not between 1 and 12
|
49
41
|
# inclusive.
|
50
42
|
# @return [Fixnum|OutOfRange]
|
@@ -55,16 +47,15 @@ module Vedeu
|
|
55
47
|
column * value
|
56
48
|
end
|
57
49
|
|
58
|
-
# Returns the height of a single row in characters.
|
59
|
-
#
|
60
|
-
# @return [Fixnum]
|
61
|
-
def height
|
62
|
-
actual_height / 12
|
63
|
-
end
|
64
|
-
alias_method :row, :height
|
65
|
-
|
66
50
|
# Returns the height in characters for the number of rows specified.
|
67
51
|
#
|
52
|
+
# @example
|
53
|
+
# Vedeu.geometry 'main_interface' do
|
54
|
+
# height: rows(3) # Vedeu.height # => 38 (for example)
|
55
|
+
# # 38 / 12 = 3
|
56
|
+
# # 3 * 3 = 9
|
57
|
+
# # Therefore, height is 9 characters.
|
58
|
+
#
|
68
59
|
# @raise [OutOfRange] When the value parameter is not between 1 and 12
|
69
60
|
# inclusive.
|
70
61
|
# @return [Fixnum|OutOfRange]
|
@@ -75,14 +66,6 @@ module Vedeu
|
|
75
66
|
row * value
|
76
67
|
end
|
77
68
|
|
78
|
-
# Returns the width of a single column in characters.
|
79
|
-
#
|
80
|
-
# @return [Fixnum]
|
81
|
-
def width
|
82
|
-
actual_width / 12
|
83
|
-
end
|
84
|
-
alias_method :column, :width
|
85
|
-
|
86
69
|
protected
|
87
70
|
|
88
71
|
# @!attribute [r] value
|
@@ -91,21 +74,27 @@ module Vedeu
|
|
91
74
|
|
92
75
|
private
|
93
76
|
|
77
|
+
# Returns the height of a single row in characters.
|
78
|
+
#
|
94
79
|
# @return [Fixnum]
|
95
|
-
def
|
96
|
-
Vedeu.height
|
97
|
-
end
|
98
|
-
|
99
|
-
# @return [Fixnum]
|
100
|
-
def actual_width
|
101
|
-
Vedeu.width
|
80
|
+
def row
|
81
|
+
Vedeu.height / 12
|
102
82
|
end
|
103
83
|
|
84
|
+
# Returns a boolean indicating whether the value is out of range.
|
85
|
+
#
|
104
86
|
# @return [Boolean]
|
105
87
|
def out_of_range?
|
106
88
|
value < 1 || value > 12
|
107
89
|
end
|
108
90
|
|
91
|
+
# Returns the width of a single column in characters.
|
92
|
+
#
|
93
|
+
# @return [Fixnum]
|
94
|
+
def column
|
95
|
+
Vedeu.width / 12
|
96
|
+
end
|
97
|
+
|
109
98
|
end # Grid
|
110
99
|
|
111
100
|
end # Vedeu
|
@@ -83,6 +83,18 @@ module Vedeu
|
|
83
83
|
@lines = lines.add(child)
|
84
84
|
end
|
85
85
|
|
86
|
+
# Override Ruby's Object#inspect method to provide a more helpful output.
|
87
|
+
#
|
88
|
+
# @return [String]
|
89
|
+
def inspect
|
90
|
+
'<Vedeu::Interface ' \
|
91
|
+
"name: '#{name}', " \
|
92
|
+
"group: '#{group}', " \
|
93
|
+
"visible: '#{visible}', " \
|
94
|
+
"zindex: '#{zindex}'" \
|
95
|
+
'>'
|
96
|
+
end
|
97
|
+
|
86
98
|
# @return [Vedeu::Lines]
|
87
99
|
def lines
|
88
100
|
collection.coerce(@lines, self)
|
data/lib/vedeu/null/interface.rb
CHANGED
@@ -11,6 +11,10 @@ module Vedeu
|
|
11
11
|
|
12
12
|
include Vedeu::Presentation
|
13
13
|
|
14
|
+
# @!attribute [r] name
|
15
|
+
# @return [String]
|
16
|
+
attr_reader :name
|
17
|
+
|
14
18
|
# Returns a new instance of Vedeu::Null::Interface.
|
15
19
|
#
|
16
20
|
# @param name [String]
|
@@ -59,12 +63,6 @@ module Vedeu
|
|
59
63
|
false
|
60
64
|
end
|
61
65
|
|
62
|
-
protected
|
63
|
-
|
64
|
-
# @!attribute [r] name
|
65
|
-
# @return [String]
|
66
|
-
attr_reader :name
|
67
|
-
|
68
66
|
end # Interface
|
69
67
|
|
70
68
|
end # Null
|
data/lib/vedeu/output/all.rb
CHANGED
@@ -26,14 +26,13 @@ module Vedeu
|
|
26
26
|
# @note Takes approximately ~70ms for 2100 chars. (2015-05-24)
|
27
27
|
# @return [String]
|
28
28
|
def render
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
if Vedeu::Configuration.compression?
|
30
|
+
compress
|
31
|
+
|
32
|
+
else
|
33
|
+
uncompress
|
34
|
+
|
35
35
|
end
|
36
|
-
out
|
37
36
|
end
|
38
37
|
|
39
38
|
protected
|
@@ -44,6 +43,28 @@ module Vedeu
|
|
44
43
|
|
45
44
|
private
|
46
45
|
|
46
|
+
def compress
|
47
|
+
out = ''
|
48
|
+
Array(output).flatten.each do |char|
|
49
|
+
out << char.position.to_s
|
50
|
+
out << colour_for(char)
|
51
|
+
out << style_for(char)
|
52
|
+
out << char.value
|
53
|
+
end
|
54
|
+
out
|
55
|
+
end
|
56
|
+
|
57
|
+
def uncompress
|
58
|
+
out = ''
|
59
|
+
Array(output).flatten.each do |char|
|
60
|
+
out << char.position.to_s
|
61
|
+
out << char.colour.to_s
|
62
|
+
out << char.style.to_s
|
63
|
+
out << char.value
|
64
|
+
end
|
65
|
+
out
|
66
|
+
end
|
67
|
+
|
47
68
|
# @param char [Vedeu::Char]
|
48
69
|
# @return [String]
|
49
70
|
def colour_for(char)
|
data/lib/vedeu/output/refresh.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative 'refresh_group'
|
2
|
+
|
1
3
|
module Vedeu
|
2
4
|
|
3
5
|
# Refreshes the terminal.
|
@@ -11,7 +13,7 @@ module Vedeu
|
|
11
13
|
#
|
12
14
|
# @return [Array]
|
13
15
|
def all
|
14
|
-
Vedeu.timer('
|
16
|
+
Vedeu.timer('Refresh All') do
|
15
17
|
Vedeu.interfaces.zindexed.each { |model| by_name(model.name) }
|
16
18
|
end
|
17
19
|
end
|
@@ -34,11 +36,8 @@ module Vedeu
|
|
34
36
|
# @return [Array|ModelNotFound] A collection of the names of interfaces
|
35
37
|
# refreshed, or an exception if the group was not found.
|
36
38
|
def by_group(group_name)
|
37
|
-
Vedeu.timer("
|
38
|
-
|
39
|
-
interfaces = members.each { |name| Vedeu.interfaces.by_name(name) }
|
40
|
-
by_zindex = interfaces.sort { |a, b| a.zindex <=> b.zindex }
|
41
|
-
by_zindex.each { |name| by_name(name) }
|
39
|
+
Vedeu.timer("Refresh Group: '#{group_name}'") do
|
40
|
+
Vedeu::RefreshGroup.by_name(group_name)
|
42
41
|
end
|
43
42
|
end
|
44
43
|
|
@@ -48,7 +47,7 @@ module Vedeu
|
|
48
47
|
# named buffer.
|
49
48
|
# @return [Array|ModelNotFound]
|
50
49
|
def by_name(name)
|
51
|
-
Vedeu.timer("
|
50
|
+
Vedeu.timer("Refresh Interface: '#{name}'") do
|
52
51
|
Vedeu.buffers.by_name(name).render
|
53
52
|
end
|
54
53
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require_relative 'refresh'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
# Refreshes the given named group of interfaces.
|
6
|
+
#
|
7
|
+
# @api private
|
8
|
+
class RefreshGroup
|
9
|
+
|
10
|
+
# @param name [String]
|
11
|
+
# @return [void]
|
12
|
+
def self.by_name(name)
|
13
|
+
new(name).by_name
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param name [String]
|
17
|
+
# @return [Vedeu::RefreshGroup]
|
18
|
+
def initialize(name)
|
19
|
+
@name = name
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [void]
|
23
|
+
def by_name
|
24
|
+
zindexed.each { |name| Vedeu::Refresh.by_name(name) }
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
# @!attribute [r] name
|
30
|
+
# @return [String]
|
31
|
+
attr_reader :name
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
# @return [Array<String>]
|
36
|
+
def zindexed
|
37
|
+
interfaces.sort { |a, b| a.zindex <=> b.zindex }.map(&:name)
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [Array<Vedeu::Interface>]
|
41
|
+
def interfaces
|
42
|
+
members.map { |name| Vedeu.interfaces.by_name(name) }
|
43
|
+
end
|
44
|
+
|
45
|
+
# @return [Set]
|
46
|
+
def members
|
47
|
+
Vedeu.groups.find!(name).members
|
48
|
+
end
|
49
|
+
|
50
|
+
end # RefreshGroup
|
51
|
+
|
52
|
+
end # Vedeu
|
@@ -37,7 +37,8 @@ module Vedeu
|
|
37
37
|
threads = storage.map do |renderer|
|
38
38
|
Thread.new(renderer) do
|
39
39
|
mutex.synchronize do
|
40
|
-
Vedeu.log(type:
|
40
|
+
Vedeu.log(type: :debug,
|
41
|
+
message: "Renderer: '#{renderer.class.name}'")
|
41
42
|
|
42
43
|
renderer.render(output)
|
43
44
|
end
|
@@ -245,9 +245,28 @@ module Vedeu
|
|
245
245
|
|
246
246
|
# Returns a tuple containing the height and width of the current terminal.
|
247
247
|
#
|
248
|
+
# @note
|
249
|
+
# If the terminal is a odd number of characters in height or width, then
|
250
|
+
# 1 is deducted from the dimension to make it even. For example; the
|
251
|
+
# actual terminal is height: 37, width: 145, then the reported size will
|
252
|
+
# be 36, 144 respectively.
|
253
|
+
#
|
254
|
+
# This is done to make it easier for client applications to divide the
|
255
|
+
# terminal space up when defining interfaces or views, leading to more
|
256
|
+
# consistent rendering.
|
257
|
+
#
|
258
|
+
# If the client application is using the {Vedeu::Grid#rows} or
|
259
|
+
# {Vedeu::Grid#columns} helpers, the dimensions are made more consistent
|
260
|
+
# using this approach.
|
261
|
+
#
|
248
262
|
# @return [Array]
|
249
263
|
def size
|
250
|
-
console.winsize
|
264
|
+
h, w = console.winsize
|
265
|
+
|
266
|
+
h = (h.even? ? h : h - 1)
|
267
|
+
w = (w.even? ? w : w - 1)
|
268
|
+
|
269
|
+
[h, w]
|
251
270
|
end
|
252
271
|
|
253
272
|
# Provides our gateway into the wonderful rainbow-filled world of IO.
|
data/lib/vedeu/version.rb
CHANGED
@@ -252,6 +252,25 @@ module Vedeu
|
|
252
252
|
# it { skip }
|
253
253
|
end
|
254
254
|
|
255
|
+
describe '#compression!' do
|
256
|
+
it { instance.must_respond_to(:compression) }
|
257
|
+
|
258
|
+
it 'sets the option to the desired value' do
|
259
|
+
configuration = Vedeu.configure { compression! }
|
260
|
+
configuration.compression.must_equal(true)
|
261
|
+
end
|
262
|
+
|
263
|
+
it 'sets the option to the desired value' do
|
264
|
+
configuration = Vedeu.configure { compression(true) }
|
265
|
+
configuration.compression.must_equal(true)
|
266
|
+
end
|
267
|
+
|
268
|
+
it 'sets the option to the desired value' do
|
269
|
+
configuration = Vedeu.configure { compression(false) }
|
270
|
+
configuration.compression.must_equal(false)
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
255
274
|
end # API
|
256
275
|
|
257
276
|
end # Config
|
@@ -17,6 +17,14 @@ module Vedeu
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
describe '.compression?' do
|
21
|
+
it { described.must_respond_to(:compression) }
|
22
|
+
|
23
|
+
it 'returns the value of the compression option' do
|
24
|
+
Configuration.compression?.must_equal(true)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
20
28
|
describe '.debug?' do
|
21
29
|
it { described.must_respond_to(:debug) }
|
22
30
|
|
@@ -31,12 +31,6 @@ module Vedeu
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
describe '#height' do
|
35
|
-
subject { instance.height }
|
36
|
-
|
37
|
-
it { subject.must_equal(2) }
|
38
|
-
end
|
39
|
-
|
40
34
|
describe '.rows' do
|
41
35
|
context 'when the value is less than 1' do
|
42
36
|
it { proc { Grid.rows(0) }.must_raise(OutOfRange) }
|
@@ -53,12 +47,6 @@ module Vedeu
|
|
53
47
|
end
|
54
48
|
end
|
55
49
|
|
56
|
-
describe '#width' do
|
57
|
-
subject { instance.width }
|
58
|
-
|
59
|
-
it { subject.must_equal(6) }
|
60
|
-
end
|
61
|
-
|
62
50
|
end # Grid
|
63
51
|
|
64
52
|
end # Vedeu
|
@@ -67,6 +67,24 @@ module Vedeu
|
|
67
67
|
it { instance.must_respond_to(:lines=) }
|
68
68
|
end
|
69
69
|
|
70
|
+
describe '#add' do
|
71
|
+
subject { instance.add(child) }
|
72
|
+
|
73
|
+
it { instance.must_respond_to(:add) }
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '#inspect' do
|
77
|
+
subject { instance.inspect }
|
78
|
+
|
79
|
+
it { subject.must_be_instance_of(String) }
|
80
|
+
|
81
|
+
it { subject.must_equal(
|
82
|
+
"<Vedeu::Interface name: 'hydrogen', group: '', visible: 'true', " \
|
83
|
+
"zindex: '1'>"
|
84
|
+
)
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
70
88
|
describe '#lines' do
|
71
89
|
subject { instance.lines }
|
72
90
|
|
@@ -24,45 +24,52 @@ module Vedeu
|
|
24
24
|
|
25
25
|
it { subject.must_be_instance_of(String) }
|
26
26
|
|
27
|
-
context 'when
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
27
|
+
context 'when compression is enabled' do
|
28
|
+
context 'when the output is all Vedeu::Char elements' do
|
29
|
+
let(:output) {
|
30
|
+
[
|
31
|
+
Vedeu::Char.new(value: 'Y', colour: { foreground: '#ff0000' }),
|
32
|
+
Vedeu::Char.new(value: 'e', colour: { foreground: '#ff0000' }),
|
33
|
+
Vedeu::Char.new(value: 's', colour: { foreground: '#ff0000' }),
|
34
|
+
]
|
35
|
+
}
|
36
|
+
it 'converts the non-Vedeu::Char elements into String elements' do
|
37
|
+
subject.must_equal("\e[38;2;255;0;0mYes")
|
38
|
+
end
|
37
39
|
end
|
38
|
-
end
|
39
40
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
41
|
+
context 'when the output is all Vedeu::Char elements' do
|
42
|
+
let(:output) {
|
43
|
+
[
|
44
|
+
Vedeu::Char.new(value: 'a', colour: { foreground: '#ff0000' }),
|
45
|
+
Vedeu::Char.new(value: 'b', colour: { foreground: '#ff0000' }),
|
46
|
+
Vedeu::Char.new(value: 'c', colour: { foreground: '#0000ff' }),
|
47
|
+
Vedeu::Char.new(value: 'd', colour: { foreground: '#0000ff' }),
|
48
|
+
]
|
49
|
+
}
|
50
|
+
it 'compresses multiple colours and styles where possible' do
|
51
|
+
subject.must_equal("\e[38;2;255;0;0mab\e[38;2;0;0;255mcd")
|
52
|
+
end
|
51
53
|
end
|
52
|
-
end
|
53
54
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
55
|
+
context 'when the output is not all Vedeu::Char elements' do
|
56
|
+
let(:output) {
|
57
|
+
[
|
58
|
+
Vedeu::Char.new(value: 'N'),
|
59
|
+
Vedeu::EscapeChar.new("\e[?25l"),
|
60
|
+
Vedeu::Char.new(value: 't'),
|
61
|
+
]
|
62
|
+
}
|
63
|
+
it 'converts the non-Vedeu::Char elements into String elements' do
|
64
|
+
subject.must_equal("N\e[?25lt")
|
65
|
+
end
|
64
66
|
end
|
65
67
|
end
|
68
|
+
|
69
|
+
context 'when compression is not enabled' do
|
70
|
+
# @todo
|
71
|
+
# it { skip }
|
72
|
+
end
|
66
73
|
end
|
67
74
|
|
68
75
|
end # Compressor
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
describe RefreshGroup do
|
6
|
+
|
7
|
+
let(:described) { Vedeu::RefreshGroup }
|
8
|
+
let(:instance) { described.new(_name) }
|
9
|
+
let(:_name) { 'Vedeu::RefreshGroup' }
|
10
|
+
|
11
|
+
describe '#initialize' do
|
12
|
+
it { instance.must_be_instance_of(described) }
|
13
|
+
it { instance.instance_variable_get('@name').must_equal(_name) }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.by_name' do
|
17
|
+
it { described.must_respond_to(:by_name) }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#by_name' do
|
21
|
+
subject { instance.by_name }
|
22
|
+
|
23
|
+
# @todo
|
24
|
+
# it { skip }
|
25
|
+
end
|
26
|
+
|
27
|
+
end # RefreshGroup
|
28
|
+
|
29
|
+
end # Vedeu
|
@@ -15,7 +15,7 @@ module Vedeu
|
|
15
15
|
timestamp: timestamp,
|
16
16
|
}
|
17
17
|
}
|
18
|
-
let(:filename) { '
|
18
|
+
let(:filename) { 'vedeu_renderers_file' }
|
19
19
|
let(:timestamp) { false }
|
20
20
|
|
21
21
|
describe '#initialize' do
|
@@ -26,9 +26,13 @@ module Vedeu
|
|
26
26
|
describe '#render' do
|
27
27
|
let(:_time) { Time.new(2015, 4, 12, 20, 05, 00, "+01:00") }
|
28
28
|
|
29
|
+
before do
|
30
|
+
::File.stubs(:write)
|
31
|
+
end
|
32
|
+
|
29
33
|
subject { instance.render(output) }
|
30
34
|
|
31
|
-
it { subject.must_be_instance_of(String) }
|
35
|
+
# it { subject.must_be_instance_of(String) }
|
32
36
|
|
33
37
|
context 'when the filename option is not set' do
|
34
38
|
context 'when the timestamp option is not set' do
|
@@ -17,6 +17,10 @@ module Vedeu
|
|
17
17
|
let(:content) { [''] }
|
18
18
|
let(:write_file) { false }
|
19
19
|
|
20
|
+
before do
|
21
|
+
::File.stubs(:write)
|
22
|
+
end
|
23
|
+
|
20
24
|
describe '#initialize' do
|
21
25
|
it { instance.must_be_instance_of(described) }
|
22
26
|
it { instance.instance_variable_get('@options').must_equal(options) }
|
@@ -11,6 +11,10 @@ module Vedeu
|
|
11
11
|
let(:options) { {} }
|
12
12
|
let(:output) {}
|
13
13
|
|
14
|
+
before do
|
15
|
+
::File.stubs(:write)
|
16
|
+
end
|
17
|
+
|
14
18
|
describe '#initialize' do
|
15
19
|
it { instance.must_be_instance_of(described) }
|
16
20
|
it { instance.instance_variable_get('@options').must_equal(options) }
|
@@ -263,13 +263,13 @@ module Vedeu
|
|
263
263
|
|
264
264
|
context 'via method' do
|
265
265
|
it 'returns the height' do
|
266
|
-
subject.must_equal(
|
266
|
+
subject.must_equal(24)
|
267
267
|
end
|
268
268
|
end
|
269
269
|
|
270
270
|
context 'via API' do
|
271
271
|
it 'returns the height' do
|
272
|
-
Vedeu.height.must_equal(
|
272
|
+
Vedeu.height.must_equal(24)
|
273
273
|
end
|
274
274
|
end
|
275
275
|
end
|
@@ -280,7 +280,7 @@ module Vedeu
|
|
280
280
|
it { subject.must_be_instance_of(Array) }
|
281
281
|
|
282
282
|
it 'returns the width and height' do
|
283
|
-
subject.must_equal([
|
283
|
+
subject.must_equal([24, 80])
|
284
284
|
end
|
285
285
|
end
|
286
286
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vedeu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.52
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Laking
|
@@ -289,6 +289,7 @@ files:
|
|
289
289
|
- lib/vedeu/cli/generator/all.rb
|
290
290
|
- lib/vedeu/cli/generator/application.rb
|
291
291
|
- lib/vedeu/cli/generator/helpers.rb
|
292
|
+
- lib/vedeu/cli/generator/templates/application/.gitignore
|
292
293
|
- lib/vedeu/cli/generator/templates/application/Gemfile
|
293
294
|
- lib/vedeu/cli/generator/templates/application/LICENSE.txt
|
294
295
|
- lib/vedeu/cli/generator/templates/application/README.md
|
@@ -401,6 +402,7 @@ files:
|
|
401
402
|
- lib/vedeu/output/output.rb
|
402
403
|
- lib/vedeu/output/presentation.rb
|
403
404
|
- lib/vedeu/output/refresh.rb
|
405
|
+
- lib/vedeu/output/refresh_group.rb
|
404
406
|
- lib/vedeu/output/render_border.rb
|
405
407
|
- lib/vedeu/output/renderers/all.rb
|
406
408
|
- lib/vedeu/output/renderers/escape_sequence.rb
|
@@ -543,6 +545,7 @@ files:
|
|
543
545
|
- test/lib/vedeu/output/html_char_test.rb
|
544
546
|
- test/lib/vedeu/output/output_test.rb
|
545
547
|
- test/lib/vedeu/output/presentation_test.rb
|
548
|
+
- test/lib/vedeu/output/refresh_group_test.rb
|
546
549
|
- test/lib/vedeu/output/refresh_test.rb
|
547
550
|
- test/lib/vedeu/output/render_border_test.rb
|
548
551
|
- test/lib/vedeu/output/renderers/all_test.rb
|
@@ -711,6 +714,7 @@ test_files:
|
|
711
714
|
- test/lib/vedeu/output/html_char_test.rb
|
712
715
|
- test/lib/vedeu/output/output_test.rb
|
713
716
|
- test/lib/vedeu/output/presentation_test.rb
|
717
|
+
- test/lib/vedeu/output/refresh_group_test.rb
|
714
718
|
- test/lib/vedeu/output/refresh_test.rb
|
715
719
|
- test/lib/vedeu/output/render_border_test.rb
|
716
720
|
- test/lib/vedeu/output/renderers/all_test.rb
|