Module: Clamp::Subcommand::Declaration
- Included in:
- Command
- Defined in:
- lib/clamp/subcommand/declaration.rb
Instance Method Summary collapse
- #default_subcommand(*args, &block) ⇒ Object
- #default_subcommand=(name) ⇒ Object
- #find_subcommand(name) ⇒ Object
- #find_subcommand_class(*names) ⇒ Object
- #has_subcommands? ⇒ Boolean
- #inheritable_attributes ⇒ Object
- #parameters_before_subcommand ⇒ Object
- #recognised_subcommands ⇒ Object
- #subcommand(name, description, subcommand_class = self, &block) ⇒ Object
Instance Method Details
#default_subcommand(*args, &block) ⇒ Object
| 63 64 65 66 67 68 69 70 71 72 | # File 'lib/clamp/subcommand/declaration.rb', line 63 def default_subcommand(*args, &block) if args.empty? @default_subcommand else $stderr.puts "WARNING: Clamp default_subcommand syntax has changed; check the README." $stderr.puts " (from #{caller.first})" self.default_subcommand = args.first subcommand(*args, &block) end end | 
#default_subcommand=(name) ⇒ Object
| 56 57 58 59 60 61 | # File 'lib/clamp/subcommand/declaration.rb', line 56 def default_subcommand=(name) if has_subcommands? raise Clamp::DeclarationError, "default_subcommand must be defined before subcommands" end @default_subcommand = name end | 
#find_subcommand(name) ⇒ Object
| 34 35 36 | # File 'lib/clamp/subcommand/declaration.rb', line 34 def find_subcommand(name) recognised_subcommands.find { |sc| sc.is_called?(name) } end | 
#find_subcommand_class(*names) ⇒ Object
| 38 39 40 41 42 43 44 45 46 | # File 'lib/clamp/subcommand/declaration.rb', line 38 def find_subcommand_class(*names) names.inject(self) do |command_class, name| if command_class if subcommand = command_class.find_subcommand(name) subcommand.subcommand_class end end end end | 
#has_subcommands? ⇒ Boolean
| 30 31 32 | # File 'lib/clamp/subcommand/declaration.rb', line 30 def has_subcommands? !recognised_subcommands.empty? end | 
#inheritable_attributes ⇒ Object
| 52 53 54 | # File 'lib/clamp/subcommand/declaration.rb', line 52 def inheritable_attributes + parameters_before_subcommand end | 
#parameters_before_subcommand ⇒ Object
| 48 49 50 | # File 'lib/clamp/subcommand/declaration.rb', line 48 def parameters_before_subcommand parameters.take_while { |p| p != @subcommand_parameter } end | 
#recognised_subcommands ⇒ Object
| 9 10 11 | # File 'lib/clamp/subcommand/declaration.rb', line 9 def recognised_subcommands @recognised_subcommands ||= [] end | 
#subcommand(name, description, subcommand_class = self, &block) ⇒ Object
| 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # File 'lib/clamp/subcommand/declaration.rb', line 13 def subcommand(name, description, subcommand_class = self, &block) unless has_subcommands? @subcommand_parameter = if @default_subcommand parameter "[SUBCOMMAND]", "subcommand", :attribute_name => :subcommand_name, :default => @default_subcommand else parameter "SUBCOMMAND", "subcommand", :attribute_name => :subcommand_name, :required => false end remove_method :default_subcommand_name parameter "[ARG] ...", "subcommand arguments", :attribute_name => :subcommand_arguments end if block # generate a anonymous sub-class subcommand_class = Class.new(subcommand_class, &block) end recognised_subcommands << Subcommand::Definition.new(name, description, subcommand_class) end |