vedeu 0.6.48 → 0.6.49
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/.rubocop.yml +3 -0
- data/README.md +0 -1
- data/examples/dsl_menus.rb +239 -0
- data/lib/vedeu/borders/all.rb +1 -0
- data/lib/vedeu/borders/border.rb +26 -4
- data/lib/vedeu/borders/dsl.rb +4 -2
- data/lib/vedeu/borders/refresh.rb +9 -119
- data/lib/vedeu/borders/title.rb +138 -0
- data/lib/vedeu/buffers/refresh.rb +1 -1
- data/lib/vedeu/dsl/view.rb +11 -0
- data/lib/vedeu/editor/all.rb +1 -0
- data/lib/vedeu/editor/item.rb +71 -0
- data/lib/vedeu/editor/line.rb +2 -12
- data/lib/vedeu/editor/lines.rb +1 -12
- data/lib/vedeu/geometry/alignment.rb +2 -0
- data/lib/vedeu/interfaces/dsl.rb +1 -0
- data/lib/vedeu/logging/ips.rb +2 -0
- data/lib/vedeu/models/toggleable.rb +10 -2
- data/lib/vedeu/output/presentation/style.rb +1 -1
- data/lib/vedeu/runtime/flags.rb +1 -1
- data/lib/vedeu/runtime/launcher.rb +1 -0
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/borders/border_test.rb +0 -4
- data/test/lib/vedeu/borders/dsl_test.rb +5 -5
- data/test/lib/vedeu/borders/title_test.rb +101 -0
- data/test/lib/vedeu/editor/item_test.rb +73 -0
- data/test/lib/vedeu/models/toggleable_test.rb +31 -12
- data/vedeu.gemspec +1 -1
- metadata +10 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40290f698e67f6437fbc9b2727e8cdfe54d68a6d
|
4
|
+
data.tar.gz: 259c3305848dd4a9dc9b58332051ebf4987b1f99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34e50c0fa3539b628e7592fb0f19b4d9cc20ff7a3d9808bcb515c24fb06c8590e1e26f73c538276716bdc33f1296aa1c9ba710cd768d2ec6409de7cb19b574a4
|
7
|
+
data.tar.gz: 234914b85448331f85d85db2b754b917d71c5e7c76675a5d1ce68fd2af8c37ca3f7701ad76d2df0eb017d99b76b6bf078b1e438cbd7798b751184fb31ada2d09
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
[](https://codeclimate.com/github/gavinlaking/vedeu)
|
2
2
|
[](https://travis-ci.org/gavinlaking/vedeu)
|
3
|
-
[](https://codeclimate.com/github/gavinlaking/vedeu/coverage)
|
4
3
|
|
5
4
|
# Vedeu
|
6
5
|
|
@@ -0,0 +1,239 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'vedeu'
|
5
|
+
|
6
|
+
# If you have cloned this repository from GitHub, you can run this example:
|
7
|
+
#
|
8
|
+
# bundle exec ./examples/dsl_menus.rb
|
9
|
+
#
|
10
|
+
class DSLMenus
|
11
|
+
include Vedeu
|
12
|
+
|
13
|
+
Vedeu.bind(:_initialize_) {
|
14
|
+
Vedeu.trigger(:_show_group_, :file_browser)
|
15
|
+
Vedeu.trigger(:_refresh_group_, :file_browser)
|
16
|
+
}
|
17
|
+
|
18
|
+
Vedeu.configure do
|
19
|
+
debug!
|
20
|
+
log '/tmp/dsl_menus.log'
|
21
|
+
end
|
22
|
+
|
23
|
+
Vedeu.interface :files do
|
24
|
+
border do
|
25
|
+
title 'Files'
|
26
|
+
end
|
27
|
+
foreground '#ffffff'
|
28
|
+
geometry do
|
29
|
+
width columns(3) - 1
|
30
|
+
height Vedeu.height - 1
|
31
|
+
x 1
|
32
|
+
y 1
|
33
|
+
end
|
34
|
+
group :file_browser
|
35
|
+
keymap do
|
36
|
+
key('k', :up) do
|
37
|
+
Vedeu.trigger(:_menu_prev_, :files)
|
38
|
+
Vedeu.trigger(:update)
|
39
|
+
end
|
40
|
+
key('j', :down) do
|
41
|
+
Vedeu.trigger(:_menu_next_, :files)
|
42
|
+
Vedeu.trigger(:update)
|
43
|
+
end
|
44
|
+
key(:enter) do
|
45
|
+
Vedeu.trigger(:_menu_select_, :files)
|
46
|
+
Vedeu.trigger(:update)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
Vedeu.interface :contents do
|
52
|
+
border do
|
53
|
+
title 'Contents'
|
54
|
+
end
|
55
|
+
foreground '#ffffff'
|
56
|
+
geometry do
|
57
|
+
width Vedeu.width - (columns(3) - 1)
|
58
|
+
height Vedeu.height - 1
|
59
|
+
x use(:files).east
|
60
|
+
y 1
|
61
|
+
end
|
62
|
+
group :file_browser
|
63
|
+
keymap do
|
64
|
+
key('k', :up) do
|
65
|
+
Vedeu.trigger(:_cursor_up_, :contents)
|
66
|
+
end
|
67
|
+
key('j', :down) do
|
68
|
+
Vedeu.trigger(:_cursor_down_, :contents)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
Vedeu.keymap '_global_' do
|
74
|
+
key('q') { Vedeu.exit }
|
75
|
+
key(:shift_tab) { Vedeu.trigger(:_focus_prev_) }
|
76
|
+
key(:tab) { Vedeu.trigger(:_focus_next_) }
|
77
|
+
end
|
78
|
+
|
79
|
+
# Orchestrates the user interactions with the application.
|
80
|
+
#
|
81
|
+
class Controller
|
82
|
+
def initialize(args = [])
|
83
|
+
@args = args
|
84
|
+
|
85
|
+
menu = Vedeu.menu(:files) { items(files) }
|
86
|
+
|
87
|
+
Vedeu.bind :update do
|
88
|
+
FilesView.new.show
|
89
|
+
ContentsView.new.show
|
90
|
+
Vedeu.trigger(:_refresh_group_, :file_browser)
|
91
|
+
end
|
92
|
+
|
93
|
+
FilesView.new.show
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
attr_reader :args
|
99
|
+
|
100
|
+
def files
|
101
|
+
@files ||= Files.new(args).all_files
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# Get all the files in the current or specified directory.
|
106
|
+
#
|
107
|
+
class Files
|
108
|
+
def initialize(args = [])
|
109
|
+
@args = args
|
110
|
+
end
|
111
|
+
|
112
|
+
def all_files
|
113
|
+
@_all_files ||= files.map { |file| SomeFile.new(file) }.sort_by(&:name)
|
114
|
+
end
|
115
|
+
|
116
|
+
private
|
117
|
+
|
118
|
+
attr_reader :args
|
119
|
+
|
120
|
+
def files
|
121
|
+
@_files ||= Dir.glob(recursive).select { |file| File.file?(file) }
|
122
|
+
end
|
123
|
+
|
124
|
+
def recursive
|
125
|
+
directory + '/*'
|
126
|
+
end
|
127
|
+
|
128
|
+
def directory
|
129
|
+
args.first || '.'
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
# A class to wrap a file, providing its name and contents (in the
|
134
|
+
# form of 'data').
|
135
|
+
#
|
136
|
+
class SomeFile
|
137
|
+
attr_reader :file
|
138
|
+
|
139
|
+
def initialize(file)
|
140
|
+
@file = file
|
141
|
+
end
|
142
|
+
|
143
|
+
def name
|
144
|
+
file.to_s
|
145
|
+
end
|
146
|
+
|
147
|
+
def data
|
148
|
+
@data ||= Contents.new(file).contents
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
# The contents of a file.
|
153
|
+
#
|
154
|
+
class Contents
|
155
|
+
attr_reader :path
|
156
|
+
|
157
|
+
def initialize(path)
|
158
|
+
@path = path
|
159
|
+
end
|
160
|
+
|
161
|
+
def contents
|
162
|
+
File.readlines(path)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
# Displays a list of files from the current or specified directory.
|
167
|
+
#
|
168
|
+
class FilesView
|
169
|
+
def show
|
170
|
+
Vedeu.renders do
|
171
|
+
view :files do
|
172
|
+
files_menu.each do |sel, cur, item|
|
173
|
+
if sel && cur
|
174
|
+
line do
|
175
|
+
stream do
|
176
|
+
text "\u{25B6}> #{item.name}"
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
elsif cur
|
181
|
+
line do
|
182
|
+
stream do
|
183
|
+
text " > #{item.name}"
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
elsif sel
|
188
|
+
line do
|
189
|
+
stream do
|
190
|
+
text "\u{25B6} #{item.name}"
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
else
|
195
|
+
line do
|
196
|
+
stream do
|
197
|
+
text " #{item.name}"
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def files_menu
|
207
|
+
@files_menu ||= Vedeu.trigger(:_menu_view_, :files)
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
# Displays the contents of a selected file.
|
212
|
+
#
|
213
|
+
class ContentsView
|
214
|
+
def show
|
215
|
+
Vedeu.renders do
|
216
|
+
view :contents do
|
217
|
+
open_file.data.each do |data_line|
|
218
|
+
line do
|
219
|
+
text "#{data_line.chomp}"
|
220
|
+
end
|
221
|
+
end if open_file
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def open_file
|
227
|
+
@file_contents ||= Vedeu.trigger(:_menu_selected_, :files)
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
def self.start(argv = ARGV)
|
232
|
+
Controller.new(argv)
|
233
|
+
|
234
|
+
Vedeu::Launcher.execute!(argv)
|
235
|
+
end
|
236
|
+
|
237
|
+
end # DSLMenus
|
238
|
+
|
239
|
+
DSLMenus.start
|
data/lib/vedeu/borders/all.rb
CHANGED
data/lib/vedeu/borders/border.rb
CHANGED
@@ -66,15 +66,15 @@ module Vedeu
|
|
66
66
|
attr_accessor :show_top
|
67
67
|
alias_method :top?, :show_top
|
68
68
|
|
69
|
-
# @!attribute [rw] caption
|
70
|
-
# @return [String] An optional caption for when the bottom
|
69
|
+
# # @!attribute [rw] caption
|
70
|
+
# # @return [String] An optional caption for when the bottom
|
71
71
|
# border is to be shown.
|
72
|
-
attr_accessor :caption
|
72
|
+
# attr_accessor :caption
|
73
73
|
|
74
74
|
# @!attribute [rw] title
|
75
75
|
# @return [String] An optional title for when the top
|
76
76
|
# border is to be shown.
|
77
|
-
attr_accessor :title
|
77
|
+
# attr_accessor :title
|
78
78
|
|
79
79
|
# @!attribute [rw] top_left
|
80
80
|
# @return [String] The character to be used for the top left
|
@@ -204,6 +204,28 @@ module Vedeu
|
|
204
204
|
(enabled? && bottom?) ? yn - 1 : yn
|
205
205
|
end
|
206
206
|
|
207
|
+
# @return [Vedeu::Borders::Caption]
|
208
|
+
def caption
|
209
|
+
Vedeu::Borders::Caption.coerce(@caption, width)
|
210
|
+
end
|
211
|
+
|
212
|
+
# @param value [String]
|
213
|
+
# @return [Vedeu::Borders::Caption]
|
214
|
+
def caption=(value)
|
215
|
+
@caption = Vedeu::Borders::Caption.coerce(value, width)
|
216
|
+
end
|
217
|
+
|
218
|
+
# @return [Vedeu::Borders::Title]
|
219
|
+
def title
|
220
|
+
Vedeu::Borders::Title.coerce(@title, width)
|
221
|
+
end
|
222
|
+
|
223
|
+
# @param value [String]
|
224
|
+
# @return [Vedeu::Borders::Title]
|
225
|
+
def title=(value)
|
226
|
+
@title = Vedeu::Borders::Title.coerce(value, width)
|
227
|
+
end
|
228
|
+
|
207
229
|
# Returns a DSL instance responsible for defining the DSL
|
208
230
|
# methods of this model.
|
209
231
|
#
|
data/lib/vedeu/borders/dsl.rb
CHANGED
@@ -233,9 +233,10 @@ module Vedeu
|
|
233
233
|
# +- My Cool Title --------------------------------+
|
234
234
|
#
|
235
235
|
# @param value [String] The title.
|
236
|
-
# @return [
|
236
|
+
# @return [Vedeu::Borders::Title]
|
237
237
|
def title(value)
|
238
238
|
model.title = value
|
239
|
+
model.title
|
239
240
|
end
|
240
241
|
alias_method :title=, :title
|
241
242
|
|
@@ -252,9 +253,10 @@ module Vedeu
|
|
252
253
|
# +------------------------------ My Cool Caption -+
|
253
254
|
#
|
254
255
|
# @param value [String] The caption.
|
255
|
-
# @return [
|
256
|
+
# @return [Vedeu::Borders::Caption]
|
256
257
|
def caption(value)
|
257
258
|
model.caption = value
|
259
|
+
model.caption
|
258
260
|
end
|
259
261
|
alias_method :caption=, :caption
|
260
262
|
|
@@ -230,17 +230,17 @@ module Vedeu
|
|
230
230
|
#
|
231
231
|
# @return [Array<Vedeu::Views::Char>]
|
232
232
|
def captionbar
|
233
|
-
return build_bottom
|
233
|
+
return build_bottom if caption.empty?
|
234
234
|
|
235
|
-
caption_starts_at = (width -
|
235
|
+
caption_starts_at = (width - caption.size) - 2
|
236
236
|
|
237
|
-
|
237
|
+
caption_index = 0
|
238
238
|
build_bottom.each_with_index do |char, index|
|
239
239
|
next if index <= caption_starts_at || index > (width - 2)
|
240
240
|
|
241
|
-
char.border
|
242
|
-
char.value
|
243
|
-
|
241
|
+
char.border = nil
|
242
|
+
char.value = caption.characters[caption_index]
|
243
|
+
caption_index += 1
|
244
244
|
end
|
245
245
|
end
|
246
246
|
|
@@ -249,126 +249,16 @@ module Vedeu
|
|
249
249
|
#
|
250
250
|
# @return [Array<Vedeu::Views::Char>]
|
251
251
|
def titlebar
|
252
|
-
return build_top
|
252
|
+
return build_top if title.empty?
|
253
253
|
|
254
254
|
build_top.each_with_index do |char, index|
|
255
|
-
next if index == 0 || index >
|
255
|
+
next if index == 0 || index > title.size
|
256
256
|
|
257
257
|
char.border = nil
|
258
|
-
char.value =
|
258
|
+
char.value = title.characters[index - 1]
|
259
259
|
end
|
260
260
|
end
|
261
261
|
|
262
|
-
# Return boolean indicating whether this border has a non-empty
|
263
|
-
# title.
|
264
|
-
#
|
265
|
-
# @return [Boolean]
|
266
|
-
def title?
|
267
|
-
present?(title)
|
268
|
-
end
|
269
|
-
|
270
|
-
# Return boolean indicating whether this border has a non-empty
|
271
|
-
# caption.
|
272
|
-
#
|
273
|
-
# @return [Boolean]
|
274
|
-
def caption?
|
275
|
-
present?(caption)
|
276
|
-
end
|
277
|
-
|
278
|
-
# Return boolean indicating whether the title fits within the
|
279
|
-
# width of the top border.
|
280
|
-
#
|
281
|
-
# @return [Boolean]
|
282
|
-
def title_fits?
|
283
|
-
width > title_characters.size
|
284
|
-
end
|
285
|
-
|
286
|
-
# Return boolean indicating whether the caption fits within the
|
287
|
-
# width of the bottom border.
|
288
|
-
#
|
289
|
-
# @return [Boolean]
|
290
|
-
def caption_fits?
|
291
|
-
width > caption_characters.size
|
292
|
-
end
|
293
|
-
|
294
|
-
# @return [Array<String>]
|
295
|
-
def title_characters
|
296
|
-
@title_characters ||= title_padded.chars
|
297
|
-
end
|
298
|
-
|
299
|
-
# @return [Array<String>]
|
300
|
-
def caption_characters
|
301
|
-
@caption_characters ||= caption_padded.chars
|
302
|
-
end
|
303
|
-
|
304
|
-
# Pads the title with a single whitespace either side.
|
305
|
-
#
|
306
|
-
# @example
|
307
|
-
# title = 'Truncated!'
|
308
|
-
# width = 20
|
309
|
-
# # => ' Truncated! '
|
310
|
-
#
|
311
|
-
# width = 10
|
312
|
-
# # => ' Trunca '
|
313
|
-
#
|
314
|
-
# @return [String]
|
315
|
-
# @see #truncated_title
|
316
|
-
def title_padded
|
317
|
-
truncated_title.center(truncated_title.size + 2)
|
318
|
-
end
|
319
|
-
|
320
|
-
# Pads the caption with a single whitespace either side.
|
321
|
-
#
|
322
|
-
# @example
|
323
|
-
# caption = 'Truncated!'
|
324
|
-
# width = 20
|
325
|
-
# # => ' Truncated! '
|
326
|
-
#
|
327
|
-
# width = 10
|
328
|
-
# # => ' Trunca '
|
329
|
-
#
|
330
|
-
# @return [String]
|
331
|
-
# @see #truncated_caption
|
332
|
-
def caption_padded
|
333
|
-
truncated_caption.center(truncated_caption.size + 2)
|
334
|
-
end
|
335
|
-
|
336
|
-
# Truncates the title to the width of the interface, minus
|
337
|
-
# characters needed to ensure there is at least a single
|
338
|
-
# character of horizontal border and a whitespace on either side
|
339
|
-
# of the title.
|
340
|
-
#
|
341
|
-
# @example
|
342
|
-
# title = 'Truncated!'
|
343
|
-
# width = 20
|
344
|
-
# # => 'Truncated!'
|
345
|
-
#
|
346
|
-
# width = 10
|
347
|
-
# # => 'Trunca'
|
348
|
-
#
|
349
|
-
# @return [String]
|
350
|
-
def truncated_title
|
351
|
-
title.chomp.slice(0..(width - 5))
|
352
|
-
end
|
353
|
-
|
354
|
-
# Truncates the caption to the width of the interface, minus
|
355
|
-
# characters needed to ensure there is at least a single
|
356
|
-
# character of horizontal border and a whitespace on either
|
357
|
-
# side of the caption.
|
358
|
-
#
|
359
|
-
# @example
|
360
|
-
# caption = 'Truncated!'
|
361
|
-
# width = 20
|
362
|
-
# # => 'Truncated!'
|
363
|
-
#
|
364
|
-
# width = 10
|
365
|
-
# # => 'Trunca'
|
366
|
-
#
|
367
|
-
# @return [String]
|
368
|
-
def truncated_caption
|
369
|
-
caption.chomp.slice(0..(width - 5))
|
370
|
-
end
|
371
|
-
|
372
262
|
end # Refresh
|
373
263
|
|
374
264
|
end # Borders
|
@@ -0,0 +1,138 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Borders
|
4
|
+
|
5
|
+
# When a {Vedeu::Borders::Border} has a title, truncate it if the
|
6
|
+
# title is longer than the interface is wide, and pad with a space
|
7
|
+
# either side.
|
8
|
+
#
|
9
|
+
class Title
|
10
|
+
|
11
|
+
# @param value [String|Vedeu::Borders::Title|
|
12
|
+
# Vedeu::Borders::Caption]
|
13
|
+
# @param width [Fixnum]
|
14
|
+
# @return [Vedeu::Borders::Title|Vedeu::Borders::Caption]
|
15
|
+
def self.coerce(value = '', width = Vedeu.width)
|
16
|
+
if value.is_a?(self)
|
17
|
+
value
|
18
|
+
|
19
|
+
else
|
20
|
+
new(value, width)
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns a new instance of Vedeu::Borders::Title or
|
26
|
+
# Vedeu::Borders::Caption.
|
27
|
+
#
|
28
|
+
# @param value [String|Vedeu::Borders::Title|
|
29
|
+
# Vedeu::Borders::Caption]
|
30
|
+
# @param width [Fixnum]
|
31
|
+
# @return [Vedeu::Borders::Title|Vedeu::Borders::Caption]
|
32
|
+
def initialize(value = '', width = Vedeu.width)
|
33
|
+
@value = value
|
34
|
+
@width = width
|
35
|
+
end
|
36
|
+
|
37
|
+
# Return the padded, truncated value as an Array of String.
|
38
|
+
#
|
39
|
+
# @return [Array<String>]
|
40
|
+
def characters
|
41
|
+
pad.chars
|
42
|
+
end
|
43
|
+
|
44
|
+
# Return boolean indicating whether the value is empty.
|
45
|
+
#
|
46
|
+
# @return [Boolean]
|
47
|
+
def empty?
|
48
|
+
value.empty?
|
49
|
+
end
|
50
|
+
|
51
|
+
# An object is equal when its values are the same.
|
52
|
+
#
|
53
|
+
# @param other [Vedeu::Borders::Title]
|
54
|
+
# @return [Boolean]
|
55
|
+
def eql?(other)
|
56
|
+
self.class == other.class && value == other.value
|
57
|
+
end
|
58
|
+
alias_method :==, :eql?
|
59
|
+
|
60
|
+
# Return the size of the padded, truncated value.
|
61
|
+
#
|
62
|
+
# @return [Fixnum]
|
63
|
+
def size
|
64
|
+
pad.size
|
65
|
+
end
|
66
|
+
|
67
|
+
# Convert the value to a string.
|
68
|
+
#
|
69
|
+
# @return [String]
|
70
|
+
def to_s
|
71
|
+
value.to_s
|
72
|
+
end
|
73
|
+
|
74
|
+
# Return the value or an empty string.
|
75
|
+
#
|
76
|
+
# @return [String]
|
77
|
+
def value
|
78
|
+
@value || ''
|
79
|
+
end
|
80
|
+
alias_method :title, :value
|
81
|
+
alias_method :caption, :value
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
# Pads the value with a single whitespace either side.
|
86
|
+
#
|
87
|
+
# @example
|
88
|
+
# value = 'Truncated!'
|
89
|
+
# width = 20
|
90
|
+
# # => ' Truncated! '
|
91
|
+
#
|
92
|
+
# width = 10
|
93
|
+
# # => ' Trunca '
|
94
|
+
#
|
95
|
+
# @return [String]
|
96
|
+
# @see #truncate
|
97
|
+
def pad
|
98
|
+
truncate.center(truncate.size + 2)
|
99
|
+
end
|
100
|
+
|
101
|
+
# Truncates the value to the width of the interface, minus
|
102
|
+
# characters needed to ensure there is at least a single
|
103
|
+
# character of horizontal border and a whitespace on either side
|
104
|
+
# of the value.
|
105
|
+
#
|
106
|
+
# @example
|
107
|
+
# value = 'Truncated!'
|
108
|
+
# width = 20
|
109
|
+
# # => 'Truncated!'
|
110
|
+
#
|
111
|
+
# width = 10
|
112
|
+
# # => 'Trunca'
|
113
|
+
#
|
114
|
+
# @return [String]
|
115
|
+
def truncate
|
116
|
+
title.chomp.slice(0...(width - 4))
|
117
|
+
end
|
118
|
+
|
119
|
+
# Return the given width or the width of the terminal.
|
120
|
+
#
|
121
|
+
# @return [Fixnum]
|
122
|
+
def width
|
123
|
+
@width || Vedeu.width
|
124
|
+
end
|
125
|
+
|
126
|
+
end # Title
|
127
|
+
|
128
|
+
# When a {Vedeu::Borders::Border} has a caption, truncate it if
|
129
|
+
# the caption is longer than the interface is wide, and pad with a
|
130
|
+
# space either side.
|
131
|
+
#
|
132
|
+
class Caption < Title
|
133
|
+
|
134
|
+
end # Caption
|
135
|
+
|
136
|
+
end # Borders
|
137
|
+
|
138
|
+
end # Vedeu
|
data/lib/vedeu/dsl/view.rb
CHANGED
@@ -190,6 +190,14 @@ module Vedeu
|
|
190
190
|
|
191
191
|
private
|
192
192
|
|
193
|
+
# Returns the client object which called the DSL method.
|
194
|
+
#
|
195
|
+
# @param block [Proc]
|
196
|
+
# @return [Object]
|
197
|
+
def client(&block)
|
198
|
+
eval('self', block.binding)
|
199
|
+
end
|
200
|
+
|
193
201
|
# Creates a new Vedeu::Views::Composition which may contain
|
194
202
|
# one or more views (Vedeu::Views::View objects).
|
195
203
|
#
|
@@ -202,6 +210,9 @@ module Vedeu
|
|
202
210
|
Vedeu::Views::Composition.build(attrs, &block)
|
203
211
|
end
|
204
212
|
|
213
|
+
# Creates a new Vedeu::Views::Composition which may contain
|
214
|
+
# one or more views (Vedeu::Views::View objects).
|
215
|
+
#
|
205
216
|
# Stores each of the views defined in their respective buffers
|
206
217
|
# ready to be rendered on next refresh.
|
207
218
|
#
|
data/lib/vedeu/editor/all.rb
CHANGED
@@ -0,0 +1,71 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Editor
|
4
|
+
|
5
|
+
# Fetches an item from a collection.
|
6
|
+
#
|
7
|
+
class Item
|
8
|
+
|
9
|
+
# @param collection [Vedeu::Editor::Line|Vedeu::Editor::Lines]
|
10
|
+
# @param index [Fixnum]
|
11
|
+
# @return [String|Vedeu::Editor::Line]
|
12
|
+
def self.by_index(collection, index = nil)
|
13
|
+
new(collection, index).by_index
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns a new instance of Vedeu::Editor::Item.
|
17
|
+
#
|
18
|
+
# @param collection [Vedeu::Editor::Line|Vedeu::Editor::Lines]
|
19
|
+
# @param index [Fixnum]
|
20
|
+
# @return [Vedeu::Editor::item]
|
21
|
+
def initialize(collection, index = nil)
|
22
|
+
@collection = collection
|
23
|
+
@index = index
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [String|Vedeu::Editor::Line]
|
27
|
+
def by_index
|
28
|
+
return nil unless size > 0
|
29
|
+
|
30
|
+
if index.nil? || index > size
|
31
|
+
collection[-1]
|
32
|
+
|
33
|
+
elsif index <= 0
|
34
|
+
collection[0]
|
35
|
+
|
36
|
+
elsif index > 0 && index <= size
|
37
|
+
collection[index]
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
protected
|
43
|
+
|
44
|
+
# @!attribute [r] collection
|
45
|
+
# @return [Vedeu::Editor::Line|Vedeu::Editor::Lines]
|
46
|
+
attr_reader :collection
|
47
|
+
|
48
|
+
# @!attribute [r] index
|
49
|
+
# @return [Fixnum]
|
50
|
+
attr_reader :index
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
# Returns the size of the collection or 0.
|
55
|
+
#
|
56
|
+
# @return [Fixnum]
|
57
|
+
def size
|
58
|
+
if collection
|
59
|
+
collection.size
|
60
|
+
|
61
|
+
else
|
62
|
+
0
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end # Item
|
68
|
+
|
69
|
+
end # Editor
|
70
|
+
|
71
|
+
end # Vedeu
|
data/lib/vedeu/editor/line.rb
CHANGED
@@ -39,8 +39,7 @@ module Vedeu
|
|
39
39
|
line[index]
|
40
40
|
end
|
41
41
|
|
42
|
-
# Return the character
|
43
|
-
# index.
|
42
|
+
# Return the character at the given index.
|
44
43
|
#
|
45
44
|
# @param index [Fixnum|NilClass]
|
46
45
|
# @return [String|NilClass]
|
@@ -48,16 +47,7 @@ module Vedeu
|
|
48
47
|
return '' if line && line.empty?
|
49
48
|
return line[-1] unless index
|
50
49
|
|
51
|
-
|
52
|
-
line[0]
|
53
|
-
|
54
|
-
elsif index && index <= size
|
55
|
-
line[index]
|
56
|
-
|
57
|
-
else
|
58
|
-
line[-1]
|
59
|
-
|
60
|
-
end
|
50
|
+
Vedeu::Editor::Item.by_index(line, index)
|
61
51
|
end
|
62
52
|
|
63
53
|
# Delete the character from the line positioned at the given
|
data/lib/vedeu/editor/lines.rb
CHANGED
@@ -131,18 +131,7 @@ module Vedeu
|
|
131
131
|
return Vedeu::Editor::Line.new unless lines
|
132
132
|
return Vedeu::Editor::Line.coerce(lines[-1]) unless index
|
133
133
|
|
134
|
-
|
135
|
-
lines[0]
|
136
|
-
|
137
|
-
elsif index && index <= size
|
138
|
-
lines[index]
|
139
|
-
|
140
|
-
else
|
141
|
-
lines[-1]
|
142
|
-
|
143
|
-
end
|
144
|
-
|
145
|
-
Vedeu::Editor::Line.coerce(indexed)
|
134
|
+
Vedeu::Editor::Line.coerce(Vedeu::Editor::Item.by_index(lines, index))
|
146
135
|
end
|
147
136
|
|
148
137
|
# Return the number of lines.
|
data/lib/vedeu/interfaces/dsl.rb
CHANGED
data/lib/vedeu/logging/ips.rb
CHANGED
@@ -91,6 +91,8 @@ module Vedeu
|
|
91
91
|
alias_method :toggle_group, :toggle
|
92
92
|
alias_method :toggle_interface, :toggle
|
93
93
|
|
94
|
+
# Hide the cursor if visible.
|
95
|
+
#
|
94
96
|
# @example
|
95
97
|
# Vedeu.hide_cursor(name)
|
96
98
|
#
|
@@ -101,6 +103,8 @@ module Vedeu
|
|
101
103
|
hide(name) if cursor_visible?(name)
|
102
104
|
end
|
103
105
|
|
106
|
+
# Show the cursor if not already visible.
|
107
|
+
#
|
104
108
|
# @example
|
105
109
|
# Vedeu.show_cursor(name)
|
106
110
|
#
|
@@ -108,9 +112,11 @@ module Vedeu
|
|
108
112
|
# @return [void]
|
109
113
|
# @see Vedeu::Toggleable#show
|
110
114
|
def show_cursor(name = Vedeu.focus)
|
111
|
-
show(name)
|
115
|
+
show(name) unless cursor_visible?(name)
|
112
116
|
end
|
113
117
|
|
118
|
+
# Toggle the cursor visibility.
|
119
|
+
#
|
114
120
|
# @example
|
115
121
|
# Vedeu.toggle_cursor(name)
|
116
122
|
#
|
@@ -118,11 +124,13 @@ module Vedeu
|
|
118
124
|
# @return [void]
|
119
125
|
# @see Vedeu::Toggleable#toggle
|
120
126
|
def toggle_cursor(name = Vedeu.focus)
|
121
|
-
toggle(name)
|
127
|
+
toggle(name)
|
122
128
|
end
|
123
129
|
|
124
130
|
private
|
125
131
|
|
132
|
+
# Returns a boolean indicating whether the cursor is visible.
|
133
|
+
#
|
126
134
|
# @param name [String|Symbol]
|
127
135
|
# @return [Boolean]
|
128
136
|
def cursor_visible?(name)
|
data/lib/vedeu/runtime/flags.rb
CHANGED
data/lib/vedeu/version.rb
CHANGED
@@ -55,8 +55,6 @@ module Vedeu
|
|
55
55
|
instance.must_respond_to(:bottom_left=)
|
56
56
|
instance.must_respond_to(:bottom_right)
|
57
57
|
instance.must_respond_to(:bottom_right=)
|
58
|
-
instance.must_respond_to(:caption)
|
59
|
-
instance.must_respond_to(:caption=)
|
60
58
|
instance.must_respond_to(:horizontal)
|
61
59
|
instance.must_respond_to(:horizontal=)
|
62
60
|
instance.must_respond_to(:show_bottom)
|
@@ -71,8 +69,6 @@ module Vedeu
|
|
71
69
|
instance.must_respond_to(:show_top)
|
72
70
|
instance.must_respond_to(:top?)
|
73
71
|
instance.must_respond_to(:show_top=)
|
74
|
-
instance.must_respond_to(:title)
|
75
|
-
instance.must_respond_to(:title=)
|
76
72
|
instance.must_respond_to(:top_left)
|
77
73
|
instance.must_respond_to(:top_left=)
|
78
74
|
instance.must_respond_to(:top_right)
|
@@ -173,8 +173,8 @@ module Vedeu
|
|
173
173
|
|
174
174
|
subject { instance.title(_value) }
|
175
175
|
|
176
|
-
it { subject.must_be_instance_of(
|
177
|
-
it { subject.must_equal('Some title') }
|
176
|
+
it { subject.must_be_instance_of(Vedeu::Borders::Title) }
|
177
|
+
it { subject.title.must_equal('Some title') }
|
178
178
|
it { instance.must_respond_to(:title=) }
|
179
179
|
end
|
180
180
|
|
@@ -183,8 +183,8 @@ module Vedeu
|
|
183
183
|
|
184
184
|
subject { instance.caption(_value) }
|
185
185
|
|
186
|
-
it { subject.must_be_instance_of(
|
187
|
-
it { subject.must_equal('Some caption') }
|
186
|
+
it { subject.must_be_instance_of(Vedeu::Borders::Caption) }
|
187
|
+
it { subject.caption.must_equal('Some caption') }
|
188
188
|
it { instance.must_respond_to(:caption=) }
|
189
189
|
end
|
190
190
|
|
@@ -223,7 +223,7 @@ module Vedeu
|
|
223
223
|
|
224
224
|
it 'allows the use of another models attributes' do
|
225
225
|
subject
|
226
|
-
Vedeu.borders.by_name('other_border').title.must_equal('Some border')
|
226
|
+
Vedeu.borders.by_name('other_border').title.to_s.must_equal('Some border')
|
227
227
|
end
|
228
228
|
end
|
229
229
|
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
module Borders
|
6
|
+
|
7
|
+
describe Title do
|
8
|
+
|
9
|
+
let(:described) { Vedeu::Borders::Title }
|
10
|
+
let(:instance) { described.new(_value, width) }
|
11
|
+
let(:_value) { 'Aluminium' }
|
12
|
+
let(:width) { 10 }
|
13
|
+
|
14
|
+
describe '#initialize' do
|
15
|
+
it { instance.must_be_instance_of(described) }
|
16
|
+
it { instance.instance_variable_get('@value').must_equal(_value) }
|
17
|
+
it { instance.instance_variable_get('@width').must_equal(width) }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.coerce' do
|
21
|
+
subject { described.coerce(_value, width) }
|
22
|
+
|
23
|
+
context 'when the value is an instance of Vedeu::Borders::Title' do
|
24
|
+
let(:_value) { Vedeu::Borders::Title.new('Aluminium', 10) }
|
25
|
+
|
26
|
+
it { subject.must_equal(_value) }
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when the value is not an instance of Vedeu::Borders::Title' do
|
30
|
+
it { subject.must_equal(instance) }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#characters' do
|
35
|
+
subject { instance.characters }
|
36
|
+
|
37
|
+
it { subject.must_equal([' ', 'A', 'l', 'u', 'm', 'i', 'n', ' ']) }
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#empty?' do
|
41
|
+
subject { instance.empty? }
|
42
|
+
|
43
|
+
context 'when the value is empty' do
|
44
|
+
let(:_value) { '' }
|
45
|
+
|
46
|
+
it { subject.must_equal(true) }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when the value is not empty' do
|
50
|
+
it { subject.must_equal(false) }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#eql?' do
|
55
|
+
let(:other) { instance }
|
56
|
+
|
57
|
+
subject { instance.eql?(other) }
|
58
|
+
|
59
|
+
it { subject.must_equal(true) }
|
60
|
+
|
61
|
+
context 'when different to other' do
|
62
|
+
let(:other) { described.new('Vanadium') }
|
63
|
+
|
64
|
+
it { subject.must_equal(false) }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe '#size' do
|
69
|
+
subject { instance.size }
|
70
|
+
|
71
|
+
it { subject.must_equal(8) }
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#to_s' do
|
75
|
+
subject { instance.to_s }
|
76
|
+
|
77
|
+
it { subject.must_equal('Aluminium') }
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '#value' do
|
81
|
+
subject { instance.value }
|
82
|
+
|
83
|
+
it { instance.must_respond_to(:title) }
|
84
|
+
it { instance.must_respond_to(:caption) }
|
85
|
+
|
86
|
+
context 'when the value is nil' do
|
87
|
+
let(:_value) {}
|
88
|
+
|
89
|
+
it { subject.must_equal('') }
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'when the value is not nil' do
|
93
|
+
it { subject.must_equal('Aluminium') }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end # Title
|
98
|
+
|
99
|
+
end # Borders
|
100
|
+
|
101
|
+
end # Vedeu
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
module Editor
|
6
|
+
|
7
|
+
describe Item do
|
8
|
+
|
9
|
+
let(:described) { Vedeu::Editor::Item }
|
10
|
+
let(:instance) { described.new(collection, index) }
|
11
|
+
let(:collection) {}
|
12
|
+
let(:index) {}
|
13
|
+
|
14
|
+
describe '#initialize' do
|
15
|
+
it { instance.must_be_instance_of(described) }
|
16
|
+
it { instance.instance_variable_get('@collection').must_equal(collection) }
|
17
|
+
it { instance.instance_variable_get('@index').must_equal(index) }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.by_index' do
|
21
|
+
subject { described.by_index(collection, index) }
|
22
|
+
|
23
|
+
context 'when the collection is empty or nil' do
|
24
|
+
it { subject.must_equal(nil) }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when the collection is not empty' do
|
28
|
+
let(:collection) { [:hydrogen, :helium, :lithium] }
|
29
|
+
|
30
|
+
context 'when the index is nil' do
|
31
|
+
it 'returns the last item' do
|
32
|
+
subject.must_equal(:lithium)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'when the index is greater than the size of the collection' do
|
37
|
+
let(:index) { 4 }
|
38
|
+
|
39
|
+
it 'returns the last item' do
|
40
|
+
subject.must_equal(:lithium)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'when the index < 0' do
|
45
|
+
let(:index) { -2 }
|
46
|
+
|
47
|
+
it { subject.must_equal(:hydrogen) }
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'when the index == 0' do
|
51
|
+
let(:index) { 0 }
|
52
|
+
|
53
|
+
it { subject.must_equal(:hydrogen) }
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'when the index > 0 and the index is less than the size of ' \
|
57
|
+
'the collection' do
|
58
|
+
let(:index) { 1 }
|
59
|
+
|
60
|
+
it { subject.must_equal(:helium) }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '#by_index' do
|
66
|
+
it { instance.must_respond_to(:by_index) }
|
67
|
+
end
|
68
|
+
|
69
|
+
end # Item
|
70
|
+
|
71
|
+
end # Editor
|
72
|
+
|
73
|
+
end # Vedeu
|
@@ -16,9 +16,10 @@ module Vedeu
|
|
16
16
|
|
17
17
|
describe Toggleable do
|
18
18
|
|
19
|
-
let(:described)
|
20
|
-
let(:
|
21
|
-
let(:
|
19
|
+
let(:described) { Vedeu::Toggleable }
|
20
|
+
let(:described_included) { Vedeu::ToggleableTestClass }
|
21
|
+
let(:instance) { described_included.new(visible) }
|
22
|
+
let(:visible) { false }
|
22
23
|
|
23
24
|
describe 'accessors' do
|
24
25
|
it {
|
@@ -78,22 +79,40 @@ module Vedeu
|
|
78
79
|
end
|
79
80
|
end
|
80
81
|
|
81
|
-
describe '
|
82
|
-
subject {
|
82
|
+
describe '.hide_cursor' do
|
83
|
+
subject { described_included.hide_cursor }
|
83
84
|
|
84
|
-
|
85
|
+
context 'when the cursor is visible' do
|
86
|
+
# @todo Add more tests.
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'when the cursor is not visible' do
|
90
|
+
# @todo Add more tests.
|
91
|
+
end
|
85
92
|
end
|
86
93
|
|
87
|
-
describe '
|
88
|
-
subject {
|
94
|
+
describe '.show_cursor' do
|
95
|
+
subject { described_included.show_cursor }
|
96
|
+
|
97
|
+
context 'when the cursor is visible' do
|
98
|
+
# @todo Add more tests.
|
99
|
+
end
|
89
100
|
|
90
|
-
|
101
|
+
context 'when the cursor is not visible' do
|
102
|
+
# @todo Add more tests.
|
103
|
+
end
|
91
104
|
end
|
92
105
|
|
93
|
-
describe '
|
94
|
-
subject {
|
106
|
+
describe '.toggle_cursor' do
|
107
|
+
subject { described_included.toggle_cursor }
|
108
|
+
|
109
|
+
context 'when the cursor is visible' do
|
110
|
+
# @todo Add more tests.
|
111
|
+
end
|
95
112
|
|
96
|
-
|
113
|
+
context 'when the cursor is not visible' do
|
114
|
+
# @todo Add more tests.
|
115
|
+
end
|
97
116
|
end
|
98
117
|
end # Toggleable
|
99
118
|
|
data/vedeu.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_development_dependency 'minitest-reporters', '1.1.5'
|
28
28
|
spec.add_development_dependency 'mocha', '1.1.0'
|
29
29
|
spec.add_development_dependency 'pry', '0.10.3'
|
30
|
-
spec.add_development_dependency 'rubocop', '0.
|
30
|
+
spec.add_development_dependency 'rubocop', '0.35.0'
|
31
31
|
spec.add_development_dependency 'simplecov', '0.10.0'
|
32
32
|
spec.add_development_dependency 'simplecov-console', '0.2.0'
|
33
33
|
spec.add_development_dependency 'yard', '0.8.7.6'
|
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.6.
|
4
|
+
version: 0.6.49
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Laking
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - '='
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
117
|
+
version: 0.35.0
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - '='
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: 0.35.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: simplecov
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -317,6 +317,7 @@ files:
|
|
317
317
|
- examples/dsl_editor.rb
|
318
318
|
- examples/dsl_hello_worlds.rb
|
319
319
|
- examples/dsl_horizontal_alignment.rb
|
320
|
+
- examples/dsl_menus.rb
|
320
321
|
- examples/dsl_vertical_alignment.rb
|
321
322
|
- lib/vedeu.rb
|
322
323
|
- lib/vedeu/all.rb
|
@@ -333,6 +334,7 @@ files:
|
|
333
334
|
- lib/vedeu/borders/null.rb
|
334
335
|
- lib/vedeu/borders/refresh.rb
|
335
336
|
- lib/vedeu/borders/repository.rb
|
337
|
+
- lib/vedeu/borders/title.rb
|
336
338
|
- lib/vedeu/buffers/all.rb
|
337
339
|
- lib/vedeu/buffers/buffer.rb
|
338
340
|
- lib/vedeu/buffers/null.rb
|
@@ -387,6 +389,7 @@ files:
|
|
387
389
|
- lib/vedeu/editor/document.rb
|
388
390
|
- lib/vedeu/editor/editor.rb
|
389
391
|
- lib/vedeu/editor/insert.rb
|
392
|
+
- lib/vedeu/editor/item.rb
|
390
393
|
- lib/vedeu/editor/line.rb
|
391
394
|
- lib/vedeu/editor/lines.rb
|
392
395
|
- lib/vedeu/editor/repository.rb
|
@@ -526,6 +529,7 @@ files:
|
|
526
529
|
- test/lib/vedeu/borders/null_test.rb
|
527
530
|
- test/lib/vedeu/borders/refresh_test.rb
|
528
531
|
- test/lib/vedeu/borders/repository_test.rb
|
532
|
+
- test/lib/vedeu/borders/title_test.rb
|
529
533
|
- test/lib/vedeu/buffers/buffer_test.rb
|
530
534
|
- test/lib/vedeu/buffers/null_test.rb
|
531
535
|
- test/lib/vedeu/buffers/refresh_test.rb
|
@@ -565,6 +569,7 @@ files:
|
|
565
569
|
- test/lib/vedeu/editor/document_test.rb
|
566
570
|
- test/lib/vedeu/editor/editor_test.rb
|
567
571
|
- test/lib/vedeu/editor/insert_test.rb
|
572
|
+
- test/lib/vedeu/editor/item_test.rb
|
568
573
|
- test/lib/vedeu/editor/line_test.rb
|
569
574
|
- test/lib/vedeu/editor/lines_test.rb
|
570
575
|
- test/lib/vedeu/editor/repository_test.rb
|
@@ -729,6 +734,7 @@ test_files:
|
|
729
734
|
- test/lib/vedeu/borders/null_test.rb
|
730
735
|
- test/lib/vedeu/borders/refresh_test.rb
|
731
736
|
- test/lib/vedeu/borders/repository_test.rb
|
737
|
+
- test/lib/vedeu/borders/title_test.rb
|
732
738
|
- test/lib/vedeu/buffers/buffer_test.rb
|
733
739
|
- test/lib/vedeu/buffers/null_test.rb
|
734
740
|
- test/lib/vedeu/buffers/refresh_test.rb
|
@@ -768,6 +774,7 @@ test_files:
|
|
768
774
|
- test/lib/vedeu/editor/document_test.rb
|
769
775
|
- test/lib/vedeu/editor/editor_test.rb
|
770
776
|
- test/lib/vedeu/editor/insert_test.rb
|
777
|
+
- test/lib/vedeu/editor/item_test.rb
|
771
778
|
- test/lib/vedeu/editor/line_test.rb
|
772
779
|
- test/lib/vedeu/editor/lines_test.rb
|
773
780
|
- test/lib/vedeu/editor/repository_test.rb
|