Module: Barometer::WeatherService

Defined in:
lib/barometer/weather_service.rb,
lib/barometer/weather_services/noaa.rb,
lib/barometer/weather_services/yahoo.rb,
lib/barometer/weather_services/weather_bug.rb,
lib/barometer/weather_services/wunderground.rb

Defined Under Namespace

Classes: KeyRequired, Noaa, NotFound, WeatherBug, Wunderground, Yahoo

Class Method Summary (collapse)

Class Method Details

+ (Object) measure(*args)



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/barometer/weather_service.rb', line 28

def self.measure(*args)
  key = args.shift
  query = args.shift
  options = args.shift

  version = (options || {}).fetch(:version, nil)

  response_started_at = Time.now.utc

  begin
    response = source(key, version).call(query)
    if response.complete?
      response.status_code = 200
    else
      response.status_code = 204
    end

  rescue Barometer::WeatherService::KeyRequired
    response = Barometer::Response.new
    response.status_code = 401

  rescue Barometer::Query::ConversionNotPossible
    response = Barometer::Response.new
    response.status_code = 406

  rescue Barometer::Query::UnsupportedRegion
    response = Barometer::Response.new
    response.status_code = 406

  rescue Timeout::Error
    response = Barometer::Response.new
    response.status_code = 408
  end

  response.response_started_at = response_started_at
  response.response_ended_at = Time.now.utc
  response.source = key
  response
end

+ (Object) register(key, *args, &block)



11
12
13
14
15
16
17
18
19
20
21
# File 'lib/barometer/weather_service.rb', line 11

def self.register(key, *args, &block)
  @@services ||= Barometer::Utils::VersionedRegistration.new

  if block_given?
    @@services.register(key, *args, &block)
  elsif args.size > 0
    @@services.register(key, *args)
  else
    raise ArgumentError
  end
end

+ (Object) services



7
8
9
# File 'lib/barometer/weather_service.rb', line 7

def self.services
  @@services
end

+ (Object) services=(services)



3
4
5
# File 'lib/barometer/weather_service.rb', line 3

def self.services=(services)
  @@services = services
end

+ (Object) source(key, version = nil)



23
24
25
26
# File 'lib/barometer/weather_service.rb', line 23

def self.source(key, version=nil)
  @@services ||= Barometer::Utils::VersionedRegistration.new
  @@services.find(key, version) or raise NotFound
end