Updated mcollective.init according to OSCI-658
[packages/precise/mcollective.git] / lib / mcollective / vendor / i18n / lib / i18n / interpolate / ruby.rb
diff --git a/lib/mcollective/vendor/i18n/lib/i18n/interpolate/ruby.rb b/lib/mcollective/vendor/i18n/lib/i18n/interpolate/ruby.rb
new file mode 100644 (file)
index 0000000..29b2814
--- /dev/null
@@ -0,0 +1,31 @@
+# heavily based on Masao Mutoh's gettext String interpolation extension
+# http://github.com/mutoh/gettext/blob/f6566738b981fe0952548c421042ad1e0cdfb31e/lib/gettext/core_ext/string.rb
+
+module I18n
+  INTERPOLATION_PATTERN = Regexp.union(
+    /%%/,
+    /%\{(\w+)\}/,                               # matches placeholders like "%{foo}"
+    /%<(\w+)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/  # matches placeholders like "%<foo>.d"
+  )
+
+  class << self
+    def interpolate(string, values)
+      raise ReservedInterpolationKey.new($1.to_sym, string) if string =~ RESERVED_KEYS_PATTERN
+      raise ArgumentError.new('Interpolation values must be a Hash.') unless values.kind_of?(Hash)
+      interpolate_hash(string, values)
+    end
+
+    def interpolate_hash(string, values)
+      string.gsub(INTERPOLATION_PATTERN) do |match|
+        if match == '%%'
+          '%'
+        else
+          key = ($1 || $2).to_sym
+          value = values.key?(key) ? values[key] : raise(MissingInterpolationArgument.new(values, string))
+          value = value.call(values) if value.respond_to?(:call)
+          $3 ? sprintf("%#{$3}", value) : value
+        end
+      end
+    end
+  end
+end