class DR::Formatter

Attributes

meta[RW]
opts[RW]

Public Class Methods

new(meta={}, **opts) click to toggle source
# File lib/dr/formatter/simple_formatter.rb, line 45
def initialize(meta={}, **opts)
        @meta=meta
        @opts=opts
end

Public Instance Methods

expand(msg, **opts) { |msg, **opts| ... } click to toggle source
# File lib/dr/formatter/simple_formatter.rb, line 95
def expand(msg, **opts)
        recursive=opts[:recursive]
        #if recursive is :first, then we only expand once ore
        if recursive.is_a?(Integer)
                opts[:recursive]=recursive-1
                recursive=false if recursive <= 0
        end
        case msg
        when Hash
                Array(opts[:merge]).each do |key|
                        if msg.key?(key)
                                msg=msg.merge(msg[key])
                                msg.delete(key)
                        end
                end
                # we localize after merging potential out types
                localize(msg, **opts) do |lmsg|
                        # localization do not count as a recursive step
                        return expand(lmsg, **opts)
                end
                if recursive
                        msg_exp={}
                        msg.each do |k,v|
                                msg_exp[k]=expand(v,**opts)
                        end
                        #expand may have introduced nil values
                        clean_nil=opts.fetch(:clean_nil,true)
                        msg_exp.delete_if {|_k,v| v==nil} if clean_nil
                        msg_exp
                else
                        msg
                end
        when Symbol
                opts[:symbol]||=:never
                msg=metainfo_from_symbol(msg,**opts)
                recursive ? expand(msg, **opts) : msg
        when Array
                msg=msg.map {|i| expand(i,**opts)} if recursive
                opts[:join] ? join(msg, **opts) : msg
        when String
                (nmsg=try_get_symbol(msg,**opts)) and return nmsg
                if block_given?
                        yield(msg, **opts)
                else
                        msg
                end
        when nil
                nil
        else
                if block_given?
                        yield(msg, **opts)
                else
                        #expand(msg.to_s,**opts)
                        msg
                end
        end
end
join(*args, **opts) click to toggle source
# File lib/dr/formatter/simple_formatter.rb, line 54
def join(*args, **opts)
        opts=@opts.merge(opts)
        args=Array(args).map {|i| try_expand_symbol(i,**opts)}
        self.class.localize(*args, **opts)
end
localize(msg, **opts) click to toggle source
# File lib/dr/formatter/simple_formatter.rb, line 50
def localize(msg, **opts)
        self.class.localize(msg, **@opts.merge(opts))
end

Private Instance Methods

get_symbol(sym) click to toggle source
# File lib/dr/formatter/simple_formatter.rb, line 78
        def get_symbol(sym)
        case sym
        when Symbol
                return sym
        when String
                return sym[1...sym.length].to_sym if sym[0] == ':'
        end
        nil
end
metainfo_from_symbol(sym, meta: @meta, **opts) { |content, **opts| ... } click to toggle source
# File lib/dr/formatter/simple_formatter.rb, line 60
        def metainfo_from_symbol(sym, meta: @meta, **opts)
        return sym if opts[:meta_symbol]==:never
        content=case meta
        when Hash
                warn "#{sym} not found in #{meta}" unless meta.key?(sym)
                meta[sym]
        when Proc
                meta.call(sym, **opts)
        else
                sym
        end
        if block_given?
                yield content, **opts
        else
                content
        end
end
try_get_symbol(sym,**opts) click to toggle source
# File lib/dr/formatter/simple_formatter.rb, line 87
        def try_get_symbol(sym,**opts)
        if (key=get_symbol(sym))
                expand_symbol(key,**opts)
        else
                sym
        end
end