vedeu 0.6.36 → 0.6.37
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +3 -3
- data/.yardopts +2 -0
- data/bin/vedeu_drb_server +0 -1
- data/docs/api.md +6 -2
- data/docs/cell.md +9 -0
- data/docs/chars.md +7 -0
- data/docs/colours_styles.md +8 -0
- data/docs/dsl.md +6 -2
- data/docs/input.md +98 -0
- data/docs/lines.md +8 -0
- data/docs/output.md +2 -0
- data/docs/streams.md +6 -0
- data/docs/template.md +3 -0
- data/docs/view.md +3 -6
- data/examples/dsl_demo_groups.rb +12 -4
- data/examples/dsl_hello_worlds.rb +2 -6
- data/lib/vedeu/distributed/templates/default_geometries.vedeu +0 -1
- data/lib/vedeu/dsl/view.rb +0 -1
- data/lib/vedeu/geometry/alignment.rb +65 -1
- data/lib/vedeu/geometry/area.rb +10 -15
- data/lib/vedeu/geometry/dimension.rb +19 -81
- data/lib/vedeu/geometry/dsl.rb +2 -25
- data/lib/vedeu/geometry/geometry.rb +6 -25
- data/lib/vedeu/geometry/x_dimension.rb +4 -9
- data/lib/vedeu/geometry/y_dimension.rb +4 -9
- data/lib/vedeu/null/generic.rb +0 -1
- data/lib/vedeu/output/renderers/file.rb +4 -0
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/geometry/alignment_test.rb +118 -0
- data/test/lib/vedeu/geometry/area_test.rb +0 -2
- data/test/lib/vedeu/geometry/dimension_test.rb +13 -19
- data/test/lib/vedeu/geometry/dsl_test.rb +4 -39
- data/test/lib/vedeu/geometry/geometry_test.rb +0 -68
- data/test/lib/vedeu/geometry/horizontal_alignment_test.rb +6 -0
- data/test/lib/vedeu/geometry/vertical_alignment_test.rb +6 -0
- data/test/lib/vedeu/geometry/x_dimension_test.rb +0 -2
- data/test/lib/vedeu/geometry/y_dimension_test.rb +0 -2
- data/test/lib/vedeu/null/generic_test.rb +0 -1
- data/test/support/examples/drb_app.rb +0 -1
- data/test/support/examples/hello_world.rb +1 -3
- data/test/support/examples/view_templates_app/view_templates_app.rb +1 -3
- metadata +10 -2
@@ -6,6 +6,17 @@ module Vedeu
|
|
6
6
|
#
|
7
7
|
class Dimension
|
8
8
|
|
9
|
+
extend Forwardable
|
10
|
+
|
11
|
+
def_delegators :alignment,
|
12
|
+
:bottom_aligned?,
|
13
|
+
:centre_aligned?,
|
14
|
+
:left_aligned?,
|
15
|
+
:middle_aligned?,
|
16
|
+
:right_aligned?,
|
17
|
+
:top_aligned?,
|
18
|
+
:unaligned?
|
19
|
+
|
9
20
|
# @param (see #initialize)
|
10
21
|
# @return [Array<Fixnum>]
|
11
22
|
def self.pair(attributes = {})
|
@@ -23,9 +34,7 @@ module Vedeu
|
|
23
34
|
# @option attributes default [Fixnum|NilClass]
|
24
35
|
# The terminal width or height.
|
25
36
|
# @option attributes maximised [Boolean]
|
26
|
-
# @option attributes
|
27
|
-
# @option attributes horizontal_alignment [Symbol]
|
28
|
-
# @option attributes vertical_alignment [Symbol]
|
37
|
+
# @option attributes alignment [Symbol]
|
29
38
|
# @return [Vedeu::Geometry::Dimension]
|
30
39
|
def initialize(attributes = {})
|
31
40
|
defaults.merge!(attributes).each do |key, value|
|
@@ -63,19 +72,6 @@ module Vedeu
|
|
63
72
|
attr_reader :maximised
|
64
73
|
alias_method :maximised?, :maximised
|
65
74
|
|
66
|
-
# @!attribute [r] centred
|
67
|
-
# @return [Boolean]
|
68
|
-
attr_reader :centred
|
69
|
-
alias_method :centred?, :centred
|
70
|
-
|
71
|
-
# @!attribute [r] horizontal_alignment
|
72
|
-
# @return [Symbol]
|
73
|
-
attr_reader :horizontal_alignment
|
74
|
-
|
75
|
-
# @!attribute [r] vertical_alignment
|
76
|
-
# @return [Symbol]
|
77
|
-
attr_reader :vertical_alignment
|
78
|
-
|
79
75
|
private
|
80
76
|
|
81
77
|
# @raise [Vedeu::Error::NotImplemented] Subclasses of this class
|
@@ -96,26 +92,14 @@ module Vedeu
|
|
96
92
|
@dimension = if maximised?
|
97
93
|
[1, default]
|
98
94
|
|
99
|
-
elsif bottom_aligned?
|
100
|
-
[
|
101
|
-
|
102
|
-
elsif centre_aligned?
|
103
|
-
[centred_d, centred_dn]
|
104
|
-
|
105
|
-
elsif left_aligned?
|
106
|
-
[1, left_dn]
|
95
|
+
elsif bottom_aligned? || right_aligned?
|
96
|
+
[start_coordinate, default]
|
107
97
|
|
108
|
-
elsif middle_aligned?
|
98
|
+
elsif centre_aligned? || middle_aligned?
|
109
99
|
[centred_d, centred_dn]
|
110
100
|
|
111
|
-
elsif
|
112
|
-
[
|
113
|
-
|
114
|
-
elsif top_aligned?
|
115
|
-
[1, top_dn]
|
116
|
-
|
117
|
-
elsif centred? && length?
|
118
|
-
[centred_d, centred_dn]
|
101
|
+
elsif left_aligned? || top_aligned?
|
102
|
+
[1, end_coordinate]
|
119
103
|
|
120
104
|
else
|
121
105
|
[_d, _dn]
|
@@ -187,7 +171,7 @@ module Vedeu
|
|
187
171
|
# 3) Default to the terminal width or height.
|
188
172
|
#
|
189
173
|
# @return [Fixnum]
|
190
|
-
def
|
174
|
+
def end_coordinate
|
191
175
|
if d_dn
|
192
176
|
(d_dn > default) ? default : d_dn
|
193
177
|
|
@@ -199,7 +183,6 @@ module Vedeu
|
|
199
183
|
|
200
184
|
end
|
201
185
|
end
|
202
|
-
alias_method :top_dn, :left_dn
|
203
186
|
|
204
187
|
# Ascertains the starting coordinate for a right or bottom
|
205
188
|
# aligned interface/view.
|
@@ -209,7 +192,7 @@ module Vedeu
|
|
209
192
|
# 3) Default to 1.
|
210
193
|
#
|
211
194
|
# @return [Fixnum]
|
212
|
-
def
|
195
|
+
def start_coordinate
|
213
196
|
if d_dn
|
214
197
|
(default - d_dn) < 1 ? 1 : (default - d_dn)
|
215
198
|
|
@@ -221,7 +204,6 @@ module Vedeu
|
|
221
204
|
|
222
205
|
end
|
223
206
|
end
|
224
|
-
alias_method :bottom_d, :right_d
|
225
207
|
|
226
208
|
# Fetch the starting coordinate, or use 1 when not set.
|
227
209
|
#
|
@@ -259,48 +241,6 @@ module Vedeu
|
|
259
241
|
end
|
260
242
|
end
|
261
243
|
|
262
|
-
# Return a boolean indicating alignment was set to :left.
|
263
|
-
#
|
264
|
-
# @return [Boolean]
|
265
|
-
def left_aligned?
|
266
|
-
alignment == :left
|
267
|
-
end
|
268
|
-
|
269
|
-
# Return a boolean indicating alignment was set to :middle.
|
270
|
-
#
|
271
|
-
# @return [Boolean]
|
272
|
-
def middle_aligned?
|
273
|
-
alignment == :middle
|
274
|
-
end
|
275
|
-
|
276
|
-
# Return a boolean indicating alignment was set to :bottom.
|
277
|
-
#
|
278
|
-
# @return [Boolean]
|
279
|
-
def bottom_aligned?
|
280
|
-
alignment == :bottom
|
281
|
-
end
|
282
|
-
|
283
|
-
# Return a boolean indicating alignment was set to :centre.
|
284
|
-
#
|
285
|
-
# @return [Boolean]
|
286
|
-
def centre_aligned?
|
287
|
-
alignment == :centre
|
288
|
-
end
|
289
|
-
|
290
|
-
# Return a boolean indicating alignment was set to :right.
|
291
|
-
#
|
292
|
-
# @return [Boolean]
|
293
|
-
def right_aligned?
|
294
|
-
alignment == :right
|
295
|
-
end
|
296
|
-
|
297
|
-
# Return a boolean indicating alignment was set to :top.
|
298
|
-
#
|
299
|
-
# @return [Boolean]
|
300
|
-
def top_aligned?
|
301
|
-
alignment == :top
|
302
|
-
end
|
303
|
-
|
304
244
|
# Returns the default options/attributes for this class.
|
305
245
|
#
|
306
246
|
# @return [Hash<Symbol => NilClass,Boolean,Symbol>]
|
@@ -309,8 +249,6 @@ module Vedeu
|
|
309
249
|
d: nil,
|
310
250
|
dn: nil,
|
311
251
|
d_dn: nil,
|
312
|
-
default: nil,
|
313
|
-
centred: false,
|
314
252
|
maximised: false,
|
315
253
|
}
|
316
254
|
end
|
data/lib/vedeu/geometry/dsl.rb
CHANGED
@@ -180,7 +180,7 @@ module Vedeu
|
|
180
180
|
'No width given.'.freeze unless present?(width)
|
181
181
|
|
182
182
|
model.horizontal_alignment = Vedeu::Geometry::HorizontalAlignment
|
183
|
-
.
|
183
|
+
.coerce(value)
|
184
184
|
model.width = width
|
185
185
|
model
|
186
186
|
end
|
@@ -196,7 +196,7 @@ module Vedeu
|
|
196
196
|
'No height given.'.freeze unless present?(height)
|
197
197
|
|
198
198
|
model.vertical_alignment = Vedeu::Geometry::VerticalAlignment
|
199
|
-
.
|
199
|
+
.coerce(value)
|
200
200
|
model.height = height
|
201
201
|
model
|
202
202
|
end
|
@@ -369,29 +369,6 @@ module Vedeu
|
|
369
369
|
vertical_alignment(:top, height)
|
370
370
|
end
|
371
371
|
|
372
|
-
# Instructs Vedeu to calculate x and y geometry automatically
|
373
|
-
# based on the centre character of the terminal, the width and
|
374
|
-
# the height.
|
375
|
-
#
|
376
|
-
# Vedeu.geometry :some_interface do
|
377
|
-
# centred false # or...
|
378
|
-
#
|
379
|
-
# centred true # or...
|
380
|
-
# centred! # or...
|
381
|
-
# # ... some code
|
382
|
-
# end
|
383
|
-
#
|
384
|
-
# @param value [Boolean] Any value other than nil or false will
|
385
|
-
# evaluate to true.
|
386
|
-
# @return [Boolean]
|
387
|
-
def centred(value = true)
|
388
|
-
boolean = value ? true : false
|
389
|
-
|
390
|
-
model.centred = boolean
|
391
|
-
end
|
392
|
-
alias_method :centred!, :centred
|
393
|
-
alias_method :centred=, :centred
|
394
|
-
|
395
372
|
# Returns the width in characters for the number of columns
|
396
373
|
# specified.
|
397
374
|
#
|
@@ -39,10 +39,6 @@ module Vedeu
|
|
39
39
|
# @return [Symbol]
|
40
40
|
attr_accessor :vertical_alignment
|
41
41
|
|
42
|
-
# @!attribute [rw] centred
|
43
|
-
# @return [Boolean]
|
44
|
-
attr_accessor :centred
|
45
|
-
|
46
42
|
# @!attribute [rw] name
|
47
43
|
# @return [String]
|
48
44
|
attr_accessor :name
|
@@ -91,7 +87,6 @@ module Vedeu
|
|
91
87
|
# @param attributes [Hash]
|
92
88
|
# @option attributes horizontal_alignment [Symbol]
|
93
89
|
# @option attributes vertical_alignment [Symbol]
|
94
|
-
# @option attributes centred [Boolean]
|
95
90
|
# @option attributes maximised [Boolean]
|
96
91
|
# @option attributes height [Fixnum]
|
97
92
|
# @option attributes name [String|Symbol]
|
@@ -112,7 +107,6 @@ module Vedeu
|
|
112
107
|
def attributes
|
113
108
|
{
|
114
109
|
client: @client,
|
115
|
-
centred: @centred,
|
116
110
|
height: height,
|
117
111
|
horizontal_alignment: @horizontal_alignment,
|
118
112
|
maximised: @maximised,
|
@@ -234,7 +228,6 @@ module Vedeu
|
|
234
228
|
# @return [Hash<Symbol => Boolean, Fixnum>]
|
235
229
|
def area_attributes
|
236
230
|
{
|
237
|
-
centred: @centred,
|
238
231
|
horizontal_alignment: @horizontal_alignment,
|
239
232
|
maximised: @maximised,
|
240
233
|
vertical_alignment: @vertical_alignment,
|
@@ -248,9 +241,9 @@ module Vedeu
|
|
248
241
|
end
|
249
242
|
|
250
243
|
# When moving an interface;
|
251
|
-
# 1) Reset the alignment
|
252
|
-
# it wont be aligned to a side if moved,
|
253
|
-
#
|
244
|
+
# 1) Reset the alignment and maximised states to false;
|
245
|
+
# it wont be aligned to a side if moved, and cannot be moved
|
246
|
+
# if maximised.
|
254
247
|
# 2) Get the current coordinates of the interface, then:
|
255
248
|
# 3) Override the attributes with the new coordinates for
|
256
249
|
# desired movement; these are usually +/- 1 of the current
|
@@ -265,8 +258,7 @@ module Vedeu
|
|
265
258
|
# @option coordinates yn [Fixnum] The ending row/line position.
|
266
259
|
# @return [Hash<Symbol => Boolean, Fixnum>]
|
267
260
|
def move(coordinates = {})
|
268
|
-
attrs = attributes.merge!(
|
269
|
-
horizontal_alignment: :none,
|
261
|
+
attrs = attributes.merge!(horizontal_alignment: :none,
|
270
262
|
maximised: false,
|
271
263
|
vertical_alignment: :none)
|
272
264
|
.merge!(coordinates)
|
@@ -280,13 +272,12 @@ module Vedeu
|
|
280
272
|
def defaults
|
281
273
|
{
|
282
274
|
client: nil,
|
283
|
-
centred: false,
|
284
275
|
height: nil,
|
285
|
-
horizontal_alignment:
|
276
|
+
horizontal_alignment: :none,
|
286
277
|
maximised: false,
|
287
278
|
name: nil,
|
288
279
|
repository: Vedeu.geometries,
|
289
|
-
vertical_alignment:
|
280
|
+
vertical_alignment: :none,
|
290
281
|
width: nil,
|
291
282
|
x: nil,
|
292
283
|
xn: nil,
|
@@ -295,16 +286,6 @@ module Vedeu
|
|
295
286
|
}
|
296
287
|
end
|
297
288
|
|
298
|
-
# @return [Symbol]
|
299
|
-
def default_horizontal_alignment
|
300
|
-
Vedeu::Geometry::HorizontalAlignment.align(:none)
|
301
|
-
end
|
302
|
-
|
303
|
-
# @return [Symbol]
|
304
|
-
def default_vertical_alignment
|
305
|
-
Vedeu::Geometry::VerticalAlignment.align(:none)
|
306
|
-
end
|
307
|
-
|
308
289
|
end # Geometry
|
309
290
|
|
310
291
|
end # Geometry
|
@@ -8,24 +8,19 @@ module Vedeu
|
|
8
8
|
|
9
9
|
private
|
10
10
|
|
11
|
-
# @return [
|
11
|
+
# @return [Vedeu::Geometry::HorizontalAlignment]
|
12
12
|
def alignment
|
13
|
-
|
13
|
+
Vedeu::Geometry::Alignment.coerce(@alignment)
|
14
14
|
end
|
15
15
|
|
16
16
|
# @return [Hash<Symbol => NilClass,Boolean,Symbol>]
|
17
17
|
def defaults
|
18
18
|
super.merge!(
|
19
|
-
default:
|
20
|
-
|
19
|
+
default: Vedeu.width,
|
20
|
+
alignment: :none,
|
21
21
|
)
|
22
22
|
end
|
23
23
|
|
24
|
-
# @return [Symbol]
|
25
|
-
def default_alignment
|
26
|
-
Vedeu::Geometry::HorizontalAlignment.align(:none)
|
27
|
-
end
|
28
|
-
|
29
24
|
end # XDimension
|
30
25
|
|
31
26
|
end # Geometry
|
@@ -8,24 +8,19 @@ module Vedeu
|
|
8
8
|
|
9
9
|
private
|
10
10
|
|
11
|
-
# @return [
|
11
|
+
# @return [Vedeu::Geometry::VerticalAlignment]
|
12
12
|
def alignment
|
13
|
-
|
13
|
+
Vedeu::Geometry::Alignment.coerce(@alignment)
|
14
14
|
end
|
15
15
|
|
16
16
|
# @return [Hash<Symbol => NilClass,Boolean,Symbol>]
|
17
17
|
def defaults
|
18
18
|
super.merge!(
|
19
|
-
default:
|
20
|
-
|
19
|
+
default: Vedeu.height,
|
20
|
+
alignment: :none,
|
21
21
|
)
|
22
22
|
end
|
23
23
|
|
24
|
-
# @return [Symbol]
|
25
|
-
def default_alignment
|
26
|
-
Vedeu::Geometry::VerticalAlignment.align(:none)
|
27
|
-
end
|
28
|
-
|
29
24
|
end # YDimension
|
30
25
|
|
31
26
|
end # Geometry
|
data/lib/vedeu/null/generic.rb
CHANGED
data/lib/vedeu/version.rb
CHANGED
@@ -21,12 +21,130 @@ module Vedeu
|
|
21
21
|
it { proc { subject }.must_raise(Vedeu::Error::NotImplemented) }
|
22
22
|
end
|
23
23
|
|
24
|
+
describe '.coerce' do
|
25
|
+
subject { described.coerce(_value) }
|
26
|
+
|
27
|
+
context 'when the value is a Vedeu::Geometry::Alignment' do
|
28
|
+
let(:_value) { Vedeu::Geometry::Alignment.new(:none) }
|
29
|
+
|
30
|
+
it { subject.must_equal(_value) }
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'when the value is a Symbol' do
|
34
|
+
let(:_value) { :centre }
|
35
|
+
|
36
|
+
it { subject.must_be_instance_of(described) }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when the value is nil or something else' do
|
40
|
+
it { subject.must_be_instance_of(described) }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
24
44
|
describe '#align' do
|
25
45
|
subject { instance.align }
|
26
46
|
|
27
47
|
it { proc { subject }.must_raise(Vedeu::Error::NotImplemented) }
|
28
48
|
end
|
29
49
|
|
50
|
+
describe '#bottom_aligned?' do
|
51
|
+
subject { instance.bottom_aligned? }
|
52
|
+
|
53
|
+
context 'when the value is :bottom' do
|
54
|
+
let(:_value) { :bottom }
|
55
|
+
|
56
|
+
it { subject.must_equal(true) }
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'when the value is not :bottom' do
|
60
|
+
it { subject.must_equal(false) }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#centre_aligned?' do
|
65
|
+
subject { instance.centre_aligned? }
|
66
|
+
|
67
|
+
context 'when the value is :centre' do
|
68
|
+
let(:_value) { :centre }
|
69
|
+
|
70
|
+
it { subject.must_equal(true) }
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when the value is not :centre' do
|
74
|
+
it { subject.must_equal(false) }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#left_aligned?' do
|
79
|
+
subject { instance.left_aligned? }
|
80
|
+
|
81
|
+
context 'when the value is :left' do
|
82
|
+
let(:_value) { :left }
|
83
|
+
|
84
|
+
it { subject.must_equal(true) }
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'when the value is not :left' do
|
88
|
+
it { subject.must_equal(false) }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe '#middle_aligned?' do
|
93
|
+
subject { instance.middle_aligned? }
|
94
|
+
|
95
|
+
context 'when the value is :middle' do
|
96
|
+
let(:_value) { :middle }
|
97
|
+
|
98
|
+
it { subject.must_equal(true) }
|
99
|
+
end
|
100
|
+
|
101
|
+
context 'when the value is not :middle' do
|
102
|
+
it { subject.must_equal(false) }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe '#right_aligned?' do
|
107
|
+
subject { instance.right_aligned? }
|
108
|
+
|
109
|
+
context 'when the value is :right' do
|
110
|
+
let(:_value) { :right }
|
111
|
+
|
112
|
+
it { subject.must_equal(true) }
|
113
|
+
end
|
114
|
+
|
115
|
+
context 'when the value is not :right' do
|
116
|
+
it { subject.must_equal(false) }
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe '#top_aligned?' do
|
121
|
+
subject { instance.top_aligned? }
|
122
|
+
|
123
|
+
context 'when the value is :top' do
|
124
|
+
let(:_value) { :top }
|
125
|
+
|
126
|
+
it { subject.must_equal(true) }
|
127
|
+
end
|
128
|
+
|
129
|
+
context 'when the value is not :top' do
|
130
|
+
it { subject.must_equal(false) }
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe '#unaligned?' do
|
135
|
+
subject { instance.unaligned? }
|
136
|
+
|
137
|
+
context 'when the value is :none' do
|
138
|
+
it { subject.must_equal(true) }
|
139
|
+
end
|
140
|
+
|
141
|
+
context 'when the value is not :none' do
|
142
|
+
let(:_value) { :centre }
|
143
|
+
|
144
|
+
it { subject.must_equal(false) }
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
30
148
|
end # Alignment
|
31
149
|
|
32
150
|
end # Geometry
|