vedeu 0.4.27 → 0.4.28
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/vedeu_drb_server +0 -2
- data/examples/borders_app.rb +2 -0
- data/examples/colours_app.rb +2 -0
- data/examples/drb_app.rb +2 -2
- data/examples/focus_app.rb +2 -0
- data/examples/geometry_app.rb +2 -0
- data/examples/material_colours_app.rb +2 -0
- data/examples/panel_app.rb +2 -0
- data/examples/view_templates_app/template.erb +8 -1
- data/examples/view_templates_app/view_templates_app.rb +2 -2
- data/lib/vedeu/all.rb +1 -0
- data/lib/vedeu/buffers/buffer.rb +31 -15
- data/lib/vedeu/configuration/api.rb +6 -30
- data/lib/vedeu/configuration/cli.rb +0 -10
- data/lib/vedeu/configuration/configuration.rb +0 -11
- data/lib/vedeu/distributed/templates/default_configuration.vedeu +0 -2
- data/lib/vedeu/dsl/composition.rb +9 -0
- data/lib/vedeu/models/char.rb +1 -7
- data/lib/vedeu/models/line.rb +1 -1
- data/lib/vedeu/models/stream.rb +10 -0
- data/lib/vedeu/output/border.rb +7 -5
- data/lib/vedeu/output/clear.rb +1 -1
- data/lib/vedeu/output/compressor.rb +1 -1
- data/lib/vedeu/output/refresh.rb +5 -9
- data/lib/vedeu/output/renderers/terminal.rb +1 -1
- data/lib/vedeu/output/viewport.rb +5 -12
- data/lib/vedeu/support/log.rb +1 -0
- data/lib/vedeu/support/template.rb +13 -7
- data/lib/vedeu/templating/all.rb +3 -0
- data/lib/vedeu/templating/directive.rb +43 -0
- data/lib/vedeu/templating/helpers.rb +63 -0
- data/lib/vedeu/templating/preprocessor.rb +72 -0
- data/test/lib/vedeu/configuration/api_test.rb +0 -55
- data/test/lib/vedeu/configuration/cli_test.rb +0 -7
- data/test/lib/vedeu/configuration/configuration_test.rb +0 -7
- data/test/lib/vedeu/geometry/coordinate_test.rb +11 -15
- data/test/lib/vedeu/models/stream_test.rb +14 -0
- data/test/lib/vedeu/support/timer_test.rb +42 -0
- data/test/lib/vedeu/templating/directive_test.rb +38 -0
- data/test/lib/vedeu/templating/helpers_test.rb +97 -0
- data/test/lib/vedeu/templating/preprocessor_test.rb +47 -0
- data/test/support/templates/simple_stuff.erb +6 -0
- data/vedeu.gemspec +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af28147191fb71a62c5dafcafdfc482ba5197f96
|
4
|
+
data.tar.gz: ffba51b895e26f86fb0075b0880ee85dab52a31f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b710ffa6a3f5b5cb01ba0bc88ec1b5b24d0e4261f14530d39588fc00595dda35cb9318b610636f16e2ac71775af986edc4bc2fa0b622e36551d6843e93b0e0ba
|
7
|
+
data.tar.gz: cfa662925a0f62b56e942ff95ae0f8245cefb7384f27d00146378aa3eabd17c396cc7f565b637d88868c3f214ef96de403b2e37ecb4ed87d970ae66656a14cbc
|
data/bin/vedeu_drb_server
CHANGED
data/examples/borders_app.rb
CHANGED
data/examples/colours_app.rb
CHANGED
data/examples/drb_app.rb
CHANGED
@@ -8,6 +8,8 @@ require 'vedeu'
|
|
8
8
|
# An example application to demonstrate the DRb server.
|
9
9
|
class VedeuTestApplication
|
10
10
|
|
11
|
+
# Be aware that running an application with debugging enabled will affect
|
12
|
+
# performance.
|
11
13
|
Vedeu.configure do
|
12
14
|
log '/tmp/vedeu_test_helper.log'
|
13
15
|
debug!
|
@@ -25,8 +27,6 @@ class VedeuTestApplication
|
|
25
27
|
# interactive!
|
26
28
|
# standalone!
|
27
29
|
|
28
|
-
# trace!
|
29
|
-
|
30
30
|
# System keys can be redefined
|
31
31
|
# exit_key 'q'
|
32
32
|
# focus_next_key :tab
|
data/examples/focus_app.rb
CHANGED
data/examples/geometry_app.rb
CHANGED
data/examples/panel_app.rb
CHANGED
@@ -1 +1,8 @@
|
|
1
|
-
Here's a simple example that will be displayed in the main interface of the
|
1
|
+
Here's a simple example that will be displayed in the main interface of the
|
2
|
+
application. It's a multi-line affair, composed of words, punctuation and
|
3
|
+
with no doubt, bad grammar. An empty line follows:
|
4
|
+
|
5
|
+
Now, this line contains a <%= colours({ fg: '#ff0000', bg: '#000000' }) { 'red' } %> word. Whilst
|
6
|
+
this has a <% foreground('#33aa33') do %>green foreground<% end %> or
|
7
|
+
<% background('#33aa33') do %>green background<% end %>. There's also a short
|
8
|
+
syntax being used <%= fg('#0000ff') { 'here' } %> and <%= bg('#0000ff') { 'here' } %>.
|
@@ -43,10 +43,10 @@ class VedeuViewTemplateApp
|
|
43
43
|
colour foreground: '#aadd00', background: '#000000'
|
44
44
|
end
|
45
45
|
border('prune') do
|
46
|
-
colour foreground: '#
|
46
|
+
colour foreground: '#00aadd', background: '#000000'
|
47
47
|
end
|
48
48
|
border('wrap') do
|
49
|
-
colour foreground: '#
|
49
|
+
colour foreground: '#dd00aa', background: '#000000'
|
50
50
|
end
|
51
51
|
|
52
52
|
geometry('prune') do
|
data/lib/vedeu/all.rb
CHANGED
data/lib/vedeu/buffers/buffer.rb
CHANGED
@@ -68,6 +68,15 @@ module Vedeu
|
|
68
68
|
true
|
69
69
|
end
|
70
70
|
|
71
|
+
# Return a boolean indicating content presence on the buffer type.
|
72
|
+
#
|
73
|
+
# @return [Boolean] Whether the buffer targetted has content.
|
74
|
+
def back?
|
75
|
+
return false if back.nil? || back.content.empty?
|
76
|
+
|
77
|
+
true
|
78
|
+
end
|
79
|
+
|
71
80
|
# Returns the front buffer or, if that is empty, the interface cleared.
|
72
81
|
#
|
73
82
|
# @return [void]
|
@@ -75,6 +84,24 @@ module Vedeu
|
|
75
84
|
Vedeu::Output.render(clear_buffer)
|
76
85
|
end
|
77
86
|
|
87
|
+
# Return a boolean indicating content presence on the buffer type.
|
88
|
+
#
|
89
|
+
# @return [Boolean] Whether the buffer targetted has content.
|
90
|
+
def front?
|
91
|
+
return false if front.nil? || front.content.empty?
|
92
|
+
|
93
|
+
true
|
94
|
+
end
|
95
|
+
|
96
|
+
# Return a boolean indicating content presence on the buffer type.
|
97
|
+
#
|
98
|
+
# @return [Boolean] Whether the buffer targetted has content.
|
99
|
+
def previous?
|
100
|
+
return false if previous.nil? || previous.content.empty?
|
101
|
+
|
102
|
+
true
|
103
|
+
end
|
104
|
+
|
78
105
|
# Hide this buffer.
|
79
106
|
#
|
80
107
|
# @return [void]
|
@@ -118,12 +145,12 @@ module Vedeu
|
|
118
145
|
#
|
119
146
|
# @return [Array<Array<Array<Vedeu::Char>>>]
|
120
147
|
def buffer
|
121
|
-
swap if
|
148
|
+
swap if back?
|
122
149
|
|
123
|
-
if
|
150
|
+
if front?
|
124
151
|
[front.render]
|
125
152
|
|
126
|
-
elsif
|
153
|
+
elsif previous?
|
127
154
|
[previous.render]
|
128
155
|
|
129
156
|
else
|
@@ -165,17 +192,6 @@ module Vedeu
|
|
165
192
|
true
|
166
193
|
end
|
167
194
|
|
168
|
-
# Return a boolean indicating content presence on the buffer type.
|
169
|
-
#
|
170
|
-
# @param buffer [Symbol] One of; :back, :front or :previous.
|
171
|
-
# @return [Boolean] Whether the buffer targetted has content.
|
172
|
-
def content_for?(buffer)
|
173
|
-
return false if public_send(buffer).nil? ||
|
174
|
-
public_send(buffer).content.empty?
|
175
|
-
|
176
|
-
true
|
177
|
-
end
|
178
|
-
|
179
195
|
# Retrieve the interface by name.
|
180
196
|
#
|
181
197
|
# @return [Vedeu::Interface]
|
@@ -185,7 +201,7 @@ module Vedeu
|
|
185
201
|
|
186
202
|
# @return [Vedeu::Interface]
|
187
203
|
def view
|
188
|
-
if
|
204
|
+
if front?
|
189
205
|
front
|
190
206
|
|
191
207
|
else
|
@@ -181,8 +181,11 @@ module Vedeu
|
|
181
181
|
|
182
182
|
# Sets boolean to enable/disable debugging. Vedeu's default setting is
|
183
183
|
# for debugging to be disabled. Using `debug!` or setting `debug` to true
|
184
|
-
# will enable debugging.
|
185
|
-
#
|
184
|
+
# will enable debugging.
|
185
|
+
#
|
186
|
+
# @note
|
187
|
+
# Be aware that running an application with debugging enabled will
|
188
|
+
# affect performance.
|
186
189
|
#
|
187
190
|
# @example
|
188
191
|
# Vedeu.configure do
|
@@ -196,37 +199,10 @@ module Vedeu
|
|
196
199
|
# @param value [Boolean]
|
197
200
|
# @return [Boolean]
|
198
201
|
def debug!(value = true)
|
199
|
-
|
200
|
-
options[:debug] = true
|
201
|
-
|
202
|
-
else
|
203
|
-
options[:debug] = value
|
204
|
-
|
205
|
-
end
|
202
|
+
options[:debug] = value
|
206
203
|
end
|
207
204
|
alias_method :debug, :debug!
|
208
205
|
|
209
|
-
# Sets boolean to enable/disable tracing. Vedeu's default setting is for
|
210
|
-
# tracing to be disabled. Using `trace!` or setting `trace` to true will
|
211
|
-
# enable tracing and debugging.
|
212
|
-
#
|
213
|
-
# @example
|
214
|
-
# Vedeu.configure do
|
215
|
-
# trace!
|
216
|
-
# ...
|
217
|
-
#
|
218
|
-
# Vedeu.configure do
|
219
|
-
# trace false
|
220
|
-
# ...
|
221
|
-
#
|
222
|
-
# @param value [Boolean]
|
223
|
-
# @return [Boolean]
|
224
|
-
def trace!(value = true)
|
225
|
-
options[:debug] = true if value
|
226
|
-
options[:trace] = value
|
227
|
-
end
|
228
|
-
alias_method :trace, :trace!
|
229
|
-
|
230
206
|
# Sets the colour mode of the terminal.
|
231
207
|
#
|
232
208
|
# @example
|
@@ -75,7 +75,6 @@ module Vedeu
|
|
75
75
|
:run_many,
|
76
76
|
:run_once,
|
77
77
|
:standalone,
|
78
|
-
:trace,
|
79
78
|
]
|
80
79
|
end
|
81
80
|
|
@@ -202,15 +201,6 @@ module Vedeu
|
|
202
201
|
end
|
203
202
|
end
|
204
203
|
|
205
|
-
# @return [OptionParser]
|
206
|
-
def trace
|
207
|
-
parser.on('-D', '--trace', 'Run application with debugging on with ' \
|
208
|
-
'method and event tracing (noisy!).') do
|
209
|
-
options[:debug] = true
|
210
|
-
options[:trace] = true
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
204
|
end # CLI
|
215
205
|
|
216
206
|
end # Config
|
@@ -178,16 +178,6 @@ module Vedeu
|
|
178
178
|
instance.options[:terminal_mode]
|
179
179
|
end
|
180
180
|
|
181
|
-
# Returns whether tracing is enabled or disabled. Tracing is very noisy in
|
182
|
-
# the log file (logging method calls and events trigger). Default is
|
183
|
-
# false; meaning tracing is disabled.
|
184
|
-
#
|
185
|
-
# @return [Boolean]
|
186
|
-
def trace?
|
187
|
-
instance.options[:trace]
|
188
|
-
end
|
189
|
-
alias_method :trace, :trace?
|
190
|
-
|
191
181
|
# Vedeu's default system keys. Use {Vedeu::Configuration.system_keys}.
|
192
182
|
#
|
193
183
|
# @return [Hash]
|
@@ -275,7 +265,6 @@ module Vedeu
|
|
275
265
|
stderr: nil,
|
276
266
|
system_keys: Vedeu::Configuration.default_system_keys,
|
277
267
|
terminal_mode: :raw,
|
278
|
-
trace: false,
|
279
268
|
}
|
280
269
|
end
|
281
270
|
|
@@ -71,6 +71,15 @@ module Vedeu
|
|
71
71
|
model.add(new_model)
|
72
72
|
end
|
73
73
|
|
74
|
+
# def content_for(name, filename, object = nil, options = {})
|
75
|
+
# lines = Vedeu::Template.parse(object, filename)
|
76
|
+
|
77
|
+
# _model = model.member.build(new_attributes(name).
|
78
|
+
# merge!({ lines: lines }))
|
79
|
+
|
80
|
+
# model.add(_model)
|
81
|
+
# end
|
82
|
+
|
74
83
|
protected
|
75
84
|
|
76
85
|
# @!attribute [r] client
|
data/lib/vedeu/models/char.rb
CHANGED
@@ -84,13 +84,7 @@ module Vedeu
|
|
84
84
|
# @param value [Vedeu::Position]
|
85
85
|
# @return [Vedeu::Position]
|
86
86
|
def position=(value)
|
87
|
-
|
88
|
-
@position = @attributes[:position] = value
|
89
|
-
|
90
|
-
else
|
91
|
-
@position = @attributes[:position] = Vedeu::Position.coerce(value)
|
92
|
-
|
93
|
-
end
|
87
|
+
@position = @attributes[:position] = Vedeu::Position.coerce(value)
|
94
88
|
end
|
95
89
|
|
96
90
|
# @return [String]
|
data/lib/vedeu/models/line.rb
CHANGED
data/lib/vedeu/models/stream.rb
CHANGED
@@ -71,6 +71,16 @@ module Vedeu
|
|
71
71
|
value.empty?
|
72
72
|
end
|
73
73
|
|
74
|
+
# An object is equal when its values are the same.
|
75
|
+
#
|
76
|
+
# @param other [Vedeu::Char]
|
77
|
+
# @return [Boolean]
|
78
|
+
def eql?(other)
|
79
|
+
self.class == other.class && value == other.value &&
|
80
|
+
colour == other.colour && style == other.style && parent == other.parent
|
81
|
+
end
|
82
|
+
alias_method :==, :eql?
|
83
|
+
|
74
84
|
# @return [NilClass|String]
|
75
85
|
def name
|
76
86
|
parent.name if parent
|
data/lib/vedeu/output/border.rb
CHANGED
@@ -159,13 +159,15 @@ module Vedeu
|
|
159
159
|
return [] unless visible?
|
160
160
|
return [] unless enabled?
|
161
161
|
|
162
|
-
|
162
|
+
Vedeu::Timer.for(:timer, "Rendering border: #{name}") do
|
163
|
+
out = [top, bottom]
|
163
164
|
|
164
|
-
|
165
|
-
|
166
|
-
|
165
|
+
height.times do |y|
|
166
|
+
out << [left(y), right(y)]
|
167
|
+
end
|
167
168
|
|
168
|
-
|
169
|
+
out.flatten
|
170
|
+
end
|
169
171
|
end
|
170
172
|
|
171
173
|
# @return [String]
|
data/lib/vedeu/output/clear.rb
CHANGED
data/lib/vedeu/output/refresh.rb
CHANGED
@@ -12,7 +12,7 @@ module Vedeu
|
|
12
12
|
def all
|
13
13
|
message = 'Refreshing all interfaces'
|
14
14
|
|
15
|
-
Vedeu::Timer.for(:
|
15
|
+
Vedeu::Timer.for(:timer, message) do
|
16
16
|
Vedeu.interfaces.zindexed.each { |model| by_name(model.name) }
|
17
17
|
end
|
18
18
|
end
|
@@ -32,14 +32,10 @@ module Vedeu
|
|
32
32
|
def by_group(group_name)
|
33
33
|
message = "Refreshing group: '#{group_name}'"
|
34
34
|
|
35
|
-
Vedeu::Timer.for(:
|
36
|
-
Vedeu.groups.find!(group_name).members.each
|
35
|
+
Vedeu::Timer.for(:timer, message) do
|
36
|
+
Vedeu.groups.find!(group_name).members.each { |name|
|
37
37
|
Vedeu.interfaces.by_name(name)
|
38
|
-
|
39
|
-
a.zindex <=> b.zindex
|
40
|
-
end.each do |name|
|
41
|
-
by_name(name)
|
42
|
-
end
|
38
|
+
}.sort { |a, b| a.zindex <=> b.zindex }.each { |name| by_name(name) }
|
43
39
|
end
|
44
40
|
end
|
45
41
|
|
@@ -51,7 +47,7 @@ module Vedeu
|
|
51
47
|
def by_name(name)
|
52
48
|
message = "Refreshing interface: '#{name}'"
|
53
49
|
|
54
|
-
Vedeu::Timer.for(:
|
50
|
+
Vedeu::Timer.for(:timer, message) { Vedeu.buffers.by_name(name).render }
|
55
51
|
end
|
56
52
|
|
57
53
|
end # Refresh
|
@@ -52,11 +52,11 @@ module Vedeu
|
|
52
52
|
def render
|
53
53
|
return [] unless visible?
|
54
54
|
|
55
|
-
Vedeu::Timer.for(:
|
55
|
+
Vedeu::Timer.for(:timer, "Rendering: #{name}") do
|
56
56
|
out = []
|
57
57
|
|
58
|
-
show
|
59
|
-
line
|
58
|
+
show.each_with_index do |line, iy|
|
59
|
+
line.each_with_index do |column, ix|
|
60
60
|
column.position = Vedeu::Position[by + iy, bx + ix]
|
61
61
|
out << column
|
62
62
|
end
|
@@ -106,7 +106,7 @@ module Vedeu
|
|
106
106
|
#
|
107
107
|
# @return [Range]
|
108
108
|
def rows
|
109
|
-
top
|
109
|
+
top...(top + height)
|
110
110
|
end
|
111
111
|
|
112
112
|
# Using the current cursor's x position, return a range of visible columns.
|
@@ -119,7 +119,7 @@ module Vedeu
|
|
119
119
|
#
|
120
120
|
# @return [Range]
|
121
121
|
def columns
|
122
|
-
left
|
122
|
+
left...(left + width)
|
123
123
|
end
|
124
124
|
|
125
125
|
# @return [Fixnum]
|
@@ -163,13 +163,6 @@ module Vedeu
|
|
163
163
|
@cursor ||= Vedeu.cursors.by_name(name)
|
164
164
|
end
|
165
165
|
|
166
|
-
# Return the geometry associated with the interface we are drawing.
|
167
|
-
#
|
168
|
-
# @return (see Vedeu::Geometries#by_name)
|
169
|
-
def geometry
|
170
|
-
@geometry || Vedeu.geometries.by_name(name)
|
171
|
-
end
|
172
|
-
|
173
166
|
end # Viewport
|
174
167
|
|
175
168
|
end # Vedeu
|
data/lib/vedeu/support/log.rb
CHANGED
@@ -3,21 +3,23 @@ module Vedeu
|
|
3
3
|
# Generic class to loading a template and parsing it via ERb.
|
4
4
|
class Template
|
5
5
|
|
6
|
-
# @param
|
7
|
-
# @param path [String]
|
6
|
+
# @param see Vedeu::Template#new
|
8
7
|
# @return [void]
|
9
|
-
def self.parse(object, path)
|
10
|
-
new(object, path).parse
|
8
|
+
def self.parse(object, path, options = {})
|
9
|
+
new(object, path, options).parse
|
11
10
|
end
|
12
11
|
|
13
12
|
# Returns a new instance of Vedeu::Template.
|
14
13
|
#
|
15
14
|
# @param object [Class]
|
16
15
|
# @param path [String]
|
16
|
+
# @param options [Hash]
|
17
|
+
# @option options name [String] The name of an interface.
|
17
18
|
# @return [Template]
|
18
|
-
def initialize(object, path)
|
19
|
-
@object
|
20
|
-
@path
|
19
|
+
def initialize(object, path, options = {})
|
20
|
+
@object = object
|
21
|
+
@path = path.to_s
|
22
|
+
@options = options
|
21
23
|
end
|
22
24
|
|
23
25
|
# @return [void]
|
@@ -31,6 +33,10 @@ module Vedeu
|
|
31
33
|
# @return [Class]
|
32
34
|
attr_reader :object
|
33
35
|
|
36
|
+
# @!attribute [r] options
|
37
|
+
# @return [Hash]
|
38
|
+
attr_reader :options
|
39
|
+
|
34
40
|
private
|
35
41
|
|
36
42
|
# @return [String]
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Templating
|
4
|
+
|
5
|
+
# Converts a directive found in a template into a Vedeu::Stream object.
|
6
|
+
class Directive
|
7
|
+
|
8
|
+
include Vedeu::Templating::Helpers
|
9
|
+
|
10
|
+
# @param code [String]
|
11
|
+
# @return [Vedeu::Stream]
|
12
|
+
def self.process(code)
|
13
|
+
new(code).process
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param code [String]
|
17
|
+
def initialize(code)
|
18
|
+
@code = code
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Vedeu::Stream]
|
22
|
+
def process
|
23
|
+
eval(code, proc.binding)
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
# @!attribute [r] code
|
29
|
+
# @return [String]
|
30
|
+
attr_reader :code
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# @return [Proc]
|
35
|
+
def proc
|
36
|
+
@proc ||= Proc.new {}
|
37
|
+
end
|
38
|
+
|
39
|
+
end # Directive
|
40
|
+
|
41
|
+
end # Templating
|
42
|
+
|
43
|
+
end # Vedeu
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Templating
|
4
|
+
|
5
|
+
module Helpers
|
6
|
+
|
7
|
+
# @param value [String] The HTML/CSS colour.
|
8
|
+
# @param block [Proc]
|
9
|
+
# @return [Vedeu::Stream]
|
10
|
+
# @raise [InvalidSyntax] The required block was not given.
|
11
|
+
def background(value, &block)
|
12
|
+
define_stream({ background: value }, &block)
|
13
|
+
end
|
14
|
+
alias_method :bg, :background
|
15
|
+
|
16
|
+
# @param attributes [Hash]
|
17
|
+
# @option attributes foreground [String] The HTML/CSS foreground colour.
|
18
|
+
# @option attributes background [String] The HTML/CSS background colour.
|
19
|
+
# @param block [Proc]
|
20
|
+
# @return [Vedeu::Stream]
|
21
|
+
# @raise [InvalidSyntax] The required block was not given.
|
22
|
+
def colour(attributes = {}, &block)
|
23
|
+
define_stream(attributes, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
# @example
|
27
|
+
# Roses are {{ foreground('#ff0000', 'red') }},
|
28
|
+
# violets are {{ fg('#0000ff', 'blue') }}
|
29
|
+
# {{ foreground('#00ff00'), 'The test suite is all green!' }}
|
30
|
+
#
|
31
|
+
# @param value [String] The HTML/CSS colour.
|
32
|
+
# @param block [Proc]
|
33
|
+
# @return [Vedeu::Stream]
|
34
|
+
# @raise [InvalidSyntax] The required block was not given.
|
35
|
+
def foreground(value, &block)
|
36
|
+
define_stream({ foreground: value }, &block)
|
37
|
+
end
|
38
|
+
alias_method :fg, :foreground
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# @param see Vedeu::Templating::Helpers#colours
|
43
|
+
def define_colour(attributes = {})
|
44
|
+
attributes.delete_if do |k, v|
|
45
|
+
[:background, :foreground].include?(k) == false || v.nil? || v.empty?
|
46
|
+
end
|
47
|
+
|
48
|
+
Vedeu::Colour.new(attributes)
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param see Vedeu::Templating::Helpers#colours
|
52
|
+
def define_stream(attributes = {}, &block)
|
53
|
+
fail InvalidSyntax, 'block not given' unless block_given?
|
54
|
+
|
55
|
+
Vedeu::Stream.build(colour: define_colour(attributes),
|
56
|
+
value: block.call)
|
57
|
+
end
|
58
|
+
|
59
|
+
end # Helpers
|
60
|
+
|
61
|
+
end # Templating
|
62
|
+
|
63
|
+
end # Vedeu
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Templating
|
4
|
+
|
5
|
+
# preprocess
|
6
|
+
# takes a line at a time
|
7
|
+
# splits line into component parts e.g. text1, ruby, text1
|
8
|
+
# takes text1, adds to JSON stream
|
9
|
+
# processes ruby, adding to a new JSON stream
|
10
|
+
# takes text2, adds to a JSON stream
|
11
|
+
#
|
12
|
+
# process
|
13
|
+
# converts JSON streams into line/stream objects with correct attributes
|
14
|
+
|
15
|
+
# Pre-processes a template, to convert all lines and lines with directives
|
16
|
+
# into Vedeu::Streams.
|
17
|
+
class Preprocessor
|
18
|
+
|
19
|
+
# @param lines [Array<String>]
|
20
|
+
def self.process(lines)
|
21
|
+
new(lines).process
|
22
|
+
end
|
23
|
+
|
24
|
+
# @param lines [Array<String>]
|
25
|
+
def initialize(lines)
|
26
|
+
@lines = lines
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Array<Vedeu::Stream>]
|
30
|
+
def process
|
31
|
+
lines.each_with_object([]) do |line, acc|
|
32
|
+
if line =~ markers?
|
33
|
+
code = line.gsub(markers, '').chomp
|
34
|
+
|
35
|
+
acc << Directive.process(code)
|
36
|
+
|
37
|
+
else
|
38
|
+
acc << Vedeu::Stream.new(value: line.chomp)
|
39
|
+
|
40
|
+
end
|
41
|
+
acc
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
protected
|
46
|
+
|
47
|
+
# @!attribute [r] lines
|
48
|
+
# @return [Array<String>]
|
49
|
+
attr_reader :lines
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# Return a pattern to remove directive markers and spaces.
|
54
|
+
#
|
55
|
+
# @return [Regexp]
|
56
|
+
def markers
|
57
|
+
/({{\s*|\s*}})/
|
58
|
+
end
|
59
|
+
|
60
|
+
# @example
|
61
|
+
# line contains {{ or }}
|
62
|
+
#
|
63
|
+
# @return [Regexp]
|
64
|
+
def markers?
|
65
|
+
/^\s*({{)(.*?)(}})$/
|
66
|
+
end
|
67
|
+
|
68
|
+
end # Preprocessor
|
69
|
+
|
70
|
+
end # Templating
|
71
|
+
|
72
|
+
end # Vedeu
|
@@ -20,7 +20,6 @@ module Vedeu
|
|
20
20
|
it { instance.must_respond_to(:cooked) }
|
21
21
|
it { instance.must_respond_to(:raw) }
|
22
22
|
it { instance.must_respond_to(:debug) }
|
23
|
-
it { instance.must_respond_to(:trace) }
|
24
23
|
end
|
25
24
|
|
26
25
|
describe '.configure' do
|
@@ -177,60 +176,6 @@ module Vedeu
|
|
177
176
|
configuration = Vedeu.configure { debug(false) }
|
178
177
|
configuration.debug.must_equal(false)
|
179
178
|
end
|
180
|
-
|
181
|
-
it 'sets the option to the desired value' do
|
182
|
-
configuration = Vedeu.configure { trace(true) }
|
183
|
-
configuration.debug.must_equal(true)
|
184
|
-
end
|
185
|
-
|
186
|
-
it 'sets the option to the desired value' do
|
187
|
-
configuration = Vedeu.configure do
|
188
|
-
debug(false)
|
189
|
-
trace(true)
|
190
|
-
end
|
191
|
-
|
192
|
-
configuration.debug.must_equal(true)
|
193
|
-
end
|
194
|
-
|
195
|
-
it 'sets the option to the desired value' do
|
196
|
-
configuration = Vedeu.configure do
|
197
|
-
debug(true)
|
198
|
-
trace(false)
|
199
|
-
end
|
200
|
-
|
201
|
-
configuration.debug.must_equal(true)
|
202
|
-
end
|
203
|
-
|
204
|
-
it 'sets the option to the desired value' do
|
205
|
-
configuration = Vedeu.configure do
|
206
|
-
debug(false)
|
207
|
-
trace(false)
|
208
|
-
end
|
209
|
-
|
210
|
-
configuration.debug.must_equal(false)
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
describe '#trace!' do
|
215
|
-
it 'sets the option to the desired value' do
|
216
|
-
configuration = Vedeu.configure { trace! }
|
217
|
-
|
218
|
-
configuration.trace.must_equal(true)
|
219
|
-
end
|
220
|
-
|
221
|
-
it 'sets the option to the desired value' do
|
222
|
-
configuration = Vedeu.configure { trace(false) }
|
223
|
-
|
224
|
-
configuration.trace.must_equal(false)
|
225
|
-
configuration.debug.must_equal(false)
|
226
|
-
end
|
227
|
-
|
228
|
-
it 'sets the option to the desired value' do
|
229
|
-
configuration = Vedeu.configure { trace(true) }
|
230
|
-
|
231
|
-
configuration.trace.must_equal(true)
|
232
|
-
configuration.debug.must_equal(true)
|
233
|
-
end
|
234
179
|
end
|
235
180
|
|
236
181
|
describe '#colour_mode' do
|
@@ -14,7 +14,6 @@ module Vedeu
|
|
14
14
|
it { described.must_respond_to(:drb) }
|
15
15
|
it { described.must_respond_to(:interactive) }
|
16
16
|
it { described.must_respond_to(:once) }
|
17
|
-
it { described.must_respond_to(:trace) }
|
18
17
|
end
|
19
18
|
|
20
19
|
describe '.default_system_keys' do
|
@@ -74,12 +73,6 @@ module Vedeu
|
|
74
73
|
end
|
75
74
|
end
|
76
75
|
|
77
|
-
describe '#trace?' do
|
78
|
-
it 'returns the value of the trace option' do
|
79
|
-
Configuration.trace?.must_equal(false)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
76
|
describe '.configure' do
|
84
77
|
it 'returns the options configured' do
|
85
78
|
Configuration.configure do
|
@@ -12,22 +12,18 @@ module Vedeu
|
|
12
12
|
let(:x) { 7 }
|
13
13
|
let(:y) { 5 }
|
14
14
|
|
15
|
-
let(:borders) { mock('Vedeu::Borders') }
|
16
|
-
let(:border) {
|
17
|
-
Vedeu::Border.new({
|
18
|
-
name: _name,
|
19
|
-
enabled: true
|
20
|
-
})
|
21
|
-
}
|
22
|
-
|
23
15
|
before do
|
24
|
-
Vedeu::
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
16
|
+
Vedeu::Border.new(name: _name,
|
17
|
+
enabled: true).store
|
18
|
+
Vedeu::Geometry.new(name: _name,
|
19
|
+
height: height,
|
20
|
+
width: width,
|
21
|
+
x: x,
|
22
|
+
y: y).store
|
23
|
+
end
|
24
|
+
after do
|
25
|
+
Vedeu.borders.reset
|
26
|
+
Vedeu.geometries.reset
|
31
27
|
end
|
32
28
|
|
33
29
|
describe '#initialize' do
|
@@ -76,6 +76,20 @@ module Vedeu
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
+
describe '#eql?' do
|
80
|
+
let(:other) { described.new(attributes) }
|
81
|
+
|
82
|
+
subject { instance.eql?(other) }
|
83
|
+
|
84
|
+
it { subject.must_equal(true) }
|
85
|
+
|
86
|
+
context 'when different to other' do
|
87
|
+
let(:other) { described.new(colour: Colour.coerce({ background: '#ff0000' })) }
|
88
|
+
|
89
|
+
it { subject.must_equal(false) }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
79
93
|
describe '#name' do
|
80
94
|
subject { instance.name }
|
81
95
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
describe Timer do
|
6
|
+
|
7
|
+
let(:described) { Vedeu::Timer }
|
8
|
+
let(:instance) { described.new(type, _message) }
|
9
|
+
let(:type) { :debug }
|
10
|
+
let(:_message) { 'Testing' }
|
11
|
+
let(:_time) { mock('Time') }
|
12
|
+
let(:started) { 1434492219.5238185 }
|
13
|
+
|
14
|
+
before do
|
15
|
+
Time.stubs(:now).returns(_time)
|
16
|
+
_time.stubs(:to_f).returns(started)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#initialize' do
|
20
|
+
it { instance.must_be_instance_of(described) }
|
21
|
+
it { instance.instance_variable_get('@type').must_equal(type) }
|
22
|
+
it { instance.instance_variable_get('@message').must_equal(_message) }
|
23
|
+
it { instance.instance_variable_get('@started').must_equal(started) }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '.for' do
|
27
|
+
it { described.must_respond_to(:for) }
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#measure' do
|
31
|
+
subject { instance.measure { } }
|
32
|
+
|
33
|
+
it {
|
34
|
+
Vedeu.expects(:log).with(type: :debug,
|
35
|
+
message: "Testing took 0ms.")
|
36
|
+
subject
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
end # Timer
|
41
|
+
|
42
|
+
end # Vedeu
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
module Templating
|
6
|
+
|
7
|
+
describe Directive do
|
8
|
+
|
9
|
+
let(:described) { Vedeu::Templating::Directive }
|
10
|
+
let(:instance) { described.new(code) }
|
11
|
+
let(:code) {
|
12
|
+
"colour(foreground: '#0f0') { 'Yay!' }"
|
13
|
+
}
|
14
|
+
|
15
|
+
describe '#initialize' do
|
16
|
+
it { instance.must_be_instance_of(described) }
|
17
|
+
it { instance.instance_variable_get('@code').must_equal(code) }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.process' do
|
21
|
+
it { described.must_respond_to(:process) }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#process' do
|
25
|
+
let(:colour) { Vedeu::Colour.coerce(foreground: '#0f0') }
|
26
|
+
let(:expected) { Vedeu::Stream.new(value: 'Yay!', colour: colour) }
|
27
|
+
|
28
|
+
subject { instance.process }
|
29
|
+
|
30
|
+
it { subject.must_be_instance_of(Vedeu::Stream) }
|
31
|
+
it { subject.must_equal(expected) }
|
32
|
+
end
|
33
|
+
|
34
|
+
end # Directive
|
35
|
+
|
36
|
+
end # Templating
|
37
|
+
|
38
|
+
end # Vedeu
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
module Templating
|
6
|
+
|
7
|
+
class HelpersTestClass
|
8
|
+
|
9
|
+
include Vedeu::Templating::Helpers
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
describe Helpers do
|
14
|
+
|
15
|
+
let(:described) { Vedeu::Templating::Helpers }
|
16
|
+
let(:instance) { Vedeu::Templating::HelpersTestClass.new }
|
17
|
+
|
18
|
+
describe '#background' do
|
19
|
+
let(:expected) {
|
20
|
+
Vedeu::Stream.new(value: 'background text',
|
21
|
+
colour: Vedeu::Colour.coerce(background: '#000000'))
|
22
|
+
}
|
23
|
+
|
24
|
+
subject { instance.background('#000000') { 'background text' } }
|
25
|
+
|
26
|
+
it { subject.must_equal(expected) }
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#colour' do
|
30
|
+
let(:attributes) { {} }
|
31
|
+
|
32
|
+
subject { instance.colour(attributes) { 'colour text' } }
|
33
|
+
|
34
|
+
context 'with no attributes' do
|
35
|
+
it { subject.must_be_instance_of(Vedeu::Stream) }
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'with a background attribute' do
|
39
|
+
let(:attributes) {
|
40
|
+
{
|
41
|
+
background: '#002200'
|
42
|
+
}
|
43
|
+
}
|
44
|
+
let(:expected) {
|
45
|
+
Vedeu::Stream.new(value: 'colour text',
|
46
|
+
colour: Vedeu::Colour.coerce(attributes))
|
47
|
+
}
|
48
|
+
|
49
|
+
it { subject.must_equal(expected) }
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'with a foreground attribute' do
|
53
|
+
let(:attributes) {
|
54
|
+
{
|
55
|
+
foreground: '#ff0000'
|
56
|
+
}
|
57
|
+
}
|
58
|
+
let(:expected) {
|
59
|
+
Vedeu::Stream.new(value: 'colour text',
|
60
|
+
colour: Vedeu::Colour.coerce(attributes))
|
61
|
+
}
|
62
|
+
|
63
|
+
it { subject.must_equal(expected) }
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'with both attributes' do
|
67
|
+
let(:attributes) {
|
68
|
+
{
|
69
|
+
background: '#000022',
|
70
|
+
foreground: '#ff7700',
|
71
|
+
}
|
72
|
+
}
|
73
|
+
let(:expected) {
|
74
|
+
Vedeu::Stream.new(value: 'colour text',
|
75
|
+
colour: Vedeu::Colour.coerce(attributes))
|
76
|
+
}
|
77
|
+
|
78
|
+
it { subject.must_equal(expected) }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#foreground' do
|
83
|
+
let(:expected) {
|
84
|
+
Vedeu::Stream.new(value: 'foreground text',
|
85
|
+
colour: Vedeu::Colour.coerce(foreground: '#000000'))
|
86
|
+
}
|
87
|
+
|
88
|
+
subject { instance.foreground('#000000') { 'foreground text' } }
|
89
|
+
|
90
|
+
it { subject.must_equal(expected) }
|
91
|
+
end
|
92
|
+
|
93
|
+
end # Helpers
|
94
|
+
|
95
|
+
end # Templating
|
96
|
+
|
97
|
+
end # Vedeu
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
module Templating
|
6
|
+
|
7
|
+
describe Preprocessor do
|
8
|
+
|
9
|
+
let(:described) { Vedeu::Templating::Preprocessor }
|
10
|
+
let(:instance) { described.new(lines) }
|
11
|
+
let(:lines) {
|
12
|
+
[
|
13
|
+
"Some text here\n",
|
14
|
+
"{{ colour(foreground: '#0f0') { 'Yay!' } }}\n",
|
15
|
+
"More text here\n"
|
16
|
+
]
|
17
|
+
}
|
18
|
+
|
19
|
+
describe '#initialize' do
|
20
|
+
it { instance.must_be_instance_of(described) }
|
21
|
+
it { instance.instance_variable_get('@lines').must_equal(lines) }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '.process' do
|
25
|
+
it { described.must_respond_to(:process) }
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#process' do
|
29
|
+
let(:expected) {
|
30
|
+
[
|
31
|
+
Vedeu::Stream.new(value: 'Some text here'),
|
32
|
+
Vedeu::Stream.new(value: 'Yay!',
|
33
|
+
colour: Vedeu::Colour.coerce({ foreground: '#0f0' })),
|
34
|
+
Vedeu::Stream.new(value: 'More text here')
|
35
|
+
]
|
36
|
+
}
|
37
|
+
|
38
|
+
subject { instance.process }
|
39
|
+
|
40
|
+
it { subject.must_equal(expected) }
|
41
|
+
end
|
42
|
+
|
43
|
+
end # Preprocessor
|
44
|
+
|
45
|
+
end # Templating
|
46
|
+
|
47
|
+
end # Vedeu
|
data/vedeu.gemspec
CHANGED
@@ -4,7 +4,7 @@ $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.4.
|
7
|
+
spec.version = '0.4.28'
|
8
8
|
spec.authors = ['Gavin Laking']
|
9
9
|
spec.email = ['gavinlaking@gmail.com']
|
10
10
|
spec.summary = 'A terminal case of wonderland.'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.28
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Laking
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -434,6 +434,10 @@ files:
|
|
434
434
|
- lib/vedeu/support/terminal.rb
|
435
435
|
- lib/vedeu/support/timer.rb
|
436
436
|
- lib/vedeu/support/visibility.rb
|
437
|
+
- lib/vedeu/templating/all.rb
|
438
|
+
- lib/vedeu/templating/directive.rb
|
439
|
+
- lib/vedeu/templating/helpers.rb
|
440
|
+
- lib/vedeu/templating/preprocessor.rb
|
437
441
|
- lib/vedeu/traps.rb
|
438
442
|
- logs/.gitkeep
|
439
443
|
- test/lib/vedeu/api_test.rb
|
@@ -551,12 +555,17 @@ files:
|
|
551
555
|
- test/lib/vedeu/support/options_test.rb
|
552
556
|
- test/lib/vedeu/support/template_test.rb
|
553
557
|
- test/lib/vedeu/support/terminal_test.rb
|
558
|
+
- test/lib/vedeu/support/timer_test.rb
|
554
559
|
- test/lib/vedeu/support/visibility_test.rb
|
560
|
+
- test/lib/vedeu/templating/directive_test.rb
|
561
|
+
- test/lib/vedeu/templating/helpers_test.rb
|
562
|
+
- test/lib/vedeu/templating/preprocessor_test.rb
|
555
563
|
- test/lib/vedeu/traps_test.rb
|
556
564
|
- test/lib/vedeu_test.rb
|
557
565
|
- test/support/colour_test.sh
|
558
566
|
- test/support/helpers/model_test_class.rb
|
559
567
|
- test/support/stats.sh
|
568
|
+
- test/support/templates/simple_stuff.erb
|
560
569
|
- test/test_helper.rb
|
561
570
|
- vedeu.gemspec
|
562
571
|
homepage: https://github.com/gavinlaking/vedeu
|
@@ -701,11 +710,16 @@ test_files:
|
|
701
710
|
- test/lib/vedeu/support/options_test.rb
|
702
711
|
- test/lib/vedeu/support/template_test.rb
|
703
712
|
- test/lib/vedeu/support/terminal_test.rb
|
713
|
+
- test/lib/vedeu/support/timer_test.rb
|
704
714
|
- test/lib/vedeu/support/visibility_test.rb
|
715
|
+
- test/lib/vedeu/templating/directive_test.rb
|
716
|
+
- test/lib/vedeu/templating/helpers_test.rb
|
717
|
+
- test/lib/vedeu/templating/preprocessor_test.rb
|
705
718
|
- test/lib/vedeu/traps_test.rb
|
706
719
|
- test/lib/vedeu_test.rb
|
707
720
|
- test/support/colour_test.sh
|
708
721
|
- test/support/helpers/model_test_class.rb
|
709
722
|
- test/support/stats.sh
|
723
|
+
- test/support/templates/simple_stuff.erb
|
710
724
|
- test/test_helper.rb
|
711
725
|
has_rdoc:
|