Sha256: 6f9f88caf68d7036854096ea9a7332f7ca6b7009ad55e44efe6e499ae85f0c47

Contents?: true

Size: 1.76 KB

Versions: 1

Compression:

Stored size: 1.76 KB

Contents

module DR
	#utilities to parse some strings into name values
	module SimpleParser
		extend self

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

		#takes a string as "name:value!option1=ploum!option2=plam,name2:value2!!globalopt=plim,globalopt2=plam"
		#and return the hash
		#{values: {name: value, name2: value2},
		# localopt: {name: {option1:ploum,option2:plam}},
		# globalopt: {globalopt: plim, globalopt2: plam},
		# opt: {name: {option1:ploum,option2:plam,globalopt: plim, globalopt2: plam}, name2:{{globalopt: plim, globalopt2: plam}}}
		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

	end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
drain-0.1.0 lib/drain/parse/simple_parser.rb