Module: DR::SimpleParser
Overview
utilities to parse some strings into name values
Instance Method Summary collapse
-
#parse_namevalue(nameval, sep: ':', default: nil) ⇒ 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_string(s) ⇒ Object
takes a string as "name:value!option1=ploum!option2=plam,name2:value2!!globalopt=plim,globalopt2=plam" and return the hash {name: value, name2: value2, localopt: {option1:ploum,option2:plam}, globalopt: plim, globalopt2: plam, opt: {option1:ploum,option2:plam,globalopt: plim, globalopt2: plam, name2:plim, globalopt2: plam}}.
Instance Method Details
#parse_namevalue(nameval, sep: ':', default: nil) ⇒ 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 26 |
# File 'lib/drain/parse/simple_parser.rb', line 9 def parse_namevalue(nameval, sep: ':', default: nil) name,*val=nameval.split(sep) if val.empty? if default == true #special case where if name begins by no- we return false if name =~ /^no-(.*)$/ return $1, false else return name, true end else return name, default end else value=val.join(sep) return name,value end end |
#parse_string(s) ⇒ Object
takes a string as "name:value!option1=ploum!option2=plam,name2:value2!!globalopt=plim,globalopt2=plam" and return the hash {name: value, name2: value2, localopt: {option1:ploum,option2:plam}, globalopt: plim, globalopt2: plam, opt: {option1:ploum,option2:plam,globalopt: plim, globalopt2: plam, name2:plim, globalopt2: plam}}
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/drain/parse/simple_parser.rb', line 34 def parse_string(s) r={values: {}, local_opts: {}, global_opts: {}, opts: {}} args,*globopts=s.split('!!') globopts.map {|g| g.split(',')}.flatten.each do |g| name,value=parse_namevalue(g, sep: '=', default: true) r[:global_opts][name]=value end args.split(',').each do |arg| arg,*localopts=arg.split('!') name,value=parse_namevalue(arg) r[:values][name]=value r[:local_opts][name]={} localopts.each do |o| oname,ovalue=parse_namevalue(o, sep: '=', default: true) 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 |