twingly-url_cache 1.0.1 → 2.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b9ed893f285e11aefe16536d0dbff6dd75d2e1e9
4
- data.tar.gz: 92fa6a2cfc57232d56e0b89542556a9ce8f484ae
2
+ SHA256:
3
+ metadata.gz: 24b2b74670becb8febd7328f5282942778233895bba160e82f46d6d9058b3bb5
4
+ data.tar.gz: 7f357962eaca25d72bae9dda7f85e79f3e3980bb1a203eebfbfa681ac729217d
5
5
  SHA512:
6
- metadata.gz: 938656877cb25f56db3ccb9b88c8196329fd1b8982bc613c53b1b51be5a08a7f4c55ba52eb2953fe886d8daea8fc85266d7d33f820a677d4bf0d7a2048a720d7
7
- data.tar.gz: 21a983f60abfc1a58a3ff76a42ab9f01e53057d734e7ba3d90263a63a2e9156d423f7ffeae5a8246df195ba32a6f0c2747d77efd5d45ce1fd8fbc44bdc4cde88
6
+ metadata.gz: 3a191f98e4a5362bae8e1cd512021d5b0e8354dc85e8b8b9b233a25b314a8c1c294f54124403087d925b0f1bd4692a5868c1227f748d0ecde99206fa0cf2ec84
7
+ data.tar.gz: a76d8f8ee36e63685f0469647334245042c0e9ca9ac9d5ffd6113e3f1c1dc1b70bbf244167f37fe06a201ce1425357a544b3b7e59bfe3195bd452efd0e37f2bc
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Twingly::UrlCache
2
2
 
3
+ [![Build Status](https://travis-ci.org/twingly/twingly-url_cache.svg)](https://travis-ci.org/twingly/twingly-url_cache)
4
+
3
5
  URL cache, remember if an URL been seen before. Uses [Memcached] to cache data, prefers [MemCachier].
4
6
 
5
7
  [Memcached]: http://memcached.org/
@@ -36,10 +38,10 @@ Initialize an instance, cache an URL with `#cache!` and look if it's cached with
36
38
  => false
37
39
  ```
38
40
 
39
- Required environment variables:
41
+ Optional environment variables:
40
42
 
41
43
  ```Shell
42
- MEMCACHIER_SERVERS
44
+ MEMCACHIER_SERVERS # Defaults to localhost
43
45
  MEMCACHIER_PASSWORD
44
46
  MEMCACHIER_USERNAME
45
47
  ```
@@ -53,4 +55,3 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
53
55
  ## Contributing
54
56
 
55
57
  Bug reports and pull requests are welcome on GitHub at https://github.com/twingly/twingly-url_cache.
56
-
@@ -5,26 +5,35 @@ require "retryable"
5
5
 
6
6
  module Twingly
7
7
  class UrlCache
8
+ class Error < StandardError; end
9
+ class ServerError < Error; end
10
+
8
11
  attr_reader :ttl
9
12
 
10
13
  CACHE_VALUE = ""
11
14
 
12
- def initialize(ttl: 0)
13
- @cache = Dalli::Client.new(servers, options)
14
- @ttl = ttl
15
+ def initialize(ttl: 0, cache: default_cache)
16
+ @ttl = ttl
17
+ @cache = cache
15
18
  end
16
19
 
17
20
  def cache!(url)
18
21
  key = key_for(url)
19
- Retryable.retryable(tries: 3, on: Dalli::RingError) do
20
- !!@cache.set(key, CACHE_VALUE, ttl, raw: true)
22
+
23
+ retry_transient_exceptions do
24
+ with_exception_class_conversion do
25
+ !!@cache.set(key, CACHE_VALUE, ttl, raw: true)
26
+ end
21
27
  end
22
28
  end
23
29
 
24
30
  def cached?(url)
25
31
  key = key_for(url)
26
- Retryable.retryable(tries: 3, on: Dalli::RingError) do
27
- @cache.get(key, raw: true) == CACHE_VALUE
32
+
33
+ retry_transient_exceptions do
34
+ with_exception_class_conversion do
35
+ @cache.get(key, raw: true) == CACHE_VALUE
36
+ end
28
37
  end
29
38
  end
30
39
 
@@ -34,6 +43,14 @@ module Twingly
34
43
  Digest::MD5.digest(url)
35
44
  end
36
45
 
46
+ def default_cache
47
+ retry_transient_exceptions do
48
+ with_exception_class_conversion do
49
+ Dalli::Client.new(servers, options)
50
+ end
51
+ end
52
+ end
53
+
37
54
  def options
38
55
  {
39
56
  username: ENV.fetch("MEMCACHIER_USERNAME") { },
@@ -45,8 +62,19 @@ module Twingly
45
62
  end
46
63
 
47
64
  def servers
48
- ENV.fetch("MEMCACHIER_SERVERS").split(",")
65
+ ENV.fetch("MEMCACHIER_SERVERS") { "localhost" }.split(",")
66
+ end
67
+
68
+ def with_exception_class_conversion
69
+ yield
70
+ rescue Dalli::RingError => error
71
+ raise ServerError, error.message
72
+ rescue Dalli::DalliError => error
73
+ raise Error, error.message
74
+ end
75
+
76
+ def retry_transient_exceptions(&block)
77
+ Retryable.retryable(tries: 3, on: ServerError, &block)
49
78
  end
50
79
  end
51
80
  end
52
-
@@ -1,5 +1,5 @@
1
1
  module Twingly
2
2
  class UrlCache
3
- VERSION = "1.0.1"
3
+ VERSION = "2.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twingly-url_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Twingly AB
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-22 00:00:00.000000000 Z
11
+ date: 2019-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dalli
@@ -122,8 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  - !ruby/object:Gem::Version
123
123
  version: '0'
124
124
  requirements: []
125
- rubyforge_project:
126
- rubygems_version: 2.4.5.1
125
+ rubygems_version: 3.0.2
127
126
  signing_key:
128
127
  specification_version: 4
129
128
  summary: URL cache, remember if an URL been seen before