pipe-run 0.2.1 → 0.3.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/Gemfile CHANGED
@@ -1,12 +1,10 @@
1
1
  source "http://rubygems.org"
2
2
  # Add dependencies required to use your gem here.
3
3
  # Example:
4
- # gem "depq", ">= 0.4"
5
- # gem "hash-utils", ">= 0.7.0"
6
4
 
7
5
  # Add dependencies to develop your gem here.
8
6
  # Include everything needed to run rake, tests, features, etc.
9
7
  group :development do
10
- gem "bundler", "~> 1.0.0"
11
- gem "jeweler", "~> 1.5.2"
8
+ gem "bundler", ">= 1.0.0"
9
+ gem "jeweler", ">= 1.5.2"
12
10
  end
@@ -2,8 +2,8 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  git (1.2.5)
5
- jeweler (1.5.2)
6
- bundler (~> 1.0.0)
5
+ jeweler (1.6.4)
6
+ bundler (~> 1.0)
7
7
  git (>= 1.2.5)
8
8
  rake
9
9
  rake (0.8.7)
@@ -12,5 +12,5 @@ PLATFORMS
12
12
  ruby
13
13
 
14
14
  DEPENDENCIES
15
- bundler (~> 1.0.0)
16
- jeweler (~> 1.5.2)
15
+ bundler (>= 1.0.0)
16
+ jeweler (>= 1.5.2)
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'rubygems'
3
3
  require 'bundler'
4
+
4
5
  begin
5
6
  Bundler.setup(:default, :development)
6
7
  rescue Bundler::BundlerError => e
@@ -8,15 +9,16 @@ rescue Bundler::BundlerError => e
8
9
  $stderr.puts "Run `bundle install` to install missing gems"
9
10
  exit e.status_code
10
11
  end
11
- require 'rake'
12
12
 
13
+ require 'rake'
13
14
  require 'jeweler'
15
+
14
16
  Jeweler::Tasks.new do |gem|
15
17
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
16
18
  gem.name = "pipe-run"
17
19
  gem.homepage = "https://github.com/martinkozak/pipe-run"
18
20
  gem.license = "MIT"
19
- gem.summary = 'Runs command and returns its standard output in one call. Both synchronous and asynchronous (with eventmachine) running is supported.'
21
+ gem.summary = 'Executes shell command and returns its outputs in single call. Both synchronous and asynchronous (with EventMachine) executing is supported.'
20
22
  gem.email = "martinkozak@martinkozak.net"
21
23
  gem.authors = ["Martin Kozák"]
22
24
  # Include your dependencies below. Runtime dependencies are required when using your gem,
@@ -25,13 +27,3 @@ Jeweler::Tasks.new do |gem|
25
27
  # gem.add_development_dependency 'rspec', '> 1.2.3'
26
28
  end
27
29
  Jeweler::RubygemsDotOrgTasks.new
28
-
29
- require 'rake/rdoctask'
30
- Rake::RDocTask.new do |rdoc|
31
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
32
-
33
- rdoc.rdoc_dir = 'rdoc'
34
- rdoc.title = "qrpc #{version}"
35
- rdoc.rdoc_files.include('README*')
36
- rdoc.rdoc_files.include('lib/**/*.rb')
37
- end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.3.0
@@ -21,7 +21,11 @@ class Pipe
21
21
  ##
22
22
  # Holds pipe output buffer.
23
23
  #
24
+ # @returns [String] buffer content
25
+ # @since 0.3.0
26
+ #
24
27
 
28
+ attr_accessor :buffer
25
29
  @buffer
26
30
 
27
31
  ##
@@ -61,11 +65,11 @@ class Pipe
61
65
  end
62
66
 
63
67
  ##
64
- # Runs the command and returns its standard output.
65
- # Blocking.
68
+ # Runs the command and yields its standard output.
66
69
  #
67
70
  # @param [String] command command for run
68
71
  # @param [Proc] block callback for giving back the results
72
+ # @yield [String] command standard output
69
73
  # @since 0.2.0
70
74
  #
71
75
 
@@ -73,5 +77,47 @@ class Pipe
73
77
  pipe = File.popen(command, "r")
74
78
  EM::attach(pipe, Receiver, block)
75
79
  end
76
-
80
+
81
+ ##
82
+ # Runs the command and yields both its standard output
83
+ # and error output.
84
+ #
85
+ # @param [String] command command for run
86
+ # @param [Proc] block callback for giving back the results
87
+ # @yield [String] command standard output
88
+ # @yield [String] command erroroutput
89
+ # @since 0.3.0
90
+ #
91
+
92
+ def self.run_nonblock2(command, &block)
93
+ begin
94
+ stdin, stdout, stderr = Open3.popen3(command)
95
+ rescue NameError
96
+ require "open3"
97
+ retry
98
+ end
99
+
100
+ outval = nil
101
+ errval = nil
102
+
103
+ yielder = Proc::new do
104
+ if (not outval.nil?) and (not errval.nil?)
105
+ yield outval, errval
106
+ end
107
+ end
108
+
109
+ outcall = Proc::new do |_outval|
110
+ outval = _outval
111
+ yielder.call()
112
+ end
113
+
114
+ errcall = Proc::new do |_errval|
115
+ errval = _errval
116
+ yielder.call()
117
+ end
118
+
119
+ EM::attach(stdout, Receiver, outcall)
120
+ EM::attach(stderr, Receiver, errcall)
121
+ end
122
+
77
123
  end
@@ -11,20 +11,22 @@ class Pipe
11
11
  # Runs the command and returns its standard output.
12
12
  #
13
13
  # If block is given, treat call as non-blocking. In that case,
14
- # +em-pipe-run+ file must be loaded.
14
+ # loads +em-pipe-run+ and expects EventMachine loaded.
15
15
  #
16
16
  # @param [String] command command for run
17
17
  # @param [Proc] block block for giving back the results
18
+ # @yield [String] command output
18
19
  # @return [String] command output
19
20
  #
20
21
 
21
22
  def self.run(command, &block)
22
23
  if not block.nil?
23
- if not self.respond_to? :run_nonblock
24
+ begin
25
+ return self.run_nonblock(command, &block)
26
+ rescue NoMethodError
24
27
  require "em-pipe-run"
28
+ retry
25
29
  end
26
-
27
- return self.run_nonblock(command, &block)
28
30
  end
29
31
 
30
32
  ###
@@ -37,4 +39,45 @@ class Pipe
37
39
  return result
38
40
  end
39
41
 
42
+ ##
43
+ # Runs the command and returns both standard output
44
+ # and error output.
45
+ #
46
+ # If block is given, treat call as non-blocking. In that case,
47
+ # loads +em-pipe-run+ and expects EventMachine loaded.
48
+ #
49
+ # @param [String] command command for run
50
+ # @param [Proc] block block for giving back the results
51
+ # @return [Array] command output and error output
52
+ # @since 0.3.0
53
+ #
54
+
55
+ def self.run2(command, &block)
56
+ if not block.nil?
57
+ begin
58
+ return self.run_nonblock2(command, &block)
59
+ rescue NoMethodError
60
+ require "em-pipe-run"
61
+ retry
62
+ end
63
+ end
64
+
65
+ ###
66
+
67
+ begin
68
+ stdin, stdout, stderr = Open3.popen3(command)
69
+ rescue NameError
70
+ require "open3"
71
+ retry
72
+ end
73
+
74
+ stdin.close()
75
+ outvalue = stdout.read
76
+ stdout.close()
77
+ errvalue = stderr.read
78
+ stderr.close()
79
+
80
+ return [outvalue, errvalue]
81
+ end
82
+
40
83
  end
@@ -4,13 +4,13 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{pipe-run}
8
- s.version = "0.2.1"
7
+ s.name = "pipe-run"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Martin Kozák"]
12
- s.date = %q{2011-03-09}
13
- s.email = %q{martinkozak@martinkozak.net}
11
+ s.authors = ["Martin Koz\u{e1}k"]
12
+ s.date = "2011-11-08"
13
+ s.email = "martinkozak@martinkozak.net"
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
16
16
  "README.md"
@@ -25,27 +25,28 @@ Gem::Specification.new do |s|
25
25
  "VERSION",
26
26
  "lib/em-pipe-run.rb",
27
27
  "lib/pipe-run.rb",
28
- "pipe-run.gemspec"
28
+ "pipe-run.gemspec",
29
+ "test.rb"
29
30
  ]
30
- s.homepage = %q{https://github.com/martinkozak/pipe-run}
31
+ s.homepage = "https://github.com/martinkozak/pipe-run"
31
32
  s.licenses = ["MIT"]
32
33
  s.require_paths = ["lib"]
33
- s.rubygems_version = %q{1.6.1}
34
- s.summary = %q{Runs command and returns its standard output in one call. Both synchronous and asynchronous (with eventmachine) running is supported.}
34
+ s.rubygems_version = "1.8.11"
35
+ s.summary = "Executes shell command and returns its outputs in single call. Both synchronous and asynchronous (with EventMachine) executing is supported."
35
36
 
36
37
  if s.respond_to? :specification_version then
37
38
  s.specification_version = 3
38
39
 
39
40
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
40
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
41
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
41
+ s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
42
+ s.add_development_dependency(%q<jeweler>, [">= 1.5.2"])
42
43
  else
43
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
44
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
44
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
45
+ s.add_dependency(%q<jeweler>, [">= 1.5.2"])
45
46
  end
46
47
  else
47
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
48
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
48
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
49
+ s.add_dependency(%q<jeweler>, [">= 1.5.2"])
49
50
  end
50
51
  end
51
52
 
data/test.rb ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/ruby
2
+ # encoding: utf-8
3
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
4
+
5
+ $:.push("./lib")
6
+ $:.unshift("./lib")
7
+
8
+ require "eventmachine"
9
+ require "pipe-run"
10
+ require "em-pipe-run"
11
+
12
+
13
+ EM::run do
14
+ p Pipe::run("date")
15
+ p Pipe::run2("date")
16
+
17
+ Pipe::run("date") do |out|
18
+ p out
19
+ end
20
+
21
+ Pipe::run2("date") do |*args|
22
+ p args
23
+ end
24
+
25
+ p "x"
26
+ end
metadata CHANGED
@@ -1,50 +1,46 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: pipe-run
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
4
5
  prerelease:
5
- version: 0.2.1
6
6
  platform: ruby
7
- authors:
8
- - "Martin Koz\xC3\xA1k"
7
+ authors:
8
+ - Martin Kozák
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-03-09 00:00:00 +01:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2011-11-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: bundler
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &20057480 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
21
- - - ~>
22
- - !ruby/object:Gem::Version
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
23
21
  version: 1.0.0
24
22
  type: :development
25
23
  prerelease: false
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *20057480
25
+ - !ruby/object:Gem::Dependency
28
26
  name: jeweler
29
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &20056740 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
32
- - - ~>
33
- - !ruby/object:Gem::Version
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
34
32
  version: 1.5.2
35
33
  type: :development
36
34
  prerelease: false
37
- version_requirements: *id002
35
+ version_requirements: *20056740
38
36
  description:
39
37
  email: martinkozak@martinkozak.net
40
38
  executables: []
41
-
42
39
  extensions: []
43
-
44
- extra_rdoc_files:
40
+ extra_rdoc_files:
45
41
  - LICENSE.txt
46
42
  - README.md
47
- files:
43
+ files:
48
44
  - .document
49
45
  - Gemfile
50
46
  - Gemfile.lock
@@ -55,36 +51,34 @@ files:
55
51
  - lib/em-pipe-run.rb
56
52
  - lib/pipe-run.rb
57
53
  - pipe-run.gemspec
58
- has_rdoc: true
54
+ - test.rb
59
55
  homepage: https://github.com/martinkozak/pipe-run
60
- licenses:
56
+ licenses:
61
57
  - MIT
62
58
  post_install_message:
63
59
  rdoc_options: []
64
-
65
- require_paths:
60
+ require_paths:
66
61
  - lib
67
- required_ruby_version: !ruby/object:Gem::Requirement
62
+ required_ruby_version: !ruby/object:Gem::Requirement
68
63
  none: false
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- hash: 247694265029296000
73
- segments:
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ segments:
74
69
  - 0
75
- version: "0"
76
- required_rubygems_version: !ruby/object:Gem::Requirement
70
+ hash: -3085388963954565430
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
72
  none: false
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: "0"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
82
77
  requirements: []
83
-
84
78
  rubyforge_project:
85
- rubygems_version: 1.6.1
79
+ rubygems_version: 1.8.11
86
80
  signing_key:
87
81
  specification_version: 3
88
- summary: Runs command and returns its standard output in one call. Both synchronous and asynchronous (with eventmachine) running is supported.
82
+ summary: Executes shell command and returns its outputs in single call. Both synchronous
83
+ and asynchronous (with EventMachine) executing is supported.
89
84
  test_files: []
90
-