class Rmk::Vars

Attributes

rmk[R]
upstream[R]

Public Class Methods

new(rmk, upstream) click to toggle source

create vars @param rmk [Hash] rmk system reserved vars, query first so will not be override @param upstream [Rmk::Vars, nil] upstream vars for lookup var which current obj not include

# File lib/rmk/vars.rb, line 7
def initialize(rmk, upstream) @rmk, @upstream = rmk, upstream end

Public Instance Methods

[](name) click to toggle source
# File lib/rmk/vars.rb, line 16
def [](name) @rmk[name] ||  fetch(name) end
[]=(name, append = false, value) click to toggle source
Calls superclass method
# File lib/rmk/vars.rb, line 18
def []=(name, append = false, value)
        value = interpolate_str value.to_s
        super name, append ? self[name].to_s + value : value
end
downstream_new(clone_rmk:false) click to toggle source

create new downstream vars which will lookup first, when not found then lookup current obj @param clone_rmk [Boolean] dup a new rmk Hash or not, usually dup when need add reserved vars

# File lib/rmk/vars.rb, line 12
def downstream_new(clone_rmk:false) Rmk::Vars.new clone_rmk ? @rmk.clone(freeze:false) : @rmk, self end
include?(name, inherit = true) click to toggle source
Calls superclass method
# File lib/rmk/vars.rb, line 25
def include?(name, inherit = true) inherit ? @rmk.include?(name) || member?(name) : super(name) end
interpolate_str(str) click to toggle source

preprocess str, and then unescape the result

# File lib/rmk/vars.rb, line 40
def interpolate_str(str) unescape_str preprocess_str str end
keys(inherit = true) click to toggle source
Calls superclass method
# File lib/rmk/vars.rb, line 31
def keys(inherit = true) inherit ? @rmk.keys + get_keys : super() end
Also aliased as: org_keys
org_keys(inherit = true)
Alias for: keys
preprocess_str(str) click to toggle source

only do #{w+} interpolate

# File lib/rmk/vars.rb, line 34
def preprocess_str(str) str.gsub(/\$((?:\$\$)*){(\w+)}/){"#{$1}#{self[$2]}"} end
split_str(str) click to toggle source

preprocess str,and then split use white spaces, and then unescape each result, typically used for split file list @param str [String] str to split @return [Array<String>]

# File lib/rmk/vars.rb, line 45
def split_str(str)
        str = preprocess_str str
        result = []
        until str.empty?
                head, _, str = str.partition /(?<!\$)(?:\$\$)*\K\s+/
                result << unescape_str(head) unless head.empty?
        end
        result
end
unescape_str(str) click to toggle source

do all '$' prefix escape str interpolate

# File lib/rmk/vars.rb, line 37
def unescape_str(str) str.gsub(/\$(?:([\$\s>&])|(\w+))/){$1 || self[$2]} end

Protected Instance Methods

fetch(name) click to toggle source
Calls superclass method
# File lib/rmk/vars.rb, line 14
def fetch(name) super(name, nil) || @upstream&.fetch(name) end
get_keys() click to toggle source
# File lib/rmk/vars.rb, line 29
def get_keys; @upstream ? org_keys + @upstream.get_keys : org_keys end
member?(name) click to toggle source
Calls superclass method
# File lib/rmk/vars.rb, line 23
def member?(name) super(name) || @upstream&.member?(name) end