cmds 0.2.0 → 0.2.1

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: 5544a81fa667995302720f92e88872e4949466ee
4
- data.tar.gz: 516e1876a14034bdba7b164684335bffbe1f07aa
3
+ metadata.gz: ec573a2d3357aa33be6e99e15cfbbf17208b5f7b
4
+ data.tar.gz: 3650ce87a15e971b126395e11e86063b7605312a
5
5
  SHA512:
6
- metadata.gz: 1037d17f966fe5bc8ae2c463e4b02f3238eaa169463f57421d8890fe200a212aa15307b09adc2c3f87b68272318200d9709f12a4e56248593288c1988c7d9307
7
- data.tar.gz: e24cdefc7757abaf9e22da51b80201698373952878d41f3f011fb11fd90ec0c48087fda7b4fafe3a7cad2a85d1130699bacfde90dec0a7898441ab142c74d6f4
6
+ metadata.gz: 7a162d0e9dd3acd278e7c73274a13f14771f7c8dbd19f3bbd2427ac1830acab26930cb7daac1adb5030cbef0083fd94974cd4efb838a638bcdc26ad64e09fd35
7
+ data.tar.gz: dd7ad5d87fb29f2f3b36d22c8f440e6521c07df69f73a29a067910fa03bb8bd4b551623376802ea33995e7c3413a46af20878b2a4c63b49fc74edeeddf607f93
data/cmds.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency 'nrser', '>= 0.0.13'
21
+ spec.add_dependency 'nrser', '>= 0.0.17'
22
22
  spec.add_dependency 'erubis', '~> 2.7'
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.5"
data/lib/cmds/result.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  require 'nrser/refinements'
2
2
 
3
- using NRSER
4
-
5
3
  class Cmds
6
4
  # a simple data structure returned from calling {Cmds#capture}
7
5
  # on a {Cmd} instance.
@@ -55,14 +53,7 @@ class Cmds
55
53
  # @raise [SystemCallError] if the command failed.
56
54
  #
57
55
  def assert
58
- if error?
59
- msg = <<-BLOCK.squish
60
- command `#{ @cmd }` exited with status #{ @status }
61
- and stderr #{ err.inspect }
62
- BLOCK
63
-
64
- raise SystemCallError.new msg, @status
65
- end
56
+ Cmds.check_status @cmd, @status, @err
66
57
  self
67
58
  end # raise_error
68
59
  end # Result
data/lib/cmds/spawn.rb CHANGED
@@ -10,8 +10,6 @@ require 'nrser/refinements'
10
10
  require 'cmds/pipe'
11
11
  require 'cmds/io_handler'
12
12
 
13
- using NRSER
14
-
15
13
  class Cmds
16
14
  # internal core function to spawn and stream inputs and/or outputs using
17
15
  # threads.
@@ -42,6 +40,9 @@ class Cmds
42
40
  # - block is called with the {Cmds::IOHandler} instance for the
43
41
  # execution, which it can use to handle input and outputs.
44
42
  #
43
+ # @return [Fixnum]
44
+ # command exit status.
45
+ #
45
46
  # @raise [ArgumentError]
46
47
  # if `&io_block` has arity greater than 1.
47
48
  #
@@ -76,7 +77,7 @@ class Cmds
76
77
  input = handler.in unless handler.in.nil?
77
78
  else
78
79
  # bad block provided
79
- raise ArgumentError.new <<-BLOCK.squish
80
+ raise ArgumentError.new NRSER.squish <<-BLOCK
80
81
  provided input block must have arity 0 or 1
81
82
  BLOCK
82
83
  end # case io_block.arity
@@ -207,7 +208,7 @@ class Cmds
207
208
  if line.nil?
208
209
  Cmds.debug "received nil, output done."
209
210
  else
210
- Cmds.debug <<-BLOCK.squish
211
+ Cmds.debug NRSER.squish <<-BLOCK
211
212
  received #{ line.bytesize } bytes, passing to handler.
212
213
  BLOCK
213
214
  end
@@ -250,7 +251,7 @@ class Cmds
250
251
  if @assert && status != 0
251
252
  # we don't necessarily have the err output, so we can't include it
252
253
  # in the error message
253
- msg = <<-BLOCK.squish
254
+ msg = NRSER.squish <<-BLOCK
254
255
  streamed command `#{ cmd }` exited with status #{ status }
255
256
  BLOCK
256
257
 
@@ -0,0 +1,51 @@
1
+ class Cmds
2
+ # stream a command.
3
+ #
4
+ # @param *args (see #capture)
5
+ # @param **kwds (see #capture)
6
+ #
7
+ # @param [nil | String | #read] &io_block
8
+ # string or readable IO-like object to use as input to the command.
9
+ #
10
+ # @return [Fixnum]
11
+ # command exit status.
12
+ #
13
+ def stream *args, **kwds, &io_block
14
+ Cmds.debug "entering Cmd#stream",
15
+ args: args,
16
+ kwds: kwds,
17
+ io_block: io_block
18
+
19
+ Cmds.spawn prepare(*args, **kwds),
20
+ input: @input,
21
+ # include env if mode is spawn argument
22
+ env: (@env_mode == :spawn_arg ? @env : {}),
23
+ chdir: @chdir,
24
+ &io_block
25
+ end # #stream
26
+
27
+ # stream and raise an error if exit code is not 0.
28
+ #
29
+ # @param *args (see #capture)
30
+ # @param **kwds (see #capture)
31
+ # @param &io_block (see #stream)
32
+ # @return [Fixnum] (see #stream)
33
+ #
34
+ # @raise [SystemCallError]
35
+ # if exit status is not 0.
36
+ #
37
+ def stream! *args, **kwds, &io_block
38
+ cmd = prepare(*args, **kwds)
39
+
40
+ status = Cmds.spawn cmd,
41
+ input: @input,
42
+ # include env if mode is spawn argument
43
+ env: (@env_mode == :spawn_arg ? @env : {}),
44
+ chdir: @chdir,
45
+ &io_block
46
+
47
+ Cmds.check_status cmd, status
48
+
49
+ status
50
+ end # #stream!
51
+ end # Cmds
data/lib/cmds/sugar.rb CHANGED
@@ -93,8 +93,8 @@ class Cmds
93
93
  end
94
94
 
95
95
 
96
- def self.stream! template, *subs, &input_block
97
- Cmds.new(template, assert: true).stream *subs, &input_block
96
+ def self.stream! template, *args, **kwds, &io_block
97
+ Cmds.new(template).stream! *args, **kwds, &io_block
98
98
  end # ::stream!
99
99
 
100
100
 
@@ -1,8 +1,6 @@
1
1
  require 'json'
2
2
  require 'nrser/refinements'
3
3
 
4
- using NRSER
5
-
6
4
  require_relative "defaults"
7
5
 
8
6
  class Cmds
@@ -39,7 +37,7 @@ class Cmds
39
37
  opts = defaults opts, [:array_mode, :array_join_string, :false_mode]
40
38
 
41
39
  unless name.is_a?(String) && name.length > 0
42
- raise ArgumentError.new <<-END.squish
40
+ raise ArgumentError.new NRSER.squish <<-END
43
41
  `name` must be a String of length greater than zero,
44
42
  found #{ name.inspect }
45
43
  END
@@ -78,7 +76,7 @@ class Cmds
78
76
 
79
77
  else
80
78
  # SOL
81
- raise ArgumentError.new <<-END.squish
79
+ raise ArgumentError.new NRSER.squish <<-END
82
80
  bad array_mode option: #{ opts[:array_mode] },
83
81
  should be :repeat, :join or :json
84
82
  END
@@ -103,7 +101,7 @@ class Cmds
103
101
  ["--no-#{ esc(name) }"]
104
102
 
105
103
  else
106
- raise ArgumentError.new <<-END.squish
104
+ raise ArgumentError.new NRSER.squish <<-END
107
105
  bad :false_mode option: #{ opts[:false_mode] },
108
106
  should be :omit or :no
109
107
  END
data/lib/cmds/util.rb CHANGED
@@ -3,6 +3,10 @@
3
3
  # stdlib
4
4
  require 'shellwords'
5
5
 
6
+ # deps
7
+ require 'nrser'
8
+
9
+ # package
6
10
  require 'cmds/util/tokenize_options'
7
11
 
8
12
  class Cmds
@@ -105,4 +109,30 @@ class Cmds
105
109
  )
106
110
  end # ::replace_shortcuts
107
111
 
112
+ # raise an error unless the exit status is 0.
113
+ #
114
+ # @param [String] cmd
115
+ # the command sting that was executed.
116
+ #
117
+ # @param [Fixnum] status
118
+ # the command's exit status.
119
+ #
120
+ # @return [nil]
121
+ #
122
+ # @raise [SystemCallError]
123
+ # if exit status is not 0.
124
+ #
125
+ def self.check_status cmd, status, err = nil
126
+ unless status.equal? 0
127
+ msg = NRSER.squish <<-END
128
+ command `#{ cmd }` exited with status #{ status }
129
+ END
130
+
131
+ if err
132
+ msg += " and stderr:\n\n" + err
133
+ end
134
+
135
+ raise SystemCallError.new msg, status
136
+ end
137
+ end # .assert
108
138
  end # class Cmds
data/lib/cmds/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Cmds
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
data/lib/cmds.rb CHANGED
@@ -10,6 +10,7 @@ require 'cmds/erb_context'
10
10
  require 'cmds/shell_eruby'
11
11
  require 'cmds/result'
12
12
  require 'cmds/sugar'
13
+ require 'cmds/stream'
13
14
 
14
15
  class Cmds
15
16
  # ERB stirng template (with Cmds-specific extensions) for the command.
@@ -180,35 +181,20 @@ class Cmds
180
181
  def prepare *args, **kwds
181
182
  Cmds.format render(*args, **kwds), @format
182
183
  end # #prepare
183
-
184
-
185
- def stream *args, **kwds, &io_block
186
- Cmds.debug "entering Cmd#stream",
187
- args: args,
188
- kwds: kwds,
189
- io_block: io_block
190
-
191
- Cmds.spawn prepare(*args, **kwds),
192
- input: @input,
193
- # include env if mode is spawn argument
194
- env: (@env_mode == :spawn_arg ? @env : {}),
195
- chdir: @chdir,
196
- &io_block
197
- end # #stream
198
-
184
+
199
185
 
200
186
  # executes the command and returns a {Cmds::Result} with the captured
201
187
  # outputs.
202
188
  #
203
- # @param [Array<Object>] args
189
+ # @param [Array<Object>] *args
204
190
  # positional parameters to append to those in `@args` for rendering
205
191
  # into the command string.
206
192
  #
207
- # @param [Hash{Symbol => Object}] kwds
193
+ # @param [Hash{Symbol => Object}] **kwds
208
194
  # keyword parameters that override those in `@kwds` for rendering
209
195
  # into the command string.
210
196
  #
211
- # @param [#call] input_block
197
+ # @param [#call] &input_block
212
198
  # optional block that returns a string or readable object to override
213
199
  # `@input`.
214
200
  #
@@ -303,11 +289,6 @@ class Cmds
303
289
  end
304
290
 
305
291
 
306
- # def assert
307
- # capture.raise_error
308
- # end
309
-
310
-
311
292
  def proxy
312
293
  stream do |io|
313
294
  io.in = $stdin
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Cmds::stream" do
3
+ describe 'Cmds#stream' do
4
4
  let(:times) { 5 }
5
5
 
6
6
  it "writes to $stdout and $stderr by default" do
@@ -54,5 +54,16 @@ describe "Cmds::stream" do
54
54
 
55
55
  expect(out).to match /^\s+3\n$/
56
56
  end
57
+ end # input
58
+
59
+ it "returns the exit status" do
60
+ expect(Cmds.new('true').stream).to be 0
61
+ expect(Cmds.new('false').stream).to be 1
57
62
  end
58
- end # Cmds::stream
63
+ end # Cmds#stream
64
+
65
+ describe 'Cmds#stream!' do
66
+ it "raises when exit code is not 0" do
67
+ expect { Cmds.new('false').stream! }.to raise_error SystemCallError
68
+ end
69
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cmds
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - nrser
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.0.13
19
+ version: 0.0.17
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.0.13
26
+ version: 0.0.17
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: erubis
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -149,6 +149,7 @@ files:
149
149
  - lib/cmds/result.rb
150
150
  - lib/cmds/shell_eruby.rb
151
151
  - lib/cmds/spawn.rb
152
+ - lib/cmds/stream.rb
152
153
  - lib/cmds/sugar.rb
153
154
  - lib/cmds/util.rb
154
155
  - lib/cmds/util/defaults.rb