procemon 0.7.0 → 0.8.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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZWQ5YTU2MGNhNzg5MTRlMTUzNzJjMmM0ZjQzYzhlZjBkMjMzOGI0NA==
4
+ NTZjMGIwYmVjZDYxNWVmN2EwYmNlMzMyZDE3M2Y4ZGViZWQ2MDBhOA==
5
5
  data.tar.gz: !binary |-
6
- MzEwYjk4NjZiZGJjN2YwMmNmOGQ5YmM3ZGNjMjlmMjE4ZDg2Y2IxMg==
6
+ Nzg1YTNjNDk3ZjBkYjAzNjc1NTI0Njc2ZDkzODg0ZDBkNWNkNTUxNw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MmEzMGE5NjcyMWE3YTNlOWM2ZWIwYTNiYTIyYzdiNGU1YjA3NWNhYTI0YjJm
10
- YzdhMjI0MTMzMTBkMWVjYTI5OGMwZDQyZjNkNTUyMDAzOWE5NWE0NzM2Mjc4
11
- M2FkYTYwNDRmNDlkODdjOGQ2OGFlNTk5MGI0NTU2NjI4NjBmYzQ=
9
+ Njg5N2FlN2Y4OTVjNGU0NjM1YjYyYWZhNzVhMjE1YzU2OGQ1MTgzOGUwOTJi
10
+ ZDU4ZmQwOTczNzVkMjViMGExOTkyY2FlODVhYmUwMzQyNDEwMDM3NGEwNzlk
11
+ ZTUxM2Y5N2Q0YjgwZDcyNzBmYjVkMzk1NTViN2M0ZTEzMzU3YmU=
12
12
  data.tar.gz: !binary |-
13
- M2M4ZjJlOThmNjE3ZWJkNzk3NDM5MTAxMzZjN2ZmYmQ4YTEzY2Y0ZTc5ZDMx
14
- MDIwZjI2NjE5MTY3ZjY5Mzk3NGJkYTk0YTZiOGNkYWUzMGQ2NjZhNjY0NGZi
15
- ZDQ1MjhjMmRhMDczMGVkMzI5OTNmYWIyZmY0YmI2Zjc3YTYwZTg=
13
+ NTdlODdlMjdhZDQ5YjMwOGNlZmNiZDMzMTBiNTkwMzgzOTRlMzk1MTE2MGVk
14
+ NTE4MzNmYTVjNDQ1Y2FkNTE3M2QwZWNhNmIxNTVhY2EwNDIzMGQ2NzhhZDJl
15
+ NGIzNmU0N2E1ZjA3ZTNiOTJjMjcwMDY0NmQ4NzgxMjMxZTMyYjI=
data/Gemfile CHANGED
@@ -1,14 +1,2 @@
1
- source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
- gemspec
6
-
7
- # Add dependencies to develop your gem here.
8
- # Include everything needed to run rake, tests, features, etc.
9
- group :development do
10
- gem "shoulda", ">= 0"
11
- gem "rdoc", "~> 3.12"
12
- gem "bundler", "~> 1.0"
13
- gem "jeweler", "~> 1.8.7"
14
- end
1
+ source :rubygems
2
+ gemspec
data/Gemfile.lock CHANGED
@@ -1,72 +1,20 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ procemon (0.7.0)
5
+ asynchronous
6
+ loader
7
+ sourcerer
8
+
1
9
  GEM
2
10
  remote: http://rubygems.org/
3
11
  specs:
4
- activesupport (4.0.0)
5
- i18n (~> 0.6, >= 0.6.4)
6
- minitest (~> 4.2)
7
- multi_json (~> 1.3)
8
- thread_safe (~> 0.1)
9
- tzinfo (~> 0.3.37)
10
- addressable (2.3.5)
11
- atomic (1.1.14)
12
- builder (3.2.2)
13
- faraday (0.8.8)
14
- multipart-post (~> 1.2.0)
15
- git (1.2.6)
16
- github_api (0.10.1)
17
- addressable
18
- faraday (~> 0.8.1)
19
- hashie (>= 1.2)
20
- multi_json (~> 1.4)
21
- nokogiri (~> 1.5.2)
22
- oauth2
23
- hashie (2.0.5)
24
- highline (1.6.20)
25
- httpauth (0.2.0)
26
- i18n (0.6.5)
27
- jeweler (1.8.8)
28
- builder
29
- bundler (~> 1.0)
30
- git (>= 1.2.5)
31
- github_api (= 0.10.1)
32
- highline (>= 1.6.15)
33
- nokogiri (= 1.5.10)
34
- rake
35
- rdoc
36
- json (1.8.0)
37
- jwt (0.1.8)
38
- multi_json (>= 1.5)
39
- minitest (4.7.5)
40
- multi_json (1.8.2)
41
- multi_xml (0.5.5)
42
- multipart-post (1.2.0)
43
- nokogiri (1.5.10)
44
- oauth2 (0.9.2)
45
- faraday (~> 0.8)
46
- httpauth (~> 0.2)
47
- jwt (~> 0.1.4)
48
- multi_json (~> 1.0)
49
- multi_xml (~> 0.5)
50
- rack (~> 1.2)
51
- rack (1.5.2)
52
- rake (10.1.0)
53
- rdoc (3.12.2)
54
- json (~> 1.4)
55
- shoulda (3.5.0)
56
- shoulda-context (~> 1.0, >= 1.0.1)
57
- shoulda-matchers (>= 1.4.1, < 3.0)
58
- shoulda-context (1.1.5)
59
- shoulda-matchers (2.4.0)
60
- activesupport (>= 3.0.0)
61
- thread_safe (0.1.3)
62
- atomic
63
- tzinfo (0.3.38)
12
+ asynchronous (1.0.3)
13
+ loader (1.0.2)
14
+ sourcerer (0.5.2)
64
15
 
65
16
  PLATFORMS
66
17
  ruby
67
18
 
68
19
  DEPENDENCIES
69
- bundler (~> 1.0)
70
- jeweler (~> 1.8.7)
71
- rdoc (~> 3.12)
72
- shoulda
20
+ procemon!
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.0
1
+ 0.8.0
@@ -91,6 +91,7 @@ module Mac
91
91
  end
92
92
 
93
93
  RE = %r/(?:[^:\-]|\A)(?:[0-9A-F][0-9A-F][:\-]){5}[0-9A-F][0-9A-F](?:[^:\-]|\Z)/io
94
+
94
95
  end
95
96
 
96
97
  MacAddr = Macaddr = Mac
@@ -59,6 +59,8 @@ class Hash
59
59
  dup.deep_merge!(other_hash)
60
60
  end unless method_defined? :deep_merge
61
61
 
62
+ alias :+ :deep_merge
63
+
62
64
  # Same as +deep_merge+, but modifies +self+.
63
65
  def deep_merge!(other_hash)
64
66
  other_hash.each_pair do |k,v|
data/lib/procemon.rb CHANGED
@@ -3,8 +3,8 @@ module Procemon
3
3
 
4
4
  require 'asynchronous'
5
5
  require 'sourcerer'
6
+ require 'loader'
6
7
 
7
- require File.join(File.dirname(__FILE__),"procemon","function","require")
8
8
  require_relative_directory File.join("procemon","mpatch")
9
9
  require_relative_directory File.join("procemon","function")
10
10
 
@@ -20,16 +20,14 @@ module Procemon
20
20
  tmpdir_init
21
21
 
22
22
  # create config singleton
23
- metaloader_framework
24
-
25
- # load meta-s
26
- meta_load
27
-
28
- # mount libs
29
- mount_libs
30
-
31
- # mount offline modules
32
- mount_modules
23
+ Loader.metaloader_framework root: Loader.caller_root_folder,
24
+ config_obj: Application.config
25
+
26
+ Dir.glob(File.join(Loader.caller_root_folder,"{lib,libs}","*")).each do |path|
27
+ if !File.directory? path
28
+ require path
29
+ end
30
+ end
33
31
 
34
32
  # garbage collect
35
33
  ObjectSpace.garbage_collect
data/procemon.gemspec CHANGED
@@ -21,5 +21,6 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_dependency "asynchronous"
23
23
  spec.add_dependency "sourcerer"
24
+ spec.add_dependency "loader"
24
25
 
25
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: procemon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Luzsi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-26 00:00:00.000000000 Z
11
+ date: 2014-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asynchronous
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: loader
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: ! 'This is a collection of my Ruby Procs in the adventure of becoming
42
56
  the best! In short this provides extra tools in Application configs, argumens processing,daemonise,eval,
43
57
  getting source of a block,method,process and work with it, or even fuse them into
@@ -63,6 +77,7 @@ files:
63
77
  - examples/simple_async_processing.rb
64
78
  - files.rb
65
79
  - lib/procemon.rb
80
+ - lib/procemon/extra/sender.rb
66
81
  - lib/procemon/extra/str2duck.rb
67
82
  - lib/procemon/function/application.rb
68
83
  - lib/procemon/function/argv.rb
@@ -76,9 +91,6 @@ files:
76
91
  - lib/procemon/function/meta/inject_methods.rb
77
92
  - lib/procemon/function/name.rb
78
93
  - lib/procemon/function/port.rb
79
- - lib/procemon/function/require.rb
80
- - lib/procemon/function/sender.rb
81
- - lib/procemon/function/systemu.rb
82
94
  - lib/procemon/function/tmp_dir.rb
83
95
  - lib/procemon/function/validation.rb
84
96
  - lib/procemon/mpatch/array.rb
@@ -1,108 +0,0 @@
1
- module Kernel
2
-
3
- # load meta folders rb files
4
- def meta_load(target_folder= File.join(Dir.pwd,"lib","**","meta") )
5
-
6
- # find elements
7
- begin
8
- Dir.glob( File.join(target_folder,"*.{rb,ru}") ).each do |one_rb_file|
9
- require one_rb_file
10
- end
11
- end
12
-
13
- end
14
-
15
- # mount libs
16
- def mount_libs(lib_folder= File.join(Dir.pwd, "lib") )
17
-
18
- # load lib files
19
- begin
20
- Dir.glob(File.join(lib_folder,"*.{rb,ru}")).uniq.each do |one_rb_file|
21
- require one_rb_file
22
- end
23
- end
24
-
25
- end
26
- alias :require_folder :mount_libs
27
-
28
- # Offline repo activate
29
- def mount_modules(target_folder= File.join(Dir.pwd,"{module,modules}","{gem,gems}") )
30
- Dir.glob(File.join(target_folder,"**","lib")).select{|f| File.directory?(f)}.each do |one_path|
31
- $LOAD_PATH.unshift one_path
32
- end
33
- end
34
-
35
- # #Return File_name:File_path
36
- def get_files(folder)
37
-
38
- # Pre def. variables
39
- begin
40
- files = Hash.new
41
- end
42
-
43
- # Validation
44
- begin
45
- # Check that does the folder is absolute or not
46
- if folder != File.expand_path(folder)
47
- folder = File.expand_path(folder)
48
- end
49
- end
50
-
51
- # Get Files list
52
- begin
53
- Dir[File.join(folder,'**','*')].uniq.each do |file_path|
54
- if !File.directory? file_path
55
- files[file_path.split(File::SEPARATOR).last.to_sym]= file_path
56
- end
57
- end
58
- end
59
-
60
- # Return file_name:folder
61
- return files
62
- end
63
-
64
- # require by absolute path directory's files
65
- def require_directory(folder)
66
- Dir.glob(File.join(folder,"**","*.{rb,ru}")).each do |file_path|
67
- require file_path
68
- end
69
- end
70
-
71
- # require sender relative directory's files
72
- # return the directory and the sub directories file names (rb/ru)
73
- def require_relative_directory(folder)
74
-
75
- # pre format
76
- begin
77
-
78
- # path create from caller
79
- begin
80
- path= caller[0].split(".{rb,ru}:").first.split(File::SEPARATOR)
81
- path= path[0..(path.count-2)]
82
- end
83
-
84
- # after formatting
85
- begin
86
-
87
- if !File.directory?(path.join(File::SEPARATOR))
88
- path.pop
89
- end
90
- path= File.join(path.join(File::SEPARATOR))
91
- if path != File.expand_path(path)
92
- path= File.expand_path(path)
93
- end
94
-
95
- end
96
-
97
- end
98
-
99
- # find elements
100
- begin
101
- return Dir.glob(File.join(path,folder,"**","*.{rb,ru}")).each do |one_path|
102
- require one_path
103
- end
104
- end
105
-
106
- end
107
-
108
- end
@@ -1,360 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'tmpdir'
4
- require 'socket'
5
- require 'fileutils'
6
- require 'rbconfig'
7
- require 'thread'
8
-
9
- class Object
10
- def systemu(*a, &b) SystemUniversal.new(*a, &b).systemu end
11
- end
12
-
13
- class SystemUniversal
14
- #
15
- # constants
16
- #
17
- SystemUniversal::VERSION = '2.5.2' unless SystemUniversal.send(:const_defined?, :VERSION)
18
- def SystemUniversal.version() SystemUniversal::VERSION end
19
- def version() SystemUniversal::VERSION end
20
- #
21
- # class methods
22
- #
23
-
24
- @host = Socket.gethostname
25
- @ppid = Process.ppid
26
- @pid = Process.pid
27
- @turd = ENV['SYSTEMU_TURD']
28
-
29
- c = begin; ::RbConfig::CONFIG; rescue NameError; ::Config::CONFIG; end
30
- ruby = File.join(c['bindir'], c['ruby_install_name']) << c['EXEEXT']
31
- @ruby = if system('%s -e 42' % ruby)
32
- ruby
33
- else
34
- system('%s -e 42' % 'ruby') ? 'ruby' : warn('no ruby in PATH/CONFIG')
35
- end
36
-
37
- class << SystemUniversal
38
- %w( host ppid pid ruby turd ).each{|a| attr_accessor a}
39
-
40
- def quote(*words)
41
- words.map{|word| word.inspect}.join(' ')
42
- end
43
- end
44
-
45
- #
46
- # instance methods
47
- #
48
-
49
- def initialize argv, opts = {}, &block
50
- getopt = getopts opts
51
-
52
- @argv = argv
53
- @block = block
54
-
55
- @stdin = getopt[ ['stdin', 'in', '0', 0] ]
56
- @stdout = getopt[ ['stdout', 'out', '1', 1] ]
57
- @stderr = getopt[ ['stderr', 'err', '2', 2] ]
58
- @env = getopt[ 'env' ]
59
- @cwd = getopt[ 'cwd' ]
60
-
61
- @host = getopt[ 'host', self.class.host ]
62
- @ppid = getopt[ 'ppid', self.class.ppid ]
63
- @pid = getopt[ 'pid', self.class.pid ]
64
- @ruby = getopt[ 'ruby', self.class.ruby ]
65
- end
66
-
67
- def systemu
68
- tmpdir do |tmp|
69
- c = child_setup tmp
70
- status = nil
71
-
72
- begin
73
- thread = nil
74
-
75
- quietly{
76
- IO.popen "#{ quote(@ruby) } #{ quote(c['program']) }", 'r+' do |pipe|
77
- line = pipe.gets
78
- case line
79
- when %r/^pid: \d+$/
80
- cid = Integer line[%r/\d+/]
81
- else
82
- begin
83
- buf = pipe.read
84
- buf = "#{ line }#{ buf }"
85
- e = Marshal.load buf
86
- raise unless Exception === e
87
- raise e
88
- rescue
89
- raise "systemu: Error - process interrupted!\n#{ buf }\n"
90
- end
91
- end
92
- thread = new_thread cid, @block if @block
93
- pipe.read rescue nil
94
- end
95
- }
96
- status = $?
97
- ensure
98
- if thread
99
- begin
100
- class << status
101
- attr 'thread'
102
- end
103
- status.instance_eval{ @thread = thread }
104
- rescue
105
- 42
106
- end
107
- end
108
- end
109
-
110
- if @stdout or @stderr
111
- open(c['stdout']){|f| relay f => @stdout} if @stdout
112
- open(c['stderr']){|f| relay f => @stderr} if @stderr
113
- status
114
- else
115
- [status, IO.read(c['stdout']), IO.read(c['stderr'])]
116
- end
117
- end
118
- end
119
-
120
- def quote *args, &block
121
- SystemUniversal.quote(*args, &block)
122
- end
123
-
124
- def new_thread cid, block
125
- q = Queue.new
126
- Thread.new(cid) do |cid|
127
- current = Thread.current
128
- current.abort_on_exception = true
129
- q.push current
130
- block.call cid
131
- end
132
- q.pop
133
- end
134
-
135
- def child_setup tmp
136
- stdin = File.expand_path(File.join(tmp, 'stdin'))
137
- stdout = File.expand_path(File.join(tmp, 'stdout'))
138
- stderr = File.expand_path(File.join(tmp, 'stderr'))
139
- program = File.expand_path(File.join(tmp, 'program'))
140
- config = File.expand_path(File.join(tmp, 'config'))
141
-
142
- if @stdin
143
- open(stdin, 'w'){|f| relay @stdin => f}
144
- else
145
- FileUtils.touch stdin
146
- end
147
- FileUtils.touch stdout
148
- FileUtils.touch stderr
149
-
150
- c = {}
151
- c['argv'] = @argv
152
- c['env'] = @env
153
- c['cwd'] = @cwd
154
- c['stdin'] = stdin
155
- c['stdout'] = stdout
156
- c['stderr'] = stderr
157
- c['program'] = program
158
- open(config, 'w'){|f| Marshal.dump(c, f)}
159
-
160
- open(program, 'w'){|f| f.write child_program(config)}
161
-
162
- c
163
- end
164
-
165
- def quietly
166
- v = $VERBOSE
167
- $VERBOSE = nil
168
- yield
169
- ensure
170
- $VERBOSE = v
171
- end
172
-
173
- def child_program config
174
- <<-program
175
- # encoding: utf-8
176
-
177
- PIPE = STDOUT.dup
178
- begin
179
- config = Marshal.load(IO.read('#{ config }'))
180
-
181
- argv = config['argv']
182
- env = config['env']
183
- cwd = config['cwd']
184
- stdin = config['stdin']
185
- stdout = config['stdout']
186
- stderr = config['stderr']
187
-
188
- Dir.chdir cwd if cwd
189
- env.each{|k,v| ENV[k.to_s] = v.to_s} if env
190
-
191
- STDIN.reopen stdin
192
- STDOUT.reopen stdout
193
- STDERR.reopen stderr
194
-
195
- PIPE.puts "pid: \#{ Process.pid }"
196
- PIPE.flush # the process is ready yo!
197
- PIPE.close
198
-
199
- exec *argv
200
- rescue Exception => e
201
- PIPE.write Marshal.dump(e) rescue nil
202
- exit 42
203
- end
204
- program
205
- end
206
-
207
- def relay srcdst
208
- src, dst, ignored = srcdst.to_a.first
209
- if src.respond_to? 'read'
210
- while((buf = src.read(8192))); dst << buf; end
211
- else
212
- if src.respond_to?(:each_line)
213
- src.each_line{|buf| dst << buf}
214
- else
215
- src.each{|buf| dst << buf}
216
- end
217
- end
218
- end
219
-
220
- def tmpdir d = Dir.tmpdir, max = 42, &b
221
- i = -1 and loop{
222
- i += 1
223
-
224
- tmp = File.join d, "systemu_#{ @host }_#{ @ppid }_#{ @pid }_#{ rand }_#{ i += 1 }"
225
-
226
- begin
227
- Dir.mkdir tmp
228
- rescue Errno::EEXIST
229
- raise if i >= max
230
- next
231
- end
232
-
233
- break(
234
- if b
235
- begin
236
- b.call tmp
237
- ensure
238
- FileUtils.rm_rf tmp unless SystemU.turd
239
- end
240
- else
241
- tmp
242
- end
243
- )
244
- }
245
- end
246
-
247
- def getopts opts = {}
248
- lambda do |*args|
249
- keys, default, ignored = args
250
- catch(:opt) do
251
- [keys].flatten.each do |key|
252
- [key, key.to_s, key.to_s.intern].each do |key|
253
- throw :opt, opts[key] if opts.has_key?(key)
254
- end
255
- end
256
- default
257
- end
258
- end
259
- end
260
- end
261
-
262
- # some monkeypatching for JRuby
263
- if defined? JRUBY_VERSION
264
- require 'jruby'
265
- java_import org.jruby.RubyProcess
266
-
267
- class SystemUniversal
268
- def systemu
269
- split_argv = JRuby::PathHelper.smart_split_command @argv
270
- process = java.lang.Runtime.runtime.exec split_argv.to_java(:string)
271
-
272
- stdout, stderr = [process.input_stream, process.error_stream].map do |stream|
273
- StreamReader.new(stream)
274
- end
275
-
276
- exit_code = process.wait_for
277
- field = process.get_class.get_declared_field("pid")
278
- field.set_accessible(true)
279
- pid = field.get(process)
280
- [
281
- RubyProcess::RubyStatus.new_process_status(JRuby.runtime, exit_code, pid),
282
- stdout.join,
283
- stderr.join
284
- ]
285
- end
286
-
287
- class StreamReader
288
- def initialize(stream)
289
- @data = ""
290
- @thread = Thread.new do
291
- reader = java.io.BufferedReader.new java.io.InputStreamReader.new(stream)
292
-
293
- while line = reader.read_line
294
- @data << line << "\n"
295
- end
296
- end
297
- end
298
-
299
- def join
300
- @thread.join
301
- @data
302
- end
303
- end
304
- end
305
- end
306
-
307
-
308
-
309
- SystemU = SystemUniversal unless defined? SystemU
310
- Systemu = SystemUniversal unless defined? Systemu
311
-
312
-
313
-
314
-
315
-
316
-
317
-
318
-
319
-
320
-
321
-
322
-
323
-
324
- if $0 == __FILE__
325
- #
326
- # date
327
- #
328
- date = %q( ruby -e" t = Time.now; STDOUT.puts t; STDERR.puts t " )
329
-
330
- status, stdout, stderr = systemu date
331
- p [status, stdout, stderr]
332
-
333
- status = systemu date, 1=>(stdout = '')
334
- p [status, stdout]
335
-
336
- status = systemu date, 2=>(stderr = '')
337
- p [status, stderr]
338
- #
339
- # sleep
340
- #
341
- sleep = %q( ruby -e" p(sleep(1)) " )
342
- status, stdout, stderr = systemu sleep
343
- p [status, stdout, stderr]
344
-
345
- sleep = %q( ruby -e" p(sleep(42)) " )
346
- status, stdout, stderr = systemu(sleep){|cid| Process.kill 9, cid}
347
- p [status, stdout, stderr]
348
- #
349
- # env
350
- #
351
- env = %q( ruby -e" p ENV['A'] " )
352
- status, stdout, stderr = systemu env, :env => {'A' => 42}
353
- p [status, stdout, stderr]
354
- #
355
- # cwd
356
- #
357
- env = %q( ruby -e" p Dir.pwd " )
358
- status, stdout, stderr = systemu env, :cwd => Dir.tmpdir
359
- p [status, stdout, stderr]
360
- end
File without changes