vedeu 0.4.22 → 0.4.23

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +5 -5
  3. data/examples/geometry_app.rb +2 -2
  4. data/lib/vedeu/bindings.rb +2 -15
  5. data/lib/vedeu/buffers/buffer.rb +2 -6
  6. data/lib/vedeu/configuration/cli.rb +4 -4
  7. data/lib/vedeu/dsl/components/border.rb +24 -8
  8. data/lib/vedeu/dsl/components/geometry.rb +10 -0
  9. data/lib/vedeu/events/event.rb +1 -2
  10. data/lib/vedeu/geometry/area.rb +4 -1
  11. data/lib/vedeu/geometry/geometry.rb +51 -18
  12. data/lib/vedeu/geometry/grid.rb +4 -28
  13. data/lib/vedeu/launcher.rb +6 -2
  14. data/lib/vedeu/models/line.rb +1 -1
  15. data/lib/vedeu/output/clear.rb +8 -8
  16. data/lib/vedeu/output/compressor.rb +1 -0
  17. data/lib/vedeu/output/esc.rb +29 -101
  18. data/lib/vedeu/output/html_char.rb +9 -9
  19. data/lib/vedeu/output/refresh.rb +17 -5
  20. data/lib/vedeu/output/renderers/all.rb +1 -9
  21. data/lib/vedeu/output/translator.rb +1 -1
  22. data/lib/vedeu/output/viewport.rb +1 -1
  23. data/lib/vedeu/repositories/repositories/colours.rb +6 -3
  24. data/lib/vedeu/support/all.rb +1 -0
  25. data/lib/vedeu/support/template.rb +2 -1
  26. data/lib/vedeu/support/terminal.rb +2 -0
  27. data/lib/vedeu/support/timer.rb +44 -0
  28. data/test/lib/vedeu/buffers/buffer_test.rb +1 -7
  29. data/test/lib/vedeu/configuration/cli_test.rb +28 -0
  30. data/test/lib/vedeu/dsl/components/geometry_test.rb +12 -0
  31. data/test/lib/vedeu/geometry/geometry_test.rb +8 -0
  32. data/test/lib/vedeu/geometry/grid_test.rb +0 -20
  33. data/test/lib/vedeu/geometry/position_test.rb +6 -0
  34. data/test/lib/vedeu/null/border_test.rb +6 -0
  35. data/test/lib/vedeu/output/clear_test.rb +12 -6
  36. data/test/lib/vedeu/output/compressor_test.rb +29 -0
  37. data/test/lib/vedeu/output/esc_test.rb +26 -26
  38. data/test/lib/vedeu/output/presentation_test.rb +22 -0
  39. data/test/lib/vedeu/output/translator_test.rb +18 -16
  40. data/test/lib/vedeu/output/viewport_test.rb +163 -97
  41. data/test/lib/vedeu/output/virtual_terminal_test.rb +6 -0
  42. data/test/lib/vedeu/repositories/repositories/colours_test.rb +29 -4
  43. data/test/lib/vedeu/repositories/repository_test.rb +6 -0
  44. data/vedeu.gemspec +4 -4
  45. metadata +3 -44
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0d79ec97271163d2a5714da17bb182a5b10e8364
4
- data.tar.gz: 8103b05cdd5a5bc0b9936963ac0d4685d0a316ff
3
+ metadata.gz: 365b29b26543c213bcb8ca54063e55261dca7d47
4
+ data.tar.gz: 8fbbb26db13f252b6cdba3ccaaf851718335a854
5
5
  SHA512:
6
- metadata.gz: 8d6349acfc3ebb738025f2f52604ac2a731a3174ebad8556437110e747c0d6392f976c28d1808b6552edcbfded5316031694d264436f20c4fd1b633cc225166c
7
- data.tar.gz: 23fe6d51808b2b699632574ab8f4aedd79974ac057ccf59ac85b6e78a7e47fa1df8344ff7b24c5896f259dc7ea8399a9b97bef5eee148de79887f45bb46070d5
6
+ metadata.gz: 224fd3df8947ad37738184011a53c1814530cb8ee923f3e634a8e398710b42399aa15d9ad95cc57c2356da16208fb3c972dc9b0a92c0c2e9cb73d059074f1c86
7
+ data.tar.gz: 2d99311229522afc70142dbca1f15d05f2cce5954548cf1f05d275a51545d7b729e67748c48b9ead6578457d503097418239826fd658501a8d2c5c59c1a5cec9
data/Rakefile CHANGED
@@ -1,14 +1,14 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
- require 'cucumber'
4
- require 'cucumber/rake/task'
3
+ # require 'cucumber'
4
+ # require 'cucumber/rake/task'
5
5
  require 'inch/rake'
6
6
  require 'yard'
7
7
  require 'rubocop/rake_task'
8
8
 
9
- Cucumber::Rake::Task.new(:cucumber) do |t|
10
- t.cucumber_opts = 'features --format progress'
11
- end
9
+ # Cucumber::Rake::Task.new(:cucumber) do |t|
10
+ # t.cucumber_opts = 'features --format progress'
11
+ # end
12
12
 
13
13
  Rake::TestTask.new(:test) do |t|
14
14
  t.libs.push 'lib'
@@ -21,7 +21,7 @@ class VedeuGeometryApp
21
21
 
22
22
  # Geometry can be defined within the interface.
23
23
  geometry do
24
- height 8
24
+ height rows(4)
25
25
  width 8
26
26
  x 2
27
27
  y 2
@@ -36,7 +36,7 @@ class VedeuGeometryApp
36
36
  # Geometry can be defined either before or after the interface.
37
37
  geometry 'second' do
38
38
  height 8
39
- width 8
39
+ width columns(1)
40
40
  x 12
41
41
  y 2
42
42
  end
@@ -60,7 +60,6 @@ module Vedeu
60
60
  # `_mode_switch_` is triggered.
61
61
  Vedeu.bind(:_keypress_) do |key|
62
62
  Vedeu.trigger(:key, key)
63
-
64
63
  Vedeu.keypress(key)
65
64
  end
66
65
 
@@ -82,12 +81,8 @@ module Vedeu
82
81
  # events. Please see those events for their behaviour.
83
82
  Vedeu.bind(:_resize_, delay: 0.15) { Vedeu.resize }
84
83
 
85
- Vedeu.bind(:tick) do |time|
86
- Vedeu.log(type: :debug, message: "Tick: #{time}")
87
- end
88
- Vedeu.bind(:tock) do |time|
89
- Vedeu.log(type: :debug, message: "Tock: #{time}")
90
- end
84
+ Vedeu.bind(:tick) { |t| Vedeu.log(type: :debug, message: "Tick: #{t}") }
85
+ Vedeu.bind(:tock) { |t| Vedeu.log(type: :debug, message: "Tock: #{t}") }
91
86
 
92
87
  # Hide the cursor of the named interface or interface currently in focus.
93
88
  Vedeu.bind(:_cursor_hide_) do |name|
@@ -175,7 +170,6 @@ module Vedeu
175
170
 
176
171
  else
177
172
  Vedeu::Terminal.virtual.clear if Vedeu::Configuration.drb?
178
-
179
173
  Vedeu::Terminal.clear
180
174
  end
181
175
  end
@@ -206,7 +200,6 @@ module Vedeu
206
200
  # the named group.
207
201
  Vedeu.bind(:_show_group_) do |name|
208
202
  Vedeu.trigger(:_clear_)
209
-
210
203
  Vedeu.trigger(:_refresh_group_, name)
211
204
  end
212
205
 
@@ -266,8 +259,6 @@ module Vedeu
266
259
  # of the available space on the terminal window.
267
260
  Vedeu.bind(:_maximise_) do |name|
268
261
  Vedeu.geometries.by_name(name).maximise
269
-
270
- Vedeu.trigger(:_refresh_, name)
271
262
  end
272
263
 
273
264
  # Will unmaximise the named interface geometry. Previously, if a geometry
@@ -275,11 +266,7 @@ module Vedeu
275
266
  # usual defined size (terminal size permitting: if the terminal has been
276
267
  # resized, then the new geometry size should adapt).
277
268
  Vedeu.bind(:_unmaximise_) do |name|
278
- Vedeu.trigger(:_clear_, name)
279
-
280
269
  Vedeu.geometries.by_name(name).unmaximise
281
-
282
- Vedeu.trigger(:_refresh_, name)
283
270
  end
284
271
 
285
272
  end # Bindings
@@ -72,9 +72,7 @@ module Vedeu
72
72
  #
73
73
  # @return [void]
74
74
  def clear
75
- unless clear_buffer.empty?
76
- Vedeu::Output.render(clear_buffer)
77
- end
75
+ Vedeu::Output.render(clear_buffer)
78
76
  end
79
77
 
80
78
  # Hide this buffer.
@@ -100,9 +98,7 @@ module Vedeu
100
98
  #
101
99
  # @return [Array<Array<Array<Vedeu::Char>>>]
102
100
  def render
103
- Vedeu::Output.render(buffer) unless buffer.empty?
104
-
105
- buffer
101
+ Vedeu::Output.render(buffer)
106
102
  end
107
103
  alias_method :content, :render
108
104
 
@@ -124,7 +124,7 @@ module Vedeu
124
124
  def drb_height
125
125
  parser.on('--drb-height',
126
126
  'Set the height for fake terminal.') do |height|
127
- # options[:drb] = true
127
+ options[:drb] = true
128
128
  options[:drb_height] = height
129
129
  end
130
130
  end
@@ -133,7 +133,7 @@ module Vedeu
133
133
  def drb_host
134
134
  parser.on('--drb-host',
135
135
  'Set the hostname/IP for the DRb server.') do |hostname|
136
- # options[:drb] = true
136
+ options[:drb] = true
137
137
  options[:drb_host] = hostname
138
138
  end
139
139
  end
@@ -141,7 +141,7 @@ module Vedeu
141
141
  # @return [OptionParser]
142
142
  def drb_port
143
143
  parser.on('--drb-port', 'Set the port for the DRb server.') do |port|
144
- # options[:drb] = true
144
+ options[:drb] = true
145
145
  options[:drb_port] = port
146
146
  end
147
147
  end
@@ -150,7 +150,7 @@ module Vedeu
150
150
  def drb_width
151
151
  parser.on('--drb-width',
152
152
  'Set the width for fake terminal.') do |width|
153
- # options[:drb] = true
153
+ options[:drb] = true
154
154
  options[:drb_width] = width
155
155
  end
156
156
  end
@@ -130,12 +130,16 @@ module Vedeu
130
130
  end
131
131
  alias_method :show_bottom, :bottom
132
132
 
133
- # @see #bottom
133
+ # Disable the bottom border.
134
+ #
135
+ # @see Vedeu::DSL::Border#bottom
134
136
  def hide_bottom!
135
137
  bottom(false)
136
138
  end
137
139
 
138
- # @see #bottom
140
+ # Enable the bottom border.
141
+ #
142
+ # @see Vedeu::DSL::Border#bottom
139
143
  def show_bottom!
140
144
  bottom(true)
141
145
  end
@@ -162,12 +166,16 @@ module Vedeu
162
166
  end
163
167
  alias_method :show_left, :left
164
168
 
165
- # @see #left
169
+ # Disable the left border.
170
+ #
171
+ # @see Vedeu::DSL::Border#left
166
172
  def hide_left!
167
173
  left(false)
168
174
  end
169
175
 
170
- # @see #left
176
+ # Enable the left border.
177
+ #
178
+ # @see Vedeu::DSL::Border#left
171
179
  def show_left!
172
180
  left(true)
173
181
  end
@@ -194,12 +202,16 @@ module Vedeu
194
202
  end
195
203
  alias_method :show_right, :right
196
204
 
197
- # @see #right
205
+ # Disable the right border.
206
+ #
207
+ # @see Vedeu::DSL::Border#right
198
208
  def hide_right!
199
209
  right(false)
200
210
  end
201
211
 
202
- # @see #right
212
+ # Enable the right border.
213
+ #
214
+ # @see Vedeu::DSL::Border#right
203
215
  def show_right!
204
216
  right(true)
205
217
  end
@@ -244,12 +256,16 @@ module Vedeu
244
256
  end
245
257
  alias_method :show_top, :top
246
258
 
247
- # @see #top
259
+ # Disable the top border.
260
+ #
261
+ # @see Vedeu::DSL::Border#top
248
262
  def hide_top!
249
263
  top(false)
250
264
  end
251
265
 
252
- # @see #top
266
+ # Enable the top border.
267
+ #
268
+ # @see Vedeu::DSL::Border#top
253
269
  def show_top!
254
270
  top(true)
255
271
  end
@@ -58,6 +58,11 @@ module Vedeu
58
58
  end
59
59
  alias_method :centred!, :centred
60
60
 
61
+ # @see Vedeu::Grid.columns
62
+ def columns(value)
63
+ Vedeu::Grid.columns(value)
64
+ end
65
+
61
66
  # Specify the number of characters/rows/lines tall the interface will be.
62
67
  #
63
68
  # @example
@@ -74,6 +79,11 @@ module Vedeu
74
79
  model.height = value
75
80
  end
76
81
 
82
+ # @see Vedeu::Grid.columns
83
+ def rows(value)
84
+ Vedeu::Grid.rows(value)
85
+ end
86
+
77
87
  # Specify the number of characters/columns wide the interface will be.
78
88
  #
79
89
  # @param value [Fixnum]
@@ -123,8 +123,7 @@ module Vedeu
123
123
  # @see Vedeu::Event.bind
124
124
  def bind
125
125
  if repository.registered?(name)
126
- collection = repository.find(name)
127
- new_collection = collection.add(self)
126
+ new_collection = repository.find(name).add(self)
128
127
 
129
128
  else
130
129
  new_collection = Vedeu::Events.new([self], nil, name)
@@ -51,7 +51,10 @@ module Vedeu
51
51
  # @param xn [Fixnum]
52
52
  # @return [Vedeu::Area]
53
53
  def initialize(y:, yn:, x:, xn:)
54
- @y, @yn, @x, @xn = y, yn, x, xn
54
+ @y = y
55
+ @yn = yn
56
+ @x = x
57
+ @xn = xn
55
58
  end
56
59
 
57
60
  # An object is equal when its values are the same.
@@ -61,6 +61,7 @@ module Vedeu
61
61
  # @!attribute [rw] maximised
62
62
  # @return [Boolean]
63
63
  attr_accessor :maximised
64
+ alias_method :maximised?, :maximised
64
65
 
65
66
  # @!attribute [w] width
66
67
  # @return [Fixnum]
@@ -109,16 +110,30 @@ module Vedeu
109
110
 
110
111
  # @return [Vedeu::Geometry]
111
112
  def maximise
112
- @maximised = true
113
+ unless maximised?
114
+ @maximised = true
113
115
 
114
- store
116
+ work = store
117
+
118
+ Vedeu.trigger(:_refresh_, name)
119
+
120
+ work
121
+ end
115
122
  end
116
123
 
117
124
  # @return [Vedeu::Geometry]
118
125
  def unmaximise
119
- @maximised = false
126
+ if maximised?
127
+ Vedeu.trigger(:_clear_, name)
128
+
129
+ @maximised = false
130
+
131
+ work = store
132
+
133
+ Vedeu.trigger(:_refresh_, name)
120
134
 
121
- store
135
+ work
136
+ end
122
137
  end
123
138
 
124
139
  private
@@ -128,26 +143,44 @@ module Vedeu
128
143
  @area = Vedeu::Area.from_dimensions(y_yn: y_yn, x_xn: x_xn)
129
144
  end
130
145
 
146
+ # @return [Hash<Symbol => Fixnum, Hash]
147
+ def height_attributes
148
+ {
149
+ d: _y,
150
+ dn: _yn,
151
+ d_dn: @height,
152
+ default: Vedeu::Terminal.height,
153
+ options: dimension_options,
154
+ }
155
+ end
156
+
157
+ # @return [Hash<Symbol => Fixnum, Hash]
158
+ def width_attributes
159
+ {
160
+ d: _x,
161
+ dn: _xn,
162
+ d_dn: @width,
163
+ default: Vedeu::Terminal.width,
164
+ options: dimension_options,
165
+ }
166
+ end
167
+
168
+ # @return [Hash<Symbol => Boolean>]
169
+ def dimension_options
170
+ {
171
+ centred: centred,
172
+ maximised: maximised,
173
+ }
174
+ end
175
+
131
176
  # @return [Array<Fixnum>]
132
177
  def x_xn
133
- @x_xn = Vedeu::Dimension.pair(d: _x,
134
- dn: _xn,
135
- d_dn: @width,
136
- default: Vedeu::Terminal.width,
137
- options: {
138
- centred: centred,
139
- maximised: maximised })
178
+ @x_xn = Vedeu::Dimension.pair(width_attributes)
140
179
  end
141
180
 
142
181
  # @return [Array<Fixnum>]
143
182
  def y_yn
144
- @y_yn = Vedeu::Dimension.pair(d: _y,
145
- dn: _yn,
146
- d_dn: @height,
147
- default: Vedeu::Terminal.height,
148
- options: {
149
- centred: centred,
150
- maximised: maximised })
183
+ @y_yn = Vedeu::Dimension.pair(height_attributes)
151
184
  end
152
185
 
153
186
  # Returns the row/line start position for the interface.
@@ -1,29 +1,3 @@
1
- # Monkey-patch Ruby's Fixnum to provide a columns method.
2
- # @todo Don't monkey-patch because it is naughty.
3
- class Fixnum
4
-
5
- # Augment Fixnum to calculate column width in a grid-based layout.
6
- #
7
- # The grid system splits the terminal height and width into 12 equal parts, by
8
- # dividing the available height and width by 12. If the terminal height or
9
- # width is not a multiple of 12, then Grid chooses the maximum value which
10
- # will fit.
11
- #
12
- # Used primarily at interface creation time:
13
- #
14
- # width: 9.columns # (Terminal width / 12) * 9 characters wide; e.g.
15
- # # Terminal is 92 characters wide, maximum value is
16
- # # therefore 84, meaning a column is 7 characters wide.
17
- def columns
18
- Vedeu::Grid.columns(self)
19
- end
20
-
21
- def rows
22
- Vedeu::Grid.rows(self)
23
- end
24
-
25
- end # Fixnum
26
-
27
1
  module Vedeu
28
2
 
29
3
  # Augment Fixnum to calculate column width or row height in a grid-based
@@ -36,13 +10,15 @@ module Vedeu
36
10
  #
37
11
  # Used primarily whilst defining geometry:
38
12
  #
39
- # width: 9.columns # (Terminal width / 12) * 9 characters wide; e.g.
13
+ # width: columns(9) # (Terminal width / 12) * 9 characters wide; e.g.
40
14
  # # Terminal is 92 characters wide, maximum value is
41
15
  # # therefore 84, meaning a column is 7 characters wide.
16
+ # # (And width is therefore 63 characters wide.)
42
17
  #
43
- # height: 3.columns # (Terminal height / 12) * 3 rows high; e.g.
18
+ # height: rows(3) # (Terminal height / 12) * 3 rows high; e.g.
44
19
  # # Terminal is 38 characters wide, maximum value is
45
20
  # # therefore 36, meaning a row is 3 characters tall.
21
+ # # (And height is therefore 9 characters tall.)
46
22
  class Grid
47
23
 
48
24
  # @see #initialize
@@ -58,7 +58,9 @@ module Vedeu
58
58
 
59
59
  # @return [void]
60
60
  def execute!
61
- $stdin, $stdout, $stderr = @stdin, @stdout, @stderr
61
+ $stdin = @stdin
62
+ $stdout = @stdout
63
+ $stderr = @stderr
62
64
 
63
65
  Vedeu::Application.start(configuration)
64
66
 
@@ -83,7 +85,9 @@ module Vedeu
83
85
  def terminate!
84
86
  Vedeu.log(type: :info, message: 'Exiting gracefully.')
85
87
 
86
- $stdin, $stdout, $stderr = STDIN, STDOUT, STDERR
88
+ $stdin = STDIN
89
+ $stdout = STDOUT
90
+ $stderr = STDERR
87
91
 
88
92
  @kernel.exit(exit_code)
89
93
  end