Sha256: 0fc2a70ad4f9097cb7779a529a3b32c9f8198a72eb19e074e3c118f8b1b92caf
Contents?: true
Size: 1.17 KB
Versions: 1
Compression:
Stored size: 1.17 KB
Contents
class RubyStringTemplate < String class NoValueForTemplatePlaceholderError < ArgumentError def initialize(name, template) super "no value for '\#{#{name}}' in template '#{template}'" end end def initialize(template, &resolver) super(template.to_s) @resolvers = [] @resolvers << resolver if resolver @resolvers << ->(locals, name){locals[name]} end def initialize_copy(source) super # copy resolvers array resolvers = source.instance_eval do resolvers = @resolvers end @resolvers = resolvers.dup end def render(locals = {}) self.gsub(/#\{[^\}]+\}/um) do |placeholder| name = placeholder.match(/#\{([^\}]*)\}/u).captures.first.to_sym @resolvers.find do |resolver| value = resolver.call(locals, name) value and break value.to_s end or fail NoValueForTemplatePlaceholderError.new(name, self) end.to_s end def to_template self end def add_missing_resolver(&resolver) @resolvers << resolver end def with_missing_resolver(&resolver) new_template = self.dup new_template.add_missing_resolver(&resolver) new_template end def inspect "T<#{to_s}>" end end class String def to_template RubyStringTemplate.new(self) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
httpimagestore-1.9.0 | lib/httpimagestore/ruby_string_template.rb |