Sha256: eb1a2e529fa18c4a1ba884e57a5a58007a400a7e63574ef13ca6410340ddbe1c

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

require "uri"
require "net/http"
require "json"

module Openweather2

  class << self
    attr_accessor :configuration
  end

  class Configuration
    attr_accessor :endpoint
    attr_accessor :apikey
  end

  class UnprocessableError < RuntimeError; end
  class ForbiddenError < RuntimeError; end
  class UnknownResponse < RuntimeError; end

  extend self

  def configure
    self.configuration ||= Configuration.new
    yield(configuration)
  end

  def weather(city)
    configure_required!

    uri = URI(Openweather2.configuration.endpoint)
    uri.query = URI.encode_www_form(default_params.merge(:q => city))
    req = Net::HTTP::Get.new(uri.request_uri)

    http_params = [uri.hostname, uri.port, use_ssl: uri.scheme == 'https']
    res = Net::HTTP.start(*http_params) do |http|
      http.request(req)
    end

    case res
    when Net::HTTPSuccess
      json = JSON.parse(res.body)
      Openweather2::Weather.new(json)

    when Net::HTTPUnprocessableEntity
      raise UnprocessableError, "Bad URI param!"
    else
      raise UnknownResponse, "Something was wrong!"
    end
  end

  private

  def configure_required!
    if Openweather2.configuration.instance_variables.size < 2
      raise ArgumentError, "You must configure Openweather2"
    end
  end
  
  def default_params
    {:APPID => Openweather2.configuration.apikey }
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
openweather2-0.1.4 lib/openweather2/client.rb