Module: Nuggets::String::FormatMixin

Included in:
String
Defined in:
lib/nuggets/string/format_mixin.rb

Constant Summary collapse

PREFIX =
'%'
FORMAT_RE =
%r{#{PREFIX}(?:\{(.*?)\}|(.))}o

Instance Method Summary collapse

Instance Method Details

#format(hash = nil) ⇒ Object

call-seq:

str.format(hash) => aString
str.format { |directive| ... } => aString

Replace format directives in str.

If hash given, uses value of directive key (String or Symbol) as replacement value. Raises KeyError if directive key not found.

If block given, uses result of directive yielded to block as replacement value. Raises ArgumentError if block returns no value.



46
47
48
49
50
51
52
53
54
55
# File 'lib/nuggets/string/format_mixin.rb', line 46

def format(hash = nil)
  replace = lambda { |&b| gsub(FORMAT_RE) {
    (k = $1 || $2) == PREFIX ? k : b[k] } }

  hash ? replace.() { |k| hash.fetch(k) {
    hash.fetch(k.to_sym) { raise(KeyError, "key not found: #{k}") } } } :
  block_given? ? replace.() { |k| yield k or
    raise(ArgumentError, "malformed format string - #{$&}") } :
    raise(ArgumentError, 'wrong number of arguments (given 0, expected 1)')
end