dia 2.0.2 → 2.1.0
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.
- data/Changelog +17 -0
- data/dia.gemspec +3 -7
- data/lib/dia.rb +1 -1
- data/lib/dia/ruby_block.rb +68 -36
- data/test/suite/lib/dia/RubyBlock#exception_raised?.rb +8 -8
- data/test/suite/lib/dia/RubyBlock#value.rb +30 -0
- metadata +7 -4
data/Changelog
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
2010-08-12 Robert Gleeson <rob@flowof.info> (v2.1.0)
|
2
|
+
|
3
|
+
* Implemented Dia::RubyBlock#value.
|
4
|
+
|
5
|
+
* Dia::RubyBlock#exception_raised? is deprecated.
|
6
|
+
Dia::RubyBlock#exception_rescued? should be used instead.
|
7
|
+
|
8
|
+
* Dia::Rubyblock#redirect_stdout=, Dia::RubyBlock#redirect_stderr=,
|
9
|
+
and Dia::RubyBlock#rescue_exception= are now documented as setters.
|
10
|
+
|
11
|
+
* Correct inconsistencies in the documentation for
|
12
|
+
Dia::RubyBlock#redirect_stdout= , Dia::RubyBlock#redirect_stderr=,
|
13
|
+
Dia::RubyBlock#exception_rescued? (formerly Dia::RubyBlock#exception_raised?),
|
14
|
+
Dia::RubyBlock#rescue_exception?, Dia::RubyBlock#rescue_exception=,
|
15
|
+
Dia::RubyBlock#exception.
|
16
|
+
|
17
|
+
* Added Changelog to track changes.
|
data/dia.gemspec
CHANGED
@@ -15,15 +15,11 @@ Gem::Specification.new do |s|
|
|
15
15
|
The Ruby API was designed to be simple, and a joy to use.
|
16
16
|
I hope you feel the same way :-)}
|
17
17
|
|
18
|
-
s.summary =
|
19
|
-
operating systems, Dia can create dynamic and robust sandbox environments
|
20
|
-
for applications and for blocks of ruby code.
|
21
|
-
The Ruby API was designed to be simple, and a joy to use.
|
22
|
-
I hope you feel the same way :-)}
|
23
|
-
|
18
|
+
s.summary = s.description
|
24
19
|
|
25
20
|
s.require_paths = ["lib"]
|
26
|
-
s.files = Dir["lib/**/*.rb"] + Dir["test/**/*.rb"] + %w(COPYING README.mkd
|
21
|
+
s.files = Dir["lib/**/*.rb"] + Dir["test/**/*.rb"] + %w(COPYING Changelog README.mkd
|
22
|
+
dia.gemspec)
|
27
23
|
s.test_files = Dir["test/**/*.rb"]
|
28
24
|
|
29
25
|
|
data/lib/dia.rb
CHANGED
data/lib/dia/ruby_block.rb
CHANGED
@@ -11,6 +11,10 @@ module Dia
|
|
11
11
|
attr_reader :stdout
|
12
12
|
attr_reader :exception
|
13
13
|
|
14
|
+
attr_writer :redirect_stderr
|
15
|
+
attr_writer :redirect_stdout
|
16
|
+
attr_writer :rescue_exception
|
17
|
+
|
14
18
|
alias_method :e, :exception
|
15
19
|
|
16
20
|
# @param [String] Profile Accepts one of five profiles which can be found
|
@@ -34,9 +38,8 @@ module Dia
|
|
34
38
|
end
|
35
39
|
|
36
40
|
|
37
|
-
# Provides access to the Standard Output stream of the process last used to execute
|
38
|
-
#
|
39
|
-
# This feature is disabled by default.
|
41
|
+
# Provides access to the Standard Output stream of the process that was last used to execute
|
42
|
+
# a sandbox. This feature is disabled by default.
|
40
43
|
#
|
41
44
|
# @return [String] Returns the contents of stdout as a String.
|
42
45
|
#
|
@@ -59,7 +62,7 @@ module Dia
|
|
59
62
|
@stdout
|
60
63
|
end
|
61
64
|
|
62
|
-
# This method can enable or disable a feature that will
|
65
|
+
# This method can enable or disable a feature that will redirect Standard Output
|
63
66
|
# in the process that is spawned to execute a sandbox.
|
64
67
|
#
|
65
68
|
# @param [true] Enable Passing true will enable the redirection of Standard Output.
|
@@ -90,9 +93,8 @@ module Dia
|
|
90
93
|
!!@redirect_stdout
|
91
94
|
end
|
92
95
|
|
93
|
-
# Provides access to the Standard Error stream of the process last used to execute
|
94
|
-
# a sandbox.
|
95
|
-
# This feature is disabled by default.
|
96
|
+
# Provides access to the Standard Error stream of the process that was last used to execute
|
97
|
+
# a sandbox. This feature is disabled by default.
|
96
98
|
#
|
97
99
|
# @return [String] Returns the contents of stderr as a String.
|
98
100
|
#
|
@@ -114,7 +116,7 @@ module Dia
|
|
114
116
|
@stderr
|
115
117
|
end
|
116
118
|
|
117
|
-
# This method can enable or disable a feature that will
|
119
|
+
# This method can enable or disable a feature that will redirect Standard Error output
|
118
120
|
# in the process that is spawned to execute a sandbox.
|
119
121
|
#
|
120
122
|
# @param [true] Enable Passing true will enable the redirection of Standard Error output.
|
@@ -145,44 +147,52 @@ module Dia
|
|
145
147
|
!!@redirect_stderr
|
146
148
|
end
|
147
149
|
|
148
|
-
# This method will tell you if an exception has been
|
150
|
+
# This method will tell you if an exception has been rescued in the process that is
|
149
151
|
# spawned to execute a sandbox.
|
150
152
|
#
|
151
|
-
# @return [true] Returns true when an exception has been
|
153
|
+
# @return [true] Returns true when an exception has been rescued.
|
152
154
|
#
|
153
|
-
# @return [false] Returns false when an exception has not been
|
155
|
+
# @return [false] Returns false when an exception has not been rescued.
|
154
156
|
#
|
155
|
-
# @return [false] Returns false if Dia was not set to
|
157
|
+
# @return [false] Returns false if Dia was not set to rescue exceptions
|
156
158
|
# before a call to {#run} or {#run_nonblock}.
|
157
159
|
#
|
158
|
-
# @see #rescue_exception= The
|
160
|
+
# @see #rescue_exception= The rescue of exceptions can be enabled or disabled through
|
159
161
|
# #rescue_exception=
|
160
162
|
#
|
161
163
|
# @see #exception An exception can be accessed through the #exception
|
162
164
|
# method.
|
165
|
+
def exception_rescued?
|
166
|
+
!!exception
|
167
|
+
end
|
168
|
+
|
169
|
+
# @return [Boolean]
|
163
170
|
#
|
164
|
-
#
|
171
|
+
# @deprecated This method is deprecated. {Dia::RubyBlock#exception_rescued?}
|
172
|
+
# should be used instead.
|
165
173
|
def exception_raised?
|
174
|
+
$stderr.puts 'WARNING: Dia::RubyBlock#exception_raised? is deprecated and will be ' \
|
175
|
+
'removed from Dia in a future release.'
|
166
176
|
!!exception
|
167
177
|
end
|
168
178
|
|
169
|
-
# This method will tell you if an exception
|
170
|
-
#
|
171
|
-
#
|
172
|
-
# @return [true] Returns true when exceptions are being
|
179
|
+
# This method will tell you if an exception will be rescued in the process that is
|
180
|
+
# spawned to execute a sandbox.
|
181
|
+
#
|
182
|
+
# @return [true] Returns true when exceptions are being rescued.
|
173
183
|
#
|
174
184
|
# @return [false] Returns false when are exceptions are not being
|
175
|
-
#
|
185
|
+
# rescued.
|
176
186
|
# @since 2.0.0
|
177
187
|
#
|
178
|
-
# @see #rescue_exception= The
|
188
|
+
# @see #rescue_exception= The rescue of exceptions can be enabled or disabled through
|
179
189
|
# #rescue_exception=
|
180
190
|
def rescue_exception?
|
181
191
|
!!@rescue
|
182
192
|
end
|
183
193
|
|
184
|
-
# This method can enable or disable a feature that will
|
185
|
-
#
|
194
|
+
# This method can enable or disable a feature that will try to rescue exceptions
|
195
|
+
# that are raised in the process that is spawned to execute a sandbox.
|
186
196
|
#
|
187
197
|
# @param [true] Enable Passing true will enable the capture of exceptions.
|
188
198
|
#
|
@@ -198,22 +208,22 @@ module Dia
|
|
198
208
|
end
|
199
209
|
|
200
210
|
|
201
|
-
# Provides access to the data of an exception object
|
202
|
-
# execute a sandbox.
|
203
|
-
#
|
204
|
-
#
|
211
|
+
# Provides access to the data of an exception object that has been rescued in the process
|
212
|
+
# that was last used to execute a sandbox. This feature is disabled by default.
|
213
|
+
#
|
205
214
|
# @return [Dia::ExceptionStruct] Returns an instance of {ExceptionStruct} when an
|
206
|
-
# exception has been
|
215
|
+
# exception has been rescued.
|
207
216
|
#
|
208
217
|
# @return [nil] Returns nil when there is no exception available.
|
209
218
|
#
|
210
|
-
# @return [nil] Returns nil if Dia was not set to
|
219
|
+
# @return [nil] Returns nil if Dia was not set to rescue exceptions before a
|
211
220
|
# call to {#run} or {#run_nonblock}.
|
212
221
|
#
|
213
|
-
# @see #rescue_exception= The
|
222
|
+
# @see #rescue_exception= The rescue of exceptions can be enabled or disabled through
|
214
223
|
# #rescue_exception=
|
215
224
|
#
|
216
|
-
# @see Dia::ExceptionStruct Dia::ExceptionStruct
|
225
|
+
# @see Dia::ExceptionStruct Dia::ExceptionStruct
|
226
|
+
#
|
217
227
|
# @since 1.5
|
218
228
|
def exception
|
219
229
|
if pipes_readable?(@pipes[:exception_reader], @pipes[:exception_writer])
|
@@ -226,6 +236,21 @@ module Dia
|
|
226
236
|
@e
|
227
237
|
end
|
228
238
|
|
239
|
+
# Provides access to the return value of the block that has been supplied to the constructor.
|
240
|
+
#
|
241
|
+
# @return [String] Returns the result of #inspect on the return value of the block
|
242
|
+
# that has been executed.
|
243
|
+
#
|
244
|
+
# @return [nil] Returns nil if {#run} or {#run_nonblock} has not been called yet.
|
245
|
+
def value
|
246
|
+
if pipes_readable?(@pipes[:return_reader], @pipes[:return_writer])
|
247
|
+
@pipes[:return_writer].close
|
248
|
+
@return = @pipes[:return_reader].read
|
249
|
+
@pipes[:return_reader].close
|
250
|
+
end
|
251
|
+
@return
|
252
|
+
end
|
253
|
+
|
229
254
|
# The run method will spawn a child process and execute the block supplied to the constructor
|
230
255
|
# in a sandbox.
|
231
256
|
# This method will block. See {#run_nonblock} for the non-blocking form of this method.
|
@@ -233,7 +258,7 @@ module Dia
|
|
233
258
|
# **Side Effects:**
|
234
259
|
#
|
235
260
|
# * When this method is called, it will reset the instance variables returned by {#exception},
|
236
|
-
# {#stdout}, and {#
|
261
|
+
# {#stdout}, {#stderr}, and {#value} to nil.
|
237
262
|
#
|
238
263
|
# @param [Arguments] Arguments A variable amount of arguments that will be passed onto the
|
239
264
|
# the block supplied to the constructor.
|
@@ -268,7 +293,7 @@ module Dia
|
|
268
293
|
private
|
269
294
|
# @api private
|
270
295
|
def launch(*args)
|
271
|
-
@e = @stdout = @stderr =
|
296
|
+
@e = @stdout = @stderr = @return = nil
|
272
297
|
close_pipes_if_needed
|
273
298
|
open_pipes_if_needed
|
274
299
|
|
@@ -278,7 +303,7 @@ module Dia
|
|
278
303
|
if @rescue
|
279
304
|
begin
|
280
305
|
initialize_sandbox
|
281
|
-
@proc.call(*args)
|
306
|
+
write_return_value(@proc.call(*args))
|
282
307
|
rescue SystemExit, SignalException, NoMemoryError => e
|
283
308
|
raise(e)
|
284
309
|
rescue Exception => e
|
@@ -296,7 +321,7 @@ module Dia
|
|
296
321
|
else
|
297
322
|
begin
|
298
323
|
initialize_sandbox
|
299
|
-
@proc.call(*args)
|
324
|
+
write_return_value(@proc.call(*args))
|
300
325
|
ensure
|
301
326
|
write_stdout_and_stderr_if_needed
|
302
327
|
close_pipes_if_needed
|
@@ -305,6 +330,12 @@ module Dia
|
|
305
330
|
end
|
306
331
|
end
|
307
332
|
|
333
|
+
def write_return_value(result)
|
334
|
+
@pipes[:return_reader].close
|
335
|
+
@pipes[:return_writer].write(result.inspect)
|
336
|
+
@pipes[:return_writer].close
|
337
|
+
end
|
338
|
+
|
308
339
|
# @api private
|
309
340
|
def write_stdout_and_stderr_if_needed
|
310
341
|
if @redirect_stdout
|
@@ -333,6 +364,7 @@ module Dia
|
|
333
364
|
|
334
365
|
# @api private
|
335
366
|
def open_pipes_if_needed
|
367
|
+
@pipes[:return_reader] , @pipes[:return_writer] = IO.pipe
|
336
368
|
@pipes[:exception_reader], @pipes[:exception_writer] = IO.pipe if @rescue
|
337
369
|
@pipes[:stdout_reader] , @pipes[:stdout_writer] = IO.pipe if @redirect_stdout
|
338
370
|
@pipes[:stderr_reader] , @pipes[:stderr_writer] = IO.pipe if @redirect_stderr
|
@@ -341,8 +373,8 @@ module Dia
|
|
341
373
|
# @api private
|
342
374
|
def write_exception(e)
|
343
375
|
@pipes[:exception_writer].write(Marshal.dump({ :klass => e.class.to_s ,
|
344
|
-
|
345
|
-
|
376
|
+
:backtrace => e.backtrace.join("\n"),
|
377
|
+
:message => e.message.to_s }) )
|
346
378
|
end
|
347
379
|
|
348
380
|
# @api private
|
@@ -1,17 +1,17 @@
|
|
1
1
|
suite('RubyBlock') do
|
2
|
-
suite('#
|
2
|
+
suite('#exception_rescued?') do
|
3
3
|
suite('Return values') do
|
4
4
|
|
5
|
-
exercise('When an exception has been
|
5
|
+
exercise('When an exception has been rescued.') do
|
6
6
|
dia = Dia::RubyBlock.new(Dia::Profiles::NO_INTERNET) do
|
7
7
|
raise(StandardError, "raised")
|
8
8
|
end
|
9
9
|
dia.rescue_exception = true
|
10
10
|
dia.run
|
11
|
-
@result = dia.
|
11
|
+
@result = dia.exception_rescued?
|
12
12
|
end
|
13
13
|
|
14
|
-
verify('#
|
14
|
+
verify('#exception_rescued? returns true.') do
|
15
15
|
@result == true
|
16
16
|
end
|
17
17
|
|
@@ -19,10 +19,10 @@ suite('RubyBlock') do
|
|
19
19
|
dia = Dia::RubyBlock.new(Dia::Profiles::NO_INTERNET) { }
|
20
20
|
dia.rescue_exception = true
|
21
21
|
dia.run
|
22
|
-
@result = dia.
|
22
|
+
@result = dia.exception_rescued?
|
23
23
|
end
|
24
24
|
|
25
|
-
verify('#
|
25
|
+
verify('#exception_rescued? returns false.') do
|
26
26
|
@result == false
|
27
27
|
end
|
28
28
|
|
@@ -33,10 +33,10 @@ suite('RubyBlock') do
|
|
33
33
|
dia.rescue_exception = false # default, but lets be explicit.
|
34
34
|
dia.redirect_stderr = true # I don't want the tests to be flooded with a backtrace.
|
35
35
|
dia.run
|
36
|
-
@result = dia.
|
36
|
+
@result = dia.exception_rescued?
|
37
37
|
end
|
38
38
|
|
39
|
-
verify('#
|
39
|
+
verify('#exception_rescued? returns false') do
|
40
40
|
@result == false
|
41
41
|
end
|
42
42
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
suite('RubyBlock') do
|
2
|
+
suite('#value') do
|
3
|
+
suite('Return values') do
|
4
|
+
|
5
|
+
exercise('When #value has finished executing.') do
|
6
|
+
dia = Dia::RubyBlock.new(Dia::Profiles::NO_INTERNET) do
|
7
|
+
1
|
8
|
+
end
|
9
|
+
dia.run
|
10
|
+
@result = dia.value
|
11
|
+
end
|
12
|
+
|
13
|
+
verify('#value returns the return value of the executed block.') do
|
14
|
+
@result == "1"
|
15
|
+
end
|
16
|
+
|
17
|
+
exercise('When #run or #run_nonblock has not been called.') do
|
18
|
+
dia = Dia::RubyBlock.new(Dia::Profiles::NO_INTERNET) do
|
19
|
+
1
|
20
|
+
end
|
21
|
+
@result = dia.value
|
22
|
+
end
|
23
|
+
|
24
|
+
verify('#value returns nil.') do
|
25
|
+
@result == nil
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 2
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
|
9
|
-
version: 2.0.2
|
9
|
+
version: 2.1.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Robert Gleeson
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-08-12 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -80,18 +80,20 @@ files:
|
|
80
80
|
- test/suite/lib/dia/RubyBlock#run_nonblock.rb
|
81
81
|
- test/suite/lib/dia/RubyBlock#stderr.rb
|
82
82
|
- test/suite/lib/dia/RubyBlock#stdout.rb
|
83
|
+
- test/suite/lib/dia/RubyBlock#value.rb
|
83
84
|
- test/suite/lib/dia/SharedFeatures#exit_status.rb
|
84
85
|
- test/suite/lib/dia/SharedFeatures#pid.rb
|
85
86
|
- test/suite/lib/dia/SharedFeatures#running?.rb
|
86
87
|
- test/suite/lib/dia/SharedFeatures#terminate.rb
|
87
88
|
- COPYING
|
89
|
+
- Changelog
|
88
90
|
- README.mkd
|
89
91
|
- dia.gemspec
|
90
92
|
has_rdoc: yard
|
91
93
|
homepage:
|
92
94
|
licenses: []
|
93
95
|
|
94
|
-
post_install_message: " -------------------------------------------------------------------------------- \n Thanks for installing Dia, 2.0
|
96
|
+
post_install_message: " -------------------------------------------------------------------------------- \n Thanks for installing Dia, 2.1.0! \n The >=2.0.0 releases are not backward compatiable with the 1.0 series.\n \n Resources: \n * API Documentation http://yardoc.org/docs/robgleeson-Dia/\n * Github http://github.com/robgleeson/dia \n * Mailing List http://groups.google.com/group/ruby-dia\n\n Release notes are available at the mailing list.\n\n Happy Hacking!\n -------------------------------------------------------------------------------- \n"
|
95
97
|
rdoc_options: []
|
96
98
|
|
97
99
|
require_paths:
|
@@ -133,6 +135,7 @@ test_files:
|
|
133
135
|
- test/suite/lib/dia/RubyBlock#run_nonblock.rb
|
134
136
|
- test/suite/lib/dia/RubyBlock#stderr.rb
|
135
137
|
- test/suite/lib/dia/RubyBlock#stdout.rb
|
138
|
+
- test/suite/lib/dia/RubyBlock#value.rb
|
136
139
|
- test/suite/lib/dia/SharedFeatures#exit_status.rb
|
137
140
|
- test/suite/lib/dia/SharedFeatures#pid.rb
|
138
141
|
- test/suite/lib/dia/SharedFeatures#running?.rb
|