module UndergroundWeather module Features features = { :conditions => { :class => CurrentConditions }, :forecast => { :class => Forecast }, :astronomy => { :class => Astronomy }, :radar => { :class => Radar }, :satellite => { :class => Satellite }, :webcams => { :class => Webcams } #:history => { :class => ''}, #:alerts => { :class => ''}, #:hourly => { :class => ''}, #:hourly7day => { :class => ''}, #:forecast7day => { :class => ''}, #:yesterday => { :class => ''} } features.each do |feature, v| define_method(feature) do |zip_code| call = ApiCall.new(@api_key, feature, zip_code) if call.response && !call.error v[:class].new(call.response) else # raise exception here [] end end end end end