drydock 0.6.3 → 0.6.5

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.
@@ -5,6 +5,26 @@ DRYDOCK, CHANGES
5
5
  * Support putting descriptions into resource file (or __END__)
6
6
 
7
7
 
8
+ #### 0.6.5 (2009-05-21) #############################
9
+
10
+ * ADDED: "with_args" support for default command. When specified,
11
+ arguments can be passed to the default command with run in the
12
+ short form. e.g. "script arg1 arg2" == "script cmdname arg1 arg2"
13
+
14
+ #### 0.6.3 (2009-05-10) #############################
15
+
16
+ * ADDED: show-commands now displays a note about which command is the default
17
+ * CHANGE: Moved mixins to lib/drydock/mixins (so other projects can require 'drydock/mixins')
18
+ * FIXED: Support for inline command aliases when specifying a class:
19
+ command [:name, :alias1, :alias2] => SomeClass
20
+
21
+
22
+ #### 0.6.2 (2009-05-07) #############################
23
+
24
+ * ADDED: drydock/console.rb to start a new wing in the drydock
25
+ * ADDED: mixins for String and Object (for Console)
26
+
27
+
8
28
  #### 0.6.1 (2009-05-03) #############################
9
29
 
10
30
  * FIXED: @@trawler raises an error in Ruby 1.8 if it's a Symbol
@@ -31,7 +31,7 @@ See bin/example for more.
31
31
  # variables defined here will be available to all commands.
32
32
  end
33
33
 
34
- desc "A friendly welcome to the Drydock"
34
+ about "A friendly welcome to the Drydock"
35
35
  command :welcome do
36
36
  puts "Welcome to Drydock."
37
37
  puts "For available commands:"
@@ -39,7 +39,7 @@ See bin/example for more.
39
39
  end
40
40
 
41
41
  usage "USAGE: #{$0} laugh [-f]"
42
- desc "The captain commands his crew to laugh"
42
+ about "The captain commands his crew to laugh"
43
43
  option :f, :faster, "A boolean value. Go even faster!"
44
44
  command :laugh do |obj|
45
45
  # +obj+ is an instance of Drydock::Command. The options you define are available
@@ -58,12 +58,12 @@ See bin/example for more.
58
58
  def ahoy!; p "matey"; end
59
59
  end
60
60
 
61
- desc "Do something with John West's Smoked Oysters"
61
+ about "Do something with John West's Smoked Oysters"
62
62
  command :oysters => JohnWestSmokedOysters do |obj|
63
63
  p obj # => #<JohnWestSmokedOysters:0x42179c ... >
64
64
  end
65
65
 
66
- desc "My way of saying hello!"
66
+ about "My way of saying hello!"
67
67
  command :ahoy! => JohnWestSmokedOysters
68
68
  # If you don't provide a block, Drydock will call JohnWestSmokedOysters#ahoy!
69
69
 
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/ruby
2
2
 
3
3
  # Seafaring Drydock Examples
4
4
  #
@@ -102,7 +102,7 @@ module Example
102
102
  end
103
103
 
104
104
  about "My way of saying hello!"
105
- command :ahoy! => JohnWestSmokedOysters
105
+ command [:ahoy!, :hello!] => JohnWestSmokedOysters
106
106
  # If you don't provide a block, Drydock will call JohnWestSmokedOysters#ahoy!
107
107
 
108
108
 
@@ -1,6 +1,6 @@
1
1
  @spec = Gem::Specification.new do |s|
2
2
  s.name = %q{drydock}
3
- s.version = "0.6.3"
3
+ s.version = "0.6.5"
4
4
  s.specification_version = 1 if s.respond_to? :specification_version=
5
5
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
6
 
@@ -12,16 +12,17 @@
12
12
  # = MANIFEST =
13
13
  # git ls-files
14
14
  s.files = %w(
15
- CHANGES.txt
16
- LICENSE.txt
17
- README.rdoc
18
- Rakefile
19
- bin/example
20
- drydock.gemspec
21
- lib/drydock.rb
22
- lib/drydock/console.rb
23
- lib/mixins/object.rb
24
- lib/mixins/string.rb
15
+ CHANGES.txt
16
+ LICENSE.txt
17
+ README.rdoc
18
+ Rakefile
19
+ bin/example
20
+ drydock.gemspec
21
+ lib/drydock.rb
22
+ lib/drydock/console.rb
23
+ lib/drydock/mixins.rb
24
+ lib/drydock/mixins/object.rb
25
+ lib/drydock/mixins/string.rb
25
26
  )
26
27
 
27
28
  # s.add_dependency ''
@@ -3,8 +3,7 @@ require 'ostruct'
3
3
  require 'stringio'
4
4
 
5
5
  require 'drydock/console'
6
- require 'mixins/string'
7
- require 'mixins/object'
6
+ require 'drydock/mixins'
8
7
 
9
8
  module Drydock
10
9
  class FancyArray < Array #:nodoc:
@@ -292,7 +291,8 @@ module Drydock
292
291
  if @global.verbose > 0
293
292
  puts # empty line
294
293
  cmd_names_sorted.each do |cmd|
295
- puts "%s %s" % [@executable, cmds[cmd][:pretty]]
294
+ puts "$ %s" % [@executable] if Drydock.default?(cmd)
295
+ puts "$ %s %s" % [@executable, cmds[cmd][:pretty]]
296
296
  puts "%10s: %s" % ["About", cmds[cmd][:desc]] if cmds[cmd][:desc]
297
297
  if cmds[cmd][:aliases]
298
298
  cmds[cmd][:aliases].sort!{ |a,b| a.size <=> b.size }
@@ -306,7 +306,8 @@ module Drydock
306
306
  aliases = cmds[cmd][:aliases] || []
307
307
  aliases.sort!{ |a,b| a.size <=> b.size }
308
308
  aliases = aliases.empty? ? '' : "(aliases: #{aliases.join(', ')})"
309
- puts " %-16s %s" % [cmds[cmd][:pretty], aliases]
309
+ pattern = Drydock.default?(cmd) ? "* %-16s %s" : " %-16s %s"
310
+ puts pattern % [cmds[cmd][:pretty], aliases]
310
311
  end
311
312
  end
312
313
  end
@@ -370,6 +371,7 @@ module Drydock
370
371
  @@command_actions = []
371
372
 
372
373
  @@default_command = nil
374
+ @@default_command_with_args = false
373
375
 
374
376
  @@commands = {}
375
377
  @@command_descriptions = []
@@ -454,12 +456,31 @@ module Drydock
454
456
  # # ...
455
457
  # end
456
458
  #
457
- def default(cmd=nil, &b)
459
+ # If +with_args+ is specified, the default command will receive all unknown
460
+ # values as arguments. This is necessary to define explicitly because drydock
461
+ # parses arguments expecting a command name. If the default command accepts
462
+ # arguments and with_args is not specified, drydock will raise an unknown
463
+ # command exception for the first argument.
464
+ #
465
+ def default(cmd=nil, with_args=false, &b)
458
466
  raise "Calling default requires a command name or a block" unless cmd || b
459
467
  # Creates the command and returns the name or just stores given name
460
468
  @@default_command = (b) ? command(cmd || :default, &b).cmd : canonize(cmd)
469
+ # IDEA: refactor out the argument parser to support different types of CLI
470
+ @@default_command_with_args = with_args ? true : false
471
+ @@default_command
472
+ end
473
+
474
+ # Is +cmd+ the default command?
475
+ def default?(cmd)
476
+ return false if @@default_command.nil?
477
+ (@@default_command == canonize(cmd))
461
478
  end
462
479
 
480
+ #
481
+ def default_with_args?; @@default_command_with_args; end
482
+
483
+
463
484
  # Define a block for processing STDIN before the command is called.
464
485
  # The command block receives the return value of this block as obj.stdin:
465
486
  #
@@ -588,11 +609,15 @@ module Drydock
588
609
  cmd = cmds.shift # Should we accept aliases here?
589
610
 
590
611
  if cmd.is_a? Hash
591
- raise "#{cmd.values.first} is not a subclass of Drydock::Command" unless cmd.values.first.ancestors.member?(Drydock::Command)
592
- c = cmd.values.first.new(cmd.keys.first, &b) # A custom class was specified
593
- # TODO: handle command [:task, :alias] => Class
594
- #elsif cmd.is_a? Array
595
- # p cmd
612
+ klass = cmd.values.first
613
+ names = cmd.keys.first
614
+ if names.is_a? Array
615
+ cmd, cmds = names.shift, [names].flatten.compact
616
+ else
617
+ cmd = names
618
+ end
619
+ raise "#{klass} is not a subclass of Drydock::Command" unless klass.ancestors.member?(Drydock::Command)
620
+ c = klass.new(cmd, &b) # A custom class was specified
596
621
  else
597
622
  c = Drydock::Command.new(cmd, &b)
598
623
  end
@@ -833,13 +858,21 @@ module Drydock
833
858
  global_options = command_options = {}
834
859
  cmd = nil
835
860
 
861
+ argv_copy = argv.clone # See: @@default_command_with_args below
862
+
836
863
  global_options = @@global_opts_parser.getopts(argv)
837
864
  cmd_name = (argv.empty?) ? @@default_command : argv.shift
838
865
 
839
866
  unless command?(cmd_name)
840
- raise UnknownCommand.new(cmd_name) unless trawler?
841
- raise UnknownCommand.new(@@trawler) unless command?(@@trawler)
842
- command_alias(@@trawler, cmd_name)
867
+ # If requested, send all unknown arguments to the default command
868
+ if @@default_command_with_args
869
+ cmd_name = @@default_command
870
+ argv = argv_copy
871
+ else
872
+ raise UnknownCommand.new(cmd_name) unless trawler?
873
+ raise UnknownCommand.new(@@trawler) unless command?(@@trawler)
874
+ command_alias(@@trawler, cmd_name)
875
+ end
843
876
  end
844
877
 
845
878
  cmd = get_command(cmd_name)
@@ -0,0 +1,4 @@
1
+
2
+
3
+ require 'drydock/mixins/object'
4
+ require 'drydock/mixins/string'
File without changes
@@ -1,3 +1,4 @@
1
+
1
2
  class String
2
3
  @@print_with_attributes = true
3
4
  def String.disable_colour; @@print_with_attributes = false; end
@@ -63,4 +64,3 @@ class String
63
64
  alias :noansi :noatt
64
65
 
65
66
  end
66
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drydock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delano Mandelbaum
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-07 00:00:00 -04:00
12
+ date: 2009-05-21 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -32,8 +32,9 @@ files:
32
32
  - drydock.gemspec
33
33
  - lib/drydock.rb
34
34
  - lib/drydock/console.rb
35
- - lib/mixins/object.rb
36
- - lib/mixins/string.rb
35
+ - lib/drydock/mixins.rb
36
+ - lib/drydock/mixins/object.rb
37
+ - lib/drydock/mixins/string.rb
37
38
  has_rdoc: true
38
39
  homepage: http://github.com/delano/drydock
39
40
  licenses: []