Module: DR::SimpleParser
Overview
utilities to parse some strings into name values
Instance Method Summary collapse
-
#parse_name_options(name, arg_split: ':', **keywords) ⇒ Object
parse name:opt1=value1:opt2=value2...
-
#parse_namevalue(nameval, sep: ':', default: nil, symbolize: true) ⇒ Object
takes a string 'name:value' and return name and value can specify a default value; if the default is true we match no-name as name:false.
-
#parse_options(options, arg_split: ':', valuesep: '=', opt_default: true, keyed_sep: "/") ⇒ Object
parse opt1=value1:opt2=value2...
-
#parse_string(s, arg_split: ',', valuesep: ':', default: nil, opt_valuesep: '=', opt_default: true, opts_split: '!', globalopts_separator: '!!', globopts_split: arg_split, globalopts_valuesep: opt_valuesep, globalopts_default: opt_default) ⇒ Object
takes a string as "name:value!option1=ploum!option2=plam,name2:value2!!globalopt=plim,globalopt2=plam!!globalopt3=plom,globalopt4=plim" and return the hash {name: value, name2: value2, local_opts: {option1:ploum,option2:plam}, global_opts: plim, globalopt2: plam, opts: {option1:ploum,option2:plam,globalopt: plim, globalopt2: plam, name2:plim, globalopt2: plam}}.
Instance Method Details
#parse_name_options(name, arg_split: ':', **keywords) ⇒ Object
parse name:opt1=value1:opt2=value2...
40 41 42 43 |
# File 'lib/dr/parse/simple_parser.rb', line 40 def (name, arg_split:':', **keywords) name,*=name.split(arg_split) return name, (, arg_split: arg_split, **keywords) end |
#parse_namevalue(nameval, sep: ':', default: nil, symbolize: true) ⇒ Object
takes a string 'name:value' and return name and value can specify a default value; if the default is true we match no-name as name:false
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/dr/parse/simple_parser.rb', line 9 def parse_namevalue(nameval, sep: ':', default: nil, symbolize: true) name,*val=nameval.split(sep) if val.empty? value=default if default == true #special case where if name begins by no- we return false name.to_s.match(/^no-(.*)$/) do |m| name=m[1] value=false end end else value=val.join(sep) end name=name.to_sym if symbolize return name,value end |
#parse_options(options, arg_split: ':', valuesep: '=', opt_default: true, keyed_sep: "/") ⇒ Object
parse opt1=value1:opt2=value2...
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/dr/parse/simple_parser.rb', line 28 def (, arg_split:':', valuesep: '=', opt_default: true, keyed_sep: "/") return {} unless ={} =.split(arg_split) unless .is_a?(Enumerable) .each do |optvalue| opt,value=DR::SimpleParser.parse_namevalue(optvalue,sep: valuesep, default: opt_default) .set_keyed_value(opt,value, sep: keyed_sep) end return end |
#parse_string(s, arg_split: ',', valuesep: ':', default: nil, opt_valuesep: '=', opt_default: true, opts_split: '!', globalopts_separator: '!!', globopts_split: arg_split, globalopts_valuesep: opt_valuesep, globalopts_default: opt_default) ⇒ Object
takes a string as "name:value!option1=ploum!option2=plam,name2:value2!!globalopt=plim,globalopt2=plam!!globalopt3=plom,globalopt4=plim" and return the hash {name: value, name2: value2, local_opts: {option1:ploum,option2:plam}, global_opts: plim, globalopt2: plam, opts: {option1:ploum,option2:plam,globalopt: plim, globalopt2: plam, name2:plim, globalopt2: plam}}
Algo: split on 'args!!globopts' globopts are split on ',' or '!!' args are split on ',' into parameters parameters are split on 'args!local_opts' args are split on 'name:value' using parse_namevalue local_opts are splits on 'opt=value" using parse_namevalue
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/dr/parse/simple_parser.rb', line 58 def parse_string(s, arg_split:',', valuesep: ':', default: nil, opt_valuesep: '=', opt_default: true, opts_split: '!', globalopts_separator: '!!', globopts_split: arg_split, globalopts_valuesep: opt_valuesep, globalopts_default: opt_default) r={values: {}, local_opts: {}, global_opts: {}, opts: {}} args,*globopts=s.split(globalopts_separator) globopts.map {|g| g.split(globopts_split)}.flatten.each do |g| name,value=parse_namevalue(g, sep: globalopts_valuesep, default: globalopts_default) r[:global_opts][name]=value end args.split(arg_split).each do |arg| arg,*localopts=arg.split(opts_split) name,value=parse_namevalue(arg, sep: valuesep, default: default) r[:values][name]=value r[:local_opts][name]={} localopts.each do |o| oname,ovalue=parse_namevalue(o, sep: opt_valuesep, default: opt_default) r[:local_opts][name][oname]=ovalue end r[:local_opts].each do |name,hash| r[:opts][name]=r[:local_opts][name].dup r[:global_opts].each do |k,v| r[:opts][name][k]||=v end end end return r end |