resterl 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|