cmds 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: 86dd72194bff91bb75b4d30183cebd97dd8c847e
4
- data.tar.gz: 670e3f676d609b35590028de05b8ad5f85da8794
3
+ metadata.gz: 746aa0ec8697ab254e151c8000620c7a3a6d8c52
4
+ data.tar.gz: d15e1589321da1a22ad00d98cb12875d71a0ea7b
5
5
  SHA512:
6
- metadata.gz: 600cb0e5445461a5d15285ead1600a1daf92b6d41733f61d7ced4921e24d5fecece1d15aa925c4a6ab01e1ae8a13d04a3faade74a0f67b0ddf7263c9c86d24a6
7
- data.tar.gz: 5273c6639247119a0d527787bf6ce5b71e8004b4ea33b4ac599a5f21649f2bcc0c075c2e21b2083037aec1ce56d1ed81cf13fd8930103f9998d8da7cb3a67f9a
6
+ metadata.gz: 186e86b834c8d38aa58b624c394acc850848fff6faac92ff10ecd3336992beff7a6b9d3a139baaec9148b12e1fe036c04a29bf954dde6c27a14309cf69304f98
7
+ data.tar.gz: de1c715943e12a45f003e5e9a4b0c9b63f8443c8c42a64a35d983f6d742404d82b28eddc06ad238d1777e3aaf20bb1b95ccc4871abfce1090d3b52c822e7846b
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # use local
4
- gem 'nrser', '~> 0.0', :path => '../nrser-ruby'
4
+ # gem 'nrser', '~> 0.0', :path => '../nrser-ruby'
5
5
 
6
6
  # Specify your gem's dependencies in cmds.gemspec
7
7
  gemspec
@@ -27,6 +27,18 @@ class Cmds
27
27
  def error?
28
28
  ! ok?
29
29
  end
30
+
31
+ # raises an error if there was one
32
+ def raise_error
33
+ if error?
34
+ msg = NRSER.squish <<-BLOCK
35
+ command `#{ @cmd }` exited with status #{ @status }
36
+ and stderr output #{ err.inspect }
37
+ BLOCK
38
+
39
+ raise SystemCallError.new msg, @status
40
+ end
41
+ end
30
42
  end
31
43
 
32
44
  # extension of Erubis' EscapedEruby (which auto-escapes `<%= %>` and
@@ -199,14 +211,17 @@ class Cmds
199
211
  NRSER.squish erb.result(context.get_binding)
200
212
  end # ::sub
201
213
 
202
- def self.subs_to_args_and_kwds subs
214
+ def self.subs_to_args_kwds_input subs
203
215
  args = []
204
216
  kwds = {}
217
+ input = nil
205
218
 
206
219
  case subs.length
207
220
  when 0
208
- # pass
221
+ # nothing to do
209
222
  when 1
223
+ # can either be a hash, which is interpreted as a keywords,
224
+ # or an array, which is interpreted as positional arguments
210
225
  case subs[0]
211
226
  when Hash
212
227
  kwds = subs[0]
@@ -220,7 +235,9 @@ class Cmds
220
235
  BLOCK
221
236
  end
222
237
 
223
- when 2
238
+ when 2, 3
239
+ # first arg needs to be an array, second a hash, and optional third
240
+ # can be input
224
241
  unless subs[0].is_a? Array
225
242
  raise TypeError.new NRSER.squish <<-BLOCK
226
243
  first *subs arg needs to be an array, not #{ subs[0].inspect }
@@ -229,23 +246,45 @@ class Cmds
229
246
 
230
247
  unless subs[1].is_a? Hash
231
248
  raise TypeError.new NRSER.squish <<-BLOCK
232
- third *subs arg needs to be a Hash, not #{ subs[1].inspect }
249
+ second *subs arg needs to be a Hash, not #{ subs[1].inspect }
233
250
  BLOCK
234
251
  end
235
252
 
236
- args, kwds = subs
253
+ args, kwds, input = subs
237
254
  else
238
255
  raise ArgumentError.new NRSER.squish <<-BLOCK
239
256
  must provide one or two *subs arguments, received #{ 1 + subs.length }
240
257
  BLOCK
241
258
  end
242
259
 
243
- [args, kwds]
260
+ [args, kwds, input]
244
261
  end
245
262
 
246
263
  # create a new Cmd from template and subs and call it
247
264
  def self.run template, *subs
248
- self.new(template, *subs).call
265
+ args, kwds, input = subs_to_args_kwds_input subs
266
+ self.new(template, args: args, kwds: kwds, input: input).call
267
+ end
268
+
269
+ def self.ok? template, *subs
270
+ args, kwds, input = subs_to_args_kwds_input subs
271
+ self.new(template, args: args, kwds: kwds, input: input).ok?
272
+ end
273
+
274
+ def self.error? template, *subs
275
+ args, kwds, input = subs_to_args_kwds_input subs
276
+ self.new(template, args: args, kwds: kwds, input: input).error?
277
+ end
278
+
279
+ def self.raise_on_error template, *subs
280
+ args, kwds, input = subs_to_args_kwds_input subs
281
+ self.new(
282
+ template,
283
+ args: args,
284
+ kwds: kwds,
285
+ input: input,
286
+ raise_on_error: true
287
+ ).call
249
288
  end
250
289
 
251
290
  def self.replace_shortcuts template
@@ -282,35 +321,59 @@ class Cmds
282
321
  )
283
322
  end
284
323
 
285
- attr_reader :tempalte, :args, :kwds
324
+ attr_reader :tempalte, :args, :kwds, :input, :raise_on_error
286
325
 
287
- def initialize template, *subs
326
+ def initialize template, opts = {}
288
327
  @template = template
289
- @args, @kwds = Cmds.subs_to_args_and_kwds subs
328
+ @args = opts[:args] || []
329
+ @kwds = opts[:kwds] || {}
330
+ @input = opts[:input] || nil
331
+ @raise_on_error = opts[:raise_on_error] || false
290
332
  end #initialize
291
333
 
292
334
  def call *subs
293
- args, kwds = merge_subs subs
335
+ # merge any stored args and kwds and get any overriding input
336
+ args, kwds, input = merge_subs subs
294
337
 
295
338
  cmd = Cmds.sub @template, args, kwds
296
339
 
297
- out, err, status = Open3.capture3 cmd
340
+ out, err, status = if input.nil?
341
+ Open3.capture3 cmd
342
+ else
343
+ Open3.capture3 cmd, stdin_data: input
344
+ end
345
+
346
+ result = Cmds::Result.new cmd, status.exitstatus, out, err
347
+
348
+ result.raise_error if @raise_on_error
298
349
 
299
- Cmds::Result.new cmd, status, out, err
350
+ return result
300
351
  end #call
301
352
 
302
353
  # returns a new `Cmds` with the subs merged in
303
354
  def curry *subs
304
- self.class.new @template, *merge_subs(subs)
355
+ args, kwds, input = merge_subs(subs)
356
+ self.class.new @template, args: args, kwds: kwds, input: input
357
+ end
358
+
359
+ def ok?
360
+ call.ok?
361
+ end
362
+
363
+ def error?
364
+ call.error?
305
365
  end
306
366
 
307
367
  private
308
368
 
309
369
  def merge_subs subs
310
370
  # break `subs` into `args` and `kwds`
311
- args, kwds = Cmds.subs_to_args_and_kwds subs
371
+ args, kwds, input = Cmds.subs_to_args_kwds_input subs
372
+
373
+ # use any default input if we didn't get a new one
374
+ input = @input if input.nil?
312
375
 
313
- [@args + args, @kwds.merge(kwds)]
376
+ [@args + args, @kwds.merge(kwds), input]
314
377
  end #merge_subs
315
378
 
316
379
  # end private
@@ -320,3 +383,11 @@ end # Cmds
320
383
  def Cmds *args
321
384
  Cmds.run *args
322
385
  end
386
+
387
+ def Cmds? *args
388
+ Cmds.ok? *args
389
+ end
390
+
391
+ def Cmds! *args
392
+ Cmds.raise_on_error *args
393
+ end
@@ -1,3 +1,3 @@
1
1
  class Cmds
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -13,4 +13,15 @@ describe "Cmds::call" do
13
13
  end
14
14
  end
15
15
  end # is reusable
16
- end # Cmds::run
16
+
17
+ it "accepts input" do
18
+ input = <<-BLOCK
19
+ one
20
+ two
21
+ three
22
+ four!
23
+ BLOCK
24
+
25
+ expect( Cmds.new("wc -l", input: input).call.out ).to match /^\s+4$/
26
+ end
27
+ end # Cmds::call
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Cmds::error?" do
4
+ it "works" do
5
+ expect( Cmds.error? "true").to be false
6
+ expect( Cmds.error? "false").to be true
7
+ end
8
+ end # Cmds::ok?
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Cmds::ok?" do
4
+ it "works" do
5
+ expect( Cmds.ok? "true").to be true
6
+ expect( Cmds.ok? "false").to be false
7
+ end
8
+ end # Cmds::ok?
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Cmds::raise_on_error" do
4
+ it "should raise an error when the command fails" do
5
+ expect{ Cmds.raise_on_error "exit 1" }.to raise_error Errno::EPERM
6
+ end
7
+
8
+ it "should do the same for Cmds!" do
9
+ expect{ Cmds! "exit 1" }.to raise_error Errno::EPERM
10
+ end
11
+ end # Cmds::run
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cmds
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
  - nrser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-07 00:00:00.000000000 Z
11
+ date: 2015-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nrser
@@ -103,7 +103,10 @@ files:
103
103
  - spec/cmds/call_spec.rb
104
104
  - spec/cmds/curry_spec.rb
105
105
  - spec/cmds/erb_context_spec.rb
106
+ - spec/cmds/error_spec.rb
106
107
  - spec/cmds/expand_option_hash_spec.rb
108
+ - spec/cmds/ok_spec.rb
109
+ - spec/cmds/raise_on_error_spec.rb
107
110
  - spec/cmds/replace_shortcuts_spec.rb
108
111
  - spec/cmds/run_spec.rb
109
112
  - spec/cmds/sub_spec.rb
@@ -138,7 +141,10 @@ test_files:
138
141
  - spec/cmds/call_spec.rb
139
142
  - spec/cmds/curry_spec.rb
140
143
  - spec/cmds/erb_context_spec.rb
144
+ - spec/cmds/error_spec.rb
141
145
  - spec/cmds/expand_option_hash_spec.rb
146
+ - spec/cmds/ok_spec.rb
147
+ - spec/cmds/raise_on_error_spec.rb
142
148
  - spec/cmds/replace_shortcuts_spec.rb
143
149
  - spec/cmds/run_spec.rb
144
150
  - spec/cmds/sub_spec.rb