clip 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.
Files changed (4) hide show
  1. data/README.txt +16 -3
  2. data/lib/clip.rb +25 -2
  3. data/spec/clip_spec.rb +23 -0
  4. metadata +3 -3
data/README.txt CHANGED
@@ -3,9 +3,9 @@
3
3
  == DESCRIPTION:
4
4
 
5
5
  Yeah yeah yeah. Why in heaven's name do we need yet another
6
- command-line parser? Well, OptionParser is all well and good, but
7
- doesn't grease the skids as much as I'd like. So I wrote this little
8
- library... driven completely by specs.
6
+ command-line parser? Well, OptionParser is all well and good[1], but
7
+ doesn't grease the skids as much as I'd like. Simple things should be
8
+ dead simple (1 LOC), and more flexibility is there if you need it.
9
9
 
10
10
  Cheers!
11
11
 
@@ -68,6 +68,19 @@ a named option or flag. Whatever remains on the command line that doesn't fit
68
68
  either a flag or an option/value pair will be made available via the
69
69
  <tt>remainder</tt> method of the returned object.
70
70
 
71
+ Sometimes even passing a block is overkill. Say you want to grab just
72
+ a hash from a set of name/value argument pairs provided:
73
+
74
+ $ my_clip_script subcommand -c config.yml # Allows:
75
+ Clip.hash == { 'c' => 'config.yml' }
76
+
77
+ $ my_clip_script -c config.yml --mode optimistic # Allows:
78
+ Clip.hash == { 'c' => 'config.yml', 'mode' => 'optimistic' }
79
+
80
+ ----------------------------------------
81
+
82
+ [1] - Not really.
83
+
71
84
  == LICENSE:
72
85
 
73
86
  (The MIT License)
@@ -13,7 +13,7 @@ def Clip(args=ARGV)
13
13
  end
14
14
 
15
15
  module Clip
16
- VERSION = "0.0.2"
16
+ VERSION = "0.0.3"
17
17
 
18
18
  ##
19
19
  # Indicates that the parser was incorrectly configured in the
@@ -338,4 +338,27 @@ module Clip
338
338
  sprintf('-%-2s --%-10s %s', @short, @long, @description)
339
339
  end
340
340
  end
341
- end
341
+
342
+ HASHER_REGEX = /^--?\w+/
343
+ ##
344
+ # Turns ARGV into a hash.
345
+ #
346
+ # my_clip_script -c config.yml # Clip.hash == { 'c' => 'config.yml' }
347
+ # my_clip_script command -c config.yml # Clip.hash == { 'c' => 'config.yml' }
348
+ # my_clip_script com -c config.yml -d # Clip.hash == { 'c' => 'config.yml' }
349
+ # my_clip_script -c config.yml --mode optimistic
350
+ # # Clip.hash == { 'c' => 'config.yml', 'mode' => 'optimistic' }
351
+ def self.hash(argv = ARGV.dup, values = [])
352
+ @hash ||= begin
353
+ argv.shift until argv.first =~ HASHER_REGEX
354
+ while argv.first =~ HASHER_REGEX and argv.size >= 2 do
355
+ values += [argv.shift.sub(/^--?/, ''), argv.shift]
356
+ end
357
+ Hash[*values]
358
+ end
359
+ end
360
+
361
+ ##
362
+ # Clear the cached hash value. Probably only useful for tests, but whatever.
363
+ def Clip.reset_hash!; @hash = nil end
364
+ end
@@ -288,4 +288,27 @@ describe Clip do
288
288
  opts.value.should == 123
289
289
  end
290
290
  end
291
+
292
+ describe "when parsing ARGV as a hash" do
293
+ setup { Clip.reset_hash! }
294
+
295
+ it "should make sense of '-c my_config.yml'" do
296
+ Clip.hash(['-c', 'config.yml']).should == { 'c' => 'config.yml' }
297
+ end
298
+
299
+ it "should only use pairs of dash + value args" do
300
+ Clip.hash(['-c', 'config.yml',
301
+ '-d']).should == { 'c' => 'config.yml' }
302
+ end
303
+
304
+ it "should ignore leading/trailing non-dashed arguments" do
305
+ Clip.hash(['subcommand', '-c', 'config.yml',
306
+ 'do']).should == { 'c' => 'config.yml' }
307
+ end
308
+
309
+ it "should allow -s (short) or --long arguments" do
310
+ Clip.hash(['-c', 'config.yml', '--mode', 'optimistic']).
311
+ should == { 'c' => 'config.yml', 'mode' => 'optimistic' }
312
+ end
313
+ end
291
314
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clip
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
  - Alex Vollmer
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-05-20 00:00:00 -07:00
12
+ date: 2008-06-05 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -60,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  requirements: []
61
61
 
62
62
  rubyforge_project: clip
63
- rubygems_version: 1.1.0
63
+ rubygems_version: 1.1.1
64
64
  signing_key:
65
65
  specification_version: 2
66
66
  summary: Command-line parsing made short and sweet