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
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