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