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
-
#format(hash = nil) ⇒ Object
call-seq: str.format(hash) => aString str.format { |directive| ... } => aString.
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 |