lib/clamp/subcommand/execution.rb in clamp-0.5.1 vs lib/clamp/subcommand/execution.rb in clamp-0.6.0
- old
+ new
@@ -1,18 +1,37 @@
module Clamp
- class Subcommand
+ module Subcommand
module Execution
# override default Command behaviour
def execute
# delegate to subcommand
- @subcommand.run(remaining_arguments)
+ subcommand = instatiate_subcommand(subcommand_name)
+ subcommand.run(subcommand_arguments)
end
- def handle_remaining_arguments
- # no-op, because subcommand will handle them
+ private
+
+ def instatiate_subcommand(name)
+ subcommand_class = find_subcommand_class(name)
+ parent_attribute_values = {}
+ inheritable_attributes.each do |option|
+ if instance_variable_defined?(option.ivar_name)
+ parent_attribute_values[option] = instance_variable_get(option.ivar_name)
+ end
+ end
+ subcommand_class.new("#{invocation_path} #{name}", context, parent_attribute_values)
+ end
+
+ def inheritable_attributes
+ self.class.recognised_options + self.class.parameters_before_subcommand
+ end
+
+ def find_subcommand_class(name)
+ subcommand_def = self.class.find_subcommand(name) || signal_usage_error("No such sub-command '#{name}'")
+ subcommand_def.subcommand_class
end
end
end