resterl 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/resterl/caches/cache_key_generator.rb +15 -0
- data/lib/resterl/client.rb +2 -2
- data/lib/resterl/version.rb +1 -1
- data/lib/resterl.rb +1 -0
- data/spec/lib/resterl/caches/cache_key_generator_spec.rb +77 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9d8e9eaf831b7bda085200459577fc210e7b91fa5fdc5491d5eec3d2e07d7dc
|
4
|
+
data.tar.gz: fb2ce9cd828dd55f21fb78920dbaf9da9b180d3392d60c318fd5f3f8da70d64f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb6c0ad39ecfaa6246085fae41bf177e5c69b064f109031b39a34c50cb7632c12dd897d4c990b5c50f7c693e38b96b7d3d1e01d819c69be61df977bff518d681
|
7
|
+
data.tar.gz: c98b91ce82439eb45f1ac55c855d9da2fbf36dcf345e77340ae9819cca59e3a959c289ece4497a8d722c1c577e3ff34ddc35ff6e3b3d4b7b7f3041b370aa65d2
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Resterl
|
4
|
+
module Caches
|
5
|
+
class CacheKeyGenerator
|
6
|
+
def self.generate(url, params, headers)
|
7
|
+
normalized = [url, params, headers].map do |part|
|
8
|
+
part.is_a?(Hash) ? part.sort : part
|
9
|
+
end.each_with_object(+'') { |e, acc| acc << e.inspect }
|
10
|
+
|
11
|
+
Digest::SHA1.hexdigest(normalized)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/resterl/client.rb
CHANGED
data/lib/resterl/version.rb
CHANGED
data/lib/resterl.rb
CHANGED
@@ -14,6 +14,7 @@ require 'resterl/caches/redis_cache'
|
|
14
14
|
require 'resterl/caches/simple_cache'
|
15
15
|
require 'resterl/caches/rails_memcached_cache'
|
16
16
|
require 'resterl/caches/key_prefix_decorator'
|
17
|
+
require 'resterl/caches/cache_key_generator'
|
17
18
|
require 'resterl/caches/nil_cache'
|
18
19
|
|
19
20
|
require 'resterl/client'
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Resterl::Caches::CacheKeyGenerator do
|
4
|
+
it 'generates a stable digest for the same url' do
|
5
|
+
a = described_class.generate('http://example.com', {}, {})
|
6
|
+
b = described_class.generate('http://example.com', {}, {})
|
7
|
+
|
8
|
+
expect(a).to eq b
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'generates a stable digest with the same parameters' do
|
12
|
+
a = described_class
|
13
|
+
.generate('http://example.com', { 'foo' => 'bar' }, {})
|
14
|
+
b = described_class
|
15
|
+
.generate('http://example.com', { 'foo' => 'bar' }, {})
|
16
|
+
|
17
|
+
expect(a).to eq b
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'generates a stable digest with the same headers' do
|
21
|
+
a = described_class
|
22
|
+
.generate('http://example.com', {}, 'x-test' => '0.5')
|
23
|
+
b = described_class
|
24
|
+
.generate('http://example.com', {}, 'x-test' => '0.5')
|
25
|
+
|
26
|
+
expect(a).to eq b
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'generates a stable digest with same url, params and headers' do
|
30
|
+
a = described_class
|
31
|
+
.generate('http://example.com', { 'xy' => 'xxx' }, 'x-test' => '0.5')
|
32
|
+
b = described_class
|
33
|
+
.generate('http://example.com', { 'xy' => 'xxx' }, 'x-test' => '0.5')
|
34
|
+
|
35
|
+
expect(a).to eq b
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'generates different digest for different urls' do
|
39
|
+
a = described_class.generate('http://example.net', {}, {})
|
40
|
+
b = described_class.generate('http://example.com', {}, {})
|
41
|
+
|
42
|
+
expect(a).not_to eq b
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'generates different digest with different parameters' do
|
46
|
+
a = described_class.generate('http://example.com', { 'blib' => 'blub' }, {})
|
47
|
+
b = described_class.generate('http://example.com', { 'blib' => 'oopf' }, {})
|
48
|
+
c = described_class.generate('http://example.com', { 'oopf' => 'blip' }, {})
|
49
|
+
|
50
|
+
expect([a, b, c].uniq.length).to eq 3
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'generates different digest with different headers' do
|
54
|
+
a = described_class
|
55
|
+
.generate('http://example.com', {}, 'accept' => 'json')
|
56
|
+
b = described_class
|
57
|
+
.generate('http://example.com', {}, 'accept' => '*/*')
|
58
|
+
|
59
|
+
expect(a).not_to eq b
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'generates the same digest with url parameters and headers ' \
|
63
|
+
'in diffrent order' do
|
64
|
+
a = described_class.generate(
|
65
|
+
'http://example.com',
|
66
|
+
{ 'a' => 'aaa', 'b' => 'bbb' },
|
67
|
+
'x-aaa' => 'aaa', 'x-bbb' => 'bbb'
|
68
|
+
)
|
69
|
+
b = described_class .generate(
|
70
|
+
'http://example.com',
|
71
|
+
{ 'b' => 'bbb', 'a' => 'aaa' },
|
72
|
+
'x-bbb' => 'bbb', 'x-aaa' => 'aaa'
|
73
|
+
)
|
74
|
+
|
75
|
+
expect(a).to eq b
|
76
|
+
end
|
77
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resterl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Dütsch
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-02-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -142,6 +142,7 @@ files:
|
|
142
142
|
- lib/resterl.rb
|
143
143
|
- lib/resterl/base_object.rb
|
144
144
|
- lib/resterl/caches/cache_interface.rb
|
145
|
+
- lib/resterl/caches/cache_key_generator.rb
|
145
146
|
- lib/resterl/caches/key_prefix_decorator.rb
|
146
147
|
- lib/resterl/caches/nil_cache.rb
|
147
148
|
- lib/resterl/caches/rails_memcached_cache.rb
|
@@ -158,6 +159,7 @@ files:
|
|
158
159
|
- lib/resterl/version.rb
|
159
160
|
- resterl.gemspec
|
160
161
|
- spec/lib/resterl/base_object_spec.rb
|
162
|
+
- spec/lib/resterl/caches/cache_key_generator_spec.rb
|
161
163
|
- spec/lib/resterl/client_spec.rb
|
162
164
|
- spec/spec_helper.rb
|
163
165
|
homepage: https://github.com/Nix-wie-weg/resterl
|
@@ -184,5 +186,6 @@ specification_version: 4
|
|
184
186
|
summary: Rudimentary HTTP client with focus on caching
|
185
187
|
test_files:
|
186
188
|
- spec/lib/resterl/base_object_spec.rb
|
189
|
+
- spec/lib/resterl/caches/cache_key_generator_spec.rb
|
187
190
|
- spec/lib/resterl/client_spec.rb
|
188
191
|
- spec/spec_helper.rb
|