Skip to content
This repository was archived by the owner on Dec 8, 2022. It is now read-only.

Commit 0944206

Browse files
committed
Improve cache system
1 parent 63e1450 commit 0944206

File tree

7 files changed

+43
-3
lines changed

7 files changed

+43
-3
lines changed

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
source 'https://rubygems.org'
2-
ruby '2.3.0'
2+
ruby '2.3.1'
33
# Specify your gem's dependencies in ievkit.gemspec
44
gemspec

Gemfile.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ PATH
44
ievkit (0.1.1)
55
faraday_middleware (~> 0.10.0)
66
figaro (~> 1.1.1)
7+
redis (~> 3.2)
78
rest-client (~> 1.8.0)
89

910
GEM
@@ -24,6 +25,7 @@ GEM
2425
multipart-post (2.0.0)
2526
netrc (0.11.0)
2627
rake (11.1.2)
28+
redis (3.2.2)
2729
rest-client (1.8.0)
2830
http-cookie (>= 1.0.2, < 2.0)
2931
mime-types (>= 1.16, < 3.0)

ievkit.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
3030
spec.add_dependency 'figaro', '~> 1.1.1'
3131
spec.add_dependency 'faraday_middleware', '~> 0.10.0'
3232
spec.add_dependency 'rest-client', '~> 1.8.0'
33+
spec.add_dependency 'redis', '~>3.2'
3334

3435
spec.add_development_dependency 'bundler', '~> 1.11'
3536
spec.add_development_dependency 'rake', '~> 11.1'

lib/ievkit.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
require 'figaro'
22
require 'faraday_middleware'
3+
require 'redis'
34
require 'logger'
45
require 'ievkit/version'
6+
require 'ievkit/cache'
57
require 'ievkit/job'
68
require 'ievkit/client'
79
require 'ievkit/railtie' if defined?(Rails)

lib/ievkit/cache.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Redis
2+
def cache(key, expire = nil)
3+
value = get(key)
4+
return JSON.parse(value) if value
5+
return nil unless block_given?
6+
value = yield(self)
7+
set(key, value.to_json)
8+
expire(key, expire) if expire.to_i > 0
9+
value
10+
end
11+
end

lib/ievkit/client.rb

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
module Ievkit
22
class Client
3-
attr_reader :iev_url_prefix, :iev_url_suffix, :iev_url_jobs, :referential
3+
attr_reader :iev_url_prefix, :iev_url_suffix, :iev_url_jobs, :referential, :redis
44

55
def initialize(referential)
66
@payload = {}
77
@referential = referential
88
@iev_url_prefix = init_iev_url_prefix
99
@iev_url_jobs = init_iev_url_jobs
10+
@redis = Redis.new
1011
end
1112

1213
def prepare_post_request(type, options)
@@ -23,10 +24,26 @@ def prepare_post_request(type, options)
2324
end
2425

2526
def prepare_request(url, http_method)
27+
begin
28+
response_cached = @redis.cache(url)
29+
return response_cached if response_cached
30+
rescue => e
31+
Ievkit::Log.logger.fatal("Unable to contact Redis server: #{e.message}")
32+
end
2633
init_connection(url)
2734
begin
2835
response = @connection.send(http_method)
29-
parse_response(response)
36+
cache_control = response.headers['cache-control']
37+
max_age = 0
38+
no_cache = true
39+
if cache_control
40+
max_age = cache_control[/max-age=(.*)/, 1]
41+
no_cache = false if max_age && cache_control[/no-transform/]
42+
end
43+
return parse_response(response) if no_cache
44+
@redis.cache(url, max_age) {
45+
parse_response(response)
46+
}
3047
rescue => e
3148
Ievkit::Log.logger.fatal("Unable to contact IEV server: #{e.message}")
3249
return false

spec/ievkit_import_spec.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@
44
before(:all) { @referential = ENV['REFERENTIAL_TEST'] }
55
before(:all) { @job = Ievkit::Job.new(@referential) }
66

7+
context '#import_errors' do
8+
before(:all) { @import_forwarding_url = @job.post_job(:importer, :neptune, iev_file: ENV['IEV_IMPORT_FILE_TEST'], iev_params: ENV['IEV_IMPORT_NEPTUNE_PARAMS_TEST']) }
9+
it 'return invalid format in forwarding_url' do
10+
expect(@import_forwarding_url['error_code']).to eq('INVALID_FORMAT')
11+
end
12+
end
13+
714
context '#import' do
815
before(:all) { @import_forwarding_url = @job.post_job(:importer, :gtfs, iev_file: ENV['IEV_IMPORT_FILE_TEST'], iev_params: ENV['IEV_IMPORT_PARAMS_TEST']) }
916
it 'return correct url suffix' do

0 commit comments

Comments
 (0)