class HG::Weather::Data

Attributes

cid[RW]
city_name[RW]
condition[RW]
forecast[RW]
key_status[RW]
request[RW]
requested_at[RW]
search_method[RW]
woeid[RW]

Public Class Methods

new(params, host_name, use_ssl = true) click to toggle source
# File lib/hg/weather/data.rb, line 12
def initialize params, host_name, use_ssl = true
  query_params = params.map{|k,v| "#{k.to_s}=#{v.to_s}"}.join('&')
  @request = (use_ssl ? 'https' : 'http') + host_name + '?' + query_params
  @requested_at = Time.now

  request_data = JSON.parse(open(self.request).read)

  if request_data['results']
    results = request_data['results']

    @key_status = (params[:key] ? (request_data['key_status'] ? :valid : :invalid) : :empty)

    @city_name = results['city_name']
    @search_method = request_data['by']
    @cid = results['cid']
    @woeid = params[:woeid] if request_data['by'] == 'woeid'

    @condition = Condition.new(to_current(results))

    @forecast = []
    results['forecast'].each do |forecast|
      @forecast << Condition.new(to_forecast(forecast))
    end
  end

  return self
end

Public Instance Methods

to_current(r) click to toggle source
# File lib/hg/weather/data.rb, line 41
def to_current r
  {
    temperature: r['temp'],
    description: r['description'],
    slug: r['condition_slug'],
    wind_speed: r['wind_speedy'],
    humidity: r['humidity'],
    image_id: r['img_id'],
    sunrise: r['sunrise'],
    sunset: r['sunset'],
    currently: r['currently'],
    date: r['date'],
    time: r['time'],
    is_forecast: false
  }
end
to_forecast(r) click to toggle source

TODO: Improve to get year of date

# File lib/hg/weather/data.rb, line 59
def to_forecast r
  {
    date: (Weather.locale == :en ? Time.now.year.to_s + '-' + r['date'] : r['date'] + '/' + Time.now.year.to_s),
    max_temperature: r['max'],
    min_temperature: r['min'],
    description: r['description'],
    image_id: r['img_id'],
    slug: r['condition'],
    is_forecast: true
  }
end