vedeu 0.3.3 → 0.3.4
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/bin/vedeu_drb_client +6 -0
- data/lib/vedeu/all.rb +1 -0
- data/lib/vedeu/application.rb +24 -1
- data/lib/vedeu/configuration/api.rb +107 -0
- data/lib/vedeu/configuration/cli.rb +34 -0
- data/lib/vedeu/configuration/configuration.rb +75 -4
- data/lib/vedeu/distributed/all.rb +8 -0
- data/lib/vedeu/distributed/application.rb +91 -0
- data/lib/vedeu/distributed/client.rb +58 -0
- data/lib/vedeu/distributed/subprocess.rb +111 -0
- data/lib/vedeu/distributed/templates/default_application.vedeu +34 -0
- data/lib/vedeu/distributed/templates/default_borders.vedeu +19 -0
- data/lib/vedeu/distributed/templates/default_configuration.vedeu +31 -0
- data/lib/vedeu/distributed/templates/default_events.vedeu +1 -0
- data/lib/vedeu/distributed/templates/default_geometries.vedeu +7 -0
- data/lib/vedeu/distributed/templates/default_interfaces.vedeu +4 -0
- data/lib/vedeu/distributed/templates/default_keymaps.vedeu +6 -0
- data/lib/vedeu/distributed/templates/default_menus.vedeu +3 -0
- data/lib/vedeu/distributed/templates/default_views.vedeu +14 -0
- data/lib/vedeu/distributed/test_application.rb +99 -0
- data/lib/vedeu/distributed/uri.rb +38 -0
- data/lib/vedeu/input/mapper.rb +10 -0
- data/lib/vedeu/launcher.rb +4 -0
- data/lib/vedeu/models/geometry.rb +16 -31
- data/lib/vedeu/models/view/char.rb +5 -5
- data/lib/vedeu/models/view/interface.rb +2 -1
- data/lib/vedeu/output/all.rb +2 -0
- data/lib/vedeu/output/output.rb +40 -0
- data/lib/vedeu/output/position_index.rb +24 -0
- data/lib/vedeu/output/virtual_terminal.rb +87 -0
- data/lib/vedeu/support/all.rb +1 -0
- data/lib/vedeu/support/limit.rb +33 -0
- data/lib/vedeu/support/position.rb +29 -0
- data/lib/vedeu/support/terminal.rb +14 -2
- data/test/integration/distributed_test.rb +14 -0
- data/test/lib/vedeu/application_test.rb +7 -6
- data/test/lib/vedeu/buffers/buffer_test.rb +6 -8
- data/test/lib/vedeu/configuration/api_test.rb +50 -0
- data/test/lib/vedeu/configuration/cli_test.rb +21 -0
- data/test/lib/vedeu/configuration/configuration_test.rb +24 -0
- data/test/lib/vedeu/cursor/move_cursor_test.rb +5 -7
- data/test/lib/vedeu/distributed/application_test.rb +24 -0
- data/test/lib/vedeu/distributed/client_test.rb +36 -0
- data/test/lib/vedeu/distributed/subprocess_test.rb +20 -0
- data/test/lib/vedeu/distributed/test_application_test.rb +26 -0
- data/test/lib/vedeu/distributed/uri_test.rb +73 -0
- data/test/lib/vedeu/dsl/components/border_test.rb +3 -5
- data/test/lib/vedeu/dsl/components/keymap_test.rb +2 -4
- data/test/lib/vedeu/dsl/components/menu_test.rb +2 -4
- data/test/lib/vedeu/dsl/composition_test.rb +3 -5
- data/test/lib/vedeu/dsl/interface_test.rb +3 -5
- data/test/lib/vedeu/dsl/line_test.rb +3 -5
- data/test/lib/vedeu/dsl/stream_test.rb +3 -5
- data/test/lib/vedeu/events/event_test.rb +8 -10
- data/test/lib/vedeu/events/trigger_test.rb +4 -6
- data/test/lib/vedeu/input/input_test.rb +2 -4
- data/test/lib/vedeu/input/key_test.rb +0 -2
- data/test/lib/vedeu/input/keymap_test.rb +4 -6
- data/test/lib/vedeu/input/mapper_test.rb +5 -7
- data/test/lib/vedeu/launcher_test.rb +7 -9
- data/test/lib/vedeu/models/collection_test.rb +4 -6
- data/test/lib/vedeu/models/geometry_test.rb +40 -13
- data/test/lib/vedeu/models/group_test.rb +4 -6
- data/test/lib/vedeu/models/menu_test.rb +6 -9
- data/test/lib/vedeu/models/view/char_test.rb +7 -9
- data/test/lib/vedeu/models/view/chars_test.rb +1 -3
- data/test/lib/vedeu/models/view/composition_test.rb +4 -6
- data/test/lib/vedeu/models/view/interface_test.rb +10 -12
- data/test/lib/vedeu/models/view/interfaces_test.rb +1 -3
- data/test/lib/vedeu/models/view/line_test.rb +5 -7
- data/test/lib/vedeu/models/view/lines_test.rb +1 -3
- data/test/lib/vedeu/models/view/stream_test.rb +6 -8
- data/test/lib/vedeu/models/view/streams_test.rb +1 -3
- data/test/lib/vedeu/output/border_test.rb +6 -8
- data/test/lib/vedeu/output/compositor_test.rb +2 -4
- data/test/lib/vedeu/output/output_test.rb +5 -4
- data/test/lib/vedeu/output/position_index_test.rb +72 -0
- data/test/lib/vedeu/output/viewport_test.rb +2 -4
- data/test/lib/vedeu/output/virtual_terminal_test.rb +120 -0
- data/test/lib/vedeu/output/wordwrap_test.rb +3 -5
- data/test/lib/vedeu/presentation/colour_test.rb +0 -2
- data/test/lib/vedeu/presentation/style_test.rb +2 -4
- data/test/lib/vedeu/presentation/translator_test.rb +2 -4
- data/test/lib/vedeu/repositories/repository_test.rb +3 -5
- data/test/lib/vedeu/support/console_test.rb +5 -7
- data/test/lib/vedeu/support/content_geometry_test.rb +2 -4
- data/test/lib/vedeu/support/coordinate_test.rb +5 -7
- data/test/lib/vedeu/support/grid_test.rb +2 -4
- data/test/lib/vedeu/support/limit_test.rb +30 -0
- data/test/lib/vedeu/support/position_test.rb +8 -4
- data/test/lib/vedeu/support/position_validator_test.rb +4 -6
- data/test/lib/vedeu/support/read_test.rb +3 -5
- data/test/lib/vedeu/support/sentence_test.rb +3 -4
- data/test/lib/vedeu/support/trace_test.rb +2 -4
- data/test/lib/vedeu/support/visible_test.rb +6 -8
- data/test/lib/vedeu/support/write_test.rb +3 -5
- data/test/test_helper.rb +6 -2
- data/vedeu.gemspec +1 -1
- metadata +40 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fccb60d2e33924a76f711a5ffccd643c7436a4fe
|
|
4
|
+
data.tar.gz: 03c59bf2a8d7c6265aa164807f9b72af46c7d055
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 48627364195755fcd4390963bf27188ca813d62b2e1cf14d4c20b824ea087e36669942fbeedcf40df8857171a468e71505af437a0bfb93b0656c9a761a170532
|
|
7
|
+
data.tar.gz: 52c5edb46c2a7e72e11084670829ae1e913a3fb4f96245463a682b6047f9cc45be5a597142a96327e1698a42f75357d6115fbdd7062acf9cadbc8fb16d6646b7
|
data/lib/vedeu/all.rb
CHANGED
data/lib/vedeu/application.rb
CHANGED
|
@@ -49,13 +49,19 @@ module Vedeu
|
|
|
49
49
|
#
|
|
50
50
|
# @return [Array] The last output sent to the terminal.
|
|
51
51
|
def start
|
|
52
|
-
|
|
52
|
+
distributed_start
|
|
53
|
+
|
|
54
|
+
output = Terminal.open do
|
|
53
55
|
Terminal.set_cursor_mode
|
|
54
56
|
|
|
55
57
|
Vedeu.trigger(:_initialize_)
|
|
56
58
|
|
|
57
59
|
runner { main_sequence }
|
|
58
60
|
end
|
|
61
|
+
|
|
62
|
+
distributed_stop
|
|
63
|
+
|
|
64
|
+
output
|
|
59
65
|
end
|
|
60
66
|
|
|
61
67
|
private
|
|
@@ -109,10 +115,27 @@ module Vedeu
|
|
|
109
115
|
rescue ModeSwitch
|
|
110
116
|
Terminal.switch_mode!
|
|
111
117
|
|
|
118
|
+
distributed_stop
|
|
119
|
+
|
|
112
120
|
Application.restart
|
|
113
121
|
|
|
114
122
|
end
|
|
115
123
|
|
|
124
|
+
# @return []
|
|
125
|
+
def distributed_start
|
|
126
|
+
distributed.start if configuration.drb?
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# @return []
|
|
130
|
+
def distributed_stop
|
|
131
|
+
distributed.stop if configuration.drb?
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# @return [Vedeu::Distributed::Application]
|
|
135
|
+
def distributed
|
|
136
|
+
@distributed ||= Vedeu::Distributed::Application.new(configuration)
|
|
137
|
+
end
|
|
138
|
+
|
|
116
139
|
# :nocov:
|
|
117
140
|
|
|
118
141
|
end # Application
|
|
@@ -105,6 +105,74 @@ module Vedeu
|
|
|
105
105
|
end
|
|
106
106
|
alias_method :run_once, :run_once!
|
|
107
107
|
|
|
108
|
+
# Sets boolean to run a DRb server.
|
|
109
|
+
#
|
|
110
|
+
# @example
|
|
111
|
+
# Vedeu.configure do
|
|
112
|
+
# drb!
|
|
113
|
+
# ...
|
|
114
|
+
#
|
|
115
|
+
# @param value [Boolean]
|
|
116
|
+
# @return [Boolean]
|
|
117
|
+
def drb!(value = true)
|
|
118
|
+
Vedeu.log("Configuration::API drb: #{value}")
|
|
119
|
+
|
|
120
|
+
options[:drb] = value
|
|
121
|
+
end
|
|
122
|
+
alias_method :drb, :drb!
|
|
123
|
+
|
|
124
|
+
# Sets the hostname or IP address of the DRb server.
|
|
125
|
+
#
|
|
126
|
+
# @example
|
|
127
|
+
# Vedeu.configure do
|
|
128
|
+
# drb_host 'localhost'
|
|
129
|
+
# ...
|
|
130
|
+
#
|
|
131
|
+
# @param hostname [String]
|
|
132
|
+
# @return [String]
|
|
133
|
+
def drb_host(hostname = '')
|
|
134
|
+
options[:drb_host] = hostname
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Sets the port of the DRb server.
|
|
138
|
+
#
|
|
139
|
+
# @example
|
|
140
|
+
# Vedeu.configure do
|
|
141
|
+
# drb_port 12345
|
|
142
|
+
# ...
|
|
143
|
+
#
|
|
144
|
+
# @param port [Fixnum|String]
|
|
145
|
+
# @return [String]
|
|
146
|
+
def drb_port(port = '')
|
|
147
|
+
options[:drb_port] = port
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Sets the height of the fake terminal in the DRb server.
|
|
151
|
+
#
|
|
152
|
+
# @example
|
|
153
|
+
# Vedeu.configure do
|
|
154
|
+
# drb_height 25
|
|
155
|
+
# ...
|
|
156
|
+
#
|
|
157
|
+
# @param height [Fixnum]
|
|
158
|
+
# @return [Fixnum]
|
|
159
|
+
def drb_height(height = 25)
|
|
160
|
+
options[:drb_height] = height
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# Sets the width of the fake terminal in the DRb server.
|
|
164
|
+
#
|
|
165
|
+
# @example
|
|
166
|
+
# Vedeu.configure do
|
|
167
|
+
# drb_width 80
|
|
168
|
+
# ...
|
|
169
|
+
#
|
|
170
|
+
# @param width [Fixnum]
|
|
171
|
+
# @return [Fixnum]
|
|
172
|
+
def drb_width(width = 80)
|
|
173
|
+
options[:drb_width] = width
|
|
174
|
+
end
|
|
175
|
+
|
|
108
176
|
# Sets the terminal mode to `cooked`. Default terminal mode is `raw`.
|
|
109
177
|
#
|
|
110
178
|
# @example
|
|
@@ -223,6 +291,45 @@ module Vedeu
|
|
|
223
291
|
options[:log] = filename
|
|
224
292
|
end
|
|
225
293
|
|
|
294
|
+
# Sets the value of STDIN.
|
|
295
|
+
#
|
|
296
|
+
# @example
|
|
297
|
+
# Vedeu.configure do
|
|
298
|
+
# stdin IO.console
|
|
299
|
+
# ...
|
|
300
|
+
#
|
|
301
|
+
# @param io [File|IO]
|
|
302
|
+
# @return [File|IO]
|
|
303
|
+
def stdin(io)
|
|
304
|
+
options[:stdin] = io
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
# Sets the value of STDOUT.
|
|
308
|
+
#
|
|
309
|
+
# @example
|
|
310
|
+
# Vedeu.configure do
|
|
311
|
+
# stdout IO.console
|
|
312
|
+
# ...
|
|
313
|
+
#
|
|
314
|
+
# @param io [File|IO]
|
|
315
|
+
# @return [File|IO]
|
|
316
|
+
def stdout(io)
|
|
317
|
+
options[:stdout] = io
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
# Sets the value of STDERR.
|
|
321
|
+
#
|
|
322
|
+
# @example
|
|
323
|
+
# Vedeu.configure do
|
|
324
|
+
# stderr IO.console
|
|
325
|
+
# ...
|
|
326
|
+
#
|
|
327
|
+
# @param io [File|IO]
|
|
328
|
+
# @return [File|IO]
|
|
329
|
+
def stderr(io)
|
|
330
|
+
options[:stderr] = io
|
|
331
|
+
end
|
|
332
|
+
|
|
226
333
|
# Sets the key used to exit the client application. The default is `q`.
|
|
227
334
|
#
|
|
228
335
|
# @example
|
|
@@ -114,6 +114,40 @@ module Vedeu
|
|
|
114
114
|
|
|
115
115
|
options[:log] = filename
|
|
116
116
|
end
|
|
117
|
+
|
|
118
|
+
opts.on('--drb', 'Run application with DRb on.') do
|
|
119
|
+
Vedeu.log("Configuration::CLI drb: true")
|
|
120
|
+
|
|
121
|
+
options[:drb] = true
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
opts.on('--drb-host', 'Set the hostname/IP for the DRb server.') do |hostname|
|
|
125
|
+
Vedeu.log("Configuration::CLI drb_host: #{hostname}")
|
|
126
|
+
|
|
127
|
+
#options[:drb] = true
|
|
128
|
+
options[:drb_host] = hostname
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
opts.on('--drb-port', 'Set the port for the DRb server.') do |port|
|
|
132
|
+
Vedeu.log("Configuration::CLI drb_port: #{port}")
|
|
133
|
+
|
|
134
|
+
#options[:drb] = true
|
|
135
|
+
options[:drb_port] = port
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
opts.on('--drb-height', 'Set the height for fake terminal of the DRb server.') do |height|
|
|
139
|
+
Vedeu.log("Configuration::CLI drb_height: #{height}")
|
|
140
|
+
|
|
141
|
+
#options[:drb] = true
|
|
142
|
+
options[:drb_height] = height
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
opts.on('--drb-width', 'Set the width for fake terminal of the DRb server.') do |width|
|
|
146
|
+
Vedeu.log("Configuration::CLI drb_width: #{width}")
|
|
147
|
+
|
|
148
|
+
#options[:drb] = true
|
|
149
|
+
options[:drb_width] = width
|
|
150
|
+
end
|
|
117
151
|
end
|
|
118
152
|
|
|
119
153
|
parser.parse!(args)
|
|
@@ -30,11 +30,15 @@ module Vedeu
|
|
|
30
30
|
# arguments provided.
|
|
31
31
|
#
|
|
32
32
|
# @param args [Array]
|
|
33
|
+
# @param opts [Hash]
|
|
34
|
+
# @option opts stdin [File|IO]
|
|
35
|
+
# @option opts stdout [File|IO]
|
|
36
|
+
# @option opts stderr [File|IO]
|
|
33
37
|
# @param block [Proc]
|
|
34
38
|
# @raise [InvalidSyntax] When the required block is not given.
|
|
35
39
|
# @return [Hash]
|
|
36
|
-
def configure(args = [], &block)
|
|
37
|
-
instance.configure(args, &block)
|
|
40
|
+
def configure(args = [], opts = {}, &block)
|
|
41
|
+
instance.configure(args, opts, &block)
|
|
38
42
|
end
|
|
39
43
|
|
|
40
44
|
# Returns the configuration singleton.
|
|
@@ -60,6 +64,42 @@ module Vedeu
|
|
|
60
64
|
end
|
|
61
65
|
alias_method :debug, :debug?
|
|
62
66
|
|
|
67
|
+
# Returns whether the DRb server is enabled or disabled. Default is false.
|
|
68
|
+
#
|
|
69
|
+
# @return [Boolean]
|
|
70
|
+
def drb?
|
|
71
|
+
instance.options[:drb]
|
|
72
|
+
end
|
|
73
|
+
alias_method :drb, :drb?
|
|
74
|
+
|
|
75
|
+
# Returns the hostname for the DRb server.
|
|
76
|
+
#
|
|
77
|
+
# @return [String]
|
|
78
|
+
def drb_host
|
|
79
|
+
instance.options[:drb_host]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Returns the port for the DRb server.
|
|
83
|
+
#
|
|
84
|
+
# @return [String]
|
|
85
|
+
def drb_port
|
|
86
|
+
instance.options[:drb_port]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Returns the height for the fake terminal in the DRb server.
|
|
90
|
+
#
|
|
91
|
+
# @return [Fixnum]
|
|
92
|
+
def drb_height
|
|
93
|
+
instance.options[:drb_height]
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Returns the width for the fake terminal in the DRb server.
|
|
97
|
+
#
|
|
98
|
+
# @return [Fixnum]
|
|
99
|
+
def drb_width
|
|
100
|
+
instance.options[:drb_width]
|
|
101
|
+
end
|
|
102
|
+
|
|
63
103
|
# Returns whether the application is interactive (required user input) or
|
|
64
104
|
# standalone (will run until terminates of natural causes.) Default is
|
|
65
105
|
# true; meaning the application will require user input.
|
|
@@ -87,7 +127,28 @@ module Vedeu
|
|
|
87
127
|
end
|
|
88
128
|
alias_method :once, :once?
|
|
89
129
|
|
|
90
|
-
# Returns
|
|
130
|
+
# Returns the redefined setting for STDIN.
|
|
131
|
+
#
|
|
132
|
+
# @return [File|IO]
|
|
133
|
+
def stdin
|
|
134
|
+
instance.options[:stdin]
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Returns the redefined setting for STDOUT.
|
|
138
|
+
#
|
|
139
|
+
# @return [File|IO]
|
|
140
|
+
def stdout
|
|
141
|
+
instance.options[:stdout]
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Returns the redefined setting for STDERR.
|
|
145
|
+
#
|
|
146
|
+
# @return [File|IO]
|
|
147
|
+
def stderr
|
|
148
|
+
instance.options[:stderr]
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Returns the redefined system keys for vital Vedeu functions.
|
|
91
152
|
#
|
|
92
153
|
# @return [Hash]
|
|
93
154
|
def system_keys
|
|
@@ -156,7 +217,9 @@ module Vedeu
|
|
|
156
217
|
# @param args [Array]
|
|
157
218
|
# @param block [Proc]
|
|
158
219
|
# @return [Hash]
|
|
159
|
-
def configure(args = [], &block)
|
|
220
|
+
def configure(args = [], opts = {}, &block)
|
|
221
|
+
@options.merge!(opts)
|
|
222
|
+
|
|
160
223
|
@options.merge!(Config::API.configure(&block)) if block_given?
|
|
161
224
|
|
|
162
225
|
@options.merge!(Config::CLI.configure(args)) if args.any?
|
|
@@ -183,9 +246,17 @@ module Vedeu
|
|
|
183
246
|
{
|
|
184
247
|
colour_mode: detect_colour_mode,
|
|
185
248
|
debug: false,
|
|
249
|
+
drb: false,
|
|
250
|
+
drb_host: nil,
|
|
251
|
+
drb_port: nil,
|
|
252
|
+
drb_height: 25,
|
|
253
|
+
drb_width: 80,
|
|
186
254
|
interactive: true,
|
|
187
255
|
log: '/tmp/vedeu.log',
|
|
188
256
|
once: false,
|
|
257
|
+
stdin: nil,
|
|
258
|
+
stdout: nil,
|
|
259
|
+
stderr: nil,
|
|
189
260
|
system_keys: Configuration.default_system_keys,
|
|
190
261
|
terminal_mode: :raw,
|
|
191
262
|
trace: false,
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require 'drb'
|
|
2
|
+
|
|
3
|
+
module Vedeu
|
|
4
|
+
|
|
5
|
+
module Distributed
|
|
6
|
+
|
|
7
|
+
# Orchestrates the running of the main application loop via the DRb server.
|
|
8
|
+
#
|
|
9
|
+
# @example
|
|
10
|
+
# app = Vedeu::Distributed::Application.start(configuration)
|
|
11
|
+
# app.input('a')
|
|
12
|
+
# app.output # => some output
|
|
13
|
+
# app.stop
|
|
14
|
+
#
|
|
15
|
+
# @api private
|
|
16
|
+
class Application
|
|
17
|
+
|
|
18
|
+
class << self
|
|
19
|
+
|
|
20
|
+
# @param configuration [Vedeu::Configuration]
|
|
21
|
+
# @return []
|
|
22
|
+
def start(configuration)
|
|
23
|
+
new(configuration).start
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @param configuration [Vedeu::Configuration]
|
|
29
|
+
# @return []
|
|
30
|
+
def initialize(configuration)
|
|
31
|
+
@configuration = configuration
|
|
32
|
+
|
|
33
|
+
# $SAFE = 1 # stop eval and friends
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @return []
|
|
37
|
+
def start
|
|
38
|
+
Vedeu.bind(:_output_) { |data| self.output(data) }
|
|
39
|
+
|
|
40
|
+
Vedeu.log("Started distributed server: '#{uri}'")
|
|
41
|
+
|
|
42
|
+
DRb.start_service(uri, self)
|
|
43
|
+
|
|
44
|
+
self
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# @param data []
|
|
48
|
+
# @return []
|
|
49
|
+
def input(data)
|
|
50
|
+
Vedeu.log("<<< DRb Input")
|
|
51
|
+
|
|
52
|
+
Vedeu.trigger(:_keypress_, data)
|
|
53
|
+
end
|
|
54
|
+
alias_method :read, :input
|
|
55
|
+
|
|
56
|
+
# @param data []
|
|
57
|
+
# @return []
|
|
58
|
+
def output(data = nil)
|
|
59
|
+
Vedeu.log(">>> DRb Output")
|
|
60
|
+
|
|
61
|
+
data
|
|
62
|
+
end
|
|
63
|
+
alias_method :write, :output
|
|
64
|
+
|
|
65
|
+
# @return []
|
|
66
|
+
def stop
|
|
67
|
+
Vedeu.log("Stopping distributed server: '#{uri}'")
|
|
68
|
+
|
|
69
|
+
DRb.stop_service
|
|
70
|
+
|
|
71
|
+
DRb.thread.join
|
|
72
|
+
rescue NoMethodError # raised when #join is called on NilClass.
|
|
73
|
+
# ...
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
attr_reader :configuration
|
|
80
|
+
|
|
81
|
+
# @return [String]
|
|
82
|
+
def uri
|
|
83
|
+
Vedeu::Distributed::Uri.new(configuration.drb_host,
|
|
84
|
+
configuration.drb_port).to_s
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
end # Application
|
|
88
|
+
|
|
89
|
+
end # Distributed
|
|
90
|
+
|
|
91
|
+
end # Vedeu
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require 'drb'
|
|
2
|
+
|
|
3
|
+
module Vedeu
|
|
4
|
+
|
|
5
|
+
module Distributed
|
|
6
|
+
|
|
7
|
+
# @example
|
|
8
|
+
# client = Vedeu::Distributed::Client.new("druby://localhost:21420")
|
|
9
|
+
# client.input('a')
|
|
10
|
+
# client.output # => 'some content...'
|
|
11
|
+
# client.stop
|
|
12
|
+
#
|
|
13
|
+
class Client
|
|
14
|
+
|
|
15
|
+
# @param uri [String]
|
|
16
|
+
# @return [Client]
|
|
17
|
+
def initialize(uri)
|
|
18
|
+
@uri = uri.to_s
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @param data [String|Symbol]
|
|
22
|
+
# @return []
|
|
23
|
+
def input(data)
|
|
24
|
+
server.input(data)
|
|
25
|
+
end
|
|
26
|
+
alias_method :read, :input
|
|
27
|
+
|
|
28
|
+
# @return []
|
|
29
|
+
def output
|
|
30
|
+
server.output
|
|
31
|
+
end
|
|
32
|
+
alias_method :write, :output
|
|
33
|
+
|
|
34
|
+
# @return []
|
|
35
|
+
def start
|
|
36
|
+
# client should be able to start a server, but what if one already
|
|
37
|
+
# exists?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @return []
|
|
41
|
+
def stop
|
|
42
|
+
server.stop
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
attr_reader :uri
|
|
48
|
+
|
|
49
|
+
# @return []
|
|
50
|
+
def server
|
|
51
|
+
@server ||= DRbObject.new_with_uri(uri)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end # Client
|
|
55
|
+
|
|
56
|
+
end # Distributed
|
|
57
|
+
|
|
58
|
+
end # Vedeu
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
require 'pty'
|
|
2
|
+
require 'vedeu/distributed/test_application'
|
|
3
|
+
|
|
4
|
+
# app_config = Vedeu::TestApplication.build
|
|
5
|
+
# timestamp = Time.now.to_i
|
|
6
|
+
# file = File.new("/tmp/foo_#{timestamp}", "w")
|
|
7
|
+
# file.write(app_config)
|
|
8
|
+
# file.close
|
|
9
|
+
|
|
10
|
+
# cmd = "ruby #{file.path}"
|
|
11
|
+
# begin
|
|
12
|
+
# PTY.spawn(cmd) do |stdin, stdout, pid|
|
|
13
|
+
# begin
|
|
14
|
+
# # Do stuff with the output here. Just printing to show it works
|
|
15
|
+
# stdin.each { |line| print line }
|
|
16
|
+
# rescue Errno::EIO
|
|
17
|
+
# puts "Errno:EIO error, but this probably just means " +
|
|
18
|
+
# "that the process has finished giving output"
|
|
19
|
+
# end
|
|
20
|
+
# end
|
|
21
|
+
# rescue PTY::ChildExited
|
|
22
|
+
# puts "The child process exited!"
|
|
23
|
+
# ensure
|
|
24
|
+
# File.unlink("/tmp/foo_#{timestamp}")
|
|
25
|
+
# end
|
|
26
|
+
|
|
27
|
+
module Vedeu
|
|
28
|
+
|
|
29
|
+
# @example
|
|
30
|
+
# Vedeu::TestApplication.build
|
|
31
|
+
#
|
|
32
|
+
class Subprocess
|
|
33
|
+
|
|
34
|
+
# @param application [Vedeu::TestApplication]
|
|
35
|
+
# @return []
|
|
36
|
+
def self.execute!(application)
|
|
37
|
+
new(application).execute!
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @param application [Vedeu::TestApplication]
|
|
41
|
+
# @return [Vedeu::Subprocess]
|
|
42
|
+
def initialize(application)
|
|
43
|
+
@application = application
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @return []
|
|
47
|
+
def execute!
|
|
48
|
+
file_open && file_write && file_close
|
|
49
|
+
|
|
50
|
+
begin
|
|
51
|
+
PTY.spawn(command) do |stdin, stdout, pid|
|
|
52
|
+
begin
|
|
53
|
+
stdin.each { |line| print line }
|
|
54
|
+
|
|
55
|
+
rescue Errno::EIO
|
|
56
|
+
puts 'Errno::EIO: Process may have stopped giving output.'
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
rescue PTY::ChildExited
|
|
61
|
+
puts 'PTY::ChildExited: Process exited.'
|
|
62
|
+
|
|
63
|
+
ensure
|
|
64
|
+
file_unlink
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
private
|
|
70
|
+
|
|
71
|
+
attr_reader :application
|
|
72
|
+
|
|
73
|
+
# @return [String]
|
|
74
|
+
def command
|
|
75
|
+
"ruby #{file_path}"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# @return []
|
|
79
|
+
def file_write
|
|
80
|
+
file.write(application)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# @return []
|
|
84
|
+
def file_close
|
|
85
|
+
file.close
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# @return []
|
|
89
|
+
def file_unlink
|
|
90
|
+
File.unlink("/tmp/foo_#{timestamp}")
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# return [String]
|
|
94
|
+
def file_path
|
|
95
|
+
file.path
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# @return []
|
|
99
|
+
def file_open
|
|
100
|
+
@file ||= File.new("/tmp/foo_#{timestamp}", "w")
|
|
101
|
+
end
|
|
102
|
+
alias_method :file, :file_open
|
|
103
|
+
|
|
104
|
+
# return [Fixnum]
|
|
105
|
+
def timestamp
|
|
106
|
+
@timestamp ||= Time.now.to_i
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
end # Subprocess
|
|
110
|
+
|
|
111
|
+
end # Vedeu
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
lib_dir = "<%= @object.lib_dir %>"
|
|
2
|
+
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
|
|
3
|
+
|
|
4
|
+
require 'vedeu'
|
|
5
|
+
|
|
6
|
+
class VedeuTestApplication
|
|
7
|
+
# include Vedeu
|
|
8
|
+
|
|
9
|
+
<%= @object.configuration -%>
|
|
10
|
+
|
|
11
|
+
<%= @object.events -%>
|
|
12
|
+
|
|
13
|
+
<%= @object.borders -%>
|
|
14
|
+
|
|
15
|
+
<%= @object.geometries -%>
|
|
16
|
+
|
|
17
|
+
<%= @object.interfaces -%>
|
|
18
|
+
|
|
19
|
+
<%= @object.keymaps -%>
|
|
20
|
+
|
|
21
|
+
<%= @object.menus -%>
|
|
22
|
+
|
|
23
|
+
<%= @object.views -%>
|
|
24
|
+
|
|
25
|
+
def self.start(argv = ARGV,
|
|
26
|
+
stdin = STDIN,
|
|
27
|
+
stdout = STDOUT,
|
|
28
|
+
stderr = STDERR,
|
|
29
|
+
kernel = Kernel)
|
|
30
|
+
Vedeu::Launcher.new(argv, stdin, stdout, stderr, kernel).execute!
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
VedeuTestApplication.start(ARGV)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Vedeu.border 'test_interface' do
|
|
2
|
+
# Define colour and style of border
|
|
3
|
+
colour foreground: '#ffff00', background: '#0000ff'
|
|
4
|
+
style 'normal'
|
|
5
|
+
|
|
6
|
+
# Define visibility of border
|
|
7
|
+
show_bottom!
|
|
8
|
+
show_left!
|
|
9
|
+
show_right!
|
|
10
|
+
show_top!
|
|
11
|
+
|
|
12
|
+
# Define characters used to draw border
|
|
13
|
+
bottom_right '+'
|
|
14
|
+
bottom_left '+'
|
|
15
|
+
horizontal '-'
|
|
16
|
+
top_right '+'
|
|
17
|
+
top_left '+'
|
|
18
|
+
vertical '|'
|
|
19
|
+
end
|