-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlookup_cache.rb
More file actions
50 lines (40 loc) · 894 Bytes
/
lookup_cache.rb
File metadata and controls
50 lines (40 loc) · 894 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
require 'httparty'
require 'date'
require 'base64'
require 'pry'
class LookupCache
def initialize(cache: nil)
@cache = cache
end
attr_reader :cache
def lookup(urls)
key = request_key(urls)
cache.get(key) || fill_cache(urls, key)
end
def fill_cache(urls, key)
puts "Setting #{key}"
results = []
urls.each do |url|
resp = HTTParty.get(url)
begin
result = resp.fetch("results")
rescue KeyError => err
puts "*** Unexpected JSON results!"
puts err.message
puts resp
puts "***"
end
results << result
end
results = results.flatten.sort_by { |r| r["time"] }
cache.set(key, results)
results
end
def request_key(request)
hashed = Base64.encode64(request.to_s)
[datemask, hashed].join('-')
end
def datemask
DateTime.now.strftime("%Y%m%d%H%M")
end
end