class Pakyow::Support::StringBuilder
Builds a string from a template.
Constants
- PATTERN
Public Class Methods
new(template, html_safe: false, &block)
click to toggle source
# File lib/pakyow/support/string_builder.rb, line 14 def initialize(template, html_safe: false, &block) @template, @html_safe, @block = template.to_s, html_safe, block end
Public Instance Methods
build(**values)
click to toggle source
# File lib/pakyow/support/string_builder.rb, line 18 def build(**values) @template.dup.tap do |working_template| working_template.scan(PATTERN).each do |match| value = if match[0].include?(".") object, property = match[0].split(".").map(&:to_sym) if object_value = get_value(object, values) ensure_real_value(object_value)[property] end else get_value(match[0].to_sym, values) end value = if @html_safe ensure_html_safety(value) else value.to_s end working_template.gsub!("{#{match[0]}}", value) end end end
Private Instance Methods
ensure_real_value(object_value)
click to toggle source
# File lib/pakyow/support/string_builder.rb, line 53 def ensure_real_value(object_value) if defined?(Pakyow::Data::Proxy) && object_value.is_a?(Pakyow::Data::Proxy) object_value.one else object_value end end
get_value(name, values)
click to toggle source
# File lib/pakyow/support/string_builder.rb, line 43 def get_value(name, values) if @block @block.call(name) elsif values.key?(name) values[name] else nil end end