Update stdlib and concat to 6.1.0 both
[mirror/dsa-puppet.git] / 3rdparty / modules / concat / lib / puppet / type / concat_fragment.rb
index 45f0801..c66a557 100644 (file)
@@ -1,64 +1,95 @@
 Puppet::Type.newtype(:concat_fragment) do
-  @doc = "Create a concat fragment to be used by concat.
-    the `concat_fragment` type creates a file fragment to be collected by concat based on the tag.
-    The example is based on exported resources.
-
-    Example:
-    @@concat_fragment { \"uniqe_name_${::fqdn}\":
-      tag => 'unique_name',
-      order => 10, # Optional. Default to 10
-      content => 'some content' # OR
-      content => template('template.erb') # OR
-      source  => 'puppet:///path/to/file'
-    }
-  "
-
-  newparam(:name, :namevar => true) do
-    desc "Unique name"
+  @doc = <<-DOC
+    @summary
+      Manages the fragment.
+
+    @example
+      # The example is based on exported resources.
+
+      concat_fragment { \"uniqe_name_${::fqdn}\":
+        tag => 'unique_name',
+        order => 10, # Optional. Default to 10
+        content => 'some content' # OR
+        # content => template('template.erb')
+        source  => 'puppet:///path/to/file'
+      }
+  DOC
+
+  newparam(:name, namevar: true) do
+    desc 'Name of resource.'
   end
 
   newparam(:target) do
-    desc "Target"
+    desc <<-DOC
+      Required. Specifies the destination file of the fragment. Valid options: a string containing the path or title of the parent
+      concat_file resource.
+    DOC
+
+    validate do |value|
+      raise ArgumentError, _('Target must be a String') unless value.is_a?(String)
+    end
   end
 
   newparam(:content) do
-    desc "Content"
+    desc <<-DOC
+      Supplies the content of the fragment. Note: You must supply either a content parameter or a source parameter. Valid options: a string
+    DOC
+
+    validate do |value|
+      raise ArgumentError, _('Content must be a String') unless value.is_a?(String)
+    end
   end
 
   newparam(:source) do
-    desc "Source"
+    desc <<-DOC
+      Specifies a file to read into the content of the fragment. Note: You must supply either a content parameter or a source parameter.
+      Valid options: a string or an array, containing one or more Puppet URLs.
+    DOC
+
+    validate do |value|
+      raise ArgumentError, _('Content must be a String or Array') unless [String, Array].include?(value.class)
+    end
   end
 
   newparam(:order) do
-    desc "Order"
+    desc <<-DOC
+      Reorders your fragments within the destination file. Fragments that share the same order number are ordered by name. The string
+      option is recommended.
+    DOC
+
     defaultto '10'
     validate do |val|
-      fail Puppet::ParseError, '$order is not a string or integer.' if !(val.is_a? String or val.is_a? Integer)
-      fail Puppet::ParseError, "Order cannot contain '/', ':', or '\n'." if val.to_s =~ /[:\n\/]/
+      raise Puppet::ParseError, _('$order is not a string or integer.') unless val.is_a?(String) || val.is_a?(Integer)
+      raise Puppet::ParseError, _('Order cannot contain \'/\', \':\', or \'\\n\'.') if val.to_s =~ %r{[:\n\/]}
     end
   end
 
   newparam(:tag) do
-    desc "Tag name to be used by concat to collect all concat_fragments by tag name"
+    desc 'Specifies a unique tag to be used by concat_file to reference and collect content.'
   end
 
   autorequire(:file) do
-    if catalog.resources.select {|x| x.class == Puppet::Type.type(:concat_file) and (x[:path] == self[:target] || x.title == self[:target]) }.empty?
-      warning "Target Concat_file with path of #{self[:target]} not found in the catalog"
+    found = catalog.resources.select do |resource|
+      next unless resource.is_a?(Puppet::Type.type(:concat_file))
+
+      resource[:path] == self[:target] || resource.title == self[:target] ||
+        (resource[:tag] && resource[:tag] == self[:tag])
+    end
+
+    if found.empty?
+      tag_message = (self[:tag]) ? "or tag '#{self[:tag]} " : ''
+      warning "Target Concat_file with path or title '#{self[:target]}' #{tag_message}not found in the catalog"
     end
   end
 
   validate do
     # Check if target is set
-    fail Puppet::ParseError, "Target not set" if self[:target].nil?
-
-    # Check if tag is set
-    fail Puppet::ParseError, "Tag not set" if self[:tag].nil?
+    raise Puppet::ParseError, _("No 'target' or 'tag' set") unless self[:target] || self[:tag]
 
     # Check if either source or content is set. raise error if none is set
-    fail Puppet::ParseError, "Set either 'source' or 'content'" if self[:source].nil? && self[:content].nil?
+    raise Puppet::ParseError, _("Set either 'source' or 'content'") if self[:source].nil? && self[:content].nil?
 
     # Check if both are set, if so rais error
-    fail Puppet::ParseError, "Can't use 'source' and 'content' at the same time" if !self[:source].nil? && !self[:content].nil?
+    raise Puppet::ParseError, _("Can't use 'source' and 'content' at the same time") if !self[:source].nil? && !self[:content].nil?
   end
 end