vedeu 0.8.8 → 0.8.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/docs/dsl/by_method/focus_by_name.md +6 -1
- data/docs/dsl/by_method/focus_next.md +7 -0
- data/docs/dsl/by_method/focus_previous.md +7 -0
- data/docs/events/by_name/mouse_event.md +8 -0
- data/lib/vedeu.rb +12 -0
- data/lib/vedeu/all.rb +2 -0
- data/lib/vedeu/application/controller.rb +2 -6
- data/lib/vedeu/buffers/empty.rb +2 -1
- data/lib/vedeu/cells/borders/vertices/bottom_left.rb +1 -1
- data/lib/vedeu/cells/borders/vertices/bottom_right.rb +1 -1
- data/lib/vedeu/cells/borders/vertices/top_left.rb +1 -1
- data/lib/vedeu/cells/borders/vertices/top_right.rb +1 -1
- data/lib/vedeu/cells/char.rb +2 -6
- data/lib/vedeu/cells/cursor.rb +1 -1
- data/lib/vedeu/cells/support/html.rb +6 -18
- data/lib/vedeu/coercers/all.rb +18 -1
- data/lib/vedeu/coercers/chars.rb +29 -0
- data/lib/vedeu/coercers/coercer.rb +59 -0
- data/lib/vedeu/coercers/colour.rb +15 -33
- data/lib/vedeu/coercers/colour_attributes.rb +8 -3
- data/lib/vedeu/coercers/editor_line.rb +36 -0
- data/lib/vedeu/coercers/editor_lines.rb +36 -0
- data/lib/vedeu/coercers/lines.rb +36 -0
- data/lib/vedeu/coercers/page.rb +52 -0
- data/lib/vedeu/coercers/position.rb +69 -0
- data/lib/vedeu/coercers/row.rb +43 -0
- data/lib/vedeu/coercers/streams.rb +29 -0
- data/lib/vedeu/coercers/style.rb +54 -0
- data/lib/vedeu/configuration/api.rb +10 -0
- data/lib/vedeu/configuration/configuration.rb +11 -0
- data/lib/vedeu/cursors/coordinate.rb +41 -66
- data/lib/vedeu/cursors/cursor.rb +4 -4
- data/lib/vedeu/cursors/reposition.rb +3 -3
- data/lib/vedeu/dsl/border.rb +2 -39
- data/lib/vedeu/dsl/elements.rb +5 -6
- data/lib/vedeu/dsl/geometry.rb +3 -12
- data/lib/vedeu/editor/cropper.rb +2 -1
- data/lib/vedeu/error.rb +4 -0
- data/lib/vedeu/geometries/position.rb +14 -27
- data/lib/vedeu/input/mouse.rb +14 -5
- data/lib/vedeu/input/read.rb +1 -11
- data/lib/vedeu/interfaces/clear.rb +2 -1
- data/lib/vedeu/logging/log.rb +1 -1
- data/lib/vedeu/models/page.rb +5 -23
- data/lib/vedeu/models/row.rb +5 -14
- data/lib/vedeu/models/toggleable.rb +2 -7
- data/lib/vedeu/plugins/plugin.rb +1 -0
- data/lib/vedeu/presentation/style.rb +4 -20
- data/lib/vedeu/renderers/all.rb +24 -10
- data/lib/vedeu/repositories/model.rb +2 -8
- data/lib/vedeu/repositories/registerable.rb +4 -9
- data/lib/vedeu/runtime/application.rb +2 -0
- data/lib/vedeu/runtime/flags.rb +2 -0
- data/lib/vedeu/runtime/router.rb +2 -0
- data/lib/vedeu/support/point.rb +9 -7
- data/lib/vedeu/support/x_coordinate.rb +57 -0
- data/lib/vedeu/support/y_coordinate.rb +57 -0
- data/lib/vedeu/terminal/terminal.rb +2 -0
- data/lib/vedeu/version.rb +1 -1
- data/lib/vedeu/views/value.rb +3 -12
- data/test/lib/vedeu/coercers/chars_test.rb +33 -0
- data/test/lib/vedeu/coercers/coercer_test.rb +34 -0
- data/test/lib/vedeu/coercers/colour_test.rb +9 -7
- data/test/lib/vedeu/coercers/editor_line_test.rb +40 -0
- data/test/lib/vedeu/coercers/editor_lines_test.rb +40 -0
- data/test/lib/vedeu/coercers/lines_test.rb +40 -0
- data/test/lib/vedeu/coercers/page_test.rb +150 -0
- data/test/lib/vedeu/coercers/position_test.rb +76 -0
- data/test/lib/vedeu/coercers/row_test.rb +64 -0
- data/test/lib/vedeu/coercers/streams_test.rb +33 -0
- data/test/lib/vedeu/coercers/style_test.rb +62 -0
- data/test/lib/vedeu/cursors/coordinate_test.rb +11 -12
- data/test/lib/vedeu/geometries/position_test.rb +10 -54
- data/test/lib/vedeu/input/capture_test.rb +1 -1
- data/test/lib/vedeu/models/page_test.rb +4 -116
- data/test/lib/vedeu/models/row_test.rb +1 -31
- data/test/lib/vedeu/presentation/style_test.rb +4 -38
- data/test/lib/vedeu/renderers/all_test.rb +6 -0
- data/test/lib/vedeu/support/point_test.rb +13 -1
- data/test/lib/vedeu/support/x_coordinate_test.rb +64 -0
- data/test/lib/vedeu/support/y_coordinate_test.rb +64 -0
- data/test/support/examples/material_colours_app.rb +1 -0
- data/vedeu.gemspec +1 -1
- metadata +41 -4
data/lib/vedeu/renderers/all.rb
CHANGED
@@ -21,9 +21,10 @@ module Vedeu
|
|
21
21
|
# @return [Array<void>]
|
22
22
|
def clear
|
23
23
|
storage.map do |renderer|
|
24
|
-
log(
|
24
|
+
Vedeu.log(type: :render,
|
25
|
+
message: "Clearing via #{renderer.class.name}")
|
25
26
|
|
26
|
-
|
27
|
+
perform(renderer) { renderer.clear }
|
27
28
|
end.each(&:join) if Vedeu.ready?
|
28
29
|
|
29
30
|
''
|
@@ -49,9 +50,10 @@ module Vedeu
|
|
49
50
|
# @return [Array<void>]
|
50
51
|
def render(output)
|
51
52
|
storage.map do |renderer|
|
52
|
-
log(
|
53
|
+
Vedeu.log(type: :render,
|
54
|
+
message: "Rendering via #{renderer.class.name}")
|
53
55
|
|
54
|
-
|
56
|
+
perform(renderer) { renderer.render(output) }
|
55
57
|
end.each(&:join) if Vedeu.ready?
|
56
58
|
|
57
59
|
output
|
@@ -70,12 +72,16 @@ module Vedeu
|
|
70
72
|
end
|
71
73
|
end
|
72
74
|
|
73
|
-
# @param
|
74
|
-
# @param
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
75
|
+
# @param renderer [void]
|
76
|
+
# @param block [Proc]
|
77
|
+
def perform(renderer, &block)
|
78
|
+
if Vedeu.config.threaded?
|
79
|
+
threaded(renderer) { yield }
|
80
|
+
|
81
|
+
else
|
82
|
+
unthreaded { yield }
|
83
|
+
|
84
|
+
end
|
79
85
|
end
|
80
86
|
|
81
87
|
# @return [Mutex]
|
@@ -105,6 +111,14 @@ module Vedeu
|
|
105
111
|
Vedeu.trigger(:_show_cursor_)
|
106
112
|
end
|
107
113
|
|
114
|
+
# @param block [Proc]
|
115
|
+
# @return [void]
|
116
|
+
def unthreaded(&block)
|
117
|
+
toggle_cursor do
|
118
|
+
yield
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
108
122
|
end # Renderers
|
109
123
|
|
110
124
|
# @example
|
@@ -16,9 +16,7 @@ module Vedeu
|
|
16
16
|
# @return [Vedeu::Repositories::Repository]
|
17
17
|
attr_accessor :repository
|
18
18
|
|
19
|
-
#
|
20
|
-
# methods within this module are included as class methods on
|
21
|
-
# that class.
|
19
|
+
# Provide additional behaviour as class methods.
|
22
20
|
#
|
23
21
|
module ClassMethods
|
24
22
|
|
@@ -68,11 +66,7 @@ module Vedeu
|
|
68
66
|
|
69
67
|
end # ClassMethods
|
70
68
|
|
71
|
-
#
|
72
|
-
# as class methods for the class.
|
73
|
-
#
|
74
|
-
# @param klass [Class]
|
75
|
-
# @return [void]
|
69
|
+
# @macro included_module
|
76
70
|
def self.included(klass)
|
77
71
|
klass.extend(Vedeu::Repositories::Model::ClassMethods)
|
78
72
|
end
|
@@ -9,7 +9,8 @@ module Vedeu
|
|
9
9
|
#
|
10
10
|
module Registerable
|
11
11
|
|
12
|
-
#
|
12
|
+
# Provide additional behaviour as class methods.
|
13
|
+
#
|
13
14
|
module ClassMethods
|
14
15
|
|
15
16
|
# The null model is used when the repository cannot be found.
|
@@ -64,9 +65,7 @@ module Vedeu
|
|
64
65
|
|
65
66
|
end # ClassMethods
|
66
67
|
|
67
|
-
#
|
68
|
-
# class, the methods within this module are included as instance
|
69
|
-
# methods on that class.
|
68
|
+
# Provide additional behaviour as instance methods.
|
70
69
|
#
|
71
70
|
module InstanceMethods
|
72
71
|
|
@@ -77,11 +76,7 @@ module Vedeu
|
|
77
76
|
|
78
77
|
end # InstanceMethods
|
79
78
|
|
80
|
-
#
|
81
|
-
# as class methods for the class.
|
82
|
-
#
|
83
|
-
# @param klass [Class]
|
84
|
-
# @return [void]
|
79
|
+
# @macro included_module
|
85
80
|
def self.included(klass)
|
86
81
|
klass.extend(Vedeu::Repositories::Registerable::ClassMethods)
|
87
82
|
klass.include(Vedeu::Repositories::Registerable::InstanceMethods)
|
data/lib/vedeu/runtime/flags.rb
CHANGED
data/lib/vedeu/runtime/router.rb
CHANGED
data/lib/vedeu/support/point.rb
CHANGED
@@ -12,21 +12,21 @@ module Vedeu
|
|
12
12
|
# @param (see #initialize)
|
13
13
|
# @macro raise_invalid_syntax
|
14
14
|
# @return (see #initialize)
|
15
|
-
def self.coerce(value: nil, min: 1, max:
|
15
|
+
def self.coerce(value: nil, min: 1, max: Float::INFINITY)
|
16
16
|
new(value: value, min: min, max: max).coerce
|
17
17
|
end
|
18
18
|
|
19
19
|
# @param (see #initialize)
|
20
20
|
# @return (see #initialize)
|
21
|
-
def self.valid?(value: nil, min: 1, max:
|
21
|
+
def self.valid?(value: nil, min: 1, max: Float::INFINITY)
|
22
22
|
new(value: value, min: min, max: max).valid?
|
23
23
|
end
|
24
24
|
|
25
25
|
# @param value [Fixnum|NilClass]
|
26
26
|
# @param min [Fixnum]
|
27
|
-
# @param max [Fixnum]
|
27
|
+
# @param max [Fixnum|Float::INFINITY]
|
28
28
|
# @return [Vedeu::Point]
|
29
|
-
def initialize(value: nil, min: 1, max:
|
29
|
+
def initialize(value: nil, min: 1, max: Float::INFINITY)
|
30
30
|
@min = min
|
31
31
|
@max = max
|
32
32
|
@value = value
|
@@ -67,15 +67,17 @@ module Vedeu
|
|
67
67
|
def min
|
68
68
|
return @min if @min.is_a?(Fixnum)
|
69
69
|
|
70
|
-
fail Vedeu::Error::InvalidSyntax,
|
70
|
+
fail Vedeu::Error::InvalidSyntax,
|
71
|
+
"Expecting 'min' to be a Fixnum."
|
71
72
|
end
|
72
73
|
|
73
74
|
# @macro raise_invalid_syntax
|
74
75
|
# @return [Fixnum]
|
75
76
|
def max
|
76
|
-
return @max if @max.is_a?(Fixnum)
|
77
|
+
return @max if @max.is_a?(Fixnum) || @max == Float::INFINITY
|
77
78
|
|
78
|
-
fail Vedeu::Error::InvalidSyntax,
|
79
|
+
fail Vedeu::Error::InvalidSyntax,
|
80
|
+
"Expecting 'max' to be a Fixnum or Float::INFINITY."
|
79
81
|
end
|
80
82
|
|
81
83
|
end # Point
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
# Provide delegation methods for Vedeu::Geometries::Geometry.
|
6
|
+
#
|
7
|
+
# @api private
|
8
|
+
#
|
9
|
+
class XCoordinate
|
10
|
+
|
11
|
+
# @param geometry [Vedeu::Geometries::Geometry]
|
12
|
+
# @return [Vedeu::XCoordinate]
|
13
|
+
def initialize(geometry)
|
14
|
+
@geometry = geometry
|
15
|
+
end
|
16
|
+
|
17
|
+
# Return the :x value from the geometry.
|
18
|
+
#
|
19
|
+
# @return [Fixnum]
|
20
|
+
def d
|
21
|
+
geometry.x
|
22
|
+
end
|
23
|
+
alias x d
|
24
|
+
|
25
|
+
# Return the :bx value from the geometry.
|
26
|
+
#
|
27
|
+
# @return [Fixnum]
|
28
|
+
def bd
|
29
|
+
geometry.bx
|
30
|
+
end
|
31
|
+
alias bx bd
|
32
|
+
|
33
|
+
# Return the :bxn value from the geometry.
|
34
|
+
#
|
35
|
+
# @return [Fixnum]
|
36
|
+
def bdn
|
37
|
+
geometry.bxn
|
38
|
+
end
|
39
|
+
alias bxn bdn
|
40
|
+
|
41
|
+
# Return the :bordered_width value from the geometry.
|
42
|
+
#
|
43
|
+
# @return [Fixnum]
|
44
|
+
def d_dn
|
45
|
+
geometry.bordered_width
|
46
|
+
end
|
47
|
+
alias bordered_width d_dn
|
48
|
+
|
49
|
+
protected
|
50
|
+
|
51
|
+
# @!attribute [r] geometry
|
52
|
+
# @return [Vedeu::Geometries::Geometry]
|
53
|
+
attr_reader :geometry
|
54
|
+
|
55
|
+
end # XCoordinate
|
56
|
+
|
57
|
+
end # Vedeu
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
# Provide delegation methods for Vedeu::Geometries::Geometry.
|
6
|
+
#
|
7
|
+
# @api private
|
8
|
+
#
|
9
|
+
class YCoordinate
|
10
|
+
|
11
|
+
# @param geometry [Vedeu::Geometries::Geometry]
|
12
|
+
# @return [Vedeu::XCoordinate]
|
13
|
+
def initialize(geometry)
|
14
|
+
@geometry = geometry
|
15
|
+
end
|
16
|
+
|
17
|
+
# Return the :y value from the geometry.
|
18
|
+
#
|
19
|
+
# @return [Fixnum]
|
20
|
+
def d
|
21
|
+
geometry.y
|
22
|
+
end
|
23
|
+
alias y d
|
24
|
+
|
25
|
+
# Return the :by value from the geometry.
|
26
|
+
#
|
27
|
+
# @return [Fixnum]
|
28
|
+
def bd
|
29
|
+
geometry.by
|
30
|
+
end
|
31
|
+
alias by bd
|
32
|
+
|
33
|
+
# Return the :byn value from the geometry.
|
34
|
+
#
|
35
|
+
# @return [Fixnum]
|
36
|
+
def bdn
|
37
|
+
geometry.byn
|
38
|
+
end
|
39
|
+
alias byn bdn
|
40
|
+
|
41
|
+
# Return the :bordered_height value from the geometry.
|
42
|
+
#
|
43
|
+
# @return [Fixnum]
|
44
|
+
def d_dn
|
45
|
+
geometry.bordered_height
|
46
|
+
end
|
47
|
+
alias bordered_height d_dn
|
48
|
+
|
49
|
+
protected
|
50
|
+
|
51
|
+
# @!attribute [r] geometry
|
52
|
+
# @return [Vedeu::Geometries::Geometry]
|
53
|
+
attr_reader :geometry
|
54
|
+
|
55
|
+
end # YCoordinate
|
56
|
+
|
57
|
+
end # Vedeu
|
data/lib/vedeu/version.rb
CHANGED
data/lib/vedeu/views/value.rb
CHANGED
@@ -10,9 +10,7 @@ module Vedeu
|
|
10
10
|
#
|
11
11
|
module Value
|
12
12
|
|
13
|
-
#
|
14
|
-
#
|
15
|
-
# @api private
|
13
|
+
# Provide additional behaviour as class methods.
|
16
14
|
#
|
17
15
|
module ClassMethods
|
18
16
|
|
@@ -58,9 +56,7 @@ module Vedeu
|
|
58
56
|
|
59
57
|
end # ClassMethods
|
60
58
|
|
61
|
-
#
|
62
|
-
#
|
63
|
-
# @api private
|
59
|
+
# Provide additional behaviour as instance methods.
|
64
60
|
#
|
65
61
|
module InstanceMethods
|
66
62
|
|
@@ -128,12 +124,7 @@ module Vedeu
|
|
128
124
|
|
129
125
|
end # InstanceMethods
|
130
126
|
|
131
|
-
#
|
132
|
-
# as class methods and InstanceMethods as instance methods for
|
133
|
-
# the given class.
|
134
|
-
#
|
135
|
-
# @param klass [Class]
|
136
|
-
# @return [void]
|
127
|
+
# @macro included_module
|
137
128
|
def self.included(klass)
|
138
129
|
klass.extend(Vedeu::Views::Value::ClassMethods)
|
139
130
|
klass.include(Vedeu::Views::Value::InstanceMethods)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
module Vedeu
|
6
|
+
|
7
|
+
module Coercers
|
8
|
+
|
9
|
+
describe Chars do
|
10
|
+
|
11
|
+
let(:described) { Vedeu::Coercers::Chars }
|
12
|
+
let(:instance) { described.new(_value) }
|
13
|
+
let(:_value) {}
|
14
|
+
let(:klass) { Vedeu::Views::Chars }
|
15
|
+
|
16
|
+
describe '#initialize' do
|
17
|
+
it { instance.must_be_instance_of(described) }
|
18
|
+
it { instance.instance_variable_get('@value').must_equal(_value) }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '.coerce' do
|
22
|
+
it { described.must_respond_to(:coerce) }
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#coerce' do
|
26
|
+
subject { instance.coerce }
|
27
|
+
end
|
28
|
+
|
29
|
+
end # Chars
|
30
|
+
|
31
|
+
end # Coercers
|
32
|
+
|
33
|
+
end # Vedeu
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
module Vedeu
|
6
|
+
|
7
|
+
module Coercers
|
8
|
+
|
9
|
+
describe Coercer do
|
10
|
+
|
11
|
+
let(:described) { Vedeu::Coercers::Coercer }
|
12
|
+
let(:instance) { described.new(_value) }
|
13
|
+
let(:_value) {}
|
14
|
+
|
15
|
+
describe '#initialize' do
|
16
|
+
it { instance.must_be_instance_of(described) }
|
17
|
+
it { instance.instance_variable_get('@value').must_equal(_value) }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.coerce' do
|
21
|
+
it { described.must_respond_to(:coerce) }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#coerce' do
|
25
|
+
subject { instance.coerce }
|
26
|
+
|
27
|
+
it { proc { subject }.must_raise(Vedeu::Error::NotImplemented) }
|
28
|
+
end
|
29
|
+
|
30
|
+
end # Coercer
|
31
|
+
|
32
|
+
end # Coercers
|
33
|
+
|
34
|
+
end # Vedeu
|
@@ -11,6 +11,7 @@ module Vedeu
|
|
11
11
|
let(:described) { Vedeu::Coercers::Colour }
|
12
12
|
let(:instance) { described.new(_value) }
|
13
13
|
let(:_value) {}
|
14
|
+
let(:klass) { Vedeu::Colours::Colour }
|
14
15
|
|
15
16
|
describe '#initialize' do
|
16
17
|
it { instance.must_be_instance_of(described) }
|
@@ -21,7 +22,7 @@ module Vedeu
|
|
21
22
|
subject { described.coerce(_value) }
|
22
23
|
|
23
24
|
context 'when the value is nil' do
|
24
|
-
it { subject.must_be_instance_of(
|
25
|
+
it { subject.must_be_instance_of(klass) }
|
25
26
|
end
|
26
27
|
|
27
28
|
context 'when the value is a Hash' do
|
@@ -32,7 +33,7 @@ module Vedeu
|
|
32
33
|
}
|
33
34
|
}
|
34
35
|
|
35
|
-
it { subject.must_be_instance_of(
|
36
|
+
it { subject.must_be_instance_of(klass) }
|
36
37
|
it do
|
37
38
|
subject.background.must_be_instance_of(Vedeu::Colours::Background)
|
38
39
|
end
|
@@ -44,19 +45,20 @@ module Vedeu
|
|
44
45
|
context 'when the value is a Vedeu::Colours::Background' do
|
45
46
|
let(:_value) { Vedeu::Colours::Background.new('#aadd00') }
|
46
47
|
|
47
|
-
it { subject.must_be_instance_of(
|
48
|
+
it { subject.must_be_instance_of(klass) }
|
48
49
|
end
|
49
50
|
|
50
|
-
context 'when the value is
|
51
|
-
let(:_value) {
|
51
|
+
context 'when the value is already the target class' do
|
52
|
+
let(:_value) { klass.new }
|
52
53
|
|
53
|
-
it { subject.must_be_instance_of(
|
54
|
+
it { subject.must_be_instance_of(klass) }
|
55
|
+
it { subject.must_equal(_value) }
|
54
56
|
end
|
55
57
|
|
56
58
|
context 'when the value is a Vedeu::Colours::Foreground' do
|
57
59
|
let(:_value) { Vedeu::Colours::Foreground.new('#448822') }
|
58
60
|
|
59
|
-
it { subject.must_be_instance_of(
|
61
|
+
it { subject.must_be_instance_of(klass) }
|
60
62
|
end
|
61
63
|
|
62
64
|
context 'when the value is invalid or unsupported' do
|