vedeu 0.1.14 → 0.1.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vedeu/api/api.rb +33 -1
- data/lib/vedeu/api/interface.rb +4 -0
- data/lib/vedeu/api/log.rb +1 -0
- data/lib/vedeu/support/terminal.rb +2 -0
- data/test/lib/vedeu/api/interface_test.rb +116 -0
- data/vedeu.gemspec +2 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 395f38280fc3c3c2c08cd35934211d1bf5f2f088
|
4
|
+
data.tar.gz: 56e22bfd0a48a8afed5d95577db5d556207f394e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 358f6eb1e2c13a9e3c6ff57db89165c9799a5b5df066251cf1437443897d210435f08abed2f4a582d7d15b66cef4d0bd0bbfa4c382e1ccb4f631c23afe2542ee
|
7
|
+
data.tar.gz: 34dcb6740bdae17988a112977b1b795fb455a926e474e53e41be69b2d30f11396b02333648afe7508a400da5257257a64b2ee963ef79b1f077f1a6297c5be12f
|
data/lib/vedeu/api/api.rb
CHANGED
@@ -1,9 +1,19 @@
|
|
1
1
|
module Vedeu
|
2
2
|
module API
|
3
|
+
# @param name [Symbol] The name of the event which will be triggered later
|
4
|
+
# @param delay [Fixnum|Float] Limits the execution of the triggered event to
|
5
|
+
# the delay in seconds, effectively throttling the event. A delay of 1.0
|
6
|
+
# will mean that even if the event is triggered multiple times a second
|
7
|
+
# it will only execute once for that second. Triggers inside the delay are
|
8
|
+
# discarded.
|
9
|
+
# @param block [Proc] The event to be executed when triggered. This block
|
10
|
+
# could be a method call, or the triggering of another event, or sequence
|
11
|
+
# of either/both.
|
3
12
|
def event(name, delay = 0, &block)
|
4
13
|
Vedeu.events.event(name, delay, &block)
|
5
14
|
end
|
6
15
|
|
16
|
+
# @api private
|
7
17
|
def events
|
8
18
|
@events ||= API::Events.new do
|
9
19
|
event(:_log_) { |msg| Vedeu.log(msg) }
|
@@ -15,32 +25,50 @@ module Vedeu
|
|
15
25
|
end
|
16
26
|
end
|
17
27
|
|
28
|
+
# @return [Fixnum] The total height of the current terminal.
|
18
29
|
def height
|
19
30
|
Terminal.height
|
20
31
|
end
|
21
32
|
|
33
|
+
# @param name [String] The name of the interface. Used to reference the
|
34
|
+
# interface throughout your application's execution lifetime.
|
35
|
+
# @param block [Proc] A set of attributes which define the features of the
|
36
|
+
# interface. TODO: More help.
|
22
37
|
def interface(name, &block)
|
23
38
|
API::Interface.define({ name: name }, &block)
|
24
39
|
end
|
25
40
|
|
41
|
+
# @param key [String] A simulated keypress. Escape sequences are also
|
42
|
+
# supported.
|
26
43
|
def keypress(key)
|
27
44
|
trigger(:key, key)
|
28
|
-
trigger(:_log_,
|
45
|
+
trigger(:_log_, "Key: #{key}")
|
29
46
|
trigger(:_mode_switch_) if key == :escape
|
30
47
|
end
|
31
48
|
|
49
|
+
# @param message [String] The message you wish to emit to the log
|
50
|
+
# file, useful for debugging.
|
32
51
|
def log(message)
|
33
52
|
API::Log.logger.debug(message)
|
34
53
|
end
|
35
54
|
|
55
|
+
# @param name [Symbol] The name of the event you wish to trigger.
|
56
|
+
# The event does not have to exist.
|
57
|
+
# @param args [Array] Any arguments the event needs to execute correctly.
|
36
58
|
def trigger(name, *args)
|
37
59
|
Vedeu.events.trigger(name, *args)
|
38
60
|
end
|
39
61
|
|
62
|
+
# @param name [String] The name of the interface you wish to use. Typically
|
63
|
+
# used when defining interfaces to share geometry. TODO: Example required.
|
40
64
|
def use(name)
|
41
65
|
Vedeu::Interface.new(Vedeu::Store.query(name))
|
42
66
|
end
|
43
67
|
|
68
|
+
# @param name [String] The name of the interface you are targetting for this
|
69
|
+
# view.
|
70
|
+
# @param block [Proc] The directives you wish to send to this interface.
|
71
|
+
# TODO: Example required.
|
44
72
|
def view(name, &block)
|
45
73
|
{
|
46
74
|
interfaces: [
|
@@ -49,10 +77,14 @@ module Vedeu
|
|
49
77
|
}
|
50
78
|
end
|
51
79
|
|
80
|
+
# @param block [Proc] Instructs Vedeu to treat all of the 'view' directives
|
81
|
+
# therein as one instruction. Useful for redrawing multiple interfaces at
|
82
|
+
# once. TODO: Example required.
|
52
83
|
def views(&block)
|
53
84
|
API::Composition.build(&block)
|
54
85
|
end
|
55
86
|
|
87
|
+
# @return [Fixnum] The total width of the current terminal.
|
56
88
|
def width
|
57
89
|
Terminal.width
|
58
90
|
end
|
data/lib/vedeu/api/interface.rb
CHANGED
data/lib/vedeu/api/log.rb
CHANGED
@@ -70,10 +70,12 @@ module Vedeu
|
|
70
70
|
[(height / 2), (width / 2)]
|
71
71
|
end
|
72
72
|
|
73
|
+
# @return [Fixnum] The total width of the current terminal.
|
73
74
|
def width
|
74
75
|
size.last
|
75
76
|
end
|
76
77
|
|
78
|
+
# @return [Fixnum] The total height of the current terminal.
|
77
79
|
def height
|
78
80
|
size.first
|
79
81
|
end
|
@@ -56,6 +56,122 @@ module Vedeu
|
|
56
56
|
it 'raises an exception when the value is out of bounds' do
|
57
57
|
proc { interface.define { height 999 } }.must_raise(InvalidHeight)
|
58
58
|
end
|
59
|
+
|
60
|
+
it 'allows the setting of colours' do
|
61
|
+
Interface.build do
|
62
|
+
colour foreground: '#aadd00', background: '#222222'
|
63
|
+
end.must_equal(
|
64
|
+
{
|
65
|
+
name: '',
|
66
|
+
group: '',
|
67
|
+
lines: [],
|
68
|
+
colour: {
|
69
|
+
foreground: "#aadd00",
|
70
|
+
background: "#222222"
|
71
|
+
},
|
72
|
+
style: "",
|
73
|
+
geometry: {},
|
74
|
+
cursor: true,
|
75
|
+
delay: 0.0
|
76
|
+
}
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'allows the setting of styles' do
|
81
|
+
Interface.build do
|
82
|
+
style 'underline'
|
83
|
+
end.must_equal(
|
84
|
+
{
|
85
|
+
name: '',
|
86
|
+
group: '',
|
87
|
+
lines: [],
|
88
|
+
colour: {},
|
89
|
+
style: "underline",
|
90
|
+
geometry: {},
|
91
|
+
cursor: true,
|
92
|
+
delay: 0.0
|
93
|
+
}
|
94
|
+
)
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'allows the use of other interfaces for attributes like geometry' do
|
98
|
+
IO.console.stub(:winsize, [25, 40]) do
|
99
|
+
Vedeu.interface 'my_interface' do
|
100
|
+
x 5
|
101
|
+
y 5
|
102
|
+
width 5
|
103
|
+
height 5
|
104
|
+
end
|
105
|
+
Interface.build do
|
106
|
+
name 'my_other_interface'
|
107
|
+
y use('my_interface').south
|
108
|
+
end.must_equal({
|
109
|
+
name: "my_other_interface",
|
110
|
+
group: "",
|
111
|
+
lines: [],
|
112
|
+
colour: {},
|
113
|
+
style: "",
|
114
|
+
geometry: {
|
115
|
+
y: 11
|
116
|
+
},
|
117
|
+
cursor: true,
|
118
|
+
delay: 0.0
|
119
|
+
})
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'allows the setting of a delay for events triggered for this ' \
|
124
|
+
'interface' do
|
125
|
+
Interface.build do
|
126
|
+
delay 1.0
|
127
|
+
end.must_equal(
|
128
|
+
{
|
129
|
+
name: '',
|
130
|
+
group: '',
|
131
|
+
lines: [],
|
132
|
+
colour: {},
|
133
|
+
style: "",
|
134
|
+
geometry: {},
|
135
|
+
cursor: true,
|
136
|
+
delay: 1.0
|
137
|
+
})
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'allows the interface to be part of a group- useful for creating ' \
|
141
|
+
'separate views' do
|
142
|
+
Interface.build do
|
143
|
+
group 'my_group'
|
144
|
+
end.must_equal(
|
145
|
+
{
|
146
|
+
name: "",
|
147
|
+
group: "my_group",
|
148
|
+
lines: [],
|
149
|
+
colour: {},
|
150
|
+
style: "",
|
151
|
+
geometry: {},
|
152
|
+
cursor: true,
|
153
|
+
delay: 0.0
|
154
|
+
}
|
155
|
+
)
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'allows the setting of the cursor for the interface to be shown ' \
|
159
|
+
'or hidden' do
|
160
|
+
Interface.build do
|
161
|
+
cursor false
|
162
|
+
end.must_equal(
|
163
|
+
{
|
164
|
+
name: "",
|
165
|
+
group: "",
|
166
|
+
lines: [],
|
167
|
+
colour: {},
|
168
|
+
style: "",
|
169
|
+
geometry: {},
|
170
|
+
cursor: false,
|
171
|
+
delay: 0.0
|
172
|
+
}
|
173
|
+
)
|
174
|
+
end
|
59
175
|
end
|
60
176
|
|
61
177
|
describe '#build' do
|
data/vedeu.gemspec
CHANGED
@@ -4,10 +4,11 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'vedeu'
|
7
|
-
spec.version = '0.1.
|
7
|
+
spec.version = '0.1.15'
|
8
8
|
spec.authors = ['Gavin Laking']
|
9
9
|
spec.email = ['gavinlaking@gmail.com']
|
10
10
|
spec.summary = %q{A terminal case of wonderland.}
|
11
|
+
spec.description = %q{A GUI framework for terminal/console applications.}
|
11
12
|
spec.homepage = 'https://github.com/gavinlaking/vedeu'
|
12
13
|
spec.license = 'MIT'
|
13
14
|
|
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.1.
|
4
|
+
version: 0.1.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Laking
|
@@ -150,7 +150,7 @@ dependencies:
|
|
150
150
|
- - '='
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: 0.9.0
|
153
|
-
description:
|
153
|
+
description: A GUI framework for terminal/console applications.
|
154
154
|
email:
|
155
155
|
- gavinlaking@gmail.com
|
156
156
|
executables:
|