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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 34e6d5fb43fdcc446afac5ab06419e2632dac2bc2806a1528725d6165b492ab2
4
- data.tar.gz: b6038c9b94e3db6134ec0de6cbc1763573c429f5c412186e59e6dd6af8de1dc2
3
+ metadata.gz: e9d8e9eaf831b7bda085200459577fc210e7b91fa5fdc5491d5eec3d2e07d7dc
4
+ data.tar.gz: fb2ce9cd828dd55f21fb78920dbaf9da9b180d3392d60c318fd5f3f8da70d64f
5
5
  SHA512:
6
- metadata.gz: c4371977339943f3a99831519bc1927724fa4b068902ccd86c2130e5566be7917d9693f0ac2fefd24ea70481f2854daaa1514d59bff59fd8464ece2fee0ea78e
7
- data.tar.gz: 64f8c76852a4cd99e033910229f26fbb3be74e4c9162440cd5c47ccd11d7294247f19f15c414a52ff0f6289309827cf10048ade5557df08a58e67d29f450a098
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
@@ -97,8 +97,8 @@ module Resterl
97
97
  end
98
98
  end
99
99
 
100
- def data_to_cache_key *args
101
- args.hash
100
+ def data_to_cache_key url, params, headers
101
+ Caches::CacheKeyGenerator.generate(url, params, headers)
102
102
  end
103
103
 
104
104
  def get_response(request, old_response)
@@ -1,3 +1,3 @@
1
1
  module Resterl
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = '0.1.2'.freeze
3
3
  end
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.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: 2021-11-18 00:00:00.000000000 Z
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