On 16.05.2007 17:19, Martin P. wrote:
“DC=test”, “DC=com”]
The final collect part of the last line is a bit cryptic. Others may
follow with more elegant ways of doing this.
A variation:
irb(main):018:0* output = “CN=Domain
Users,CN=Users,DC=testdc,DC=testroot,DC=test,DC=com”
=> “CN=Domain Users,CN=Users,DC=testdc,DC=testroot,DC=test,DC=com”
irb(main):019:0> output.split(/,/).map {|s| s[/^CN=(.)$/, 1]}
=> [“Domain Users”, “Users”, nil, nil, nil, nil]
irb(main):020:0> output.split(/,/).map {|s| s[/^CN=(.)$/, 1]}.compact
=> [“Domain Users”, “Users”]
irb(main):021:0> output.split(/,/).map! {|s| s[/^CN=(.*)$/, 1]}.compact!
=> [“Domain Users”, “Users”]
Or, probably a bit more efficient
irb(main):023:0> output.split(/,/).inject([]) {|ar,s| x=s[/^CN=(.*)$/,
1] and ar << x;ar}
=> [“Domain Users”, “Users”]
Or, with enumerator
irb(main):032:0> output.to_enum(:scan, /(?:\A|,)CN=([^,]*)/).map {|m|
m[0]}
=> [“Domain Users”, “Users”]
A more generic approach would first extract all the information from the
record and then select the piece wanted:
irb(main):037:0> data = output.to_enum(:scan,
/(?:\A|,)([^=]+)=([^,])/).
irb(main):038:0 inject(Hash.new {|h,k| h[k]=[]}) {|ha,m| ha[m[0]] <<
m[1];ha}
=> {“CN”=>[“Domain Users”, “Users”], “DC”=>[“testdc”, “testroot”,
“test”, “com”]}
irb(main):039:0> data[“CN”]
=> [“Domain Users”, “Users”]
Ok, I have too much time today…
Kind regards
robert