@subscriptions = {}
[:free, :lite, :brisk, :jammin].each { |sub_type| subscriptions[sub_type] = SubscriptionType.make(sub_type) }
Refactorings
No refactoring yet !
danielharan
August 3, 2009, August 03, 2009 20:32, permalink
Use inject({}). Technically you're still initializing an empty hash, but it's more idiomatic.
chipcastle.myopenid.com
August 4, 2009, August 04, 2009 01:42, permalink
Of course! inject is definitely the way to go. Here's what I ended up with:
@subscriptions = [:free, :lite, :brisk, :jammin].inject({}) {|result, ele| result[ele] = SubscriptionType.make(ele); result }
danielharan
August 4, 2009, August 04, 2009 03:55, permalink
Hmm... that's a bit long. I prefer splitting it up for readability
@subscriptions = [:free, :lite, :brisk, :jammin].inject({}) do |result, ele|
result[ele] = SubscriptionType.make(ele)
result
end
Vidar Hokstad
August 5, 2009, August 05, 2009 20:01, permalink
Here's an alternative using Hash[]
@subscriptions = Hash[*[:free, :lite, :brisk, :jammin].collect {|ele| [ele, SubscriptionType.make(ele)] }.flatten]
Here's the long way of writing what I want:
subscriptions[:free] = SubscriptionType.make(:free)
subscriptions[:lite] = SubscriptionType.make(:lite)
subscriptions[:brisk] = SubscriptionType.make(:brisk)
subscriptions[:jammin] = SubscriptionType.make(: jammin)
Please see how I currently do this below, but I'd rather not initialize an empty hash first. Any suggestions? Thanks!