process_helper 0.0.2 → 0.0.3

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: 43c97ff5250f9529fb45ba6f84107cfbd5d380a7
4
- data.tar.gz: 6fa5e4e3fdc84e70e2a6cba5dbc039e7ba5e83d2
3
+ metadata.gz: d29ad0fa584a226473f5a65df1b814c0283958cb
4
+ data.tar.gz: 3732855e1fe9cb030c64d959555be9a342f3ae84
5
5
  SHA512:
6
- metadata.gz: 3475a513be15da0c3ba577b7a7d1cb131fa1061670e66f8b867387af3162a319960a1f12687102d01b1096feb904f61abe6cd1cfcd333763c13c33c51c2d27c9
7
- data.tar.gz: cd497e35282b042c5462ee1f76f4427a9ce8238a09f04facc8dc05cca7a357f2391b7f85f5c6aa1e437be4c879cb84873092860ec0cc5bd399c5d00d166f03c9
6
+ metadata.gz: 2960aaf0bc89d84df0a1c580569fb715434e393a8a6e2b352b901fb1f84daf3d9b78fb8b1c9d87955332f32de00bc5ac8c3448dccbb4bcf3b35b9188bf7e3c0a
7
+ data.tar.gz: 194c492795fa05862416a84eb7a3d5b346f35fa469287b379c488781f68a6bca1557325cf9ac595690a407a463422484ac472623427813d1424acb99f0636f92
data/README.md CHANGED
@@ -45,6 +45,18 @@ And then execute:
45
45
  Or install it yourself as:
46
46
 
47
47
  $ gem install process_helper
48
+
49
+ Or, if you want to avoid a Gem/RubyGems dependency, you can copy the `process_helper.rb` file from the `lib` folder directly into your project and require it:
50
+
51
+ # from a ruby file:
52
+ require_relative 'process_helper'
53
+
54
+ # from IRB:
55
+ require './process_helper'
56
+
57
+ # or put the directory containing it on the load path:
58
+ $LOAD_PATH.unshift('.')
59
+ require 'process_helper'
48
60
 
49
61
  ## Usage
50
62
 
@@ -128,6 +140,27 @@ Valid values are `:always`, `:error`, and `:never`. Default value is `:always`.
128
140
  error - i.e. non-zero or unexpected exit status
129
141
  * `:never` will never print output to STDOUT
130
142
 
143
+ ### `:timeout` (short form `:kill`)
144
+
145
+ ***WARNING! This option is beta and will be changed in a future release!***
146
+
147
+ Valid value is a float, e.g. `1.5`. Default value is nil/undefined.
148
+
149
+ * Currently controls how long `process_helper` will wait to read from
150
+ a blocked IO stream before timing out (via [IO.select](http://ruby-doc.org/core-2.2.0/IO.html#method-c-select)). For example, invoking `cat` with no arguments, which by default will continue accepting input until killed.
151
+ * If undefined (default), there will be no timeout, and `process_helper` will hang if a process hangs while waiting to read from IO.
152
+
153
+ ***The following changes are planned for this option:***
154
+
155
+ * Add validation of value (enforced to be a float).
156
+ * Add ability for the timeout value to also kill long running processes which are ***not*** in blocked waiting on an IO stream read (i.e. kill process regardless of any IO state, not just via [IO.selects](http://ruby-doc.org/core-2.2.0/IO.html#method-c-select) timeout support).
157
+ * Have both types of timeouts raise different and unique exception classes.
158
+ * Possibly have different option names to allow different timeout values for the two types of timeouts.
159
+
160
+ See [https://www.pivotaltracker.com/story/show/93303096](https://www.pivotaltracker.com/story/show/93303096) for more details.
161
+
162
+
163
+
131
164
  ## Warnings if failure output will be suppressed based on options
132
165
 
133
166
  ProcessHelper will give you a warning if you pass a combination of options that would
@@ -163,6 +196,10 @@ ProcessHelper::VERSION
163
196
  you have a single atomic commit on your branch.
164
197
  6. Create a new Pull Request
165
198
 
199
+ ## (Un)License
200
+
201
+ `process_helper` is (un)licensed under the [unlicense](http://unlicense.org/). So, feel free to copy it into your project (it's usable as a single required file and module), use it, abuse it, do what you will, no attribution required. :)
202
+
166
203
  ## Resources
167
204
 
168
205
  Other Ruby Process tools/libraries
File without changes
@@ -1,12 +1,9 @@
1
- require_relative 'process_helper/version'
2
- require_relative 'process_helper/empty_command_error'
3
- require_relative 'process_helper/invalid_options_error'
4
- require_relative 'process_helper/unexpected_exit_status_error'
5
- require_relative 'process_helper/unprocessed_input_error'
6
1
  require 'open3'
7
2
 
8
3
  # Makes it easier to spawn ruby sub-processes with proper capturing of stdout and stderr streams.
9
4
  module ProcessHelper
5
+ PROCESS_HELPER_VERSION = '0.0.3'
6
+
10
7
  def process(cmd, options = {})
11
8
  cmd = cmd.to_s
12
9
  fail ProcessHelper::EmptyCommandError, 'command must not be empty' if cmd.empty?
@@ -62,7 +59,7 @@ module ProcessHelper
62
59
  output_line = nil
63
60
  end
64
61
  rescue EOFError
65
- input_lines_processed -= 1 if !original_input_lines.empty? && !current_input_line_processed
62
+ input_lines_processed -= 1 if !original_input_lines.empty? && !current_input_line_processed
66
63
  fail_unless_all_input_lines_processed(original_input_lines, input_lines_processed)
67
64
  rescue IO::WaitReadable
68
65
  if input_lines.empty?
@@ -255,4 +252,22 @@ module ProcessHelper
255
252
  options[:expected_exit_status] =
256
253
  [options[:expected_exit_status]]
257
254
  end
255
+
256
+ # Custom Exception Classes:
257
+
258
+ # Error which is raised when a command is empty
259
+ class EmptyCommandError < RuntimeError
260
+ end
261
+
262
+ # Error which is raised when options are invalid
263
+ class InvalidOptionsError < RuntimeError
264
+ end
265
+
266
+ # Error which is raised when a command returns an unexpected exit status (return code)
267
+ class UnexpectedExitStatusError < RuntimeError
268
+ end
269
+
270
+ # Error which is raised when command exists while input lines remain unprocessed
271
+ class UnprocessedInputError < RuntimeError
272
+ end
258
273
  end
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'process_helper/version'
4
+ require 'process_helper'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'process_helper'
8
- spec.version = ProcessHelper::VERSION
8
+ spec.version = ProcessHelper::PROCESS_HELPER_VERSION
9
9
  spec.authors = ['Glenn Oppegard', 'Chad Woolley']
10
10
  spec.email = ['oppegard@gmail.com', 'thewoolleyman@gmail.com']
11
11
  spec.summary = "Makes it easier to spawn ruby sub-processes with proper capturing /
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'codeclimate-test-reporter'
25
25
  spec.add_development_dependency 'rake', '~> 10'
26
26
  spec.add_development_dependency 'rspec', '~> 3.1'
27
+ spec.add_development_dependency 'rspec-retry', '~> 0.4'
27
28
  spec.add_development_dependency 'rubocop', '= 0.29.1' # exact version for static analyis libs
28
29
  spec.add_development_dependency 'ruby-lint', '= 2.0.2' # exact version for static analyis libs
29
30
  end
data/spec/spec_helper.rb CHANGED
@@ -4,14 +4,18 @@ if ENV['CODECLIMATE_REPO_TOKEN']
4
4
  end
5
5
 
6
6
  require 'rspec'
7
+ require 'rspec/retry'
7
8
  require_relative '../lib/process_helper'
8
9
 
9
10
  RSpec::Matchers.define_negated_matcher :not_output, :output
10
11
  RSpec::Matchers.define_negated_matcher :not_raise_error, :raise_error
11
12
 
12
13
  # RSpec config
13
- # RSpec.configure do |c|
14
- # end
14
+ RSpec.configure do |config|
15
+ config.verbose_retry = true
16
+ config.default_retry_count = 5
17
+ config.default_sleep_interval = 1
18
+ end
15
19
 
16
20
  # RSpec helper methods
17
21
  # module SpecHelper
data/spec/version_spec.rb CHANGED
@@ -2,6 +2,6 @@ require_relative 'spec_helper'
2
2
 
3
3
  RSpec.describe 'version' do
4
4
  it 'is semantic' do
5
- expect(::ProcessHelper::VERSION).to match(/^\d\.\d\.\d\.*\w*$/)
5
+ expect(::ProcessHelper::PROCESS_HELPER_VERSION).to match(/^\d\.\d\.\d\.*\w*$/)
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: process_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Glenn Oppegard
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-30 00:00:00.000000000 Z
12
+ date: 2015-05-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -67,6 +67,20 @@ dependencies:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '3.1'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec-retry
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '0.4'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '0.4'
70
84
  - !ruby/object:Gem::Dependency
71
85
  name: rubocop
72
86
  requirement: !ruby/object:Gem::Requirement
@@ -108,15 +122,10 @@ files:
108
122
  - ".ruby-version"
109
123
  - ".travis.yml"
110
124
  - Gemfile
111
- - LICENSE
112
125
  - README.md
113
126
  - Rakefile
127
+ - UNLICENSE
114
128
  - lib/process_helper.rb
115
- - lib/process_helper/empty_command_error.rb
116
- - lib/process_helper/invalid_options_error.rb
117
- - lib/process_helper/unexpected_exit_status_error.rb
118
- - lib/process_helper/unprocessed_input_error.rb
119
- - lib/process_helper/version.rb
120
129
  - process_helper.gemspec
121
130
  - ruby-lint.yml
122
131
  - spec/error_handling_spec.rb
@@ -1,5 +0,0 @@
1
- # Error which is raised when a command is empty
2
- module ProcessHelper
3
- class EmptyCommandError < RuntimeError
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- # Error which is raised when options are invalid
2
- module ProcessHelper
3
- class InvalidOptionsError < RuntimeError
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- # Error which is raised when a command returns an unexpected exit status (return code)
2
- module ProcessHelper
3
- class UnexpectedExitStatusError < RuntimeError
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- # Error which is raised when command exists while input lines remain unprocessed
2
- module ProcessHelper
3
- class UnprocessedInputError < RuntimeError
4
- end
5
- end
@@ -1,4 +0,0 @@
1
- # Library version
2
- module ProcessHelper
3
- VERSION = '0.0.2'
4
- end