[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:23 UTC 2011


The following commit has been merged in the experimental branch:
commit 8d144d0bf5116c5f04522f2b4cd75699f6480f8e
Author: Daniel Pittman <daniel at puppetlabs.com>
Date:   Thu Apr 7 14:20:35 2011 -0700

    (#7012) Update references in code to use face(s)
    
    The codebase is now using the new name, faces, uniformly to reference the
    objects contained.  All tests pass.

diff --git a/lib/puppet/application/config.rb b/lib/puppet/application/config.rb
index f655927..41a46c3 100644
--- a/lib/puppet/application/config.rb
+++ b/lib/puppet/application/config.rb
@@ -1,4 +1,4 @@
-require 'puppet/application/string_base'
+require 'puppet/application/faces_base'
 
-class Puppet::Application::Config < Puppet::Application::StringBase
+class Puppet::Application::Config < Puppet::Application::FacesBase
 end
diff --git a/lib/puppet/application/configurer.rb b/lib/puppet/application/configurer.rb
index be01833..751e6b4 100644
--- a/lib/puppet/application/configurer.rb
+++ b/lib/puppet/application/configurer.rb
@@ -1,5 +1,5 @@
 require 'puppet/application'
-require 'puppet/string'
+require 'puppet/faces'
 
 class Puppet::Application::Configurer < Puppet::Application
   should_parse_config
@@ -17,7 +17,7 @@ class Puppet::Application::Configurer < Puppet::Application
   end
 
   def run_command
-    report = Puppet::String[:configurer, '0.0.1'].synchronize(Puppet[:certname])
-    Puppet::String[:report, '0.0.1'].submit(report)
+    report = Puppet::Faces[:configurer, '0.0.1'].synchronize(Puppet[:certname])
+    Puppet::Faces[:report, '0.0.1'].submit(report)
   end
 end
diff --git a/lib/puppet/application/faces.rb b/lib/puppet/application/faces.rb
index 0a6a798..904a0cc 100644
--- a/lib/puppet/application/faces.rb
+++ b/lib/puppet/application/faces.rb
@@ -1,7 +1,7 @@
 require 'puppet/application'
-require 'puppet/string'
+require 'puppet/faces'
 
-class Puppet::Application::String < Puppet::Application
+class Puppet::Application::Faces < Puppet::Application
 
   should_parse_config
   run_mode :agent
@@ -18,7 +18,7 @@ class Puppet::Application::String < Puppet::Application
     if arguments.empty?
       arguments = %w{terminuses actions}
     end
-    strings.each do |name|
+    faces.each do |name|
       str = "#{name}:\n"
       if arguments.include?("terminuses")
         begin
@@ -68,12 +68,12 @@ class Puppet::Application::String < Puppet::Application
     end
 
     unless respond_to?(verb)
-      raise "Command '#{verb}' not found for 'string'"
+      raise "Command '#{verb}' not found for 'faces'"
     end
   end
 
-  def strings
-    Puppet::String.strings
+  def faces
+    Puppet::Faces.faces
   end
 
   def terminus_classes(indirection)
@@ -81,9 +81,9 @@ class Puppet::Application::String < Puppet::Application
   end
 
   def actions(indirection)
-    return [] unless string = Puppet::String[indirection, '0.0.1']
-    string.load_actions
-    return string.actions.sort { |a, b| a.to_s <=> b.to_s }
+    return [] unless faces = Puppet::Faces[indirection, '0.0.1']
+    faces.load_actions
+    return faces.actions.sort { |a, b| a.to_s <=> b.to_s }
   end
 
   def load_applications
diff --git a/lib/puppet/application/faces_base.rb b/lib/puppet/application/faces_base.rb
index 09d02c0..6d66ee8 100644
--- a/lib/puppet/application/faces_base.rb
+++ b/lib/puppet/application/faces_base.rb
@@ -1,7 +1,7 @@
 require 'puppet/application'
-require 'puppet/string'
+require 'puppet/faces'
 
-class Puppet::Application::StringBase < Puppet::Application
+class Puppet::Application::FacesBase < Puppet::Application
   should_parse_config
   run_mode :agent
 
@@ -24,7 +24,7 @@ class Puppet::Application::StringBase < Puppet::Application
   end
 
 
-  attr_accessor :string, :action, :type, :arguments, :format
+  attr_accessor :face, :action, :type, :arguments, :format
   attr_writer :exit_code
 
   # This allows you to set the exit code if you don't want to just exit
@@ -47,7 +47,7 @@ class Puppet::Application::StringBase < Puppet::Application
   def preinit
     super
     trap(:INT) do
-      $stderr.puts "Cancelling String"
+      $stderr.puts "Cancelling Face"
       exit(0)
     end
 
@@ -57,8 +57,8 @@ class Puppet::Application::StringBase < Puppet::Application
     # TODO: These should be configurable versions, through a global
     # '--version' option, but we don't implement that yet... --daniel 2011-03-29
     @type   = self.class.name.to_s.sub(/.+:/, '').downcase.to_sym
-    @string = Puppet::String[@type, :current]
-    @format = @string.default_format
+    @face   = Puppet::Faces[@type, :current]
+    @format = @face.default_format
 
     # Now, walk the command line and identify the action.  We skip over
     # arguments based on introspecting the action and all, and find the first
@@ -68,11 +68,11 @@ class Puppet::Application::StringBase < Puppet::Application
     until @action or (index += 1) >= command_line.args.length do
       item = command_line.args[index]
       if item =~ /^-/ then
-        option = @string.options.find do |name|
+        option = @face.options.find do |name|
           item =~ /^-+#{name.to_s.gsub(/[-_]/, '[-_]')}(?:[ =].*)?$/
         end
         if option then
-          option = @string.get_option(option)
+          option = @face.get_option(option)
           # If we have an inline argument, just carry on.  We don't need to
           # care about optional vs mandatory in that case because we do a real
           # parse later, and that will totally take care of raising the error
@@ -91,9 +91,9 @@ class Puppet::Application::StringBase < Puppet::Application
           raise ArgumentError, "Unknown option #{item.sub(/=.*$/, '').inspect}"
         end
       else
-        action = @string.get_action(item.to_sym)
+        action = @face.get_action(item.to_sym)
         if action.nil? then
-          raise ArgumentError, "#{@string} does not have an #{item.inspect} action!"
+          raise ArgumentError, "#{@face} does not have an #{item.inspect} action!"
         end
         @action = action
       end
@@ -129,7 +129,7 @@ class Puppet::Application::StringBase < Puppet::Application
     # Note: because of our definition of where the action is set, we end up
     # with it *always* being the first word of the remaining set of command
     # line arguments.  So, strip that off when we construct the arguments to
-    # pass down to the string action. --daniel 2011-04-04
+    # pass down to the face action. --daniel 2011-04-04
     @arguments.delete_at(0)
 
     # We copy all of the app options to the end of the call; This allows each
@@ -142,7 +142,7 @@ class Puppet::Application::StringBase < Puppet::Application
 
   def main
     # Call the method associated with the provided action (e.g., 'find').
-    if result = @string.send(@action.name, *arguments)
+    if result = @face.send(@action.name, *arguments)
       puts render(result)
     end
     exit(exit_code)
diff --git a/lib/puppet/application/indirection_base.rb b/lib/puppet/application/indirection_base.rb
index cfa1ea5..7455ebe 100644
--- a/lib/puppet/application/indirection_base.rb
+++ b/lib/puppet/application/indirection_base.rb
@@ -1,4 +1,4 @@
-require 'puppet/application/string_base'
+require 'puppet/application/faces_base'
 
-class Puppet::Application::IndirectionBase < Puppet::Application::StringBase
+class Puppet::Application::IndirectionBase < Puppet::Application::FacesBase
 end
diff --git a/lib/puppet/faces.rb b/lib/puppet/faces.rb
index 517cf45..07a7454 100644
--- a/lib/puppet/faces.rb
+++ b/lib/puppet/faces.rb
@@ -1,16 +1,16 @@
 require 'puppet'
 require 'puppet/util/autoload'
 
-class Puppet::String
-  require 'puppet/string/string_collection'
+class Puppet::Faces
+  require 'puppet/faces/face_collection'
 
-  require 'puppet/string/action_manager'
-  include Puppet::String::ActionManager
-  extend Puppet::String::ActionManager
+  require 'puppet/faces/action_manager'
+  include Puppet::Faces::ActionManager
+  extend Puppet::Faces::ActionManager
 
-  require 'puppet/string/option_manager'
-  include Puppet::String::OptionManager
-  extend Puppet::String::OptionManager
+  require 'puppet/faces/option_manager'
+  include Puppet::Faces::OptionManager
+  extend Puppet::Faces::OptionManager
 
   include Puppet::Util
 
@@ -19,33 +19,35 @@ class Puppet::String
     # 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/string")
+      @autoloader ||= Puppet::Util::Autoload.new(:application, "puppet/faces")
     end
 
-    def strings
-      Puppet::String::StringCollection.strings
+    def faces
+      Puppet::Faces::FaceCollection.faces
     end
 
-    def string?(name, version)
-      Puppet::String::StringCollection.string?(name, version)
+    def face?(name, version)
+      Puppet::Faces::FaceCollection.face?(name, version)
     end
 
     def register(instance)
-      Puppet::String::StringCollection.register(instance)
+      Puppet::Faces::FaceCollection.register(instance)
     end
 
     def define(name, version, &block)
-      if string?(name, version)
-        string = Puppet::String::StringCollection[name, version]
+      if face?(name, version)
+        face = Puppet::Faces::FaceCollection[name, version]
       else
-        string = self.new(name, version)
-        Puppet::String::StringCollection.register(string)
-        string.load_actions
+        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
 
-      string.instance_eval(&block) if block_given?
+      face.instance_eval(&block) if block_given?
 
-      return string
+      return face
     end
 
     alias :[] :define
@@ -61,11 +63,11 @@ class Puppet::String
   attr_reader :name
 
   def initialize(name, version, &block)
-    unless Puppet::String::StringCollection.validate_version(version)
-      raise ArgumentError, "Cannot create string #{name.inspect} with invalid version number '#{version}'!"
+    unless Puppet::Faces::FaceCollection.validate_version(version)
+      raise ArgumentError, "Cannot create face #{name.inspect} with invalid version number '#{version}'!"
     end
 
-    @name = Puppet::String::StringCollection.underscorize(name)
+    @name = Puppet::Faces::FaceCollection.underscorize(name)
     @version = version
     @default_format = :pson
 
@@ -74,11 +76,11 @@ class Puppet::String
 
   # Try to find actions defined in other files.
   def load_actions
-    path = "puppet/string/#{name}"
+    path = "puppet/faces/#{name}"
 
     loaded = []
     [path, "#{name}@#{version}/#{path}"].each do |path|
-      Puppet::String.autoloader.search_directories.each do |dir|
+      Puppet::Faces.autoloader.search_directories.each do |dir|
         fdir = ::File.join(dir, path)
         next unless FileTest.directory?(fdir)
 
@@ -99,6 +101,6 @@ class Puppet::String
   end
 
   def to_s
-    "Puppet::String[#{name.inspect}, #{version.inspect}]"
+    "Puppet::Faces[#{name.inspect}, #{version.inspect}]"
   end
 end
diff --git a/lib/puppet/faces/action.rb b/lib/puppet/faces/action.rb
index 0f5032f..58d2c60 100644
--- a/lib/puppet/faces/action.rb
+++ b/lib/puppet/faces/action.rb
@@ -1,28 +1,26 @@
 # -*- coding: utf-8 -*-
-require 'puppet/string'
-require 'puppet/string/option'
+require 'puppet/faces'
+require 'puppet/faces/option'
 
-class Puppet::String::Action
-  attr_reader :name
-
-  def to_s
-    "#{@string}##{@name}"
-  end
-
-  def initialize(string, name, attrs = {})
+class Puppet::Faces::Action
+  def initialize(face, name, attrs = {})
     raise "#{name.inspect} is an invalid action name" unless name.to_s =~ /^[a-z]\w*$/
-    @string  = string
+    @face    = face
     @name    = name.to_sym
     @options = {}
     attrs.each do |k, v| send("#{k}=", v) end
   end
 
+  attr_reader :name
+  def to_s() "#{@face}##{@name}" end
+
+
   # Initially, this was defined to allow the @action.invoke pattern, which is
   # a very natural way to invoke behaviour given our introspection
-  # capabilities.   Heck, our initial plan was to have the string delegate to
+  # capabilities.   Heck, our initial plan was to have the faces delegate to
   # the action object for invocation and all.
   #
-  # It turns out that we have a binding problem to solve: @string was bound to
+  # It turns out that we have a binding problem to solve: @face was bound to
   # the parent class, not the subclass instance, and we don't pass the
   # appropriate context or change the binding enough to make this work.
   #
@@ -33,13 +31,13 @@ class Puppet::String::Action
   # So, we are pulling this method for now, and will return it to life when we
   # have the time to resolve the problem.  For now, you should replace...
   #
-  #     @action = @string.get_action(name)
+  #     @action = @face.get_action(name)
   #     @action.invoke(arg1, arg2, arg3)
   #
   # ...with...
   #
-  #     @action = @string.get_action(name)
-  #     @string.send(@action.name, arg1, arg2, arg3)
+  #     @action = @face.get_action(name)
+  #     @face.send(@action.name, arg1, arg2, arg3)
   #
   # I understand that is somewhat cumbersome, but it functions as desired.
   # --daniel 2011-03-31
@@ -48,7 +46,7 @@ class Puppet::String::Action
   # documentation, for the benefit of the reader.
   #
   # def invoke(*args, &block)
-  #   @string.send(name, *args, &block)
+  #   @face.send(name, *args, &block)
   # end
 
   def when_invoked=(block)
@@ -82,12 +80,12 @@ class Puppet::String::Action
                  self.__send__(#{internal_name.inspect}, *args)
                end"
 
-    if @string.is_a?(Class)
-      @string.class_eval do eval wrapper, nil, file, line end
-      @string.define_method(internal_name, &block)
+    if @face.is_a?(Class)
+      @face.class_eval do eval wrapper, nil, file, line end
+      @face.define_method(internal_name, &block)
     else
-      @string.instance_eval do eval wrapper, nil, file, line end
-      @string.meta_def(internal_name, &block)
+      @face.instance_eval do eval wrapper, nil, file, line end
+      @face.meta_def(internal_name, &block)
     end
   end
 
@@ -95,8 +93,8 @@ class Puppet::String::Action
     option.aliases.each do |name|
       if conflict = get_option(name) then
         raise ArgumentError, "Option #{option} conflicts with existing option #{conflict}"
-      elsif conflict = @string.get_option(name) then
-        raise ArgumentError, "Option #{option} conflicts with existing option #{conflict} on #{@string}"
+      elsif conflict = @face.get_option(name) then
+        raise ArgumentError, "Option #{option} conflicts with existing option #{conflict} on #{@face}"
       end
     end
 
@@ -112,10 +110,10 @@ class Puppet::String::Action
   end
 
   def options
-    (@options.keys + @string.options).sort
+    (@options.keys + @face.options).sort
   end
 
   def get_option(name)
-    @options[name.to_sym] || @string.get_option(name)
+    @options[name.to_sym] || @face.get_option(name)
   end
 end
diff --git a/lib/puppet/faces/action_builder.rb b/lib/puppet/faces/action_builder.rb
index e7c0327..a670689 100644
--- a/lib/puppet/faces/action_builder.rb
+++ b/lib/puppet/faces/action_builder.rb
@@ -1,31 +1,31 @@
-require 'puppet/string'
-require 'puppet/string/action'
+require 'puppet/faces'
+require 'puppet/faces/action'
 
-class Puppet::String::ActionBuilder
+class Puppet::Faces::ActionBuilder
   attr_reader :action
 
-  def self.build(string, name, &block)
+  def self.build(face, name, &block)
     raise "Action #{name.inspect} must specify a block" unless block
-    new(string, name, &block).action
+    new(face, name, &block).action
   end
 
   private
-  def initialize(string, name, &block)
-    @string = string
-    @action = Puppet::String::Action.new(string, name)
+  def initialize(face, name, &block)
+    @face   = face
+    @action = Puppet::Faces::Action.new(face, name)
     instance_eval(&block)
   end
 
   # Ideally the method we're defining here would be added to the action, and a
-  # method on the string would defer to it, but we can't get scope correct,
-  # so we stick with this. --daniel 2011-03-24
+  # method on the face would defer to it, but we can't get scope correct, so
+  # we stick with this. --daniel 2011-03-24
   def when_invoked(&block)
     raise "when_invoked on an ActionBuilder with no corresponding Action" unless @action
     @action.when_invoked = block
   end
 
   def option(*declaration, &block)
-    option = Puppet::String::OptionBuilder.build(@action, *declaration, &block)
+    option = Puppet::Faces::OptionBuilder.build(@action, *declaration, &block)
     @action.add_option(option)
   end
 end
diff --git a/lib/puppet/faces/action_manager.rb b/lib/puppet/faces/action_manager.rb
index 9f0aa75..6c0036b 100644
--- a/lib/puppet/faces/action_manager.rb
+++ b/lib/puppet/faces/action_manager.rb
@@ -1,12 +1,12 @@
-require 'puppet/string/action_builder'
+require 'puppet/faces/action_builder'
 
-module Puppet::String::ActionManager
+module Puppet::Faces::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::String::ActionBuilder.build(self, name, &block)
+    action = Puppet::Faces::ActionBuilder.build(self, name, &block)
     @actions[action.name] = action
   end
 
@@ -15,7 +15,7 @@ module Puppet::String::ActionManager
   def script(name, &block)
     @actions ||= {}
     raise "Action #{name} already defined for #{self}" if action?(name)
-    @actions[name] = Puppet::String::Action.new(self, name, :when_invoked => block)
+    @actions[name] = Puppet::Faces::Action.new(self, name, :when_invoked => block)
   end
 
   def actions
diff --git a/lib/puppet/faces/catalog.rb b/lib/puppet/faces/catalog.rb
index 441c7ee..2e2168a 100644
--- a/lib/puppet/faces/catalog.rb
+++ b/lib/puppet/faces/catalog.rb
@@ -1,6 +1,6 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
-Puppet::String::Indirector.define(:catalog, '0.0.1') do
+Puppet::Faces::Indirector.define(:catalog, '0.0.1') do
   action(:apply) do
     when_invoked do |catalog, options|
       report = Puppet::Transaction::Report.new("apply")
@@ -28,7 +28,7 @@ Puppet::String::Indirector.define(:catalog, '0.0.1') do
       facts_to_upload = {:facts_format => :b64_zlib_yaml, :facts => CGI.escape(facts.render(:b64_zlib_yaml))}
       catalog = nil
       retrieval_duration = thinmark do
-        catalog = Puppet::String[:catalog, '0.0.1'].find(certname, facts_to_upload)
+        catalog = Puppet::Faces[:catalog, '0.0.1'].find(certname, facts_to_upload)
       end
       catalog = catalog.to_ral
       catalog.finalize
diff --git a/lib/puppet/faces/catalog/select.rb b/lib/puppet/faces/catalog/select.rb
index 11670e2..e29d199 100644
--- a/lib/puppet/faces/catalog/select.rb
+++ b/lib/puppet/faces/catalog/select.rb
@@ -1,5 +1,5 @@
 # Select and show a list of resources of a given type.
-Puppet::String.define(:catalog, '0.0.1') do
+Puppet::Faces.define(:catalog, '0.0.1') do
   action :select do
     when_invoked do |host, type, options|
       catalog = Puppet::Resource::Catalog.indirection.find(host)
diff --git a/lib/puppet/faces/certificate.rb b/lib/puppet/faces/certificate.rb
index e8773ae..b10bee5 100644
--- a/lib/puppet/faces/certificate.rb
+++ b/lib/puppet/faces/certificate.rb
@@ -1,7 +1,7 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 require 'puppet/ssl/host'
 
-Puppet::String::Indirector.define(:certificate, '0.0.1') do
+Puppet::Faces::Indirector.define(:certificate, '0.0.1') do
   # REVISIT: This should use a pre-invoke hook to run the common code that
   # needs to happen before we invoke any action; that would be much nicer than
   # the "please repeat yourself" stuff found in here right now.
diff --git a/lib/puppet/faces/certificate_request.rb b/lib/puppet/faces/certificate_request.rb
index 218b40b..5e91bdb 100644
--- a/lib/puppet/faces/certificate_request.rb
+++ b/lib/puppet/faces/certificate_request.rb
@@ -1,4 +1,4 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
-Puppet::String::Indirector.define(:certificate_request, '0.0.1') do
+Puppet::Faces::Indirector.define(:certificate_request, '0.0.1') do
 end
diff --git a/lib/puppet/faces/certificate_revocation_list.rb b/lib/puppet/faces/certificate_revocation_list.rb
index 9731b4f..2f2d728 100644
--- a/lib/puppet/faces/certificate_revocation_list.rb
+++ b/lib/puppet/faces/certificate_revocation_list.rb
@@ -1,4 +1,4 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
-Puppet::String::Indirector.define(:certificate_revocation_list, '0.0.1') do
+Puppet::Faces::Indirector.define(:certificate_revocation_list, '0.0.1') do
 end
diff --git a/lib/puppet/faces/config.rb b/lib/puppet/faces/config.rb
index 8a94171..647bf50 100644
--- a/lib/puppet/faces/config.rb
+++ b/lib/puppet/faces/config.rb
@@ -1,6 +1,6 @@
-require 'puppet/string'
+require 'puppet/faces'
 
-Puppet::String.define(:config, '0.0.1') do
+Puppet::Faces.define(:config, '0.0.1') do
   action(:print) do
     when_invoked do |*args|
       options = args.pop
diff --git a/lib/puppet/faces/configurer.rb b/lib/puppet/faces/configurer.rb
index 257f97e..d409876 100644
--- a/lib/puppet/faces/configurer.rb
+++ b/lib/puppet/faces/configurer.rb
@@ -1,11 +1,11 @@
-require 'puppet/string'
+require 'puppet/faces'
 
-Puppet::String.define(:configurer, '0.0.1') do
+Puppet::Faces.define(:configurer, '0.0.1') do
   action(:synchronize) do
     when_invoked do |certname, options|
-      facts = Puppet::String[:facts, '0.0.1'].find(certname)
-      catalog = Puppet::String[:catalog, '0.0.1'].download(certname, facts)
-      report = Puppet::String[:catalog, '0.0.1'].apply(catalog)
+      facts = Puppet::Faces[:facts, '0.0.1'].find(certname)
+      catalog = Puppet::Faces[:catalog, '0.0.1'].download(certname, facts)
+      report = Puppet::Faces[:catalog, '0.0.1'].apply(catalog)
       report
     end
   end
diff --git a/lib/puppet/faces/faces_collection.rb b/lib/puppet/faces/face_collection.rb
similarity index 75%
rename from lib/puppet/faces/faces_collection.rb
rename to lib/puppet/faces/face_collection.rb
index ecd9935..e6ee709 100644
--- a/lib/puppet/faces/faces_collection.rb
+++ b/lib/puppet/faces/face_collection.rb
@@ -1,18 +1,20 @@
 # -*- coding: utf-8 -*-
-require 'puppet/string'
+require 'puppet/faces'
 
-module Puppet::String::StringCollection
+module Puppet::Faces::FaceCollection
   SEMVER_VERSION = /^(\d+)\.(\d+)\.(\d+)([A-Za-z][0-9A-Za-z-]*|)$/
 
-  @strings = Hash.new { |hash, key| hash[key] = {} }
+  @faces = Hash.new { |hash, key| hash[key] = {} }
 
-  def self.strings
+  def self.faces
     unless @loaded
       @loaded = true
       $LOAD_PATH.each do |dir|
         next unless FileTest.directory?(dir)
         Dir.chdir(dir) do
-          Dir.glob("puppet/string/v*/*.rb").collect { |f| f.sub(/\.rb/, '') }.each do |file|
+          # REVISIT: This is wrong!!!!   We don't name files like that ever,
+          # so we should no longer match things like this.  Damnit!!! --daniel 2011-04-07
+          Dir.glob("puppet/faces/v*/*.rb").collect { |f| f.sub(/\.rb/, '') }.each do |file|
             iname = file.sub(/\.rb/, '')
             begin
               require iname
@@ -24,14 +26,14 @@ module Puppet::String::StringCollection
         end
       end
     end
-    return @strings.keys
+    return @faces.keys
   end
 
   def self.validate_version(version)
     !!(SEMVER_VERSION =~ version.to_s)
   end
 
-  def self.cmp_versions(a, b)
+  def self.cmp_semver(a, b)
     a, b = [a, b].map do |x|
       parts = SEMVER_VERSION.match(x).to_a[1..4]
       parts[0..2] = parts[0..2].map { |e| e.to_i }
@@ -48,12 +50,12 @@ module Puppet::String::StringCollection
   end
 
   def self.[](name, version)
-    @strings[underscorize(name)][version] if string?(name, version)
+    @faces[underscorize(name)][version] if face?(name, version)
   end
 
-  def self.string?(name, version)
+  def self.face?(name, version)
     name = underscorize(name)
-    return true if @strings[name].has_key?(version)
+    return true if @faces[name].has_key?(version)
 
     # We always load the current version file; the common case is that we have
     # the expected version and any compatibility versions in the same file,
@@ -62,14 +64,14 @@ module Puppet::String::StringCollection
     # We use require to avoid executing the code multiple times, like any
     # other Ruby library that we might want to use.  --daniel 2011-04-06
     begin
-      require "puppet/string/#{name}"
+      require "puppet/faces/#{name}"
 
       # If we wanted :current, we need to index to find that; direct version
       # requests just work™ as they go. --daniel 2011-04-06
       if version == :current then
         # We need to find current out of this.  This is the largest version
         # number that doesn't have a dedicated on-disk file present; those
-        # represent "experimental" versions of strings, which we don't fully
+        # represent "experimental" versions of faces, which we don't fully
         # support yet.
         #
         # We walk the versions from highest to lowest and take the first version
@@ -92,30 +94,30 @@ module Puppet::String::StringCollection
         # versions here and return the last item in that set.
         #
         # --daniel 2011-04-06
-        latest_ver = @strings[name].keys.sort {|a, b| cmp_versions(a, b) }.last
-        @strings[name][:current] = @strings[name][latest_ver]
+        latest_ver = @faces[name].keys.sort {|a, b| cmp_semver(a, b) }.last
+        @faces[name][:current] = @faces[name][latest_ver]
       end
     rescue LoadError => e
-      raise unless e.message =~ %r{-- puppet/string/#{name}$}
+      raise unless e.message =~ %r{-- puppet/faces/#{name}$}
       # ...guess we didn't find the file; return a much better problem.
     end
 
-    # Now, either we have the version in our set of strings, or we didn't find
+    # Now, either we have the version in our set of faces, or we didn't find
     # the version they were looking for.  In the future we will support
     # loading versioned stuff from some look-aside part of the Ruby load path,
     # but we don't need that right now.
     #
     # So, this comment is a place-holder for that.  --daniel 2011-04-06
-    return !! @strings[name].has_key?(version)
+    return !! @faces[name].has_key?(version)
   end
 
-  def self.register(string)
-    @strings[underscorize(string.name)][string.version] = string
+  def self.register(face)
+    @faces[underscorize(face.name)][face.version] = face
   end
 
   def self.underscorize(name)
     unless name.to_s =~ /^[-_a-z]+$/i then
-      raise ArgumentError, "#{name.inspect} (#{name.class}) is not a valid string name"
+      raise ArgumentError, "#{name.inspect} (#{name.class}) is not a valid face name"
     end
 
     name.to_s.downcase.split(/[-_]/).join('_').to_sym
diff --git a/lib/puppet/faces/facts.rb b/lib/puppet/faces/facts.rb
index 6bd9904..33eacef 100644
--- a/lib/puppet/faces/facts.rb
+++ b/lib/puppet/faces/facts.rb
@@ -1,7 +1,7 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 require 'puppet/node/facts'
 
-Puppet::String::Indirector.define(:facts, '0.0.1') do
+Puppet::Faces::Indirector.define(:facts, '0.0.1') do
   set_default_format :yaml
 
   # Upload our facts to the server
diff --git a/lib/puppet/faces/file.rb b/lib/puppet/faces/file.rb
index cc5737f..e8ad18c 100644
--- a/lib/puppet/faces/file.rb
+++ b/lib/puppet/faces/file.rb
@@ -1,5 +1,5 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
-Puppet::String::Indirector.define(:file, '0.0.1') do
+Puppet::Faces::Indirector.define(:file, '0.0.1') do
   set_indirection_name :file_bucket_file
 end
diff --git a/lib/puppet/faces/indirector.rb b/lib/puppet/faces/indirector.rb
index 0c7d043..f722600 100644
--- a/lib/puppet/faces/indirector.rb
+++ b/lib/puppet/faces/indirector.rb
@@ -1,7 +1,7 @@
 require 'puppet'
-require 'puppet/string'
+require 'puppet/faces'
 
-class Puppet::String::Indirector < Puppet::String
+class Puppet::Faces::Indirector < Puppet::Faces
   option "--terminus TERMINUS" do
     desc "REVISIT: You can select a terminus, which has some bigger effect
 that we should describe in this file somehow."
@@ -68,13 +68,13 @@ that we should describe in this file somehow."
     @indirection_name || name.to_sym
   end
 
-  # Here's your opportunity to override the indirection name.  By default
-  # it will be the same name as the string.
+  # Here's your opportunity to override the indirection name.  By default it
+  # will be the same name as the face.
   def set_indirection_name(name)
     @indirection_name = name
   end
 
-  # Return an indirection associated with an string, if one exists
+  # Return an indirection associated with a face, if one exists;
   # One usually does.
   def indirection
     unless @indirection
diff --git a/lib/puppet/faces/key.rb b/lib/puppet/faces/key.rb
index 95acead..7b6ad52 100644
--- a/lib/puppet/faces/key.rb
+++ b/lib/puppet/faces/key.rb
@@ -1,4 +1,4 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
-Puppet::String::Indirector.define(:key, '0.0.1') do
+Puppet::Faces::Indirector.define(:key, '0.0.1') do
 end
diff --git a/lib/puppet/faces/node.rb b/lib/puppet/faces/node.rb
index bc31a2c..7eed0df 100644
--- a/lib/puppet/faces/node.rb
+++ b/lib/puppet/faces/node.rb
@@ -1,5 +1,5 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
-Puppet::String::Indirector.define(:node, '0.0.1') do
+Puppet::Faces::Indirector.define(:node, '0.0.1') do
   set_default_format :yaml
 end
diff --git a/lib/puppet/faces/option.rb b/lib/puppet/faces/option.rb
index 352f7e5..7d3ed37 100644
--- a/lib/puppet/faces/option.rb
+++ b/lib/puppet/faces/option.rb
@@ -1,6 +1,6 @@
-require 'puppet/string'
+require 'puppet/faces'
 
-class Puppet::String::Option
+class Puppet::Faces::Option
   attr_reader   :parent
   attr_reader   :name
   attr_reader   :aliases
@@ -65,8 +65,8 @@ class Puppet::String::Option
   end
 
   # to_s and optparse_to_name are roughly mirrored, because they are used to
-  # transform strings to name symbols, and vice-versa.  This isn't a full
-  # bidirectional transformation though.
+  # transform options to name symbols, and vice-versa.  This isn't a full
+  # bidirectional transformation though. --daniel 2011-04-07
   def to_s
     @name.to_s.tr('_', '-')
   end
diff --git a/lib/puppet/faces/option_builder.rb b/lib/puppet/faces/option_builder.rb
index da0d213..0b66675 100644
--- a/lib/puppet/faces/option_builder.rb
+++ b/lib/puppet/faces/option_builder.rb
@@ -1,22 +1,22 @@
-require 'puppet/string/option'
+require 'puppet/faces/option'
 
-class Puppet::String::OptionBuilder
+class Puppet::Faces::OptionBuilder
   attr_reader :option
 
-  def self.build(string, *declaration, &block)
-    new(string, *declaration, &block).option
+  def self.build(face, *declaration, &block)
+    new(face, *declaration, &block).option
   end
 
   private
-  def initialize(string, *declaration, &block)
-    @string = string
-    @option = Puppet::String::Option.new(string, *declaration)
+  def initialize(face, *declaration, &block)
+    @face   = face
+    @option = Puppet::Faces::Option.new(face, *declaration)
     block and instance_eval(&block)
     @option
   end
 
   # Metaprogram the simple DSL from the option class.
-  Puppet::String::Option.instance_methods.grep(/=$/).each do |setter|
+  Puppet::Faces::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/faces/option_manager.rb
index f952ad4..02a73af 100644
--- a/lib/puppet/faces/option_manager.rb
+++ b/lib/puppet/faces/option_manager.rb
@@ -1,10 +1,10 @@
-require 'puppet/string/option_builder'
+require 'puppet/faces/option_builder'
 
-module Puppet::String::OptionManager
+module Puppet::Faces::OptionManager
   # Declare that this app can take a specific option, and provide
   # the code to do so.
   def option(*declaration, &block)
-    add_option Puppet::String::OptionBuilder.build(self, *declaration, &block)
+    add_option Puppet::Faces::OptionBuilder.build(self, *declaration, &block)
   end
 
   def add_option(option)
diff --git a/lib/puppet/faces/report.rb b/lib/puppet/faces/report.rb
index da3ca85..23a5189 100644
--- a/lib/puppet/faces/report.rb
+++ b/lib/puppet/faces/report.rb
@@ -1,6 +1,6 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
-Puppet::String::Indirector.define(:report, '0.0.1') do
+Puppet::Faces::Indirector.define(:report, '0.0.1') do
   action(:submit) do
     when_invoked do |report, options|
       begin
diff --git a/lib/puppet/faces/resource.rb b/lib/puppet/faces/resource.rb
index 9838be0..60b0d94 100644
--- a/lib/puppet/faces/resource.rb
+++ b/lib/puppet/faces/resource.rb
@@ -1,4 +1,4 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
-Puppet::String::Indirector.define(:resource, '0.0.1') do
+Puppet::Faces::Indirector.define(:resource, '0.0.1') do
 end
diff --git a/lib/puppet/faces/resource_type.rb b/lib/puppet/faces/resource_type.rb
index 8ca31ea..4321d65 100644
--- a/lib/puppet/faces/resource_type.rb
+++ b/lib/puppet/faces/resource_type.rb
@@ -1,4 +1,4 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
-Puppet::String::Indirector.define(:resource_type, '0.0.1') do
+Puppet::Faces::Indirector.define(:resource_type, '0.0.1') do
 end
diff --git a/lib/puppet/faces/status.rb b/lib/puppet/faces/status.rb
index 41de2bb..e035f28 100644
--- a/lib/puppet/faces/status.rb
+++ b/lib/puppet/faces/status.rb
@@ -1,4 +1,4 @@
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
-Puppet::String::Indirector.define(:status, '0.0.1') do
+Puppet::Faces::Indirector.define(:status, '0.0.1') do
 end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index bb71fca..3c8cd4f 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(dir, dir + 'lib', dir + '../lib')
 
 require 'mocha'
 require 'puppet'
-require 'puppet/string'
+require 'puppet/faces'
 require 'rspec'
 
 Pathname.glob("#{dir}/shared_behaviours/**/*.rb") do |behaviour|
@@ -28,7 +28,7 @@ RSpec.configure do |config|
 
     @load_path_scratch_dir = Dir.mktmpdir
     $LOAD_PATH.push @load_path_scratch_dir
-    FileUtils.mkdir_p(File.join @load_path_scratch_dir, 'puppet', 'string')
+    FileUtils.mkdir_p(File.join @load_path_scratch_dir, 'puppet', 'faces')
   end
 
   config.after :each do
@@ -41,10 +41,10 @@ RSpec.configure do |config|
     FileUtils.remove_entry_secure @load_path_scratch_dir
   end
 
-  def write_scratch_string(name)
+  def write_scratch_faces(name)
     fail "you need to supply a block: do |fh| fh.puts 'content' end" unless block_given?
     fail "name should be a symbol" unless name.is_a? Symbol
-    filename = File.join(@load_path_scratch_dir, 'puppet', 'string', "#{name}.rb")
+    filename = File.join(@load_path_scratch_dir, 'puppet', 'faces', "#{name}.rb")
     File.open(filename, 'w') do |fh|
       yield fh
     end
diff --git a/spec/unit/application/certificate_spec.rb b/spec/unit/application/certificate_spec.rb
index 3d2215d..6153d95 100755
--- a/spec/unit/application/certificate_spec.rb
+++ b/spec/unit/application/certificate_spec.rb
@@ -1,12 +1,9 @@
-#!/usr/bin/env ruby
-
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 require 'puppet/application/certificate'
 
 describe Puppet::Application::Certificate do
   it "should have a 'ca-location' option" do
-    # REVISIT: This is delegated from the string, and we will have a test
-    # there, so is this actually a valuable test?
+    # REVISIT: This is delegated from the face, and we will have a test there,
+    # so is this actually a valuable test? --daniel 2011-04-07
     subject.command_line.stubs(:args).returns %w{list}
     subject.preinit
     subject.should respond_to(:handle_ca_location)
diff --git a/spec/unit/application/config_spec.rb b/spec/unit/application/config_spec.rb
index a45adc8..066df6a 100755
--- a/spec/unit/application/config_spec.rb
+++ b/spec/unit/application/config_spec.rb
@@ -4,7 +4,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 require 'puppet/application/config'
 
 describe Puppet::Application::Config do
-  it "should be a subclass of Puppet::Application::StringBase" do
-    Puppet::Application::Config.superclass.should equal(Puppet::Application::StringBase)
+  it "should be a subclass of Puppet::Application::FacesBase" do
+    Puppet::Application::Config.superclass.should equal(Puppet::Application::FacesBase)
   end
 end
diff --git a/spec/unit/application/faces_base_spec.rb b/spec/unit/application/faces_base_spec.rb
index 3f8ae73..6d8815f 100755
--- a/spec/unit/application/faces_base_spec.rb
+++ b/spec/unit/application/faces_base_spec.rb
@@ -1,22 +1,22 @@
 #!/usr/bin/env ruby
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-require 'puppet/application/string_base'
+require 'puppet/application/faces_base'
 require 'tmpdir'
 
-class Puppet::Application::StringBase::Basetest < Puppet::Application::StringBase
+class Puppet::Application::FacesBase::Basetest < Puppet::Application::FacesBase
 end
 
-describe Puppet::Application::StringBase do
+describe Puppet::Application::FacesBase do
   before :all do
     @dir = Dir.mktmpdir
     $LOAD_PATH.push(@dir)
-    FileUtils.mkdir_p(File.join @dir, 'puppet', 'string')
-    File.open(File.join(@dir, 'puppet', 'string', 'basetest.rb'), 'w') do |f|
-      f.puts "Puppet::String.define(:basetest, '0.0.1')"
+    FileUtils.mkdir_p(File.join @dir, 'puppet', 'faces')
+    File.open(File.join(@dir, 'puppet', 'faces', 'basetest.rb'), 'w') do |f|
+      f.puts "Puppet::Faces.define(:basetest, '0.0.1')"
     end
 
-    Puppet::String.define(:basetest, '0.0.1') do
+    Puppet::Faces.define(:basetest, '0.0.1') do
       option("--[no-]boolean")
       option("--mandatory MANDATORY")
       option("--optional [OPTIONAL]")
@@ -34,7 +34,7 @@ describe Puppet::Application::StringBase do
   end
 
   let :app do
-    app = Puppet::Application::StringBase::Basetest.new
+    app = Puppet::Application::FacesBase::Basetest.new
     app.stubs(:exit)
     app.stubs(:puts)
     app.command_line.stubs(:subcommand_name).returns 'subcommand'
@@ -63,11 +63,11 @@ describe Puppet::Application::StringBase do
           app.preinit
         end
 
-        it "should set the string based on the type" do
-          app.string.name.should == :basetest
+        it "should set the faces based on the type" do
+          app.face.name.should == :basetest
         end
 
-        it "should set the format based on the string default" do
+        it "should set the format based on the faces default" do
           app.format.should == :pson
         end
 
@@ -104,7 +104,7 @@ describe Puppet::Application::StringBase do
         app.command_line.stubs(:args).returns %w{foo --bar}
         app.preinit
         app.action.name.should == :foo
-        app.string.should_not be_option :bar
+        app.face.should_not be_option :bar
         app.action.should_not be_option :bar
       end
 
@@ -166,14 +166,14 @@ describe Puppet::Application::StringBase do
 
   describe "#main" do
     before do
-      app.string    = Puppet::String[:basetest, '0.0.1']
-      app.action    = app.string.get_action(:foo)
+      app.face      = Puppet::Faces[:basetest, '0.0.1']
+      app.action    = app.face.get_action(:foo)
       app.format    = :pson
       app.arguments = ["myname", "myarg"]
     end
 
-    it "should send the specified verb and name to the string" do
-      app.string.expects(:foo).with(*app.arguments)
+    it "should send the specified verb and name to the faces" do
+      app.face.expects(:foo).with(*app.arguments)
       app.main
     end
 
diff --git a/spec/unit/application/faces_spec.rb b/spec/unit/application/faces_spec.rb
index 13af0a5..d945c40 100755
--- a/spec/unit/application/faces_spec.rb
+++ b/spec/unit/application/faces_spec.rb
@@ -1,10 +1,10 @@
 #!/usr/bin/env ruby
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-require 'puppet/application/string'
+require 'puppet/application/faces'
 
-describe Puppet::Application::String do
+describe Puppet::Application::Faces do
   it "should be an application" do
-    Puppet::Application::String.superclass.should equal(Puppet::Application)
+    Puppet::Application::Faces.superclass.should equal(Puppet::Application)
   end
 end
diff --git a/spec/unit/application/indirection_base_spec.rb b/spec/unit/application/indirection_base_spec.rb
index 66b3009..a73cf4f 100755
--- a/spec/unit/application/indirection_base_spec.rb
+++ b/spec/unit/application/indirection_base_spec.rb
@@ -2,19 +2,19 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 require 'puppet/application/indirection_base'
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
 ########################################################################
 # Stub for testing; the names are critical, sadly. --daniel 2011-03-30
 class Puppet::Application::TestIndirection < Puppet::Application::IndirectionBase
 end
 
-string = Puppet::String::Indirector.define(:testindirection, '0.0.1') do
+face = Puppet::Faces::Indirector.define(:testindirection, '0.0.1') do
 end
 # REVISIT: This horror is required because we don't allow anything to be
 # :current except for if it lives on, and is loaded from, disk. --daniel 2011-03-29
-string.version = :current
-Puppet::String.register(string)
+face.version = :current
+Puppet::Faces.register(face)
 ########################################################################
 
 
diff --git a/spec/unit/faces/action_builder_spec.rb b/spec/unit/faces/action_builder_spec.rb
index 5f6f1c0..5c8b988 100755
--- a/spec/unit/faces/action_builder_spec.rb
+++ b/spec/unit/faces/action_builder_spec.rb
@@ -1,53 +1,53 @@
 #!/usr/bin/env ruby
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-require 'puppet/string/action_builder'
+require 'puppet/faces/action_builder'
 
-describe Puppet::String::ActionBuilder do
+describe Puppet::Faces::ActionBuilder do
   describe "::build" do
     it "should build an action" do
-      action = Puppet::String::ActionBuilder.build(nil, :foo) do
+      action = Puppet::Faces::ActionBuilder.build(nil, :foo) do
       end
-      action.should be_a(Puppet::String::Action)
+      action.should be_a(Puppet::Faces::Action)
       action.name.should == :foo
     end
 
-    it "should define a method on the string which invokes the action" do
-      string = Puppet::String.new(:action_builder_test_string, '0.0.1')
-      action = Puppet::String::ActionBuilder.build(string, :foo) do
+    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
         when_invoked do
           "invoked the method"
         end
       end
 
-      string.foo.should == "invoked the method"
+      face.foo.should == "invoked the method"
     end
 
     it "should require a block" do
-      lambda { Puppet::String::ActionBuilder.build(nil, :foo) }.
+      expect { Puppet::Faces::ActionBuilder.build(nil, :foo) }.
         should raise_error("Action :foo must specify a block")
     end
 
     describe "when handling options" do
-      let :string do Puppet::String.new(:option_handling, '0.0.1') end
+      let :face do Puppet::Faces.new(:option_handling, '0.0.1') end
 
       it "should have a #option DSL function" do
         method = nil
-        Puppet::String::ActionBuilder.build(string, :foo) do
+        Puppet::Faces::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::String::ActionBuilder.build(string, :foo) do
+        action = Puppet::Faces::ActionBuilder.build(face, :foo) do
           option "--bar"
         end
         action.should be_option :bar
       end
 
       it "should accept an empty block" do
-        action = Puppet::String::ActionBuilder.build(string, :foo) do
+        action = Puppet::Faces::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/faces/action_manager_spec.rb
index b8baf80..61d1c1d 100755
--- a/spec/unit/faces/action_manager_spec.rb
+++ b/spec/unit/faces/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 String, so we have to load it instead of our class.
-require 'puppet/string'
+# This is entirely an internal class for Faces, so we have to load it instead of our class.
+require 'puppet/faces'
 
 class ActionManagerTester
-  include Puppet::String::ActionManager
+  include Puppet::Faces::ActionManager
 end
 
-describe Puppet::String::ActionManager do
+describe Puppet::Faces::ActionManager do
   subject { ActionManagerTester.new }
 
   describe "when included in a class" do
@@ -73,7 +73,7 @@ describe Puppet::String::ActionManager do
   end
 
   describe "when used to extend a class" do
-    subject { Class.new.extend(Puppet::String::ActionManager) }
+    subject { Class.new.extend(Puppet::Faces::ActionManager) }
 
     it "should be able to define an action" do
       subject.action(:foo) do
@@ -102,8 +102,8 @@ describe Puppet::String::ActionManager do
   describe "when used both at the class and instance level" do
     before do
       @klass = Class.new do
-        include Puppet::String::ActionManager
-        extend Puppet::String::ActionManager
+        include Puppet::Faces::ActionManager
+        extend Puppet::Faces::ActionManager
       end
       @instance = @klass.new
     end
@@ -216,7 +216,7 @@ describe Puppet::String::ActionManager do
 
   describe "#get_action" do
     let :parent_class do
-      parent_class = Class.new(Puppet::String)
+      parent_class = Class.new(Puppet::Faces)
       parent_class.action(:foo) {}
       parent_class
     end
diff --git a/spec/unit/faces/action_spec.rb b/spec/unit/faces/action_spec.rb
index b6fe87a..c087744 100755
--- a/spec/unit/faces/action_spec.rb
+++ b/spec/unit/faces/action_spec.rb
@@ -1,13 +1,13 @@
 #!/usr/bin/env ruby
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-require 'puppet/string/action'
+require 'puppet/faces/action'
 
-describe Puppet::String::Action do
+describe Puppet::Faces::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::String::Action.new(nil, input) }.
+        expect { Puppet::Faces::Action.new(nil, input) }.
           should raise_error(/is an invalid action name/)
       end
     end
@@ -15,7 +15,7 @@ describe Puppet::String::Action do
 
   describe "when invoking" do
     it "should be able to call other actions on the same object" do
-      string = Puppet::String.new(:my_string, '0.0.1') do
+      face = Puppet::Faces.new(:my_face, '0.0.1') do
         action(:foo) do
           when_invoked { 25 }
         end
@@ -24,8 +24,8 @@ describe Puppet::String::Action do
           when_invoked { "the value of foo is '#{foo}'" }
         end
       end
-      string.foo.should == 25
-      string.bar.should == "the value of foo is '25'"
+      face.foo.should == 25
+      face.bar.should == "the value of foo is '25'"
     end
 
     # bar is a class action calling a class action
@@ -33,7 +33,7 @@ describe Puppet::String::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::String::MyStringBaseClass < Puppet::String
+      class Puppet::Faces::MyFacesBaseClass < Puppet::Faces
         action(:foo) do
           when_invoked { 25 }
         end
@@ -47,7 +47,7 @@ describe Puppet::String::Action do
         end
       end
 
-      string = Puppet::String::MyStringBaseClass.new(:my_inherited_string, '0.0.1') do
+      face = Puppet::Faces::MyFacesBaseClass.new(:my_inherited_face, '0.0.1') do
         action(:baz) do
           when_invoked { "the value of foo in baz is '#{foo}'" }
         end
@@ -56,16 +56,16 @@ describe Puppet::String::Action do
           when_invoked { baz }
         end
       end
-      string.foo.should  == 25
-      string.bar.should  == "the value of foo is '25'"
-      string.quux.should == "qux told me the value of foo in baz is '25'"
-      string.baz.should  == "the value of foo in baz is '25'"
-      string.qux.should  == "the value of foo in baz is '25'"
+      face.foo.should  == 25
+      face.bar.should  == "the value of foo is '25'"
+      face.quux.should == "qux told me the value of foo in baz is '25'"
+      face.baz.should  == "the value of foo in baz is '25'"
+      face.qux.should  == "the value of foo in baz is '25'"
     end
 
     context "when calling the Ruby API" do
-      let :string do
-        Puppet::String.new(:ruby_api, '1.0.0') do
+      let :face do
+        Puppet::Faces.new(:ruby_api, '1.0.0') do
           action :bar do
             when_invoked do |options|
               options
@@ -75,12 +75,12 @@ describe Puppet::String::Action do
       end
 
       it "should work when no options are supplied" do
-        options = string.bar
+        options = face.bar
         options.should == {}
       end
 
       it "should work when options are supplied" do
-        options = string.bar :bar => "beer"
+        options = face.bar :bar => "beer"
         options.should == { :bar => "beer" }
       end
     end
@@ -88,7 +88,7 @@ describe Puppet::String::Action do
 
   describe "with action-level options" do
     it "should support options with an empty block" do
-      string = Puppet::String.new(:action_level_options, '0.0.1') do
+      face = Puppet::Faces.new(:action_level_options, '0.0.1') do
         action :foo do
           option "--bar" do
             # this line left deliberately blank
@@ -96,33 +96,33 @@ describe Puppet::String::Action do
         end
       end
 
-      string.should_not be_option :bar
-      string.get_action(:foo).should be_option :bar
+      face.should_not be_option :bar
+      face.get_action(:foo).should be_option :bar
     end
 
-    it "should return only action level options when there are no string options" do
-      string = Puppet::String.new(:action_level_options, '0.0.1') do
+    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
         action :foo do option "--bar" end
       end
 
-      string.get_action(:foo).options.should =~ [:bar]
+      face.get_action(:foo).options.should =~ [:bar]
     end
 
-    describe "with both string and action options" do
-      let :string do
-        Puppet::String.new(:action_level_options, '0.0.1') do
+    describe "with both face and action options" do
+      let :face do
+        Puppet::Faces.new(:action_level_options, '0.0.1') do
           action :foo do option "--bar" end
           action :baz do option "--bim" end
           option "--quux"
         end
       end
 
-      it "should return combined string and action options" do
-        string.get_action(:foo).options.should =~ [:bar, :quux]
+      it "should return combined face and action options" do
+        face.get_action(:foo).options.should =~ [:bar, :quux]
       end
 
-      it "should fetch options that the string inherited" do
-        parent = Class.new(Puppet::String)
+      it "should fetch options that the face inherited" do
+        parent = Class.new(Puppet::Faces)
         parent.option "--foo"
         child = parent.new(:inherited_options, '0.0.1') do
           option "--bar"
@@ -133,37 +133,37 @@ describe Puppet::String::Action do
         action.should be
 
         [:baz, :bar, :foo].each do |name|
-          action.get_option(name).should be_an_instance_of Puppet::String::Option
+          action.get_option(name).should be_an_instance_of Puppet::Faces::Option
         end
       end
 
       it "should get an action option when asked" do
-        string.get_action(:foo).get_option(:bar).
-          should be_an_instance_of Puppet::String::Option
+        face.get_action(:foo).get_option(:bar).
+          should be_an_instance_of Puppet::Faces::Option
       end
 
-      it "should get a string option when asked" do
-        string.get_action(:foo).get_option(:quux).
-          should be_an_instance_of Puppet::String::Option
+      it "should get a face option when asked" do
+        face.get_action(:foo).get_option(:quux).
+          should be_an_instance_of Puppet::Faces::Option
       end
 
       it "should return options only for this action" do
-        string.get_action(:baz).options.should =~ [:bim, :quux]
+        face.get_action(:baz).options.should =~ [:bim, :quux]
       end
     end
 
     it_should_behave_like "things that declare options" do
       def add_options_to(&block)
-        string = Puppet::String.new(:with_options, '0.0.1') do
+        face = Puppet::Faces.new(:with_options, '0.0.1') do
           action(:foo, &block)
         end
-        string.get_action(:foo)
+        face.get_action(:foo)
       end
     end
 
-    it "should fail when a string option duplicates an action option" do
+    it "should fail when a face option duplicates an action option" do
       expect {
-        Puppet::String.new(:action_level_options, '0.0.1') do
+        Puppet::Faces.new(:action_level_options, '0.0.1') do
           option "--foo"
           action :bar do option "--foo" end
         end
diff --git a/spec/unit/faces/catalog_spec.rb b/spec/unit/faces/catalog_spec.rb
index 70dadd5..7621a86 100755
--- a/spec/unit/faces/catalog_spec.rb
+++ b/spec/unit/faces/catalog_spec.rb
@@ -2,5 +2,5 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 
-describe Puppet::String[:catalog, '0.0.1'] do
+describe Puppet::Faces[:catalog, '0.0.1'] do
 end
diff --git a/spec/unit/faces/certificate_request_spec.rb b/spec/unit/faces/certificate_request_spec.rb
index d0a8288..637ea8c 100755
--- a/spec/unit/faces/certificate_request_spec.rb
+++ b/spec/unit/faces/certificate_request_spec.rb
@@ -2,5 +2,5 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 
-describe Puppet::String[:certificate_request, '0.0.1'] do
+describe Puppet::Faces[:certificate_request, '0.0.1'] do
 end
diff --git a/spec/unit/faces/certificate_revocation_list_spec.rb b/spec/unit/faces/certificate_revocation_list_spec.rb
index 9168fb8..e319b18 100755
--- a/spec/unit/faces/certificate_revocation_list_spec.rb
+++ b/spec/unit/faces/certificate_revocation_list_spec.rb
@@ -2,5 +2,5 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 
-describe Puppet::String[:certificate_revocation_list, '0.0.1'] do
+describe Puppet::Faces[:certificate_revocation_list, '0.0.1'] do
 end
diff --git a/spec/unit/faces/certificate_spec.rb b/spec/unit/faces/certificate_spec.rb
index 9fdc5aa..ba264f9 100755
--- a/spec/unit/faces/certificate_spec.rb
+++ b/spec/unit/faces/certificate_spec.rb
@@ -1,12 +1,12 @@
 require 'puppet/ssl/host'
 
-describe Puppet::String[:certificate, '0.0.1'] do
+describe Puppet::Faces[:certificate, '0.0.1'] do
   it "should have a ca-location option" do
     subject.should be_option :ca_location
   end
 
   it "should set the ca location when invoked" do
-    pending "#6983: This is broken in the actual string..."
+    pending "#6983: This is broken in the actual faces..."
     Puppet::SSL::Host.expects(:ca_location=).with(:foo)
     Puppet::SSL::Host.indirection.expects(:save)
     subject.sign :ca_location => :foo
diff --git a/spec/unit/faces/config_spec.rb b/spec/unit/faces/config_spec.rb
index 9919fef..2eb04a8 100755
--- a/spec/unit/faces/config_spec.rb
+++ b/spec/unit/faces/config_spec.rb
@@ -2,7 +2,7 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 
-describe Puppet::String[:config, '0.0.1'] do
+describe Puppet::Faces[:config, '0.0.1'] do
   it "should use Settings#print_config_options when asked to print" do
     Puppet.settings.stubs(:puts)
     Puppet.settings.expects(:print_config_options)
diff --git a/spec/unit/faces/configurer_spec.rb b/spec/unit/faces/configurer_spec.rb
index 1b428ef..270888c 100755
--- a/spec/unit/faces/configurer_spec.rb
+++ b/spec/unit/faces/configurer_spec.rb
@@ -4,7 +4,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 require 'puppet/indirector/catalog/rest'
 require 'tempfile'
 
-describe Puppet::String[:configurer, '0.0.1'] do
+describe Puppet::Faces[:configurer, '0.0.1'] do
   describe "#synchronize" do
     it "should retrieve and apply a catalog and return a report" do
       dirname = Dir.mktmpdir("puppetdir")
diff --git a/spec/unit/faces/faces_collection_spec.rb b/spec/unit/faces/face_collection_spec.rb
similarity index 52%
rename from spec/unit/faces/faces_collection_spec.rb
rename to spec/unit/faces/face_collection_spec.rb
index fab647d..30147a5 100755
--- a/spec/unit/faces/faces_collection_spec.rb
+++ b/spec/unit/faces/face_collection_spec.rb
@@ -3,22 +3,22 @@
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 require 'tmpdir'
 
-describe Puppet::String::StringCollection do
+describe Puppet::Faces::FaceCollection do
   # To avoid cross-pollution we have to save and restore both the hash
-  # containing all the string data, and the array used by require.  Restoring
+  # containing all the faces 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_strings  = subject.instance_variable_get("@strings").dup
+    @original_faces  = subject.instance_variable_get("@faces").dup
     @original_required = $".dup
-    subject.instance_variable_get("@strings").clear
+    subject.instance_variable_get("@faces").clear
   end
 
   after :each do
-    subject.instance_variable_set("@strings", @original_strings)
+    subject.instance_variable_set("@faces", @original_faces)
     $".clear ; @original_required.each do |item| $" << item end
   end
 
-  describe "::strings" do
+  describe "::faces" do
     it "REVISIT: should have some tests here, if we describe it"
   end
 
@@ -50,12 +50,12 @@ describe Puppet::String::StringCollection do
 
   describe "::[]" do
     before :each do
-      subject.instance_variable_get("@strings")[:foo]['0.0.1'] = 10
+      subject.instance_variable_get("@faces")[:foo]['0.0.1'] = 10
     end
 
     before :each do
       @dir = Dir.mktmpdir
-      @lib = FileUtils.mkdir_p(File.join @dir, 'puppet', 'string')
+      @lib = FileUtils.mkdir_p(File.join @dir, 'puppet', 'faces')
       $LOAD_PATH.push(@dir)
     end
 
@@ -64,95 +64,95 @@ describe Puppet::String::StringCollection do
       $LOAD_PATH.pop
     end
 
-    it "should return the string with the given name" do
+    it "should return the faces with the given name" do
       subject["foo", '0.0.1'].should == 10
     end
 
-    it "should attempt to load the string if it isn't found" do
-      subject.expects(:require).with('puppet/string/bar')
+    it "should attempt to load the faces if it isn't found" do
+      subject.expects(:require).with('puppet/faces/bar')
       subject["bar", '0.0.1']
     end
 
-    it "should attempt to load the default string for the specified version :current" do
+    it "should attempt to load the default faces for the specified version :current" do
       subject.expects(:require).never # except...
-      subject.expects(:require).with('puppet/string/fozzie')
+      subject.expects(:require).with('puppet/faces/fozzie')
       subject['fozzie', :current]
     end
   end
 
-  describe "::string?" do
+  describe "::face?" do
     before :each do
-      subject.instance_variable_get("@strings")[:foo]['0.0.1'] = 10
+      subject.instance_variable_get("@faces")[:foo]['0.0.1'] = 10
     end
 
-    it "should return true if the string specified is registered" do
-      subject.string?("foo", '0.0.1').should == true
+    it "should return true if the faces specified is registered" do
+      subject.face?("foo", '0.0.1').should == true
     end
 
-    it "should attempt to require the string if it is not registered" do
+    it "should attempt to require the faces if it is not registered" do
       subject.expects(:require).with do |file|
-        subject.instance_variable_get("@strings")[:bar]['0.0.1'] = true
-        file == 'puppet/string/bar'
+        subject.instance_variable_get("@faces")[:bar]['0.0.1'] = true
+        file == 'puppet/faces/bar'
       end
-      subject.string?("bar", '0.0.1').should == true
+      subject.face?("bar", '0.0.1').should == true
     end
 
-    it "should return true if requiring the string registered it" do
+    it "should return true if requiring the faces registered it" do
       subject.stubs(:require).with do
-        subject.instance_variable_get("@strings")[:bar]['0.0.1'] = 20
+        subject.instance_variable_get("@faces")[:bar]['0.0.1'] = 20
       end
     end
 
-    it "should return false if the string is not registered" do
+    it "should return false if the faces is not registered" do
       subject.stubs(:require).returns(true)
-      subject.string?("bar", '0.0.1').should be_false
+      subject.face?("bar", '0.0.1').should be_false
     end
 
-    it "should return false if the string file itself is missing" do
+    it "should return false if the faces file itself is missing" do
       subject.stubs(:require).
-        raises(LoadError, 'no such file to load -- puppet/string/bar')
-      subject.string?("bar", '0.0.1').should be_false
+        raises(LoadError, 'no such file to load -- puppet/faces/bar')
+      subject.face?("bar", '0.0.1').should be_false
     end
 
     it "should register the version loaded by `:current` as `:current`" do
       subject.expects(:require).with do |file|
-        subject.instance_variable_get("@strings")[:huzzah]['2.0.1'] = :huzzah_string
-        file == 'puppet/string/huzzah'
+        subject.instance_variable_get("@faces")[:huzzah]['2.0.1'] = :huzzah_faces
+        file == 'puppet/faces/huzzah'
       end
-      subject.string?("huzzah", :current)
-      subject.instance_variable_get("@strings")[:huzzah][:current].should == :huzzah_string
+      subject.face?("huzzah", :current)
+      subject.instance_variable_get("@faces")[:huzzah][:current].should == :huzzah_faces
     end
 
     context "with something on disk" do
       before :each do
-        write_scratch_string :huzzah do |fh|
+        write_scratch_faces :huzzah do |fh|
           fh.puts <<EOF
-Puppet::String.define(:huzzah, '2.0.1') do
+Puppet::Faces.define(:huzzah, '2.0.1') do
   action :bar do "is where beer comes from" end
 end
 EOF
         end
       end
 
-      it "should register the version loaded from `puppet/string/{name}` as `:current`" do
-        subject.should be_string "huzzah", '2.0.1'
-        subject.should be_string "huzzah", :current
-        Puppet::String[:huzzah, '2.0.1'].should == Puppet::String[:huzzah, :current]
+      it "should register the version loaded from `puppet/faces/{name}` as `:current`" do
+        subject.should be_face "huzzah", '2.0.1'
+        subject.should be_face "huzzah", :current
+        Puppet::Faces[:huzzah, '2.0.1'].should == Puppet::Faces[:huzzah, :current]
       end
 
       it "should index :current when the code was pre-required" do
-        subject.instance_variable_get("@strings")[:huzzah].should_not be_key :current
-        require 'puppet/string/huzzah'
-        subject.string?(:huzzah, :current).should be_true
+        subject.instance_variable_get("@faces")[:huzzah].should_not be_key :current
+        require 'puppet/faces/huzzah'
+        subject.face?(:huzzah, :current).should be_true
       end
     end
   end
 
   describe "::register" do
-    it "should store the string by name" do
-      string = Puppet::String.new(:my_string, '0.0.1')
-      subject.register(string)
-      subject.instance_variable_get("@strings").should == {:my_string => {'0.0.1' => string}}
+    it "should store the faces by name" do
+      faces = Puppet::Faces.new(:my_faces, '0.0.1')
+      subject.register(faces)
+      subject.instance_variable_get("@faces").should == {:my_faces => {'0.0.1' => faces}}
     end
   end
 
@@ -177,7 +177,7 @@ EOF
     faulty.each do |input|
       it "should fail when presented with #{input.inspect} (#{input.class})" do
         expect { subject.underscorize(input) }.
-          should raise_error ArgumentError, /not a valid string name/
+          should raise_error ArgumentError, /not a valid face name/
       end
     end
   end
diff --git a/spec/unit/faces/facts_spec.rb b/spec/unit/faces/facts_spec.rb
index 9b70247..480f463 100755
--- a/spec/unit/faces/facts_spec.rb
+++ b/spec/unit/faces/facts_spec.rb
@@ -2,7 +2,7 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 
-describe Puppet::String[:facts, '0.0.1'] do
+describe Puppet::Faces[:facts, '0.0.1'] do
   it "should define an 'upload' fact" do
     subject.should be_action(:upload)
   end
diff --git a/spec/unit/faces/file_spec.rb b/spec/unit/faces/file_spec.rb
index f1b9302..aafa88c 100755
--- a/spec/unit/faces/file_spec.rb
+++ b/spec/unit/faces/file_spec.rb
@@ -2,5 +2,5 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 
-describe Puppet::String[:file, '0.0.1'] do
+describe Puppet::Faces[:file, '0.0.1'] do
 end
diff --git a/spec/unit/faces/indirector_spec.rb b/spec/unit/faces/indirector_spec.rb
index cb85eaa..218694b 100755
--- a/spec/unit/faces/indirector_spec.rb
+++ b/spec/unit/faces/indirector_spec.rb
@@ -1,11 +1,11 @@
 #!/usr/bin/env ruby
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
-require 'puppet/string/indirector'
+require 'puppet/faces/indirector'
 
-describe Puppet::String::Indirector do
+describe Puppet::Faces::Indirector do
   subject do
-    instance = Puppet::String::Indirector.new(:test, '0.0.1')
+    instance = Puppet::Faces::Indirector.new(:test, '0.0.1')
     indirection = stub('indirection',
                        :name => :stub_indirection,
                        :reset_terminus_class => nil)
@@ -14,24 +14,24 @@ describe Puppet::String::Indirector do
   end
 
   it "should be able to return a list of indirections" do
-    Puppet::String::Indirector.indirections.should be_include("catalog")
+    Puppet::Faces::Indirector.indirections.should be_include("catalog")
   end
 
   it "should be able to return a list of terminuses for a given indirection" do
-    Puppet::String::Indirector.terminus_classes(:catalog).should be_include("compiler")
+    Puppet::Faces::Indirector.terminus_classes(:catalog).should be_include("compiler")
   end
 
   describe "as an instance" do
     it "should be able to determine its indirection" do
       # Loading actions here an get, um, complicated
-      Puppet::String.stubs(:load_actions)
-      Puppet::String::Indirector.new(:catalog, '0.0.1').indirection.should equal(Puppet::Resource::Catalog.indirection)
+      Puppet::Faces.stubs(:load_actions)
+      Puppet::Faces::Indirector.new(:catalog, '0.0.1').indirection.should equal(Puppet::Resource::Catalog.indirection)
     end
   end
 
   [:find, :search, :save, :destroy].each do |method|
     it "should define a '#{method}' action" do
-      Puppet::String::Indirector.should be_action(method)
+      Puppet::Faces::Indirector.should be_action(method)
     end
 
     it "should call the indirection method when the '#{method}' action is invoked" do
@@ -51,6 +51,6 @@ describe Puppet::String::Indirector do
   end
 
   it "should define a class-level 'info' action" do
-    Puppet::String::Indirector.should be_action(:info)
+    Puppet::Faces::Indirector.should be_action(:info)
   end
 end
diff --git a/spec/unit/faces/key_spec.rb b/spec/unit/faces/key_spec.rb
index fe3532d..70d4a52 100755
--- a/spec/unit/faces/key_spec.rb
+++ b/spec/unit/faces/key_spec.rb
@@ -2,5 +2,5 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 
-describe Puppet::String[:key, '0.0.1'] do
+describe Puppet::Faces[:key, '0.0.1'] do
 end
diff --git a/spec/unit/faces/node_spec.rb b/spec/unit/faces/node_spec.rb
index 520cc0f..4639bdf 100755
--- a/spec/unit/faces/node_spec.rb
+++ b/spec/unit/faces/node_spec.rb
@@ -2,7 +2,7 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 
-describe Puppet::String[:node, '0.0.1'] do
+describe Puppet::Faces[:node, '0.0.1'] do
   it "should set its default format to :yaml" do
     subject.default_format.should == :yaml
   end
diff --git a/spec/unit/faces/option_builder_spec.rb b/spec/unit/faces/option_builder_spec.rb
index 9e913c2..9296ba7 100644
--- a/spec/unit/faces/option_builder_spec.rb
+++ b/spec/unit/faces/option_builder_spec.rb
@@ -1,28 +1,28 @@
-require 'puppet/string/option_builder'
+require 'puppet/faces/option_builder'
 
-describe Puppet::String::OptionBuilder do
-  let :string do Puppet::String.new(:option_builder_testing, '0.0.1') end
+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::String::OptionBuilder.build(string, "--foo").
-      should be_an_instance_of Puppet::String::Option
+    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::String::OptionBuilder.build(string, "--foo") do
+      option = Puppet::Faces::OptionBuilder.build(face, "--foo") do
         # This block deliberately left blank.
       end
 
-      option.should be_an_instance_of Puppet::String::Option
+      option.should be_an_instance_of Puppet::Faces::Option
     end
 
     it "should support documentation declarations" do
       text = "this is the description"
-      option = Puppet::String::OptionBuilder.build(string, "--foo") do
+      option = Puppet::Faces::OptionBuilder.build(face, "--foo") do
         desc text
       end
-      option.should be_an_instance_of Puppet::String::Option
+      option.should be_an_instance_of Puppet::Faces::Option
       option.desc.should == text
     end
   end
diff --git a/spec/unit/faces/option_spec.rb b/spec/unit/faces/option_spec.rb
index f4f62ec..a28fef0 100644
--- a/spec/unit/faces/option_spec.rb
+++ b/spec/unit/faces/option_spec.rb
@@ -1,14 +1,14 @@
-require 'puppet/string/option'
+require 'puppet/faces/option'
 
-describe Puppet::String::Option do
-  let :string do Puppet::String.new(:option_testing, '0.0.1') end
+describe Puppet::Faces::Option do
+  let :face do Puppet::Faces.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::String::Option.new(string, input)
+          option = Puppet::Faces::Option.new(face, input)
           option.name.should == expect
         end
       end
@@ -16,58 +16,58 @@ describe Puppet::String::Option do
 
     [:foo, 12, nil, {}, []].each do |input|
       it "should fail sensible when given #{input.inspect}" do
-        expect { Puppet::String::Option.new(string, input) }.
+        expect { Puppet::Faces::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::String::Option.new(string, input) }.
+        expect { Puppet::Faces::Option.new(face, input) }.
           should raise_error ArgumentError, /long options need two dashes \(--\)/
       end
     end
   end
 
-  it "requires a string when created" do
-    expect { Puppet::String::Option.new }.
+  it "requires a face when created" do
+    expect { Puppet::Faces::Option.new }.
       should raise_error ArgumentError, /wrong number of arguments/
   end
 
   it "also requires some declaration arguments when created" do
-    expect { Puppet::String::Option.new(string) }.
+    expect { Puppet::Faces::Option.new(face) }.
       should raise_error ArgumentError, /No option declarations found/
   end
 
   it "should infer the name from an optparse string" do
-    option = Puppet::String::Option.new(string, "--foo")
+    option = Puppet::Faces::Option.new(face, "--foo")
     option.name.should == :foo
   end
 
-  it "should infer the name when multiple optparse strings are given" do
-    option = Puppet::String::Option.new(string, "--foo", "-f")
+  it "should infer the name when multiple optparse string are given" do
+    option = Puppet::Faces::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::String::Option.new(string, "-f", "--foo")
+    option = Puppet::Faces::Option.new(face, "-f", "--foo")
     option.name.should == :foo
   end
 
-  it "should create an instance when given a string and name" do
-    Puppet::String::Option.new(string, "--foo").
-      should be_instance_of Puppet::String::Option
+  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
   end
 
   describe "#to_s" do
     it "should transform a symbol into a string" do
-      option = Puppet::String::Option.new(string, "--foo")
+      option = Puppet::Faces::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::String::Option.new(string, "--foo-bar")
+      option = Puppet::Faces::Option.new(face, "--foo-bar")
       option.name.should == :foo_bar
       option.to_s.should == "foo-bar"
     end
diff --git a/spec/unit/faces/report_spec.rb b/spec/unit/faces/report_spec.rb
index 2e206dd..f7a6734 100755
--- a/spec/unit/faces/report_spec.rb
+++ b/spec/unit/faces/report_spec.rb
@@ -2,5 +2,5 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 
-describe Puppet::String[:report, '0.0.1'] do
+describe Puppet::Faces[:report, '0.0.1'] do
 end
diff --git a/spec/unit/faces/resource_spec.rb b/spec/unit/faces/resource_spec.rb
index f4e6186..0b4b248 100755
--- a/spec/unit/faces/resource_spec.rb
+++ b/spec/unit/faces/resource_spec.rb
@@ -2,5 +2,5 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 
-describe Puppet::String[:resource, '0.0.1'] do
+describe Puppet::Faces[:resource, '0.0.1'] do
 end
diff --git a/spec/unit/faces/resource_type_spec.rb b/spec/unit/faces/resource_type_spec.rb
index d12ec00..157066f 100755
--- a/spec/unit/faces/resource_type_spec.rb
+++ b/spec/unit/faces/resource_type_spec.rb
@@ -2,5 +2,5 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
 
-describe Puppet::String[:resource_type, '0.0.1'] do
+describe Puppet::Faces[:resource_type, '0.0.1'] do
 end
diff --git a/spec/unit/faces_spec.rb b/spec/unit/faces_spec.rb
index 9b7cd88..586abd6 100755
--- a/spec/unit/faces_spec.rb
+++ b/spec/unit/faces_spec.rb
@@ -2,46 +2,47 @@
 
 require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
 
-describe Puppet::String do
+describe Puppet::Faces do
   before :all do
-    @strings = Puppet::String::StringCollection.instance_variable_get("@strings").dup
+    @faces = Puppet::Faces::FaceCollection.instance_variable_get("@faces").dup
   end
 
   before :each do
-    Puppet::String::StringCollection.instance_variable_get("@strings").clear
+    Puppet::Faces::FaceCollection.instance_variable_get("@faces").clear
   end
 
   after :all do
-    Puppet::String::StringCollection.instance_variable_set("@strings", @strings)
+    Puppet::Faces::FaceCollection.instance_variable_set("@faces", @faces)
   end
 
   describe "#define" do
-    it "should register the string" do
-      string = Puppet::String.define(:string_test_register, '0.0.1')
-      string.should == Puppet::String[:string_test_register, '0.0.1']
+    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']
     end
 
     it "should load actions" do
-      Puppet::String.any_instance.expects(:load_actions)
-      Puppet::String.define(:string_test_load_actions, '0.0.1')
+      Puppet::Faces.any_instance.expects(:load_actions)
+      Puppet::Faces.define(:face_test_load_actions, '0.0.1')
     end
 
     it "should require a version number" do
-      proc { Puppet::String.define(:no_version) }.should raise_error(ArgumentError)
+      expect { Puppet::Faces.define(:no_version) }.should raise_error ArgumentError
     end
   end
 
   describe "#initialize" do
     it "should require a version number" do
-      proc { Puppet::String.new(:no_version) }.should raise_error(ArgumentError)
+      expect { Puppet::Faces.new(:no_version) }.should raise_error ArgumentError
     end
 
     it "should require a valid version number" do
-      proc { Puppet::String.new(:bad_version, 'Rasins') }.should raise_error(ArgumentError)
+      expect { Puppet::Faces.new(:bad_version, 'Rasins') }.
+        should raise_error ArgumentError
     end
 
     it "should instance-eval any provided block" do
-      face = Puppet::String.new(:string_test_block, '0.0.1') do
+      face = Puppet::Faces.new(:face_test_block, '0.0.1') do
         action(:something) do
           when_invoked { "foo" }
         end
@@ -52,31 +53,31 @@ describe Puppet::String do
   end
 
   it "should have a name" do
-    Puppet::String.new(:me, '0.0.1').name.should == :me
+    Puppet::Faces.new(:me, '0.0.1').name.should == :me
   end
 
   it "should stringify with its own name" do
-    Puppet::String.new(:me, '0.0.1').to_s.should =~ /\bme\b/
+    Puppet::Faces.new(:me, '0.0.1').to_s.should =~ /\bme\b/
   end
 
   it "should allow overriding of the default format" do
-    face = Puppet::String.new(:me, '0.0.1')
+    face = Puppet::Faces.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::String.new(:me, '0.0.1').default_format.should == :pson
+    Puppet::Faces.new(:me, '0.0.1').default_format.should == :pson
   end
 
   # Why?
   it "should create a class-level autoloader" do
-    Puppet::String.autoloader.should be_instance_of(Puppet::Util::Autoload)
+    Puppet::Faces.autoloader.should be_instance_of(Puppet::Util::Autoload)
   end
 
-  it "should try to require strings that are not known" do
-    Puppet::String::StringCollection.expects(:require).with "puppet/string/foo"
-    Puppet::String[:foo, '0.0.1']
+  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']
   end
 
   it "should be able to load all actions in all search paths"
@@ -84,25 +85,25 @@ describe Puppet::String do
 
   it_should_behave_like "things that declare options" do
     def add_options_to(&block)
-      Puppet::String.new(:with_options, '0.0.1', &block)
+      Puppet::Faces.new(:with_options, '0.0.1', &block)
     end
   end
 
-  describe "with string-level options" do
+  describe "with face-level options" do
     it "should not return any action-level options" do
-      string = Puppet::String.new(:with_options, '0.0.1') do
+      face = Puppet::Faces.new(:with_options, '0.0.1') do
         option "--foo"
         option "--bar"
         action :baz do
           option "--quux"
         end
       end
-      string.options.should =~ [:foo, :bar]
+      face.options.should =~ [:foo, :bar]
     end
 
-    it "should fail when a string option duplicates an action option" do
+    it "should fail when a face option duplicates an action option" do
       expect {
-        Puppet::String.new(:action_level_options, '0.0.1') do
+        Puppet::Faces.new(:action_level_options, '0.0.1') do
           action :bar do option "--foo" end
           option "--foo"
         end
@@ -110,34 +111,34 @@ describe Puppet::String do
     end
 
     it "should work when two actions have the same option" do
-      string = Puppet::String.new(:with_options, '0.0.1') do
+      face = Puppet::Faces.new(:with_options, '0.0.1') do
         action :foo do option "--quux" end
         action :bar do option "--quux" end
       end
 
-      string.get_action(:foo).options.should =~ [:quux]
-      string.get_action(:bar).options.should =~ [:quux]
+      face.get_action(:foo).options.should =~ [:quux]
+      face.get_action(:bar).options.should =~ [:quux]
     end
   end
 
   describe "with inherited options" do
-    let :string do
-      parent = Class.new(Puppet::String)
+    let :face do
+      parent = Class.new(Puppet::Faces)
       parent.option("--inherited")
-      string = parent.new(:example, '0.2.1')
-      string.option("--local")
-      string
+      face = parent.new(:example, '0.2.1')
+      face.option("--local")
+      face
     end
 
     describe "#options" do
       it "should list inherited options" do
-        string.options.should =~ [:inherited, :local]
+        face.options.should =~ [:inherited, :local]
       end
     end
 
     describe "#get_option" do
       it "should return an inherited option object" do
-        string.get_option(:inherited).should be_an_instance_of Puppet::String::Option
+        face.get_option(:inherited).should be_an_instance_of Puppet::Faces::Option
       end
     end
   end

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list