I'm a little uncomfortable using chain of methods in Ruby. Here, I'm using such a chain.
So the question is, Tell me a better way to do the same.
I have this line run,
p["All_Products"]["Product"].map{|h| h["Categories"]["Category"] rescue nil }.compact.flatten.uniq
p equals this,
{"All_Products"=>
{"Product"=>
[{"ProductCode"=>"GFT",
"Categories"=>
{"Category"=>
[{"CategoryID"=>"1513", "CategoryName"=>"Beauty"},
{"CategoryID"=>"1515", "CategoryName"=>"Specials"},
{"CategoryID"=>"1553", "CategoryName"=>"Bath and Body"}]}},
{"ProductCode"=>"GF-honey",
"Categories"=>
{"Category"=>
[{"CategoryID"=>"1514", "CategoryName"=>"Gourmet Food"},
{"CategoryID"=>"1515", "CategoryName"=>"Specials"},
{"CategoryID"=>"1632", "CategoryName"=>"Specialty Items"}]}},
{"ProductCode"=>"GF-malbec",
"Categories"=>
{"Category"=>
[{"CategoryID"=>"1514", "CategoryName"=>"Gourmet Food"},
{"CategoryID"=>"1632", "CategoryName"=>"Specialty Items"}]}},
{"ProductCode"=>"GF-olives",
"Categories"=>
{"Category"=>
[{"CategoryID"=>"1514", "CategoryName"=>"Gourmet Food"},
{"CategoryID"=>"1632", "CategoryName"=>"Specialty Items"}]}},
{"ProductCode"=>"HC-flatiron",
"Categories"=>
{"Category"=>
[{"CategoryID"=>"1513", "CategoryName"=>"Beauty"},
{"CategoryID"=>"1515", "CategoryName"=>"Specials"},
{"CategoryID"=>"1554", "CategoryName"=>"Hair Care"}]}}
]
}
}
Finally I'm getting this,
[{"CategoryID"=>"1513", "CategoryName"=>"Beauty"},
{"CategoryID"=>"1515", "CategoryName"=>"Specials"},
{"CategoryID"=>"1553", "CategoryName"=>"Bath and Body"},
{"CategoryID"=>"1514", "CategoryName"=>"Gourmet Food"},
{"CategoryID"=>"1632", "CategoryName"=>"Specialty Items"},
{"CategoryID"=>"1554", "CategoryName"=>"Hair Care"},
{"CategoryID"=>"1673", "CategoryName"=>"Sweets"},
{"CategoryID"=>"1477", "CategoryName"=>"Home Decor"},
{"CategoryID"=>"1516", "CategoryName"=>"Furniture"},
{"CategoryID"=>"1517", "CategoryName"=>"Home Accessories"},
{"CategoryID"=>"1814", "CategoryName"=>"Apparel"},
{"CategoryID"=>"1815", "CategoryName"=>"Women"},
{"CategoryID"=>"1816", "CategoryName"=>"Men"}]