module OW

Constants

VERSION

Attributes

configuration[RW]

Public Instance Methods

configure() { |configuration| ... } click to toggle source
# File lib/OW/client.rb, line 21
def configure
  self.configuration ||= Configuration.new
  yield(configuration)
end
get_weather(options={}) click to toggle source
# File lib/OW/client.rb, line 26
def get_weather(options={})
  check_configuration!
  uri = set_params(options)
  response = send_request(uri)
  parse_json(response)
end

Private Instance Methods

check_configuration!() click to toggle source
# File lib/OW/client.rb, line 68
def check_configuration!
  if OW.configuration.instance_variables.size < 2
    raise ArgumentError, 'You must configure OW'
  end
end
check_response(response) click to toggle source
# File lib/OW/client.rb, line 45
def check_response(response)
  json = JSON.parse(response.body)
  if json['cod'] == 200
    OW::Weather.new(json)
  else
    nil
  end
end
default_params() click to toggle source
# File lib/OW/client.rb, line 74
def default_params
  {APPID: OW.configuration.apikey}
end
parse_json(response) click to toggle source
# File lib/OW/client.rb, line 34
def parse_json(response)
  case response
  when Net::HTTPSuccess
    check_response(response)
  when Net::HTTPUnprocessableEntity
    raise UnprocessableError, 'Bad URI param!'
  else
    raise UnknownResponse, 'Something was wrong!'
  end
end
send_request(uri) click to toggle source
# File lib/OW/client.rb, line 54
def send_request(uri)
  req = Net::HTTP::Get.new(uri.request_uri)
  http_params = [uri.hostname, uri.port, use_ssl: uri.scheme == 'https']
  Net::HTTP.start(*http_params) {|http| http.request(req)}
end
set_params(options) click to toggle source
# File lib/OW/client.rb, line 60
def set_params(options)
  uri = URI(OW.configuration.endpoint)
  uri.query = URI.encode_www_form(default_params.merge(lat: options[:lat], lon: options[:lon], units: options[:units])) if options[:lat] && options[:lon]
  uri.query = URI.encode_www_form(default_params.merge(zip: options[:zip], units: options[:units])) if options[:zip]
  uri.query = URI.encode_www_form(default_params.merge(q: options[:city], units: options[:units])) if options[:city]
  uri
end