[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, experimental, updated. debian/2.6.8-1-844-g7ec39d5
Daniel Pittman
daniel at puppetlabs.com
Tue May 10 08:11:26 UTC 2011
The following commit has been merged in the experimental branch:
commit 87ed3188e65d3f5f9c2c32a409b271d1b39684b9
Author: Daniel Pittman <daniel at puppetlabs.com>
Date: Thu Apr 7 15:44:28 2011 -0700
(#7012) Split plumbing into Puppet::Interface
This splits out the plumbing into the Puppet::Interface namespace, and uses
Puppet::Faces for all the public-facing code.
The fault line is "what you care about if you are using or writing a face",
which is public, against "what you care about to enable either of those two",
which is the plumbing.
diff --git a/lib/puppet/faces.rb b/lib/puppet/faces.rb
index 07a7454..947eecf 100644
--- a/lib/puppet/faces.rb
+++ b/lib/puppet/faces.rb
@@ -1,106 +1,12 @@
-require 'puppet'
-require 'puppet/util/autoload'
-
-class Puppet::Faces
- require 'puppet/faces/face_collection'
-
- require 'puppet/faces/action_manager'
- include Puppet::Faces::ActionManager
- extend Puppet::Faces::ActionManager
-
- require 'puppet/faces/option_manager'
- include Puppet::Faces::OptionManager
- extend Puppet::Faces::OptionManager
-
- include Puppet::Util
-
- class << self
- # This is just so we can search for actions. We only use its
- # list of directories to search.
- # Can't we utilize an external autoloader, or simply use the $LOAD_PATH? -pvb
- def autoloader
- @autoloader ||= Puppet::Util::Autoload.new(:application, "puppet/faces")
- end
-
- def faces
- Puppet::Faces::FaceCollection.faces
- end
-
- def face?(name, version)
- Puppet::Faces::FaceCollection.face?(name, version)
- end
-
- def register(instance)
- Puppet::Faces::FaceCollection.register(instance)
- end
-
- def define(name, version, &block)
- if face?(name, version)
- face = Puppet::Faces::FaceCollection[name, version]
- else
- face = self.new(name, version)
- Puppet::Faces::FaceCollection.register(face)
- # REVISIT: Shouldn't this be delayed until *after* we evaluate the
- # current block, not done before? --daniel 2011-04-07
- face.load_actions
- end
-
- face.instance_eval(&block) if block_given?
-
- return face
- end
-
- alias :[] :define
- end
-
- attr_accessor :default_format
-
- def set_default_format(format)
- self.default_format = format.to_sym
- end
-
- attr_accessor :type, :verb, :version, :arguments
- attr_reader :name
-
- def initialize(name, version, &block)
- unless Puppet::Faces::FaceCollection.validate_version(version)
- raise ArgumentError, "Cannot create face #{name.inspect} with invalid version number '#{version}'!"
- end
-
- @name = Puppet::Faces::FaceCollection.underscorize(name)
- @version = version
- @default_format = :pson
-
- instance_eval(&block) if block_given?
- end
-
- # Try to find actions defined in other files.
- def load_actions
- path = "puppet/faces/#{name}"
-
- loaded = []
- [path, "#{name}@#{version}/#{path}"].each do |path|
- Puppet::Faces.autoloader.search_directories.each do |dir|
- fdir = ::File.join(dir, path)
- next unless FileTest.directory?(fdir)
-
- Dir.chdir(fdir) do
- Dir.glob("*.rb").each do |file|
- aname = file.sub(/\.rb/, '')
- if loaded.include?(aname)
- Puppet.debug "Not loading duplicate action '#{aname}' for '#{name}' from '#{fdir}/#{file}'"
- next
- end
- loaded << aname
- Puppet.debug "Loading action '#{aname}' for '#{name}' from '#{fdir}/#{file}'"
- require "#{Dir.pwd}/#{aname}"
- end
- end
- end
- end
- end
-
- def to_s
- "Puppet::Faces[#{name.inspect}, #{version.inspect}]"
- end
-end
+# The public name of this feature is 'faces', but we have hidden all the
+# plumbing over in the 'interfaces' namespace to make clear the distinction
+# between the two.
+#
+# This file exists to ensure that the public name is usable without revealing
+# the details of the implementation; you really only need go look at anything
+# under Interfaces if you are looking to extend the implementation.
+#
+# It isn't hidden to gratuitously hide things, just to make it easier to
+# separate out the interests people will have. --daniel 2011-04-07
+require 'puppet/interface'
+Puppet::Faces = Puppet::Interface
diff --git a/lib/puppet/faces.rb b/lib/puppet/interface.rb
similarity index 72%
copy from lib/puppet/faces.rb
copy to lib/puppet/interface.rb
index 07a7454..70484ad 100644
--- a/lib/puppet/faces.rb
+++ b/lib/puppet/interface.rb
@@ -1,16 +1,16 @@
require 'puppet'
require 'puppet/util/autoload'
-class Puppet::Faces
- require 'puppet/faces/face_collection'
+class Puppet::Interface
+ require 'puppet/interface/face_collection'
- require 'puppet/faces/action_manager'
- include Puppet::Faces::ActionManager
- extend Puppet::Faces::ActionManager
+ require 'puppet/interface/action_manager'
+ include Puppet::Interface::ActionManager
+ extend Puppet::Interface::ActionManager
- require 'puppet/faces/option_manager'
- include Puppet::Faces::OptionManager
- extend Puppet::Faces::OptionManager
+ require 'puppet/interface/option_manager'
+ include Puppet::Interface::OptionManager
+ extend Puppet::Interface::OptionManager
include Puppet::Util
@@ -23,23 +23,23 @@ class Puppet::Faces
end
def faces
- Puppet::Faces::FaceCollection.faces
+ Puppet::Interface::FaceCollection.faces
end
def face?(name, version)
- Puppet::Faces::FaceCollection.face?(name, version)
+ Puppet::Interface::FaceCollection.face?(name, version)
end
def register(instance)
- Puppet::Faces::FaceCollection.register(instance)
+ Puppet::Interface::FaceCollection.register(instance)
end
def define(name, version, &block)
if face?(name, version)
- face = Puppet::Faces::FaceCollection[name, version]
+ face = Puppet::Interface::FaceCollection[name, version]
else
face = self.new(name, version)
- Puppet::Faces::FaceCollection.register(face)
+ Puppet::Interface::FaceCollection.register(face)
# REVISIT: Shouldn't this be delayed until *after* we evaluate the
# current block, not done before? --daniel 2011-04-07
face.load_actions
@@ -63,11 +63,11 @@ class Puppet::Faces
attr_reader :name
def initialize(name, version, &block)
- unless Puppet::Faces::FaceCollection.validate_version(version)
+ unless Puppet::Interface::FaceCollection.validate_version(version)
raise ArgumentError, "Cannot create face #{name.inspect} with invalid version number '#{version}'!"
end
- @name = Puppet::Faces::FaceCollection.underscorize(name)
+ @name = Puppet::Interface::FaceCollection.underscorize(name)
@version = version
@default_format = :pson
@@ -80,7 +80,7 @@ class Puppet::Faces
loaded = []
[path, "#{name}@#{version}/#{path}"].each do |path|
- Puppet::Faces.autoloader.search_directories.each do |dir|
+ Puppet::Interface.autoloader.search_directories.each do |dir|
fdir = ::File.join(dir, path)
next unless FileTest.directory?(fdir)
diff --git a/lib/puppet/faces/action.rb b/lib/puppet/interface/action.rb
similarity index 97%
rename from lib/puppet/faces/action.rb
rename to lib/puppet/interface/action.rb
index 58d2c60..e4a37a1 100644
--- a/lib/puppet/faces/action.rb
+++ b/lib/puppet/interface/action.rb
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
-require 'puppet/faces'
-require 'puppet/faces/option'
+require 'puppet/interface'
+require 'puppet/interface/option'
-class Puppet::Faces::Action
+class Puppet::Interface::Action
def initialize(face, name, attrs = {})
raise "#{name.inspect} is an invalid action name" unless name.to_s =~ /^[a-z]\w*$/
@face = face
diff --git a/lib/puppet/faces/action_builder.rb b/lib/puppet/interface/action_builder.rb
similarity index 74%
rename from lib/puppet/faces/action_builder.rb
rename to lib/puppet/interface/action_builder.rb
index a670689..b08c3d0 100644
--- a/lib/puppet/faces/action_builder.rb
+++ b/lib/puppet/interface/action_builder.rb
@@ -1,7 +1,7 @@
-require 'puppet/faces'
-require 'puppet/faces/action'
+require 'puppet/interface'
+require 'puppet/interface/action'
-class Puppet::Faces::ActionBuilder
+class Puppet::Interface::ActionBuilder
attr_reader :action
def self.build(face, name, &block)
@@ -12,7 +12,7 @@ class Puppet::Faces::ActionBuilder
private
def initialize(face, name, &block)
@face = face
- @action = Puppet::Faces::Action.new(face, name)
+ @action = Puppet::Interface::Action.new(face, name)
instance_eval(&block)
end
@@ -25,7 +25,7 @@ class Puppet::Faces::ActionBuilder
end
def option(*declaration, &block)
- option = Puppet::Faces::OptionBuilder.build(@action, *declaration, &block)
+ option = Puppet::Interface::OptionBuilder.build(@action, *declaration, &block)
@action.add_option(option)
end
end
diff --git a/lib/puppet/faces/action_manager.rb b/lib/puppet/interface/action_manager.rb
similarity index 83%
rename from lib/puppet/faces/action_manager.rb
rename to lib/puppet/interface/action_manager.rb
index 6c0036b..bb0e5bf 100644
--- a/lib/puppet/faces/action_manager.rb
+++ b/lib/puppet/interface/action_manager.rb
@@ -1,12 +1,12 @@
-require 'puppet/faces/action_builder'
+require 'puppet/interface/action_builder'
-module Puppet::Faces::ActionManager
+module Puppet::Interface::ActionManager
# Declare that this app can take a specific action, and provide
# the code to do so.
def action(name, &block)
@actions ||= {}
raise "Action #{name} already defined for #{self}" if action?(name)
- action = Puppet::Faces::ActionBuilder.build(self, name, &block)
+ action = Puppet::Interface::ActionBuilder.build(self, name, &block)
@actions[action.name] = action
end
@@ -15,7 +15,7 @@ module Puppet::Faces::ActionManager
def script(name, &block)
@actions ||= {}
raise "Action #{name} already defined for #{self}" if action?(name)
- @actions[name] = Puppet::Faces::Action.new(self, name, :when_invoked => block)
+ @actions[name] = Puppet::Interface::Action.new(self, name, :when_invoked => block)
end
def actions
diff --git a/lib/puppet/faces/face_collection.rb b/lib/puppet/interface/face_collection.rb
similarity index 98%
rename from lib/puppet/faces/face_collection.rb
rename to lib/puppet/interface/face_collection.rb
index e6ee709..9f7a499 100644
--- a/lib/puppet/faces/face_collection.rb
+++ b/lib/puppet/interface/face_collection.rb
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
-require 'puppet/faces'
+require 'puppet/interface'
-module Puppet::Faces::FaceCollection
+module Puppet::Interface::FaceCollection
SEMVER_VERSION = /^(\d+)\.(\d+)\.(\d+)([A-Za-z][0-9A-Za-z-]*|)$/
@faces = Hash.new { |hash, key| hash[key] = {} }
diff --git a/lib/puppet/faces/option.rb b/lib/puppet/interface/option.rb
similarity index 97%
rename from lib/puppet/faces/option.rb
rename to lib/puppet/interface/option.rb
index 7d3ed37..ccc2fbb 100644
--- a/lib/puppet/faces/option.rb
+++ b/lib/puppet/interface/option.rb
@@ -1,6 +1,6 @@
-require 'puppet/faces'
+require 'puppet/interface'
-class Puppet::Faces::Option
+class Puppet::Interface::Option
attr_reader :parent
attr_reader :name
attr_reader :aliases
diff --git a/lib/puppet/faces/option_builder.rb b/lib/puppet/interface/option_builder.rb
similarity index 69%
rename from lib/puppet/faces/option_builder.rb
rename to lib/puppet/interface/option_builder.rb
index 0b66675..83a1906 100644
--- a/lib/puppet/faces/option_builder.rb
+++ b/lib/puppet/interface/option_builder.rb
@@ -1,6 +1,6 @@
-require 'puppet/faces/option'
+require 'puppet/interface/option'
-class Puppet::Faces::OptionBuilder
+class Puppet::Interface::OptionBuilder
attr_reader :option
def self.build(face, *declaration, &block)
@@ -10,13 +10,13 @@ class Puppet::Faces::OptionBuilder
private
def initialize(face, *declaration, &block)
@face = face
- @option = Puppet::Faces::Option.new(face, *declaration)
+ @option = Puppet::Interface::Option.new(face, *declaration)
block and instance_eval(&block)
@option
end
# Metaprogram the simple DSL from the option class.
- Puppet::Faces::Option.instance_methods.grep(/=$/).each do |setter|
+ Puppet::Interface::Option.instance_methods.grep(/=$/).each do |setter|
next if setter =~ /^=/ # special case, darn it...
dsl = setter.sub(/=$/, '')
diff --git a/lib/puppet/faces/option_manager.rb b/lib/puppet/interface/option_manager.rb
similarity index 89%
rename from lib/puppet/faces/option_manager.rb
rename to lib/puppet/interface/option_manager.rb
index 02a73af..56df976 100644
--- a/lib/puppet/faces/option_manager.rb
+++ b/lib/puppet/interface/option_manager.rb
@@ -1,10 +1,10 @@
-require 'puppet/faces/option_builder'
+require 'puppet/interface/option_builder'
-module Puppet::Faces::OptionManager
+module Puppet::Interface::OptionManager
# Declare that this app can take a specific option, and provide
# the code to do so.
def option(*declaration, &block)
- add_option Puppet::Faces::OptionBuilder.build(self, *declaration, &block)
+ add_option Puppet::Interface::OptionBuilder.build(self, *declaration, &block)
end
def add_option(option)
diff --git a/spec/unit/faces/catalog_spec.rb b/spec/unit/faces/catalog_spec.rb
index 7621a86..7197219 100755
--- a/spec/unit/faces/catalog_spec.rb
+++ b/spec/unit/faces/catalog_spec.rb
@@ -1,6 +1,3 @@
-#!/usr/bin/env ruby
-
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-
describe Puppet::Faces[:catalog, '0.0.1'] do
+ it "should actually have some testing..."
end
diff --git a/spec/unit/faces/certificate_request_spec.rb b/spec/unit/faces/certificate_request_spec.rb
index 637ea8c..1a71a83 100755
--- a/spec/unit/faces/certificate_request_spec.rb
+++ b/spec/unit/faces/certificate_request_spec.rb
@@ -1,6 +1,3 @@
-#!/usr/bin/env ruby
-
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-
describe Puppet::Faces[:certificate_request, '0.0.1'] do
+ it "should actually have some tests..."
end
diff --git a/spec/unit/faces/certificate_revocation_list_spec.rb b/spec/unit/faces/certificate_revocation_list_spec.rb
index e319b18..4f41ede 100755
--- a/spec/unit/faces/certificate_revocation_list_spec.rb
+++ b/spec/unit/faces/certificate_revocation_list_spec.rb
@@ -1,6 +1,3 @@
-#!/usr/bin/env ruby
-
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-
describe Puppet::Faces[:certificate_revocation_list, '0.0.1'] do
+ it "should actually have some tests..."
end
diff --git a/spec/unit/faces/file_spec.rb b/spec/unit/faces/file_spec.rb
index aafa88c..fcb52c6 100755
--- a/spec/unit/faces/file_spec.rb
+++ b/spec/unit/faces/file_spec.rb
@@ -1,6 +1,3 @@
-#!/usr/bin/env ruby
-
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-
describe Puppet::Faces[:file, '0.0.1'] do
+ it "should actually have some tests..."
end
diff --git a/spec/unit/faces/key_spec.rb b/spec/unit/faces/key_spec.rb
index 70d4a52..9b7a587 100755
--- a/spec/unit/faces/key_spec.rb
+++ b/spec/unit/faces/key_spec.rb
@@ -1,6 +1,3 @@
-#!/usr/bin/env ruby
-
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-
describe Puppet::Faces[:key, '0.0.1'] do
+ it "should actually have some tests..."
end
diff --git a/spec/unit/faces/option_builder_spec.rb b/spec/unit/faces/option_builder_spec.rb
deleted file mode 100644
index 9296ba7..0000000
--- a/spec/unit/faces/option_builder_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-require 'puppet/faces/option_builder'
-
-describe Puppet::Faces::OptionBuilder do
- let :face do Puppet::Faces.new(:option_builder_testing, '0.0.1') end
-
- it "should be able to construct an option without a block" do
- Puppet::Faces::OptionBuilder.build(face, "--foo").
- should be_an_instance_of Puppet::Faces::Option
- end
-
- describe "when using the DSL block" do
- it "should work with an empty block" do
- option = Puppet::Faces::OptionBuilder.build(face, "--foo") do
- # This block deliberately left blank.
- end
-
- option.should be_an_instance_of Puppet::Faces::Option
- end
-
- it "should support documentation declarations" do
- text = "this is the description"
- option = Puppet::Faces::OptionBuilder.build(face, "--foo") do
- desc text
- end
- option.should be_an_instance_of Puppet::Faces::Option
- option.desc.should == text
- end
- end
-end
diff --git a/spec/unit/faces/report_spec.rb b/spec/unit/faces/report_spec.rb
index f7a6734..30897d5 100755
--- a/spec/unit/faces/report_spec.rb
+++ b/spec/unit/faces/report_spec.rb
@@ -1,6 +1,3 @@
-#!/usr/bin/env ruby
-
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-
describe Puppet::Faces[:report, '0.0.1'] do
+ it "should actually have some tests..."
end
diff --git a/spec/unit/faces/resource_spec.rb b/spec/unit/faces/resource_spec.rb
index 0b4b248..e3f2e1c 100755
--- a/spec/unit/faces/resource_spec.rb
+++ b/spec/unit/faces/resource_spec.rb
@@ -1,6 +1,3 @@
-#!/usr/bin/env ruby
-
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-
describe Puppet::Faces[:resource, '0.0.1'] do
+ it "should actually have some tests..."
end
diff --git a/spec/unit/faces/resource_type_spec.rb b/spec/unit/faces/resource_type_spec.rb
index 157066f..fcbf075 100755
--- a/spec/unit/faces/resource_type_spec.rb
+++ b/spec/unit/faces/resource_type_spec.rb
@@ -1,6 +1,3 @@
-#!/usr/bin/env ruby
-
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-
describe Puppet::Faces[:resource_type, '0.0.1'] do
+ it "should actually have some tests..."
end
diff --git a/spec/unit/faces/action_builder_spec.rb b/spec/unit/interface/action_builder_spec.rb
similarity index 60%
rename from spec/unit/faces/action_builder_spec.rb
rename to spec/unit/interface/action_builder_spec.rb
index 5c8b988..ae9cc83 100755
--- a/spec/unit/faces/action_builder_spec.rb
+++ b/spec/unit/interface/action_builder_spec.rb
@@ -1,20 +1,20 @@
#!/usr/bin/env ruby
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-require 'puppet/faces/action_builder'
+require 'puppet/interface/action_builder'
-describe Puppet::Faces::ActionBuilder do
+describe Puppet::Interface::ActionBuilder do
describe "::build" do
it "should build an action" do
- action = Puppet::Faces::ActionBuilder.build(nil, :foo) do
+ action = Puppet::Interface::ActionBuilder.build(nil, :foo) do
end
- action.should be_a(Puppet::Faces::Action)
+ action.should be_a(Puppet::Interface::Action)
action.name.should == :foo
end
it "should define a method on the face which invokes the action" do
- face = Puppet::Faces.new(:action_builder_test_faces, '0.0.1')
- action = Puppet::Faces::ActionBuilder.build(face, :foo) do
+ face = Puppet::Interface.new(:action_builder_test_interface, '0.0.1')
+ action = Puppet::Interface::ActionBuilder.build(face, :foo) do
when_invoked do
"invoked the method"
end
@@ -24,30 +24,30 @@ describe Puppet::Faces::ActionBuilder do
end
it "should require a block" do
- expect { Puppet::Faces::ActionBuilder.build(nil, :foo) }.
+ expect { Puppet::Interface::ActionBuilder.build(nil, :foo) }.
should raise_error("Action :foo must specify a block")
end
describe "when handling options" do
- let :face do Puppet::Faces.new(:option_handling, '0.0.1') end
+ let :face do Puppet::Interface.new(:option_handling, '0.0.1') end
it "should have a #option DSL function" do
method = nil
- Puppet::Faces::ActionBuilder.build(face, :foo) do
+ Puppet::Interface::ActionBuilder.build(face, :foo) do
method = self.method(:option)
end
method.should be
end
it "should define an option without a block" do
- action = Puppet::Faces::ActionBuilder.build(face, :foo) do
+ action = Puppet::Interface::ActionBuilder.build(face, :foo) do
option "--bar"
end
action.should be_option :bar
end
it "should accept an empty block" do
- action = Puppet::Faces::ActionBuilder.build(face, :foo) do
+ action = Puppet::Interface::ActionBuilder.build(face, :foo) do
option "--bar" do
# This space left deliberately blank.
end
diff --git a/spec/unit/faces/action_manager_spec.rb b/spec/unit/interface/action_manager_spec.rb
similarity index 93%
rename from spec/unit/faces/action_manager_spec.rb
rename to spec/unit/interface/action_manager_spec.rb
index 61d1c1d..50bea5f 100755
--- a/spec/unit/faces/action_manager_spec.rb
+++ b/spec/unit/interface/action_manager_spec.rb
@@ -2,14 +2,14 @@
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-# This is entirely an internal class for Faces, so we have to load it instead of our class.
-require 'puppet/faces'
+# This is entirely an internal class for Interface, so we have to load it instead of our class.
+require 'puppet/interface'
class ActionManagerTester
- include Puppet::Faces::ActionManager
+ include Puppet::Interface::ActionManager
end
-describe Puppet::Faces::ActionManager do
+describe Puppet::Interface::ActionManager do
subject { ActionManagerTester.new }
describe "when included in a class" do
@@ -73,7 +73,7 @@ describe Puppet::Faces::ActionManager do
end
describe "when used to extend a class" do
- subject { Class.new.extend(Puppet::Faces::ActionManager) }
+ subject { Class.new.extend(Puppet::Interface::ActionManager) }
it "should be able to define an action" do
subject.action(:foo) do
@@ -102,8 +102,8 @@ describe Puppet::Faces::ActionManager do
describe "when used both at the class and instance level" do
before do
@klass = Class.new do
- include Puppet::Faces::ActionManager
- extend Puppet::Faces::ActionManager
+ include Puppet::Interface::ActionManager
+ extend Puppet::Interface::ActionManager
end
@instance = @klass.new
end
@@ -216,7 +216,7 @@ describe Puppet::Faces::ActionManager do
describe "#get_action" do
let :parent_class do
- parent_class = Class.new(Puppet::Faces)
+ parent_class = Class.new(Puppet::Interface)
parent_class.action(:foo) {}
parent_class
end
diff --git a/spec/unit/faces/action_spec.rb b/spec/unit/interface/action_spec.rb
similarity index 82%
rename from spec/unit/faces/action_spec.rb
rename to spec/unit/interface/action_spec.rb
index c087744..4801a3c 100755
--- a/spec/unit/faces/action_spec.rb
+++ b/spec/unit/interface/action_spec.rb
@@ -1,13 +1,13 @@
#!/usr/bin/env ruby
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-require 'puppet/faces/action'
+require 'puppet/interface/action'
-describe Puppet::Faces::Action do
+describe Puppet::Interface::Action do
describe "when validating the action name" do
[nil, '', 'foo bar', '-foobar'].each do |input|
it "should treat #{input.inspect} as an invalid name" do
- expect { Puppet::Faces::Action.new(nil, input) }.
+ expect { Puppet::Interface::Action.new(nil, input) }.
should raise_error(/is an invalid action name/)
end
end
@@ -15,7 +15,7 @@ describe Puppet::Faces::Action do
describe "when invoking" do
it "should be able to call other actions on the same object" do
- face = Puppet::Faces.new(:my_face, '0.0.1') do
+ face = Puppet::Interface.new(:my_face, '0.0.1') do
action(:foo) do
when_invoked { 25 }
end
@@ -33,7 +33,7 @@ describe Puppet::Faces::Action do
# baz is an instance action calling a class action
# qux is an instance action calling an instance action
it "should be able to call other actions on the same object when defined on a class" do
- class Puppet::Faces::MyFacesBaseClass < Puppet::Faces
+ class Puppet::Interface::MyInterfaceBaseClass < Puppet::Interface
action(:foo) do
when_invoked { 25 }
end
@@ -47,7 +47,7 @@ describe Puppet::Faces::Action do
end
end
- face = Puppet::Faces::MyFacesBaseClass.new(:my_inherited_face, '0.0.1') do
+ face = Puppet::Interface::MyInterfaceBaseClass.new(:my_inherited_face, '0.0.1') do
action(:baz) do
when_invoked { "the value of foo in baz is '#{foo}'" }
end
@@ -65,7 +65,7 @@ describe Puppet::Faces::Action do
context "when calling the Ruby API" do
let :face do
- Puppet::Faces.new(:ruby_api, '1.0.0') do
+ Puppet::Interface.new(:ruby_api, '1.0.0') do
action :bar do
when_invoked do |options|
options
@@ -88,7 +88,7 @@ describe Puppet::Faces::Action do
describe "with action-level options" do
it "should support options with an empty block" do
- face = Puppet::Faces.new(:action_level_options, '0.0.1') do
+ face = Puppet::Interface.new(:action_level_options, '0.0.1') do
action :foo do
option "--bar" do
# this line left deliberately blank
@@ -101,7 +101,7 @@ describe Puppet::Faces::Action do
end
it "should return only action level options when there are no face options" do
- face = Puppet::Faces.new(:action_level_options, '0.0.1') do
+ face = Puppet::Interface.new(:action_level_options, '0.0.1') do
action :foo do option "--bar" end
end
@@ -110,7 +110,7 @@ describe Puppet::Faces::Action do
describe "with both face and action options" do
let :face do
- Puppet::Faces.new(:action_level_options, '0.0.1') do
+ Puppet::Interface.new(:action_level_options, '0.0.1') do
action :foo do option "--bar" end
action :baz do option "--bim" end
option "--quux"
@@ -122,7 +122,7 @@ describe Puppet::Faces::Action do
end
it "should fetch options that the face inherited" do
- parent = Class.new(Puppet::Faces)
+ parent = Class.new(Puppet::Interface)
parent.option "--foo"
child = parent.new(:inherited_options, '0.0.1') do
option "--bar"
@@ -133,18 +133,18 @@ describe Puppet::Faces::Action do
action.should be
[:baz, :bar, :foo].each do |name|
- action.get_option(name).should be_an_instance_of Puppet::Faces::Option
+ action.get_option(name).should be_an_instance_of Puppet::Interface::Option
end
end
it "should get an action option when asked" do
face.get_action(:foo).get_option(:bar).
- should be_an_instance_of Puppet::Faces::Option
+ should be_an_instance_of Puppet::Interface::Option
end
it "should get a face option when asked" do
face.get_action(:foo).get_option(:quux).
- should be_an_instance_of Puppet::Faces::Option
+ should be_an_instance_of Puppet::Interface::Option
end
it "should return options only for this action" do
@@ -154,7 +154,7 @@ describe Puppet::Faces::Action do
it_should_behave_like "things that declare options" do
def add_options_to(&block)
- face = Puppet::Faces.new(:with_options, '0.0.1') do
+ face = Puppet::Interface.new(:with_options, '0.0.1') do
action(:foo, &block)
end
face.get_action(:foo)
@@ -163,7 +163,7 @@ describe Puppet::Faces::Action do
it "should fail when a face option duplicates an action option" do
expect {
- Puppet::Faces.new(:action_level_options, '0.0.1') do
+ Puppet::Interface.new(:action_level_options, '0.0.1') do
option "--foo"
action :bar do option "--foo" end
end
diff --git a/spec/unit/faces/face_collection_spec.rb b/spec/unit/interface/face_collection_spec.rb
similarity index 96%
rename from spec/unit/faces/face_collection_spec.rb
rename to spec/unit/interface/face_collection_spec.rb
index 30147a5..de6d29c 100755
--- a/spec/unit/faces/face_collection_spec.rb
+++ b/spec/unit/interface/face_collection_spec.rb
@@ -3,12 +3,12 @@
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
require 'tmpdir'
-describe Puppet::Faces::FaceCollection do
+describe Puppet::Interface::FaceCollection do
# To avoid cross-pollution we have to save and restore both the hash
- # containing all the faces data, and the array used by require. Restoring
+ # containing all the interface data, and the array used by require. Restoring
# both means that we don't leak side-effects across the code. --daniel 2011-04-06
before :each do
- @original_faces = subject.instance_variable_get("@faces").dup
+ @original_faces = subject.instance_variable_get("@faces").dup
@original_required = $".dup
subject.instance_variable_get("@faces").clear
end
diff --git a/spec/unit/interface/option_builder_spec.rb b/spec/unit/interface/option_builder_spec.rb
new file mode 100644
index 0000000..fae4832
--- /dev/null
+++ b/spec/unit/interface/option_builder_spec.rb
@@ -0,0 +1,29 @@
+require 'puppet/interface/option_builder'
+
+describe Puppet::Interface::OptionBuilder do
+ let :face do Puppet::Interface.new(:option_builder_testing, '0.0.1') end
+
+ it "should be able to construct an option without a block" do
+ Puppet::Interface::OptionBuilder.build(face, "--foo").
+ should be_an_instance_of Puppet::Interface::Option
+ end
+
+ describe "when using the DSL block" do
+ it "should work with an empty block" do
+ option = Puppet::Interface::OptionBuilder.build(face, "--foo") do
+ # This block deliberately left blank.
+ end
+
+ option.should be_an_instance_of Puppet::Interface::Option
+ end
+
+ it "should support documentation declarations" do
+ text = "this is the description"
+ option = Puppet::Interface::OptionBuilder.build(face, "--foo") do
+ desc text
+ end
+ option.should be_an_instance_of Puppet::Interface::Option
+ option.desc.should == text
+ end
+ end
+end
diff --git a/spec/unit/faces/option_spec.rb b/spec/unit/interface/option_spec.rb
similarity index 67%
rename from spec/unit/faces/option_spec.rb
rename to spec/unit/interface/option_spec.rb
index a28fef0..3bcd121 100644
--- a/spec/unit/faces/option_spec.rb
+++ b/spec/unit/interface/option_spec.rb
@@ -1,14 +1,14 @@
-require 'puppet/faces/option'
+require 'puppet/interface/option'
-describe Puppet::Faces::Option do
- let :face do Puppet::Faces.new(:option_testing, '0.0.1') end
+describe Puppet::Interface::Option do
+ let :face do Puppet::Interface.new(:option_testing, '0.0.1') end
describe "#optparse_to_name" do
["", "=BAR", " BAR", "=bar", " bar"].each do |postfix|
{ "--foo" => :foo, "-f" => :f }.each do |base, expect|
input = base + postfix
it "should map #{input.inspect} to #{expect.inspect}" do
- option = Puppet::Faces::Option.new(face, input)
+ option = Puppet::Interface::Option.new(face, input)
option.name.should == expect
end
end
@@ -16,58 +16,58 @@ describe Puppet::Faces::Option do
[:foo, 12, nil, {}, []].each do |input|
it "should fail sensible when given #{input.inspect}" do
- expect { Puppet::Faces::Option.new(face, input) }.
+ expect { Puppet::Interface::Option.new(face, input) }.
should raise_error ArgumentError, /is not valid for an option argument/
end
end
["-foo", "-foo=BAR", "-foo BAR"].each do |input|
it "should fail with a single dash for long option #{input.inspect}" do
- expect { Puppet::Faces::Option.new(face, input) }.
+ expect { Puppet::Interface::Option.new(face, input) }.
should raise_error ArgumentError, /long options need two dashes \(--\)/
end
end
end
it "requires a face when created" do
- expect { Puppet::Faces::Option.new }.
+ expect { Puppet::Interface::Option.new }.
should raise_error ArgumentError, /wrong number of arguments/
end
it "also requires some declaration arguments when created" do
- expect { Puppet::Faces::Option.new(face) }.
+ expect { Puppet::Interface::Option.new(face) }.
should raise_error ArgumentError, /No option declarations found/
end
it "should infer the name from an optparse string" do
- option = Puppet::Faces::Option.new(face, "--foo")
+ option = Puppet::Interface::Option.new(face, "--foo")
option.name.should == :foo
end
it "should infer the name when multiple optparse string are given" do
- option = Puppet::Faces::Option.new(face, "--foo", "-f")
+ option = Puppet::Interface::Option.new(face, "--foo", "-f")
option.name.should == :foo
end
it "should prefer the first long option name over a short option name" do
- option = Puppet::Faces::Option.new(face, "-f", "--foo")
+ option = Puppet::Interface::Option.new(face, "-f", "--foo")
option.name.should == :foo
end
it "should create an instance when given a face and name" do
- Puppet::Faces::Option.new(face, "--foo").
- should be_instance_of Puppet::Faces::Option
+ Puppet::Interface::Option.new(face, "--foo").
+ should be_instance_of Puppet::Interface::Option
end
describe "#to_s" do
it "should transform a symbol into a string" do
- option = Puppet::Faces::Option.new(face, "--foo")
+ option = Puppet::Interface::Option.new(face, "--foo")
option.name.should == :foo
option.to_s.should == "foo"
end
it "should use - rather than _ to separate words in strings but not symbols" do
- option = Puppet::Faces::Option.new(face, "--foo-bar")
+ option = Puppet::Interface::Option.new(face, "--foo-bar")
option.name.should == :foo_bar
option.to_s.should == "foo-bar"
end
diff --git a/spec/unit/faces_spec.rb b/spec/unit/interface_spec.rb
similarity index 59%
rename from spec/unit/faces_spec.rb
rename to spec/unit/interface_spec.rb
index 586abd6..afcf95d 100755
--- a/spec/unit/faces_spec.rb
+++ b/spec/unit/interface_spec.rb
@@ -1,48 +1,49 @@
-#!/usr/bin/env ruby
+require 'puppet/faces'
+require 'puppet/interface'
-require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
+describe Puppet::Interface do
+ subject { Puppet::Interface }
-describe Puppet::Faces do
before :all do
- @faces = Puppet::Faces::FaceCollection.instance_variable_get("@faces").dup
+ @faces = Puppet::Interface::FaceCollection.instance_variable_get("@faces").dup
end
before :each do
- Puppet::Faces::FaceCollection.instance_variable_get("@faces").clear
+ Puppet::Interface::FaceCollection.instance_variable_get("@faces").clear
end
after :all do
- Puppet::Faces::FaceCollection.instance_variable_set("@faces", @faces)
+ Puppet::Interface::FaceCollection.instance_variable_set("@faces", @faces)
end
describe "#define" do
it "should register the face" do
- face = Puppet::Faces.define(:face_test_register, '0.0.1')
- face.should == Puppet::Faces[:face_test_register, '0.0.1']
+ face = subject.define(:face_test_register, '0.0.1')
+ face.should == subject[:face_test_register, '0.0.1']
end
it "should load actions" do
- Puppet::Faces.any_instance.expects(:load_actions)
- Puppet::Faces.define(:face_test_load_actions, '0.0.1')
+ subject.any_instance.expects(:load_actions)
+ subject.define(:face_test_load_actions, '0.0.1')
end
it "should require a version number" do
- expect { Puppet::Faces.define(:no_version) }.should raise_error ArgumentError
+ expect { subject.define(:no_version) }.should raise_error ArgumentError
end
end
describe "#initialize" do
it "should require a version number" do
- expect { Puppet::Faces.new(:no_version) }.should raise_error ArgumentError
+ expect { subject.new(:no_version) }.should raise_error ArgumentError
end
it "should require a valid version number" do
- expect { Puppet::Faces.new(:bad_version, 'Rasins') }.
+ expect { subject.new(:bad_version, 'Rasins') }.
should raise_error ArgumentError
end
it "should instance-eval any provided block" do
- face = Puppet::Faces.new(:face_test_block, '0.0.1') do
+ face = subject.new(:face_test_block, '0.0.1') do
action(:something) do
when_invoked { "foo" }
end
@@ -53,31 +54,31 @@ describe Puppet::Faces do
end
it "should have a name" do
- Puppet::Faces.new(:me, '0.0.1').name.should == :me
+ subject.new(:me, '0.0.1').name.should == :me
end
it "should stringify with its own name" do
- Puppet::Faces.new(:me, '0.0.1').to_s.should =~ /\bme\b/
+ subject.new(:me, '0.0.1').to_s.should =~ /\bme\b/
end
it "should allow overriding of the default format" do
- face = Puppet::Faces.new(:me, '0.0.1')
+ face = subject.new(:me, '0.0.1')
face.set_default_format :foo
face.default_format.should == :foo
end
it "should default to :pson for its format" do
- Puppet::Faces.new(:me, '0.0.1').default_format.should == :pson
+ subject.new(:me, '0.0.1').default_format.should == :pson
end
# Why?
it "should create a class-level autoloader" do
- Puppet::Faces.autoloader.should be_instance_of(Puppet::Util::Autoload)
+ subject.autoloader.should be_instance_of(Puppet::Util::Autoload)
end
it "should try to require faces that are not known" do
- Puppet::Faces::FaceCollection.expects(:require).with "puppet/faces/foo"
- Puppet::Faces[:foo, '0.0.1']
+ subject::FaceCollection.expects(:require).with "puppet/faces/foo"
+ subject[:foo, '0.0.1']
end
it "should be able to load all actions in all search paths"
@@ -85,13 +86,13 @@ describe Puppet::Faces do
it_should_behave_like "things that declare options" do
def add_options_to(&block)
- Puppet::Faces.new(:with_options, '0.0.1', &block)
+ subject.new(:with_options, '0.0.1', &block)
end
end
describe "with face-level options" do
it "should not return any action-level options" do
- face = Puppet::Faces.new(:with_options, '0.0.1') do
+ face = subject.new(:with_options, '0.0.1') do
option "--foo"
option "--bar"
action :baz do
@@ -103,7 +104,7 @@ describe Puppet::Faces do
it "should fail when a face option duplicates an action option" do
expect {
- Puppet::Faces.new(:action_level_options, '0.0.1') do
+ subject.new(:action_level_options, '0.0.1') do
action :bar do option "--foo" end
option "--foo"
end
@@ -111,7 +112,7 @@ describe Puppet::Faces do
end
it "should work when two actions have the same option" do
- face = Puppet::Faces.new(:with_options, '0.0.1') do
+ face = subject.new(:with_options, '0.0.1') do
action :foo do option "--quux" end
action :bar do option "--quux" end
end
@@ -123,7 +124,7 @@ describe Puppet::Faces do
describe "with inherited options" do
let :face do
- parent = Class.new(Puppet::Faces)
+ parent = Class.new(subject)
parent.option("--inherited")
face = parent.new(:example, '0.2.1')
face.option("--local")
@@ -138,7 +139,7 @@ describe Puppet::Faces do
describe "#get_option" do
it "should return an inherited option object" do
- face.get_option(:inherited).should be_an_instance_of Puppet::Faces::Option
+ face.get_option(:inherited).should be_an_instance_of subject::Option
end
end
end
--
Puppet packaging for Debian
More information about the Pkg-puppet-devel
mailing list