vedeu 0.6.40 → 0.6.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/.yardopts +7 -0
  4. data/README.md +10 -0
  5. data/benchmarks/array_vs_range.rb +41 -0
  6. data/docs/api.md +7 -0
  7. data/docs/colours_styles.md +4 -0
  8. data/docs/debugging.md +19 -0
  9. data/docs/template.md +1 -0
  10. data/examples/284_slow_rendering.rb +105 -0
  11. data/lib/vedeu/borders/dsl.rb +2 -1
  12. data/lib/vedeu/borders/repository.rb +2 -1
  13. data/lib/vedeu/buffers/repository.rb +2 -1
  14. data/lib/vedeu/colours/backgrounds.rb +2 -1
  15. data/lib/vedeu/colours/foregrounds.rb +2 -1
  16. data/lib/vedeu/configuration/configuration.rb +3 -1
  17. data/lib/vedeu/cursors/cursor.rb +3 -1
  18. data/lib/vedeu/cursors/repository.rb +4 -2
  19. data/lib/vedeu/distributed/server.rb +5 -2
  20. data/lib/vedeu/dsl/view.rb +4 -1
  21. data/lib/vedeu/editor/document.rb +13 -12
  22. data/lib/vedeu/editor/repository.rb +2 -1
  23. data/lib/vedeu/events/aliases.rb +3 -1
  24. data/lib/vedeu/events/event.rb +6 -2
  25. data/lib/vedeu/events/repository.rb +2 -1
  26. data/lib/vedeu/events/trigger.rb +2 -1
  27. data/lib/vedeu/geometry/dsl.rb +2 -1
  28. data/lib/vedeu/geometry/repository.rb +2 -1
  29. data/lib/vedeu/groups/clear.rb +2 -1
  30. data/lib/vedeu/groups/dsl.rb +2 -1
  31. data/lib/vedeu/groups/group.rb +4 -1
  32. data/lib/vedeu/groups/repository.rb +2 -1
  33. data/lib/vedeu/input/dsl.rb +2 -1
  34. data/lib/vedeu/input/keymaps.rb +2 -1
  35. data/lib/vedeu/input/mapper.rb +2 -1
  36. data/lib/vedeu/interfaces/dsl.rb +2 -1
  37. data/lib/vedeu/interfaces/interface.rb +3 -1
  38. data/lib/vedeu/interfaces/repository.rb +2 -1
  39. data/lib/vedeu/logging/all.rb +1 -0
  40. data/lib/vedeu/logging/debug.rb +2 -1
  41. data/lib/vedeu/logging/ips.rb +57 -0
  42. data/lib/vedeu/logging/log.rb +4 -1
  43. data/lib/vedeu/logging/timer.rb +2 -1
  44. data/lib/vedeu/menus/menu.rb +2 -1
  45. data/lib/vedeu/menus/repository.rb +2 -1
  46. data/lib/vedeu/models/focus.rb +6 -2
  47. data/lib/vedeu/output/clear/interface.rb +46 -4
  48. data/lib/vedeu/output/compressor.rb +1 -1
  49. data/lib/vedeu/output/output.rb +36 -3
  50. data/lib/vedeu/output/renderers/all.rb +3 -1
  51. data/lib/vedeu/runtime/application.rb +2 -1
  52. data/lib/vedeu/runtime/flags.rb +3 -1
  53. data/lib/vedeu/runtime/main_loop.rb +2 -2
  54. data/lib/vedeu/runtime/router.rb +2 -1
  55. data/lib/vedeu/terminal/buffer.rb +27 -8
  56. data/lib/vedeu/terminal/terminal.rb +4 -1
  57. data/lib/vedeu/version.rb +1 -1
  58. data/test/lib/vedeu/editor/document_test.rb +1 -0
  59. data/test/lib/vedeu/output/clear/interface_test.rb +1 -0
  60. data/test/lib/vedeu/output/output_test.rb +45 -1
  61. data/test/lib/vedeu/terminal/buffer_test.rb +11 -0
  62. data/test/lib/vedeu_test.rb +2 -0
  63. data/test/test_helper.rb +21 -0
  64. data/vedeu.gemspec +1 -0
  65. metadata +20 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 143043509ebfddd83c874d02592cc32490dcd663
4
- data.tar.gz: 05f8618fb7ab1f6a88ac7221794967bd58307022
3
+ metadata.gz: 7db3488d578544ebd7396a2c9729aa8d197c29d0
4
+ data.tar.gz: ae67cc4985f4acb9989b6ca86ba0d6b2035b06ba
5
5
  SHA512:
6
- metadata.gz: 95e3e2d995ff6aa700a07e17dd8f462ad412b8df1d17c6a74f0a773e1ca0ef6dabe4100e526bf9c9e9860d3cc440968717c1667c0ded6fe3939857bcdd1d5860
7
- data.tar.gz: 45022ead54702e4ce916c0e057cd78d2987c507cd41223a11f2988a254faf200a851739f96b77e4deb81c01b0a5023b30e77afadd6ba7dc259abd9c5c4f98875
6
+ metadata.gz: dd84a463c30f4169ad8ec50134fdd16d638d2d5557c4b18d05dab2016a0d190735764ad86cade780e6a10596dcc288e162e5dd759c33ac4aa2501d94341a2dfa
7
+ data.tar.gz: 298aea3fceff6d65d62af1821f5feebe71bbabec593e17f63be2852abd930b5f9f250e4152eee043a4dc05b7c7cb8b92b6d1d2cdd47b769d353feab15b410bde
data/.rubocop.yml CHANGED
@@ -21,6 +21,7 @@ AllCops:
21
21
  - '**/Cheffile'
22
22
  - '**/Vagabondfile'
23
23
  Exclude:
24
+ - 'benchmarks/**/*'
24
25
  - 'examples/**/*'
25
26
  - 'test/**/*'
26
27
  - 'vendor/**/*'
data/.yardopts CHANGED
@@ -5,8 +5,12 @@
5
5
  docs/api.md
6
6
  docs/borders.md
7
7
  docs/buffer.md
8
+ docs/cell.md
9
+ docs/chars.md
10
+ docs/colours_styles.md
8
11
  docs/configuration.md
9
12
  docs/cursors.md
13
+ docs/debugging.md
10
14
  docs/dsl.md
11
15
  docs/events.md
12
16
  docs/geometry.md
@@ -15,8 +19,11 @@ docs/group.md
15
19
  docs/input.md
16
20
  docs/interfaces.md
17
21
  docs/keymaps.md
22
+ docs/lines.md
18
23
  docs/object_graph.md
19
24
  docs/output.md
25
+ docs/streams.md
26
+ docs/template.md
20
27
  docs/view.md
21
28
  docs/events/application.md
22
29
  docs/events/document.md
data/README.md CHANGED
@@ -20,6 +20,16 @@ have any problems with either of these operating systems.
20
20
  **Note**: You may have trouble running Vedeu with Windows installations. (Pull
21
21
  requests welcome!)
22
22
 
23
+ ## Dependencies
24
+
25
+ Vedeu relies on the following gems, these will be automatically
26
+ installed when you install Vedeu (as documented below).
27
+
28
+ - bundler
29
+ - rake
30
+ - ruby-prof
31
+ - thor
32
+ - vedeu_cli
23
33
 
24
34
  ## Installation
25
35
 
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # To test the suitability of using a range to determine a valid
4
+ # coordinate instead of the current array method as used in
5
+ # Vedeu::Terminal::Buffer#within_terminal_boundary?
6
+ #
7
+ # vedeu/benchmarks:spike/benchmarking$ ./array_vs_range.rb
8
+ # Calculating -------------------------------------
9
+ # array 202.400k i/100ms
10
+ # range 130.641k i/100ms
11
+ # -------------------------------------------------
12
+ # array 8.171M (± 0.1%) i/s - 40.885M
13
+ # range 2.471M (± 0.4%) i/s - 12.411M
14
+ #
15
+ # Comparison:
16
+ # array: 8170584.0 i/s
17
+ # range: 2470528.5 i/s - 3.31x slower
18
+ #
19
+
20
+ require "bundler/setup"
21
+ require "benchmark/ips"
22
+
23
+ YN = 60
24
+ XN = 140
25
+ GRID = Array.new(YN) { |y| Array.new(XN) { |x| :"grid_#{y}_#{x}" } }
26
+ Y = rand(YN)
27
+ X = rand(XN)
28
+
29
+ def fast
30
+ GRID[Y] && GRID[Y][X]
31
+ end
32
+
33
+ def slow
34
+ (0..YN).cover?(Y) && (0..XN).cover?(X)
35
+ end
36
+
37
+ Benchmark.ips do |x|
38
+ x.report("array") { fast }
39
+ x.report("range") { slow }
40
+ x.compare!
41
+ end
data/docs/api.md CHANGED
@@ -28,6 +28,13 @@ methods are used in a variety of ways, sometimes in combination:
28
28
  # with other methods
29
29
  Vedeu.method_name.other_method
30
30
 
31
+ Nearly all of the API methods have associated
32
+ {file:docs/events.md Vedeu Events} which you can bind to or trigger to
33
+ achieve the same effect. It is favoured that you trigger events
34
+ instead of calling API methods as this gives you a bit more visibility
35
+ when debugging, and flexibility when running your application.
36
+ However, how you build your application is up to you! (Of course!)
37
+
31
38
  ## Configuration
32
39
 
33
40
  See {file:docs/configuration.md}
@@ -5,4 +5,8 @@
5
5
 
6
6
  ## Vedeu Background Colours
7
7
 
8
+ More coming soon.
9
+
8
10
  ## Vedeu Foreground Colours
11
+
12
+ More coming soon.
data/docs/debugging.md ADDED
@@ -0,0 +1,19 @@
1
+ # @title Debugging Vedeu
2
+ # Debugging Vedeu
3
+
4
+ If you are encountering a problem whilst running your client
5
+ application, using Vedeu, and have the 'pry' gem installed or
6
+ available, you can drop the following snippet into the offending area,
7
+ and hopefully be dropped into a Pry debuggging session:
8
+
9
+ Vedeu::Terminal.cooked_mode!
10
+ Vedeu::Terminal.open do
11
+ show_cursor = Vedeu::EscapeSequences::Esc.string('show_cursor')
12
+ Vedeu::Terminal.output(show_cursor)
13
+
14
+ require 'pry'
15
+ binding.pry
16
+
17
+ end
18
+ Vedeu::Terminal.raw_mode!
19
+
data/docs/template.md CHANGED
@@ -1,3 +1,4 @@
1
1
  # @title Vedeu View Templates
2
2
  # Vedeu View Templates
3
3
 
4
+ More coming soon.
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'vedeu'
5
+
6
+ class EditorApp
7
+
8
+ Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
9
+
10
+ Vedeu.configure do
11
+ debug!
12
+ log '/tmp/284_slow_rendering.log'
13
+ # renderers Vedeu::Renderers::File.new(filename: '/tmp/284_slow.out')
14
+ fake!
15
+ end
16
+
17
+ Vedeu.interface :editor_view do
18
+ border do
19
+ title 'Editor'
20
+ end
21
+ editable!
22
+ geometry do
23
+ align(:bottom, :left, Vedeu.width - 21, 10)
24
+ end
25
+ end
26
+
27
+ Vedeu.interface :members_view do
28
+ border do
29
+ title 'Members'
30
+ end
31
+ editable!
32
+ geometry do
33
+ align(:top, :right, 20, Vedeu.height)
34
+ end
35
+ end
36
+
37
+ Vedeu.interface :help_view do
38
+ geometry do
39
+ height use(:editor_view).height
40
+ width use(:editor_view).width
41
+ x use(:editor_view).left
42
+ y use(:editor_view).south
43
+ end
44
+ end
45
+
46
+ # When pressing Return/Enter in the editor view, the :_command_
47
+ # event will be triggered with any typed content you have provided.
48
+ #
49
+ # The :_command_ event in turn triggers the :command event. Bind to
50
+ # :command to retrieve the content entered, and then process
51
+ # yourself in whatever way appropriate.
52
+ #
53
+ # Vedeu.bind(:command) do |data|
54
+ # # ... do something with 'data'
55
+ # end
56
+ #
57
+ Vedeu.keymap :editor_view do
58
+ key(:enter) { Vedeu.trigger(:_editor_execute_, :editor_view) }
59
+ key(:insert) do
60
+ Vedeu.log(type: :debug,
61
+ message: "Commands: #{Vedeu.all_commands.inspect}")
62
+ Vedeu.log(type: :debug,
63
+ message: "Keypresses: #{Vedeu.all_keypresses.inspect}")
64
+ end
65
+ end
66
+
67
+ Vedeu.keymap '_global_' do
68
+ key('q') { Vedeu.exit }
69
+ end
70
+
71
+ Vedeu.render do
72
+ view(:editor_view) do
73
+ end
74
+ end
75
+
76
+ Vedeu.render do
77
+ view(:help_view) do
78
+ lines do
79
+ line 'Type into the editor dialog above,'
80
+ line 'and press Return. This will trigger the'
81
+ line ':command event with the contents of '
82
+ line 'the view.'
83
+
84
+ # @todo Not implemented yet:
85
+ #
86
+ # text 'Type into the editor dialog above, and press Return. This will ' \
87
+ # 'trigger the :_command_ event with the contents of the view.',
88
+ # name: :help_view, mode: :wrap
89
+ end
90
+ end
91
+
92
+ view(:member_view) do
93
+ lines do
94
+ line ''
95
+ end
96
+ end
97
+ end
98
+
99
+ def self.start(argv = ARGV)
100
+ Vedeu::Launcher.execute!(argv)
101
+ end
102
+
103
+ end # EditorApp
104
+
105
+ EditorApp.start
@@ -347,6 +347,7 @@ module Vedeu
347
347
 
348
348
  # @!method border
349
349
  # @see Vedeu::Borders::DSL.border
350
- def_delegators Vedeu::Borders::DSL, :border
350
+ def_delegators Vedeu::Borders::DSL,
351
+ :border
351
352
 
352
353
  end # Vedeu
@@ -23,7 +23,8 @@ module Vedeu
23
23
  #
24
24
  # @!method borders
25
25
  # @return [Vedeu::Borders::Repository]
26
- def_delegators Vedeu::Borders::Repository, :borders
26
+ def_delegators Vedeu::Borders::Repository,
27
+ :borders
27
28
 
28
29
  # :nocov:
29
30
 
@@ -28,6 +28,7 @@ module Vedeu
28
28
  #
29
29
  # @!method buffers
30
30
  # @return [Vedeu::Buffers::Repository]
31
- def_delegators Vedeu::Buffers::Repository, :buffers
31
+ def_delegators Vedeu::Buffers::Repository,
32
+ :buffers
32
33
 
33
34
  end # Vedeu
@@ -23,6 +23,7 @@ module Vedeu
23
23
 
24
24
  # @!method background_colours
25
25
  # @return [Vedeu::Colours::Backgrounds]
26
- def_delegators Vedeu::Colours::Backgrounds, :background_colours
26
+ def_delegators Vedeu::Colours::Backgrounds,
27
+ :background_colours
27
28
 
28
29
  end # Vedeu
@@ -23,6 +23,7 @@ module Vedeu
23
23
 
24
24
  # @!method foreground_colours
25
25
  # @return [Vedeu::Colours::Foregrounds]
26
- def_delegators Vedeu::Colours::Foregrounds, :foreground_colours
26
+ def_delegators Vedeu::Colours::Foregrounds,
27
+ :foreground_colours
27
28
 
28
29
  end # Vedeu
@@ -353,6 +353,8 @@ module Vedeu
353
353
  # @see Vedeu::Configuration.configure
354
354
  # @!method configuration
355
355
  # @see Vedeu::Configuration.configuration
356
- def_delegators Vedeu::Configuration, :configure, :configuration
356
+ def_delegators Vedeu::Configuration,
357
+ :configure,
358
+ :configuration
357
359
 
358
360
  end # Vedeu
@@ -316,7 +316,9 @@ module Vedeu
316
316
  # @see Vedeu::Toggleable::ClassMethods#show
317
317
  # @!method toggle_cursor
318
318
  # @see Vedeu::Toggleable::ClassMethods#toggle
319
- def_delegators Vedeu::Cursors::Cursor, :hide_cursor, :show_cursor,
319
+ def_delegators Vedeu::Cursors::Cursor,
320
+ :hide_cursor,
321
+ :show_cursor,
320
322
  :toggle_cursor
321
323
 
322
324
  # :nocov:
@@ -37,7 +37,8 @@ module Vedeu
37
37
 
38
38
  # @!method cursor
39
39
  # @see Vedeu::Cursors::Repository.cursor
40
- def_delegators Vedeu::Cursors::Repository, :cursor
40
+ def_delegators Vedeu::Cursors::Repository,
41
+ :cursor
41
42
 
42
43
  # Manipulate the repository of cursors.
43
44
  #
@@ -46,6 +47,7 @@ module Vedeu
46
47
  #
47
48
  # @!method cursors
48
49
  # @return [Vedeu::Cursors::Repository]
49
- def_delegators Vedeu::Cursors::Repository, :cursors
50
+ def_delegators Vedeu::Cursors::Repository,
51
+ :cursors
50
52
 
51
53
  end # Vedeu
@@ -246,8 +246,11 @@ module Vedeu
246
246
  # @see Vedeu::Distributed::Server#status
247
247
  # @!method drb_stop
248
248
  # @see Vedeu::Distributed::Server#stop
249
- def_delegators Vedeu::Distributed::Server, :drb_restart, :drb_start,
250
- :drb_status, :drb_stop
249
+ def_delegators Vedeu::Distributed::Server,
250
+ :drb_restart,
251
+ :drb_start,
252
+ :drb_status,
253
+ :drb_stop
251
254
 
252
255
  # :nocov:
253
256
 
@@ -253,6 +253,9 @@ module Vedeu
253
253
  # @see Vedeu::DSL::View.renders
254
254
  # @!method views
255
255
  # @see Vedeu::DSL::View.views
256
- def_delegators Vedeu::DSL::View, :renders, :render, :views
256
+ def_delegators Vedeu::DSL::View,
257
+ :renders,
258
+ :render,
259
+ :views
257
260
 
258
261
  end # Vedeu
@@ -64,6 +64,7 @@ module Vedeu
64
64
  @lines = lines.delete_character(y, x - 1)
65
65
 
66
66
  left
67
+
67
68
  end
68
69
  end
69
70
 
@@ -76,6 +77,8 @@ module Vedeu
76
77
  up
77
78
 
78
79
  eol
80
+
81
+ refresh
79
82
  end
80
83
 
81
84
  # Returns the document as a string with line breaks if there is
@@ -105,6 +108,8 @@ module Vedeu
105
108
  @lines = lines.insert_character(character, y, x)
106
109
 
107
110
  right
111
+
112
+ refresh
108
113
  end
109
114
 
110
115
  # Insert an empty line.
@@ -116,6 +121,8 @@ module Vedeu
116
121
  down
117
122
 
118
123
  bol
124
+
125
+ refresh
119
126
  end
120
127
 
121
128
  # Returns the current line from the collection of lines.
@@ -166,9 +173,7 @@ module Vedeu
166
173
  def left
167
174
  return self if x - 1 < 0
168
175
 
169
- cursor.left
170
-
171
- refresh
176
+ cursor.left.refresh
172
177
  end
173
178
 
174
179
  # Move the virtual cursor right.
@@ -177,9 +182,7 @@ module Vedeu
177
182
  def right
178
183
  return self if x + 1 > line.size
179
184
 
180
- cursor.right
181
-
182
- refresh
185
+ cursor.right.refresh
183
186
  end
184
187
 
185
188
  # Move the virtual cursor up.
@@ -188,7 +191,7 @@ module Vedeu
188
191
  def up
189
192
  return self if y - 1 < 0
190
193
 
191
- cursor.up
194
+ cursor.up.refresh
192
195
 
193
196
  if x > line(y).size
194
197
  eol
@@ -205,7 +208,7 @@ module Vedeu
205
208
  def down
206
209
  return self if y + 1 >= lines.size
207
210
 
208
- cursor.down
211
+ cursor.down.refresh
209
212
 
210
213
  if x > line(y).size
211
214
  eol
@@ -220,9 +223,7 @@ module Vedeu
220
223
  #
221
224
  # @return [Vedeu::Editor::Document]
222
225
  def bol
223
- cursor.bol
224
-
225
- refresh
226
+ cursor.bol.refresh
226
227
  end
227
228
 
228
229
  # Move the virtual cursor to the end of the line.
@@ -231,7 +232,7 @@ module Vedeu
231
232
  def eol
232
233
  cursor.x = line.size
233
234
 
234
- refresh
235
+ cursor.refresh
235
236
  end
236
237
 
237
238
  private