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