awesome_spawn 1.3.0 → 1.4.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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 495db35a5162aeca5013e1c52777938873956d4d
4
- data.tar.gz: aaacd54a4c413f3f69bba0a52b52386041dc1e23
3
+ metadata.gz: 815be141f2f958bbb4ff8eb364d285cd6110d78b
4
+ data.tar.gz: 322d170526af46c9ad840b69fe20f61794f46386
5
5
  SHA512:
6
- metadata.gz: 4b491f9bdcf6a10961ed3b38e22a66f2906e639b6f0eee2340151bda4c1bba929c46765245d1b6ea38b206a328567bd4d834ce36f5d4de7aa6ec9845c428319e
7
- data.tar.gz: c291f6d3861399c95343a9f787db4ac2ccf36415c7dda00934e4d8df44e8bd79fa45639b4d7e63eb88b3c1f5074042534b43aef8ad3051c2c0abff289ef01e0d
6
+ metadata.gz: 041a6034a9bf220ffc96511c370a03ed26cd9183efddff30f5bd4ffe8c8ce9af81a199e34c608b7862969f6f6e7eec026f0a1552b1321adee1f80e86e3196609
7
+ data.tar.gz: abe800672e213bd32dc8d96baf82a311ab301a97ad303d5f500105cd0c179829b12fd98752872f14df34e236af13a315a476ee80926fb1b3ee83a733c178da79
@@ -50,30 +50,33 @@ module AwesomeSpawn
50
50
  # result.output
51
51
  # => "line1\nline2"
52
52
  #
53
+ # @example With environment variables passed in
54
+ # result = AwesomeSpawn.run('echo ABC=${ABC}', :env => {"ABC" => "abcde"})
55
+ # => #<AwesomeSpawn::CommandResult:0x007f9421a35590 @exit_status=0>
56
+ # result.output
57
+ # => "ABC=abcde\n"
58
+ #
53
59
  # @param [String] command The command to run
54
60
  # @param [Hash] options The options for running the command. Also accepts any
55
61
  # option that can be passed to Kernel.spawn, except `:in`, `:out` and `:err`.
56
62
  # @option options [Hash,Array] :params The command line parameters. See
57
63
  # {#build_command_line} for how to specify params.
58
64
  # @option options [String] :in_data Data to be passed on stdin.
65
+ # @option options [Hash<String,String>] :env Additional environment variables for sub process
59
66
  #
60
67
  # @raise [NoSuchFileError] if the `command` is not found
61
68
  # @return [CommandResult] the output stream, error stream, and exit status
62
69
  # @see http://ruby-doc.org/core/Kernel.html#method-i-spawn Kernel.spawn
63
70
  def run(command, options = {})
64
- raise ArgumentError, "options cannot contain :out" if options.include?(:out)
65
- raise ArgumentError, "options cannot contain :err" if options.include?(:err)
66
- raise ArgumentError, "options cannot contain :in" if options.include?(:in)
67
- options = options.dup
68
- params = options.delete(:params)
71
+ bad_keys = (options.keys.flatten & [:in, :out, :err]).map { |k| ":#{k}" }
72
+ raise ArgumentError, "options cannot contain #{bad_keys.join(", ")}" if bad_keys.any?
73
+ env, command_line, options = parse_command_options(command, options)
74
+
69
75
  if (in_data = options.delete(:in_data))
70
76
  options[:stdin_data] = in_data
71
77
  end
72
78
 
73
- output, error, status = "", "", nil
74
- command_line = build_command_line(command, params)
75
-
76
- output, error, status = launch(command_line, options)
79
+ output, error, status = launch(env, command_line, options)
77
80
  rescue Errno::ENOENT => err
78
81
  raise NoSuchFileError.new(err.message) if NoSuchFileError.detected?(err.message)
79
82
  raise
@@ -96,7 +99,7 @@ module AwesomeSpawn
96
99
  command_result = run(command, options)
97
100
 
98
101
  if command_result.failure?
99
- message = "#{command} exit code: #{command_result.exit_status}"
102
+ message = CommandResultError.default_message(command, command_result.exit_status)
100
103
  logger.error("AwesomeSpawn: #{message}")
101
104
  logger.error("AwesomeSpawn: #{command_result.error}")
102
105
  raise CommandResultError.new(message, command_result)
@@ -112,8 +115,16 @@ module AwesomeSpawn
112
115
 
113
116
  private
114
117
 
115
- def launch(command, spawn_options = {})
116
- output, error, status = Open3.capture3(command, spawn_options)
117
- return output || "", error || "", status && status.exitstatus
118
+ def launch(env, command, spawn_options)
119
+ output, error, status = Open3.capture3(env, command, spawn_options)
120
+ return output, error, status && status.exitstatus
121
+ end
122
+
123
+ def parse_command_options(command, options)
124
+ options = options.dup
125
+ params = options.delete(:params)
126
+ env = options.delete(:env) || {}
127
+
128
+ [env, build_command_line(command, params), options]
118
129
  end
119
130
  end
@@ -10,6 +10,11 @@ module AwesomeSpawn
10
10
  # prevent command line injection. Keys as Symbols are prefixed with `--`,
11
11
  # and `_` is replaced with `-`.
12
12
  #
13
+ # - `{:k => "value"}` generates `-k value`
14
+ # - `[[:k, "value"]]` generates `-k value`
15
+ # - `{:k => "value"}` generates `-k=value`
16
+ # - `[[:k=, "value"]]` generates `-k=value` <br /><br />
17
+ #
13
18
  # - `{:key => "value"}` generates `--key value`
14
19
  # - `[[:key, "value"]]` generates `--key value`
15
20
  # - `{:key= => "value"}` generates `--key=value`
@@ -54,7 +59,7 @@ module AwesomeSpawn
54
59
 
55
60
  def sanitize(params)
56
61
  return [] if params.nil? || params.empty?
57
- sanitize_associative_array(params.to_a)
62
+ sanitize_associative_array(params)
58
63
  end
59
64
 
60
65
  def sanitize_associative_array(assoc_array)
@@ -66,8 +71,8 @@ module AwesomeSpawn
66
71
  def sanitize_item(item)
67
72
  case item
68
73
  when Array then sanitize_key_values(item[0], item[1..-1])
69
- when Hash then sanitize_associative_array(item.to_a)
70
- else sanitize_key_values(item, [])
74
+ when Hash then sanitize_associative_array(item)
75
+ else sanitize_key_values(item, nil)
71
76
  end
72
77
  end
73
78
 
@@ -78,12 +83,11 @@ module AwesomeSpawn
78
83
  KEY_REGEX = /^((?:--?)?)(.+?)(=?)$/
79
84
 
80
85
  def sanitize_key(key)
81
- return key if key.nil?
86
+ return key if key.nil? || key.empty?
82
87
  key = convert_symbol_key(key) if key.kind_of?(Symbol)
83
88
 
84
89
  case key
85
90
  when String
86
- return key if key.empty?
87
91
  prefix, key, suffix = KEY_REGEX.match(key)[1..3]
88
92
  "#{prefix}#{sanitize_value(key)}#{suffix}"
89
93
  else
@@ -92,13 +96,15 @@ module AwesomeSpawn
92
96
  end
93
97
 
94
98
  def convert_symbol_key(key)
95
- "--#{key.to_s.tr("_", "-")}"
99
+ key = key.to_s
100
+ dash = key =~ /^.=?$/ ? "-" : "--"
101
+ "#{dash}#{key.tr("_", "-")}"
96
102
  end
97
103
 
98
104
  def sanitize_value(value)
99
105
  case value
100
106
  when Enumerable
101
- value.to_a.collect { |i| sanitize_value(i) }.compact
107
+ value.collect { |i| sanitize_value(i) }.compact
102
108
  when NilClass
103
109
  value
104
110
  else
@@ -1,5 +1,9 @@
1
1
  module AwesomeSpawn
2
2
  class CommandResultError < StandardError
3
+ def self.default_message(command, exit_status)
4
+ "#{command} exit code: #{exit_status}"
5
+ end
6
+
3
7
  # @return [CommandResult] The command that caused the error
4
8
  attr_reader :result
5
9
 
@@ -0,0 +1,54 @@
1
+ require 'awesome_spawn'
2
+
3
+ module AwesomeSpawn
4
+ module SpecHelper
5
+ def disable_spawning
6
+ allow(Open3).to receive(:capture3)
7
+ .and_raise("Spawning is not permitted in specs. Please change your spec to use expectations/stubs.")
8
+ end
9
+
10
+ def enable_spawning
11
+ allow(Open3).to receive(:capture3).and_call_original
12
+ end
13
+
14
+ def stub_good_run
15
+ stub_run(:good, :run, command, options)
16
+ end
17
+
18
+ def stub_bad_run
19
+ stub_run(:bad, :run, command, options)
20
+ end
21
+
22
+ def stub_good_run!(command, options = {})
23
+ stub_run(:good, :run!, command, options)
24
+ end
25
+
26
+ def stub_bad_run!(command, options = {})
27
+ stub_run(:bad, :run!, command, options)
28
+ end
29
+
30
+ private
31
+
32
+ def stub_run(mode, method, command, options)
33
+ output = options[:output] || ""
34
+ error = options[:error] || (mode == :bad ? "Failure" : "")
35
+ exit_status = options[:exit_status] || (mode == :bad ? 1 : 0)
36
+
37
+ params = options[:params]
38
+ command_line = AwesomeSpawn.build_command_line(command, params)
39
+
40
+ args = [command]
41
+ args << {:params => params} if params
42
+
43
+ result = CommandResult.new(command_line, output, error, exit_status)
44
+ if method == :run! && mode == :bad
45
+ error_message = CommandResultError.default_message(command, exit_status)
46
+ error = CommandResultError.new(error_message, result)
47
+ expect(AwesomeSpawn).to receive(method).with(*args).and_raise(error)
48
+ else
49
+ expect(AwesomeSpawn).to receive(method).with(*args).and_return(result)
50
+ end
51
+ result
52
+ end
53
+ end
54
+ end
@@ -1,3 +1,3 @@
1
1
  module AwesomeSpawn
2
- VERSION = "1.3.0"
2
+ VERSION = "1.4.0"
3
3
  end
@@ -4,159 +4,177 @@ require 'pathname' # For Pathname specific specs
4
4
  describe AwesomeSpawn do
5
5
  subject { described_class }
6
6
 
7
- shared_examples_for "run" do
8
- context "options" do
9
- it "params won't be modified" do
10
- params = {:params => {:user => "bob"}}
11
- orig_params = params.dup
12
- allow(subject).to receive(:launch).with("true --user bob", {}).and_return(["", "", 0])
13
- subject.send(run_method, "true", params)
14
- expect(orig_params).to eq(params)
15
- end
7
+ shared_examples_for "parses" do
8
+ it "supports no options" do
9
+ allow(subject).to receive(:launch).with({}, "true", {}).and_return(["", "", 0])
10
+ subject.send(run_method, "true")
11
+ end
16
12
 
17
- it ":params won't be modified" do
18
- params = {:user => "bob"}
19
- orig_params = params.dup
20
- allow(subject).to receive(:launch).with("true --user bob", {}).and_return(["", "", 0])
21
- subject.send(run_method, "true", :params => params)
22
- expect(orig_params).to eq(params)
23
- end
13
+ it "supports option :params and :env" do
14
+ allow(subject).to receive(:launch).with({"VAR" => "x"}, "true --user bob", {}).and_return(["", "", 0])
15
+ subject.send(run_method, "true", :params => {:user => "bob"}, :env => {"VAR" => "x"})
16
+ end
24
17
 
25
- it ":in is not supported" do
26
- expect do
27
- subject.send(run_method, "true", :in => "/dev/null")
28
- end.to raise_error(ArgumentError, "options cannot contain :in")
29
- end
18
+ it "wont modify passed in options" do
19
+ options = {:params => {:user => "bob"}}
20
+ orig_options = options.dup
21
+ allow(subject).to receive(:launch).with({}, "true --user bob", {}).and_return(["", "", 0])
22
+ subject.send(run_method, "true", options)
23
+ expect(orig_options).to eq(options)
24
+ end
30
25
 
31
- it ":out is not supported" do
32
- expect do
33
- subject.send(run_method, "true", :out => "/dev/null")
34
- end.to raise_error(ArgumentError, "options cannot contain :out")
35
- end
26
+ it "wont modify passed in options[:params]" do
27
+ params = {:user => "bob"}
28
+ orig_params = params.dup
29
+ allow(subject).to receive(:launch).with({}, "true --user bob", {}).and_return(["", "", 0])
30
+ subject.send(run_method, "true", :params => params)
31
+ expect(orig_params).to eq(params)
32
+ end
36
33
 
37
- it ":err is not supported" do
38
- expect do
39
- subject.send(run_method, "true", :err => "/dev/null")
40
- end.to raise_error(ArgumentError, "options cannot contain :err")
41
- end
34
+ it "warns about option :in" do
35
+ expect do
36
+ subject.send(run_method, "true", :in => "/dev/null")
37
+ end.to raise_error(ArgumentError, "options cannot contain :in")
42
38
  end
43
39
 
44
- context "with real execution" do
45
- before do
46
- # Re-enable actual spawning just for these specs.
47
- enable_spawning
48
- end
40
+ it "warns about option :out" do
41
+ expect do
42
+ subject.send(run_method, "true", :out => "/dev/null")
43
+ end.to raise_error(ArgumentError, "options cannot contain :out")
44
+ end
45
+
46
+ it "warns about option :err" do
47
+ expect do
48
+ subject.send(run_method, "true", :err => "/dev/null")
49
+ end.to raise_error(ArgumentError, "options cannot contain :err")
50
+ end
51
+
52
+ it "warns about option :err when in an array" do
53
+ expect do
54
+ subject.send(run_method, "true", [:err, :out, 3] => "/dev/null")
55
+ end.to raise_error(ArgumentError, "options cannot contain :err, :out")
56
+ end
57
+ end
58
+
59
+ shared_examples_for "executes" do
60
+ before do
61
+ # Re-enable actual spawning just for these specs.
62
+ enable_spawning
63
+ end
49
64
 
50
- it "command ok exit ok" do
51
- expect(subject.send(run_method, "true")).to be_kind_of AwesomeSpawn::CommandResult
65
+ it "runs command" do
66
+ expect(subject.send(run_method, "true")).to be_kind_of AwesomeSpawn::CommandResult
67
+ end
68
+
69
+ it "detects bad commands" do
70
+ expect do
71
+ subject.send(run_method, "XXXXX --user=bob")
72
+ end.to raise_error(AwesomeSpawn::NoSuchFileError, "No such file or directory - XXXXX")
73
+ end
74
+
75
+ describe "parameters" do
76
+ it "changes directory" do
77
+ result = subject.send(run_method, "pwd", :chdir => "..")
78
+ expect(result.exit_status).to eq(0)
79
+ expect(result.output.chomp).to eq(File.expand_path("..", Dir.pwd))
52
80
  end
53
81
 
54
- it "command ok exit bad" do
55
- if run_method == "run!"
56
- error = nil
57
-
58
- # raise_error with do/end block notation is broken in rspec-expectations 2.14.x
59
- # and has been fixed in master but not yet released.
60
- # See: https://github.com/rspec/rspec-expectations/commit/b0df827f4c12870aa4df2f20a817a8b01721a6af
61
- expect { subject.send(run_method, "false") }.to raise_error {|e| error = e }
62
- expect(error).to be_kind_of AwesomeSpawn::CommandResultError
63
- expect(error.result).to be_kind_of AwesomeSpawn::CommandResult
64
- else
65
- expect { subject.send(run_method, "false") }.to_not raise_error
66
- end
82
+ it "passes input" do
83
+ result = subject.send(run_method, "cat", :in_data => "line1\nline2")
84
+ expect(result.exit_status).to eq(0)
85
+ expect(result.output).to eq("line1\nline2")
67
86
  end
68
87
 
69
- it "command bad" do
70
- expect do
71
- subject.send(run_method, "XXXXX --user=bob")
72
- end.to raise_error(AwesomeSpawn::NoSuchFileError, "No such file or directory - XXXXX")
88
+ it "sets environment" do
89
+ result = subject.send(run_method, "echo ${ABC}", :env => {"ABC" => "yay!"})
90
+ expect(result.exit_status).to eq(0)
91
+ expect(result.output).to eq("yay!\n")
73
92
  end
93
+ end
74
94
 
75
- context "with option" do
76
- it ":chdir" do
77
- result = subject.send(run_method, "pwd", :chdir => "..")
78
- expect(result.exit_status).to eq(0)
79
- expect(result.output.chomp).to eq(File.expand_path("..", Dir.pwd))
80
- end
81
-
82
- it ":in_data" do
83
- result = subject.send(run_method, "cat", :in_data => "line1\nline2")
84
- expect(result.exit_status).to eq(0)
85
- expect(result.output).to eq("line1\nline2")
86
- end
95
+ describe "result" do
96
+ it "contains #command_line" do
97
+ expect(subject.send(run_method, "echo", :params => %w(x)).command_line).to eq("echo x")
87
98
  end
88
99
 
89
- context "#exit_status" do
90
- it "command ok exit ok" do
91
- expect(subject.send(run_method, "echo", :params => %w(x)).command_line).to eq("echo x")
92
- end
100
+ it "contains #exit_status" do
101
+ expect(subject.send(run_method, "true").exit_status).to eq(0)
102
+ end
93
103
 
94
- it "command ok exit bad" do
95
- if run_method == "run"
96
- expect(subject.send(run_method, "echo x && false").command_line).to eq("echo x && false")
97
- end
98
- end
104
+ it "contains #output" do
105
+ expect(subject.send(run_method, "echo \"Hello World\"").output).to eq("Hello World\n")
99
106
  end
100
107
 
101
- context "#exit_status" do
102
- it "command ok exit ok" do
103
- expect(subject.send(run_method, "true").exit_status).to eq(0)
104
- end
108
+ it "contains #output when output redirected to stderr)" do
109
+ expect(subject.send(run_method, "echo \"Hello World\" >&2").output).to eq("")
110
+ end
105
111
 
106
- it "command ok exit bad" do
107
- expect(subject.send(run_method, "false").exit_status).to eq(1) if run_method == "run"
108
- end
112
+ it "contains #error when no error" do
113
+ expect(subject.send(run_method, "echo", :params => ["Hello World"]).error).to eq("")
109
114
  end
110
115
 
111
- context "#output" do
112
- it "command ok exit ok" do
113
- expect(subject.send(run_method, "echo \"Hello World\"").output).to eq("Hello World\n")
114
- end
116
+ it "contains #error" do
117
+ expect(subject.send(run_method, "echo \"Hello World\" >&2").error).to eq("Hello World\n")
118
+ end
119
+ end
120
+ end
115
121
 
116
- it "command ok exit bad" do
117
- expect(subject.send(run_method, "echo 'bad' && false").output).to eq("bad\n") if run_method == "run"
118
- end
122
+ shared_examples_for "executes with failures" do
123
+ context "result with a bad command" do
124
+ before do
125
+ # Re-enable actual spawning just for these specs.
126
+ enable_spawning
127
+ end
119
128
 
120
- it "has output even though output redirected to stderr" do
121
- expect(subject.send(run_method, "echo \"Hello World\" >&2").output).to eq("")
122
- end
129
+ it "contains #command_line" do
130
+ expect(subject.send(run_method, "echo x && false").command_line).to eq("echo x && false")
123
131
  end
124
132
 
125
- context "#error" do
126
- it "has error even though no error" do
127
- expect(subject.send(run_method, "echo", :params => ["Hello World"]).error).to eq("")
128
- end
133
+ it "contains #exit_status" do
134
+ expect(subject.send(run_method, "false").exit_status).to eq(1)
135
+ end
129
136
 
130
- it "command ok exit ok" do
131
- expect(subject.send(run_method, "echo \"Hello World\" >&2").error).to eq("Hello World\n")
132
- end
137
+ it "contains #output" do
138
+ expect(subject.send(run_method, "echo 'bad' && false").output).to eq("bad\n")
139
+ end
133
140
 
134
- it "command ok exit bad" do
135
- expect(subject.send(run_method, "echo 'bad' >&2 && false").error).to eq("bad\n") if run_method == "run"
136
- end
141
+ it "contains #error" do
142
+ expect(subject.send(run_method, "echo 'bad' >&2 && false").error).to eq("bad\n")
137
143
  end
138
144
  end
139
145
  end
140
146
 
141
- context ".build_command_line" do
142
- it "should handle single parameter" do
147
+ describe ".build_command_line" do
148
+ it "supports no parameters" do
143
149
  expect(subject.build_command_line("cmd")).to eq("cmd")
144
150
  end
145
151
 
146
- it "should handle multi parameter" do
152
+ it "supports single long parameter" do
147
153
  expect(subject.build_command_line("cmd", :status => true)).to eq("cmd --status true")
148
154
  end
149
- end
150
155
 
151
- context ".run" do
152
- include_examples "run" do
153
- let(:run_method) {"run"}
156
+ it "supports multiple long parameters" do
157
+ expect(subject.build_command_line("cmd", :status => true, :fast => false)).to eq("cmd --status true --fast false")
154
158
  end
155
159
  end
156
160
 
157
- context ".run!" do
158
- include_examples "run" do
159
- let(:run_method) {"run!"}
161
+ describe ".run" do
162
+ let(:run_method) { "run" }
163
+ include_examples "parses"
164
+ include_examples "executes"
165
+ include_examples "executes with failures"
166
+ end
167
+
168
+ describe ".run!" do
169
+ let(:run_method) { "run!" }
170
+ include_examples "parses"
171
+ include_examples "executes"
172
+
173
+ it "raises errors on failure" do
174
+ expect { subject.send(run_method, "false") }.to raise_error do |error|
175
+ expect(error).to be_kind_of AwesomeSpawn::CommandResultError
176
+ expect(error.result).to be_kind_of AwesomeSpawn::CommandResult
177
+ end
160
178
  end
161
179
  end
162
180
  end
@@ -47,6 +47,14 @@ describe AwesomeSpawn::CommandLineBuilder do
47
47
  assert_params({"--user=" => "bob"}, "--user=bob")
48
48
  end
49
49
 
50
+ it "with single letter symbol" do
51
+ assert_params({:a => "val"}, "-a val")
52
+ end
53
+
54
+ it "with single letter symbol" do
55
+ assert_params({:a= => "val"}, "-a=val")
56
+ end
57
+
50
58
  it "with value requiring sanitization" do
51
59
  assert_params({"--pass" => "P@$s w0rd%"}, "--pass P@\\$s\\ w0rd\\%")
52
60
  end
@@ -14,4 +14,8 @@ describe AwesomeSpawn::CommandResultError do
14
14
  it { expect(subject.message).to eq("false exit code: 1") }
15
15
  it { expect(subject.result).to be_a_failure }
16
16
  end
17
+
18
+ it ".default_message" do
19
+ expect(described_class.default_message("some message", 123)).to eq "some message exit code: 123"
20
+ end
17
21
  end
@@ -4,6 +4,9 @@
4
4
  # loaded once.
5
5
  #
6
6
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+
8
+ require 'awesome_spawn/spec_helper'
9
+
7
10
  RSpec.configure do |config|
8
11
  config.run_all_when_everything_filtered = true
9
12
  config.filter_run :focus
@@ -14,18 +17,10 @@ RSpec.configure do |config|
14
17
  # --seed 1234
15
18
  config.order = 'random'
16
19
 
20
+ include AwesomeSpawn::SpecHelper
17
21
  config.before { disable_spawning }
18
22
  end
19
23
 
20
- def disable_spawning
21
- allow(Open3).to receive(:capture3)
22
- .and_raise("Spawning is not permitted in specs. Please change your spec to use expectations/stubs.")
23
- end
24
-
25
- def enable_spawning
26
- allow(Open3).to receive(:capture3).and_call_original
27
- end
28
-
29
24
  begin
30
25
  require 'coveralls'
31
26
  Coveralls.wear!
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awesome_spawn
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Frey
@@ -11,62 +11,62 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-01-28 00:00:00.000000000 Z
14
+ date: 2016-01-26 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - ~>
20
+ - - "~>"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '1.3'
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
29
  version: '1.3'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rake
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - '>='
34
+ - - ">="
35
35
  - !ruby/object:Gem::Version
36
36
  version: '0'
37
37
  type: :development
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - '>='
41
+ - - ">="
42
42
  - !ruby/object:Gem::Version
43
43
  version: '0'
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: rspec
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - '>='
48
+ - - ">="
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  type: :development
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - '>='
55
+ - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: coveralls
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
- - - '>='
62
+ - - ">="
63
63
  - !ruby/object:Gem::Version
64
64
  version: '0'
65
65
  type: :development
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - '>='
69
+ - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
72
  description: AwesomeSpawn is a module that provides some useful features over Ruby's
@@ -80,23 +80,24 @@ executables: []
80
80
  extensions: []
81
81
  extra_rdoc_files: []
82
82
  files:
83
+ - ".rspec"
84
+ - ".yardopts"
85
+ - LICENSE.txt
86
+ - README.md
83
87
  - lib/awesome_spawn.rb
84
88
  - lib/awesome_spawn/command_line_builder.rb
85
89
  - lib/awesome_spawn/command_result.rb
86
90
  - lib/awesome_spawn/command_result_error.rb
87
91
  - lib/awesome_spawn/no_such_file_error.rb
88
92
  - lib/awesome_spawn/null_logger.rb
93
+ - lib/awesome_spawn/spec_helper.rb
89
94
  - lib/awesome_spawn/version.rb
90
- - .yardopts
91
- - README.md
92
- - LICENSE.txt
93
95
  - spec/awesome_spawn_spec.rb
94
96
  - spec/command_line_builder_spec.rb
95
97
  - spec/command_result_error_spec.rb
96
98
  - spec/command_result_spec.rb
97
99
  - spec/no_such_file_error_spec.rb
98
100
  - spec/spec_helper.rb
99
- - .rspec
100
101
  homepage: https://github.com/ManageIQ/awesome_spawn
101
102
  licenses:
102
103
  - MIT
@@ -107,17 +108,17 @@ require_paths:
107
108
  - lib
108
109
  required_ruby_version: !ruby/object:Gem::Requirement
109
110
  requirements:
110
- - - '>='
111
+ - - ">="
111
112
  - !ruby/object:Gem::Version
112
113
  version: '0'
113
114
  required_rubygems_version: !ruby/object:Gem::Requirement
114
115
  requirements:
115
- - - '>='
116
+ - - ">="
116
117
  - !ruby/object:Gem::Version
117
118
  version: '0'
118
119
  requirements: []
119
120
  rubyforge_project:
120
- rubygems_version: 2.0.14
121
+ rubygems_version: 2.4.5.1
121
122
  signing_key:
122
123
  specification_version: 4
123
124
  summary: AwesomeSpawn is a module that provides some useful features over Ruby's Kernel.spawn.
@@ -128,4 +129,4 @@ test_files:
128
129
  - spec/command_result_spec.rb
129
130
  - spec/no_such_file_error_spec.rb
130
131
  - spec/spec_helper.rb
131
- - .rspec
132
+ - ".rspec"