diff options
-rw-r--r-- | lib/puppet/string/indirector.rb | 32 | ||||
-rwxr-xr-x | spec/unit/application/indirection_base_spec.rb | 2 | ||||
-rwxr-xr-x | spec/unit/string/indirector_spec.rb | 17 |
3 files changed, 30 insertions, 21 deletions
diff --git a/lib/puppet/string/indirector.rb b/lib/puppet/string/indirector.rb index 48280cc77..bb081533f 100644 --- a/lib/puppet/string/indirector.rb +++ b/lib/puppet/string/indirector.rb @@ -2,7 +2,6 @@ require 'puppet' require 'puppet/string' class Puppet::String::Indirector < Puppet::String - warn "REVISIT: Need to redefine this to take arguments again, eh." option "--terminus TERMINUS" do desc "REVISIT: You can select a terminus, which has some bigger effect that we should describe in this file somehow." @@ -16,6 +15,21 @@ that we should describe in this file somehow." Puppet::Indirector::Terminus.terminus_classes(indirection.to_sym).collect { |t| t.to_s }.sort end + def call_indirection_method(method, *args) + options = args.pop + options.has_key?(:terminus) and set_terminus(options[:terminus]) + + begin + result = indirection.__send__(method, *args) + rescue => detail + puts detail.backtrace if Puppet[:trace] + raise "Could not call '#{method}' on '#{indirection_name}': #{detail}" + end + + indirection.reset_terminus_class + return result + end + action :destroy do invoke { |*args| call_indirection_method(:destroy, *args) } end @@ -35,11 +49,16 @@ that we should describe in this file somehow." # Print the configuration for the current terminus class action :info do invoke do |*args| + options = args.pop + options.has_key?(:terminus) and set_terminus(options[:terminus]) + if t = indirection.terminus_class puts "Run mode '#{Puppet.run_mode.name}': #{t}" else $stderr.puts "No default terminus class for run mode '#{Puppet.run_mode.name}'" end + + indirection.reset_terminus_class end end @@ -72,15 +91,4 @@ that we should describe in this file somehow." raise "Could not set '#{indirection.name}' terminus to '#{from}' (#{detail}); valid terminus types are #{self.class.terminus_classes(indirection.name).join(", ") }" end end - - def call_indirection_method(method, *args) - begin - result = indirection.__send__(method, *args) - rescue => detail - puts detail.backtrace if Puppet[:trace] - raise "Could not call '#{method}' on '#{indirection_name}': #{detail}" - end - - result - end end diff --git a/spec/unit/application/indirection_base_spec.rb b/spec/unit/application/indirection_base_spec.rb index f636613c4..66b3009fb 100755 --- a/spec/unit/application/indirection_base_spec.rb +++ b/spec/unit/application/indirection_base_spec.rb @@ -26,7 +26,7 @@ describe Puppet::Application::IndirectionBase do # entire indirection stack would cause us more grief. --daniel 2011-03-31 terminus = mock("test indirection terminus") Puppet::Indirector::Indirection.expects(:instance). - with(:testindirection).returns() + with(:testindirection).twice.returns() subject.command_line. instance_variable_set('@args', %w{--terminus foo save}) diff --git a/spec/unit/string/indirector_spec.rb b/spec/unit/string/indirector_spec.rb index da5f569dc..29e8e7086 100755 --- a/spec/unit/string/indirector_spec.rb +++ b/spec/unit/string/indirector_spec.rb @@ -4,12 +4,13 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb') require 'puppet/string/indirector' describe Puppet::String::Indirector do - before do - @instance = Puppet::String::Indirector.new(:test, '0.0.1') - - @indirection = stub 'indirection', :name => :stub_indirection - - @instance.stubs(:indirection).returns @indirection + subject do + instance = Puppet::String::Indirector.new(:test, '0.0.1') + indirection = stub('indirection', + :name => :stub_indirection, + :reset_terminus_class => nil) + instance.stubs(:indirection).returns indirection + instance end it "should be able to return a list of indirections" do @@ -34,8 +35,8 @@ describe Puppet::String::Indirector do end it "should call the indirection method when the '#{method}' action is invoked" do - @instance.indirection.expects(method).with(:test, "myargs", {}) - @instance.send(method, :test, "myargs") + subject.indirection.expects(method).with(:test, "myargs") + subject.send(method, :test, "myargs") end end |