diff --git a/CHANGELOG.md b/CHANGELOG.md index 73c420e..71d9506 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Idempotent Request Changelog # +## v0.1.2 ## + +* Fix rack response +* Disuse SETNX (@espadrine) + ## v0.1.1 ## -* Add caching for successful responses (@gomayonqui) +* Add caching for successful responses (@gomayonqui) diff --git a/lib/idempotent-request/redis_storage.rb b/lib/idempotent-request/redis_storage.rb index faa88ff..1594b52 100644 --- a/lib/idempotent-request/redis_storage.rb +++ b/lib/idempotent-request/redis_storage.rb @@ -13,8 +13,14 @@ module IdempotentRequest end def write(key, payload) - redis.setnx(namespaced_key(key), payload) - redis.expire(namespaced_key(key), expire_time.to_i) if expire_time.to_i > 0 + redis.set( + namespaced_key(key), + payload, + {}.tap do |options| + options[:nx] = true + options[:ex] = expire_time.to_i if expire_time.to_i > 0 + end + ) end private diff --git a/lib/idempotent-request/request_manager.rb b/lib/idempotent-request/request_manager.rb index 9a43f0e..1c45027 100644 --- a/lib/idempotent-request/request_manager.rb +++ b/lib/idempotent-request/request_manager.rb @@ -36,7 +36,7 @@ module IdempotentRequest Oj.dump({ status: status, headers: headers.to_h, - response: response + response: Array(response) }) end diff --git a/lib/version.rb b/lib/version.rb index ba256ce..7d917b7 100644 --- a/lib/version.rb +++ b/lib/version.rb @@ -1,3 +1,3 @@ module IdempotentRequest - VERSION = "0.1.1" + VERSION = "0.1.2" end diff --git a/spec/idempotent-request/redis_storage_spec.rb b/spec/idempotent-request/redis_storage_spec.rb index 2a9a9db..8c37a5d 100644 --- a/spec/idempotent-request/redis_storage_spec.rb +++ b/spec/idempotent-request/redis_storage_spec.rb @@ -3,7 +3,8 @@ require 'spec_helper' RSpec.describe IdempotentRequest::RedisStorage do let(:redis) { FakeRedis::Redis.new } let(:expire_time) { 3600 } - let(:redis_storage) { described_class.new(redis, expire_time: expire_time) } + let(:namespace) { 'idempotency_keys' } + let(:redis_storage) { described_class.new(redis, expire_time: expire_time, namespace: namespace) } describe '#read' do it 'should be called' do @@ -15,12 +16,13 @@ RSpec.describe IdempotentRequest::RedisStorage do describe '#write' do let(:key) { 'key' } let(:payload) { {} } + let(:namespace) { nil } context 'when expire time is not set' do - let(:redis_storage) { described_class.new(redis) } + let(:expire_time) { nil } it 'should not set expiration' do - expect(redis).to receive(:setnx) + expect(redis).to receive(:set).with(key, payload, nx: true) expect(redis).not_to receive(:expire) redis_storage.write(key, payload) end @@ -28,14 +30,15 @@ RSpec.describe IdempotentRequest::RedisStorage do context 'when expire time is set' do it 'should set expiration' do - expect(redis).to receive(:setnx) - expect(redis).to receive(:expire).with(String, expire_time) + expect(redis).to receive(:set).with(key, payload, nx: true, ex: expire_time) redis_storage.write(key, payload) end end end describe '#namespaced_key' do + let(:namespace) { 'idempotency_keys' } + subject { redis_storage.send(:namespaced_key, key) } context 'when key contains a space' do @@ -55,7 +58,7 @@ RSpec.describe IdempotentRequest::RedisStorage do end context 'when namespace is set to nil' do - let(:redis_storage) { described_class.new(redis, namespace: nil) } + let(:namespace) { nil } let(:key) { 'REQUEST-1' } it 'should return with default' do diff --git a/spec/idempotent-request/request_manager_spec.rb b/spec/idempotent-request/request_manager_spec.rb index a5f75e1..0caf68a 100644 --- a/spec/idempotent-request/request_manager_spec.rb +++ b/spec/idempotent-request/request_manager_spec.rb @@ -77,7 +77,7 @@ RSpec.describe IdempotentRequest::RequestManager do Oj.dump({ status: data[0], headers: data[1], - response: data[2] + response: [data[2]] }) end