sfl 2.1 → 2.2

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.
@@ -1,3 +1,12 @@
1
+ # 2.2
2
+
3
+ * support command lines including shell special characters
4
+ * bugfix: sfl won't re-define Kernel.spawn on Ruby 1.9
5
+
6
+ # 2.1
7
+
8
+ * Livence: the 2-clause BSDL or the Ruby licence.
9
+
1
10
  # 2.0
2
11
 
3
12
  Version 2.0 is done completely by Bernard Lambeau. Thanks!
data/lib/sfl.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  class SFL
2
- VERSION = "2.1".freeze
2
+ VERSION = "2.2".freeze
3
+
4
+ SHELL_SPECIALS = %r([\*\?\{\}\[\]<>\(\)~&\|\\\$;'`"\n])m.freeze
3
5
 
4
6
  attr_reader :command, :environment, :argument, :option
5
7
 
@@ -29,9 +31,14 @@ class SFL
29
31
  if cmdandarg.size == 1
30
32
  cmdandarg = cmdandarg.first
31
33
  if String === cmdandarg
32
- cmd, *arg = self.class.parse_command_with_arg(cmdandarg)
33
- @command = [cmd, cmd]
34
- @argument = arg
34
+ if SHELL_SPECIALS === cmdandarg
35
+ @command = cmdandarg
36
+ @argument = []
37
+ else
38
+ cmd, *arg = self.class.parse_command_with_arg(cmdandarg)
39
+ @command = [cmd, cmd]
40
+ @argument = arg
41
+ end
35
42
  else
36
43
  @command = cmdandarg
37
44
  @argument = []
@@ -174,7 +181,7 @@ class SFL
174
181
  end
175
182
  end
176
183
 
177
- if RUBY_VERSION <= "1.9"
184
+ if RUBY_VERSION < "1.9"
178
185
  def Kernel.spawn(*x)
179
186
  SFL.new(*x).run
180
187
  end
@@ -0,0 +1,5 @@
1
+ require '/home/ujihisa/git/spawn-for-legacy/lib/sfl'
2
+
3
+ pid = Kernel.spawn('cat', {:in => File.expand_path('../../README.md', __FILE__)})
4
+ Process.wait(pid)
5
+
@@ -0,0 +1,50 @@
1
+ # Spawn for Legacy
2
+
3
+ ![demo](http://gyazo.com/e22144b2aadbbecfc43761f95c27bf3e.png)
4
+
5
+ Kernel.spawn in ruby 1.9 solves all issues on asynchronous executions[[1]](http://ujihisa.blogspot.com/2010/03/how-to-run-external-command.html)[[2]](http://ujihisa.blogspot.com/2010/03/all-about-spawn.html).
6
+ But ruby 1.8, the legacy version of MRI, is still used on many environments.
7
+
8
+ This library provides `spawn()` which is almost perfectly compatible with ruby 1.9's.
9
+ This library is pure ruby; you don't need to build it.
10
+
11
+ ## Install
12
+
13
+ gem install sfl
14
+
15
+ ## How to use
16
+
17
+ require 'rubygems'
18
+ require 'sfl'
19
+
20
+ spawn 'ls'
21
+
22
+ If your ruby is 1.9, `require 'sfl'` doesn't do anything. If your ruby is 1.8, that defines `spawn`.
23
+
24
+ ## How compatible this spawn is?
25
+
26
+ (I'll put the coverage here later)
27
+
28
+ ## Misc.
29
+
30
+ * At first I tried to use the name `spawn` as this gem library name, but the name was already used. The `spawn` gem library does not mean ruby 1.9's `spawn` at all.
31
+ * Ruby 1.9's `open3` library, based on `spawn`, is very useful. I would like to port `open3` to ruby 1.8 in my future.
32
+
33
+ ## Supports
34
+
35
+ * (On MacOS) MRI 1.8.6, 1.8.7, 1.9.1, 1.9.2-rc2
36
+ * (On UNIX) MRI 1.8.6, 1.8.7, 1.9.1, 1.9.2pre
37
+ * (On Windows) MRI 1.9.1, 1.9.2pre
38
+
39
+ Currently there are no supports on:
40
+
41
+ * MRI 1.8 on Windows
42
+ * Other Ruby implementations such as JRuby, Rubinius and MacRuby
43
+
44
+ ## Authors
45
+
46
+ Tatsuhiro Ujihisa
47
+ <http://ujihisa.blogspot.com/>
48
+
49
+ Bernard Lambeau
50
+ <http://revision-zero.org/>
@@ -57,6 +57,34 @@ describe 'Kernel.spawn' do
57
57
  end
58
58
  end
59
59
 
60
+ context 'with command "echo ahi"' do
61
+ it 'outputs "ahi" on stdout' do
62
+ mocker(%q|
63
+ pid = Kernel.spawn('echo ahi')
64
+ Process.wait(pid)
65
+ |).chomp.should == "ahi"
66
+ end
67
+ end
68
+
69
+ context 'with command "true && echo ahi"' do
70
+ it 'outputs "ahi" on stdout' do
71
+ mocker(%q|
72
+ pid = Kernel.spawn('true && echo ahi')
73
+ Process.wait(pid)
74
+ |).chomp.should == "ahi"
75
+ end
76
+ end
77
+
78
+ context 'with command "false || :"' do
79
+ it 'does not fail' do
80
+ mocker(%q[
81
+ pid = Kernel.spawn('false || :')
82
+ Process.wait(pid)
83
+ puts 'ahi' if $?.to_i == 0
84
+ ]).chomp.should == "ahi"
85
+ end
86
+ end
87
+
60
88
  # The following test is unsound and lead to spec
61
89
  # failures under specific rubies...
62
90
  #
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sfl
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.1'
4
+ version: '2.2'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-01-05 00:00:00.000000000 Z
13
+ date: 2012-06-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
- requirement: &2156998460 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *2156998460
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: rspec
28
- requirement: &2156997600 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -33,7 +38,12 @@ dependencies:
33
38
  version: 2.4.0
34
39
  type: :development
35
40
  prerelease: false
36
- version_requirements: *2156997600
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 2.4.0
37
47
  description: Spawn For Ruby 1.8
38
48
  email: ujihisa at gmail.com
39
49
  executables: []
@@ -42,6 +52,8 @@ extra_rdoc_files:
42
52
  - README.md
43
53
  files:
44
54
  - lib/sfl.rb
55
+ - spec/mocker.rb
56
+ - spec/mocker_output.txt
45
57
  - spec/sfl_spec.rb
46
58
  - sfl.gemspec
47
59
  - Rakefile
@@ -67,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
79
  version: '0'
68
80
  requirements: []
69
81
  rubyforge_project:
70
- rubygems_version: 1.8.11
82
+ rubygems_version: 1.8.23
71
83
  signing_key:
72
84
  specification_version: 3
73
85
  summary: Spawn For Ruby 1.8